Смена события

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
2
Реакции
0
Всем привет. Имеется плагин для покупки вражеского скина. Покупается он только на раунд. Мне же хочется, что бы скин оставался до смерти игрока. Вот код плагина

#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define PLUGIN "Bou Spy"
#define VERSION "1.0"
#define AUTHOR "Eg@r4$il{"

new spy[33]

public plugin_init() {
register_plugin("Spy","1.1","Eg@r4$il{")

// Add your code here...
register_concmd("amx_spy", "cmd_spy", ADMIN_SLAY, "< name | #userid > 1/0")
register_cvar("amx_spy_cost","6000")
register_cvar("amx_spy_enable","2")
register_clcmd("say /spy","cmd_bouspy")
register_clcmd("say_team /spy","cmd_bouspy")
register_logevent("Event_Round_Start",2,"1=Round_Start")

}

public plugin_precache()
{
precache_model("models/player/sas/sas.mdl")
precache_model("models/player/guerilla/guerilla.mdl")
}

public cmd_spy(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED

new Argument[32], status[4]

read_argv(1, Argument, 31)
read_argv(2, status, 3)

new Target = cmd_target(id, Argument, CMDTARGET_ALLOW_SELF | CMDTARGET_OBEY_IMMUNITY)

if (Target)
{
if (equal(status, "1"))
{
if (cs_get_user_team(Target) == CS_TEAM_CT)
{
cs_set_user_model(Target, "guerilla")
return PLUGIN_HANDLED
}
else if(cs_get_user_team(Target) == CS_TEAM_T)
{
cs_set_user_model(Target, "sas")
return PLUGIN_HANDLED
}
else
{
cs_reset_user_model(Target)
return PLUGIN_HANDLED
}
}
if (equal(status, "0"))
{
cs_reset_user_model(Target)
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}

public cmd_bouspy(id)
{
if (!get_cvar_num("amx_spy_enable")) return PLUGIN_CONTINUE
if(!is_user_alive(id))
{
client_print(id,print_center,"Чтобы замаскироваться вы должны быть живым")
return PLUGIN_CONTINUE
}
if(spy[id]==1)
{
client_print(id,print_center,"Вы уже замаскированы")
return PLUGIN_CONTINUE
}
if(cs_get_user_money(id)>=get_cvar_num("amx_spy_cost"))
{
spy[id]=1
client_print(id,print_center,"Вы замаскировались")
cs_set_user_money(id,cs_get_user_money(id)-get_cvar_num("amx_spy_cost"))
cs_get_user_team(id) == CS_TEAM_CT ? cs_set_user_model(id, "guerilla") : cs_set_user_model(id, "sas")
return PLUGIN_CONTINUE
}
else
client_print(id,print_center,"У вас не хватает денег")
return PLUGIN_CONTINUE
}

public Event_Round_Start()
{


for (new a=1;a<33;a++)
{
spy[a]=0
if (is_user_connected(a))
cs_reset_user_model(a)
}
if (get_cvar_num("amx_spy_enable")>1)
{
client_print(0,print_chat,"say /spy чтобы замаскироваться")
client_print(0,print_console,"say /spy чтобы замаскироваться")
}

}
Начал ковырять код и вот что поменял: register_logevent("Event_Round_Start",2,"1=Round_Start") поменял на register_event("DeathMsg", "Event_DeathMsg", "a")
А public Event_Round_Start() поменял на public Event_DeathMsg(). И да, скин теперь сохраняется более чем на один раунд.. Но, теперь он пропадает при смерти любого игрока, а не именно того кто его купил. В принципе, ожидаемо. Ведь на сколько я понял, Event_DeathMsg ловит любое событие смерти на серве, если можно так выразиться. А как сделать так, чтоб он отлавливал событие смерти только того, кто купил этот скин? В кодинге я слаб, так что надеюсь на более развёрнутый ответ. Если он, конечно, последует. Всем добра.
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
shadow179, вставь код под спойлером ещё в специальное поле "код".
 
Сообщения
75
Реакции
36
Помог
4 раз(а)
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <hamsandwich>

#define PLUGIN "Bou Spy"
#define VERSION "1.0"
#define AUTHOR "Eg@r4$il{"

new spy[33]

public plugin_init() {
register_plugin("Spy","1.1","Eg@r4$il{")

// Add your code here...
register_concmd("amx_spy", "cmd_spy", ADMIN_SLAY, "< name | #userid > 1/0")
register_cvar("amx_spy_cost","6000")
register_cvar("amx_spy_enable","2")
register_clcmd("say /spy","cmd_bouspy")
register_clcmd("say_team /spy","cmd_bouspy")
RegisterHam(Ham_Killed, "player", "@CBasePlayer_Killed_Pre", .Post = false);

}

public plugin_precache()
{
precache_model("models/player/sas/sas.mdl")
precache_model("models/player/guerilla/guerilla.mdl")
}

public cmd_spy(id, level, cid)
{
if (!cmd_access(id, level, cid, 3))
return PLUGIN_HANDLED

new Argument[32], status[4]

read_argv(1, Argument, 31)
read_argv(2, status, 3)

new Target = cmd_target(id, Argument, CMDTARGET_ALLOW_SELF | CMDTARGET_OBEY_IMMUNITY)

if (Target)
{
if (equal(status, "1"))
{
if (cs_get_user_team(Target) == CS_TEAM_CT)
{
cs_set_user_model(Target, "guerilla")
return PLUGIN_HANDLED
}
else if(cs_get_user_team(Target) == CS_TEAM_T)
{
cs_set_user_model(Target, "sas")
return PLUGIN_HANDLED
}
else
{
cs_reset_user_model(Target)
return PLUGIN_HANDLED
}
}
if (equal(status, "0"))
{
cs_reset_user_model(Target)
return PLUGIN_HANDLED
}
}
return PLUGIN_HANDLED
}

public cmd_bouspy(id)
{
if (!get_cvar_num("amx_spy_enable")) return PLUGIN_CONTINUE
if(!is_user_alive(id))
{
client_print(id,print_center,"Чтобы замаскироваться вы должны быть живым")
return PLUGIN_CONTINUE
}
if(spy[id]==1)
{
client_print(id,print_center,"Вы уже замаскированы")
return PLUGIN_CONTINUE
}
if(cs_get_user_money(id)>=get_cvar_num("amx_spy_cost"))
{
spy[id]=1
client_print(id,print_center,"Вы замаскировались")
cs_set_user_money(id,cs_get_user_money(id)-get_cvar_num("amx_spy_cost"))
cs_get_user_team(id) == CS_TEAM_CT ? cs_set_user_model(id, "guerilla") : cs_set_user_model(id, "sas")
return PLUGIN_CONTINUE
}
else
client_print(id,print_center,"У вас не хватает денег")
return PLUGIN_CONTINUE
}

@CBasePlayer_Killed_Pre(pPlayer) {
   
    spy[pPlayer] = 0;
    cs_reset_user_model(pPlayer);
}
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
А как сделать так, чтоб он отлавливал событие смерти только того, кто купил этот скин? В кодинге я слаб, так что надеюсь на более развёрнутый ответ. Если он, конечно, последует. Всем добра.
Начало у тебя правильное, только убери цикл по игрокам из тела функции.
Используй read_data | amxmodx | AMX X Documentation в функции Event_DeathMsg. Думаю, из описания можно понять, что делает этот натив.
И оставлю ссылку на описание DeathMsg, чтобы ты разобрался с его аргументами.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу