Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Посчитать урон

Статус пользователя vovan4ik1997
сообщение 5.7.2013, 17:35
Сообщение #1


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Есть вопросик как считать урон?
Каждый урон плюсовать и записывать, а при определенном условии обнулять, ну это я сделаю, но все же)
Благодарю заранее)


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Safety1st
сообщение 5.7.2013, 17:48
Сообщение #2
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Мне кажется, правильнее будет взять код из statsx, там используется инфа из CSX.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 5.7.2013, 20:00
Сообщение #3


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Цитата(vovan4ik1997 @ 5.7.2013, 17:35) *
Есть вопросик как считать урон?
Каждый урон плюсовать и записывать, а при определенном условии обнулять, ну это я сделаю, но все же)
Благодарю заранее)


Всё так. В чем проблема ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 5.7.2013, 21:22
Сообщение #4


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Цитата(Andrei @ 5.7.2013, 21:00) *
Всё так. В чем проблема ?

Проблема в том что я не знаю как реализовать)Можешь написать пример.Я так понял получать урон из Хам?


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 5.7.2013, 21:39
Сообщение #5


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Код:
#include < amxmodx >
#include < hamsandwich >

#define PLUGIN_NAME "New-Plugin"
#define PLUGIN_VERSION "0.0.0.1"
#define PLUGIN_AUTHOR "x"

#define MAX_CLIENTS 32

new Float:g_flDamage[ MAX_CLIENTS +1 ];
new g_iMaxClients;

public plugin_init()
{
register_plugin
(
PLUGIN_NAME,
PLUGIN_VERSION,
PLUGIN_AUTHOR
);

register_event( "HLTV", "CEvent__Round_Start", "a", "1=0", "2=0" );

RegisterHam( Ham_TakeDamage, "player", "CBasePlayer__TakeDamage_Pre", .Post = false );

g_iMaxClients = get_maxplayers( );
}

public CEvent__Round_Start( )
{
static iCell;

for( iCell = 1; iCell <= g_iMaxClients; iCell++ )
{
if( !is_user_connected( iCell ) )
continue;

client_print( iCell, print_chat, "Your Damage %2f", g_flDamage[ iCell ] );

g_flDamage[ iCell ] = 0.0;
}
}

public CBasePlayer__TakeDamage_Pre( pevVictim, pevInflictor, pevAttacker, Float:flDamage )
{
if( !is_user_alive( pevAttacker ) )
return HAM_IGNORED;

g_flDamage[ pevAttacker ] += flDamage;

return HAM_IGNORED;
}


Отредактировал: Andrei, - 5.7.2013, 22:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 5.7.2013, 22:01
Сообщение #6
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Andrei, ты уверен, что таким макаром определяется конечный урон, т.е. с учётом брони у жертвы?

Отредактировал: Safety1st, - 5.7.2013, 22:02
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 5.7.2013, 22:15
Сообщение #7


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Мне не интересно была броня или нет, мне главное сколько нанес урона.Показал дамагер 200 урона столько и записало.


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 5.7.2013, 22:19
Сообщение #8


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Цитата(Safety1st @ 5.7.2013, 23:01) *
Andrei, ты уверен, что таким макаром определяется конечный урон, т.е. с учётом брони у жертвы?


Тогда pev_takedamage.

Но тут баг,он уже не будет верно это считать,если больше 100 HP.

В ином случае нужно самому делать вычисление.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 5.7.2013, 22:35
Сообщение #9
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

А с помощью CSX определять чем плохо, подскажешь?

Цитата(vovan4ik1997 @ 6.7.2013, 0:15) *
Мне не интересно была броня или нет
Мы не совсем об этом говорим)

Отредактировал: Safety1st, - 5.7.2013, 22:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 5.7.2013, 22:48
Сообщение #10


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

Цитата(Safety1st @ 5.7.2013, 22:35) *
А с помощью CSX определять чем плохо, подскажешь?

Мы не совсем об этом говорим)


А как там ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 5.7.2013, 22:56
Сообщение #11
Стаж: 14 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(Andrei @ 6.7.2013, 0:48) *
А как там ?

Там сам модуль даёт готовую инфу. Что внутри него - я без понятия. Да и других методов получения конечного урона не знаю, кроме event'а 'Damage' и, наверное, Ham_TakeDamage, но post.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 6.7.2013, 16:50
Сообщение #12


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Сделал примерно так:
Код:
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <colorchat>
#include <fun>
#include <cstrike>
#include <hamsandwich>


#define I_ID 7777


new Float:user_damage[33]

new players_menu, players[32], num, i,accessmenu, iName[64], callback;
new PlayerXP[33],PlayerLevel[33],needXP[33],g_MsgHud,MaxPlayers,Msg[512],levelUp[33]
;
new const CLASSES[][] =

{
"I_0",
"I_1",
"I_2",
"I_3",
"I_4",
"I_5",
"I_6",
"I_7",
"I_8",
"I_9"
};
new const LEVELS[] = {
0,
100,
200,
300,
400,
2000,
5000,
7500,
9000

};


new gVault;

public plugin_init()
{

set_task(1.0, "Info", I_ID, "", 0, "b")
g_MsgHud = CreateHudSyncObj();
MaxPlayers = get_maxplayers();
register_dictionary( "army.txt" );

RegisterHam( Ham_TakeDamage, "player", "CBasePlayer__TakeDamage_Pre", .Post = false );


}

public client_putinserver(id)
{
load_client_data(id)
}
public client_disconnect(id)
{
save_client_data(id);
}

stock SendTeamMessage(Message[],playerTeam)
{
for (new player = 0; player <= MaxPlayers; player++)
{
if (!is_user_connected(player))
{
continue
}
if(get_user_team(player) == playerTeam)
{
ColorChat(player,NORMAL,Message);
}
}
}

public checkLvl(id)
{
if(PlayerLevel[id] <= 0)
{
PlayerLevel[id] = 1;
}
while(PlayerXP[id] >= LEVELS[PlayerLevel[id]])
{
PlayerLevel[id]++;
levelUp[id] = 1;
new szName[ 32 ];
get_user_name( id, szName, 31 );
static buffer[192], len;
len = format(buffer, charsmax(buffer), "^4[^3%L^4]^1 ",LANG_PLAYER,"ARMY");
len += format(buffer[len], charsmax(buffer) - len, "%L ",LANG_PLAYER,"PLAYER");
len += format(buffer[len], charsmax(buffer) - len, "^4%s^1 ",szName);
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,"NEW_LEVEL");
len += format(buffer[len], charsmax(buffer) - len, " ^4%L^1.",LANG_PLAYER,CLASSES[PlayerLevel[id]]);
len += format(buffer[len], charsmax(buffer) - len, "%L",LANG_PLAYER,"CONTR");
ColorChat(0,NORMAL,buffer);
//break;
}
}
// ======================================== добавляем дамаг ,сделал как сказал Андрей ========================================

public CBasePlayer__TakeDamage_Pre( pevVictim, pevInflictor, pevAttacker, Float:flDamage )
{
if( !is_user_alive( pevAttacker ) )
return HAM_IGNORED;

PlayerXP[ pevAttacker ] += flDamage;// вот по идее должно записаться
checkLvl(pevAttacker );

return HAM_IGNORED;
}


// ======================================== Получение бонуса =======================================
public EventRoundStart()
{
new flash[33],he[33],smoke[33],arm[33],nv[33],def[33];
for(new id = 1; id <= MaxPlayers; id++)
{
if(is_user_alive(id) && is_user_connected(id))
{

if(levelUp[id] == 1)
{
GetWeapon(id);
levelUp[id] = 0;
}
}
}
return PLUGIN_CONTINUE;
}

public GetWeapon(id)
{
new szText[700 char];
formatex( szText, charsmax( szText ), "%L", id, "GW_TITLE");
new menu = menu_create( szText, "gw_menu" );
//================================================================================
==================
formatex( szText, charsmax( szText ), "AWP");
menu_additem( menu, szText, "1", 0 );
//
formatex( szText, charsmax( szText ), "AK-47");
menu_additem( menu, szText, "2", 0 );
//
formatex( szText, charsmax( szText ), "M16");
menu_additem( menu, szText, "3", 0 );
//
formatex( szText, charsmax( szText ), "Famas");
menu_additem( menu, szText, "4", 0 );
//================================================================================
==================
menu_setprop( menu, MPROP_EXIT, MEXIT_ALL );
menu_display( id, menu,0);
return PLUGIN_CONTINUE;
}
public gw_menu(id,menu,item)
{
if( item == MENU_EXIT )
{
return PLUGIN_HANDLED;
}

new data[ 6 ], iName[ 64 ], access, callback;
menu_item_getinfo( menu, item, access, data, charsmax( data ), iName, charsmax( iName ), callback );
new key = str_to_num( data );
switch( key )
{
case 1:
{
give_item(id,"weapon_awp");
cs_set_user_bpammo( id, CSW_AWP, 100);
}
case 2:
{
give_item(id,"weapon_ak47");
cs_set_user_bpammo( id, CSW_AK47, 200);
}
case 3:
{
give_item(id,"weapon_m4a1");
cs_set_user_bpammo( id, CSW_M4A1, 200);
}
case 4:
{
give_item(id,"weapon_famas");
cs_set_user_bpammo( id, CSW_FAMAS, 200);
}
}

return PLUGIN_HANDLED;
}

stock give_user_bonus(id,f_g,h_g,s_g,n_v,a_b,d_k)
{
if(f_g)
{
give_item(id,"weapon_flashbang");
}
if(h_g)
{
give_item(id,"weapon_hegrenade");
}
if(s_g)
{
give_item(id,"weapon_smokegrenade");
}
if(n_v)
{
give_item(id,"item_nvgs");
}
if(a_b)
{
give_item(id,"item_kevlar");
}
if(d_k)
{
give_item(id,"weapon_smokegrenade");
}
if(s_g)
{
give_item(id,"item_assaultsuit");
}
}
// ======================================== Информер ===============================================
public Info()
{
for(new id = 1; id <= MaxPlayers; id++)
{
needXP[id] = LEVELS[PlayerLevel[id]] - PlayerXP[id];
set_hudmessage(100, 100, 100, 0.01, 0.13, 0, 1.0, 1.0, _, _, -1)
static buffer[192], len;
len = format(buffer, charsmax(buffer), "^n^n^n^n%L",LANG_PLAYER,"ZVANIE");
len += format(buffer[len], charsmax(buffer) - len, " %L",LANG_PLAYER,CLASSES[PlayerLevel[id]]);
len += format(buffer[len], charsmax(buffer) - len, "^nурона всего : %d",PlayerXP[id]);
len += format(buffer[len], charsmax(buffer) - len, "^n До след уровня:");
len += format(buffer[len], charsmax(buffer) - len, " %d ",needXP[id]);
len += format(buffer[len], charsmax(buffer) - len, "урона");
ShowSyncHudMsg(id, g_MsgHud, "%s", buffer);
}
return PLUGIN_CONTINUE
}

stock save_client_data(id)
{
gVault = nvault_open( "plData" );
new Name[33];
get_user_name(id, Name, 32);
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-data",Name)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]);
nvault_set(gVault,vaultkey,vaultdata)
nvault_close( gVault );
}
stock load_client_data(id)
{
gVault = nvault_open( "plData");
new Name[33];
get_user_name(id, Name, 32);
new vaultkey[64],vaultdata[256]
format(vaultkey,63,"%s-data",Name)
format(vaultdata,255,"%i#%i#",PlayerXP[id],PlayerLevel[id]);
nvault_get(gVault,vaultkey,vaultdata,255)
replace_all(vaultdata, 255, "#", " ")
new ldr[33],lvl[33];
parse(vaultdata, ldr, 32,lvl,32);
PlayerXP[id] = str_to_num(ldr);
PlayerLevel[id] = str_to_num(lvl);
nvault_close( gVault );
}
public ResetVariables(id)
{
PlayerXP[id] = 0;
PlayerLevel[id] = 0;
levelUp[id] = 0;
}




Сделал тест при нанесении урона не пишет в информере ,и у игроков становится как то много хп,выстрелял обоймы 2 в тело и то если убил, какой то баг.


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 6.7.2013, 17:01
Сообщение #13


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

А что вы делаете ?

PlayerXP[ pevAttacker ] += flDamage;// вот по идее должно записаться
checkLvl(pevAttacker );

Вы каждый урон записываете как экспу и проверяете с левалом,во-первых,ерунду какая-то,за раунд сразу прокачаетесь грубо говоря до конца и еще не увидел,где вы это выводите.

Я думаю,вы не поняли,что сделали.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 7.7.2013, 11:28
Сообщение #14


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Вывожу вот где
Код:
 len += format(buffer[len], charsmax(buffer) - len, "^nурона всего : %d",PlayerXP[id]);

Уровни будут дописаны, будет 300 урона, 1000 ,просто сделал для теста.


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Andrei
сообщение 7.7.2013, 12:27
Сообщение #15


Стаж: 15 лет

Сообщений: 1335
Благодарностей: 693
Полезность: 740

У вас даже плагин не скомпилируется,вы к целому,прибавляете дробное.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя vovan4ik1997
сообщение 7.7.2013, 12:29
Сообщение #16


Стаж: 13 лет

Сообщений: 1087
Благодарностей: 433
Полезность: 718

Компилируется без ошибок)


Представь, что ты заплатил однажды, а получаешь прибыль постоянно.
Закажи правильный контент тут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: