shel писал(а): > И как тебе норм код читается ?
Я привык писать в одну строчку уже, да, норм
Модераторы: Subb98, liFe iS GoOD
//В текстовике координаты спрайта
new const DRAW_SPRITE[] = "z_aufff_fmaledevcsrus";
new g_Sprites[][] = { "sprites/z_aufff_fmaledevcsrus.txt", "sprites/winteam_fmaledevcsrus.spr" }
enum _:MESSAGES
{
g_iMsg_WeaponList,
g_iMsg_CurWeapon,
g_iMsg_SetFOV
}
new g_Messages_Name[MESSAGES][] =
{
"WeaponList",
"CurWeapon",
"SetFOV"
}
//Вот это и показывает наш спрайт, "выдается якобы щит", а на самом деле подложка простая
public DrawSprites(id, const IMAGE[])
{
message_begin(MSG_ONE,g_Messages[g_iMsg_SetFOV], .player = id);
write_byte(89); // Вот это видимо баг движка раз без FOV не работает.
message_end();
message_begin(MSG_ONE,g_Messages[g_iMsg_CurWeapon], .player = id);
write_byte(1);
write_byte(2);
write_byte(-1);
message_end();
message_begin(MSG_ONE,g_Messages[g_iMsg_WeaponList], .player = id);
write_string(IMAGE);
write_byte(-1);
write_byte(-1);
write_byte(-1);
write_byte(-1);
write_byte(0);
write_byte(11);
write_byte(2);
write_byte(0);
message_end();
message_begin(MSG_ONE,g_Messages[g_iMsg_SetFOV], .player = id);
write_byte(90); //Возвращает FOV в дефолт
message_end();
}
//Этой функцией удаляем спрайт, "выдаётся оружием под индексом 29", остальное по нулям
public RemoveSprites(id)
{
message_begin(MSG_ONE,g_Messages[g_iMsg_CurWeapon], .player = id);
write_byte(0);
write_byte(0);
write_byte(0);
message_end();
message_begin(MSG_ONE,g_Messages[g_iMsg_WeaponList], .player = id);
write_string("weapon_knife");
write_byte(-1);
write_byte(-1);
write_byte(-1);
write_byte(-1);
write_byte(2);
write_byte(1);
write_byte(29);
write_byte(0);
message_end();
}
#include <amxmodx>
#define TASK_DELAY_KILLER 1082
#define ID_TASK_DELAY_KILLER (iTask - TASK_DELAY_KILLER)
//В текстовике координаты спрайта
new const DRAW_SPRITE[] = "z_aufff_fmaledevcsrus";
new g_Sprites[][] = { "sprites/z_aufff_fmaledevcsrus.txt", "sprites/winteam_fmaledevcsrus.spr" }
enum _:MESSAGES
{
g_iMsg_WeaponList,
g_iMsg_CurWeapon,
g_iMsg_SetFOV
}
new g_Messages_Name[MESSAGES][] =
{
"WeaponList",
"CurWeapon",
"SetFOV"
}
new iIndexDelay[33]; //Чтобы спрайт не исчезал сразу же, надо как я понимаю заблокировать событие смены оружия, в общем то чего-то ещё, не силен в объяснении
new iKillsCount[33], g_Messages[MESSAGES];
public plugin_init()
{
register_event("DeathMsg", "EventDeath", "a"); //Для примера, я тут использую нашу функцию
for(new i; i < sizeof(g_Messages); i++)
{
g_Messages[i] = get_user_msgid(g_Messages_Name[i]);
register_message(g_Messages[i], "Hook_MSG");
}
register_clcmd(DRAW_SPRITE, "WeaponSwitch");
}
public plugin_precache()
{
for(new i; i < sizeof(g_Sprites); i++)
precache_generic(g_Sprites[i]);
}
public Hook_MSG(iMsgid, iDest, id)
{
if(iIndexDelay[id] == 1) //Чтобы наш спрайт не исчез, блокируется дальнейшее выполнение здесь
return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
public WeaponSwitch(const iPlayer)
engclient_cmd(iPlayer, "weapon_shield");
public EventDeath()
{
new iKiller = read_data(1);
new iVictim = read_data(2);
if(iVictim == iKiller || iKiller == iVictim)
return;
iKillsCount[iKiller] ++; //не важно просто хранение убийств, допустим я хочу показать спрайт если я убил кого то
iKillsCount[iVictim] = 0;
if(iKillsCount[iKiller] > 1)
{
DrawSprites(iKiller, DRAW_SPRITE) //Показываем наш спрайт
iIndexDelay[iKiller] = 1; //Блокируем работу наших зарегистрированных событий в register_message
if(task_exists(iKiller + TASK_DELAY_KILLER))
remove_task(iKiller + TASK_DELAY_KILLER)
set_task(2.0, "RemoveSprites", iKiller + TASK_DELAY_KILLER) //Задаем исчезновение спрайта через 2 секунды
}
}
//Вот это и показывает наш спрайт, "выдается якобы щит", а на самом деле подложка простая
public DrawSprites(id, const IMAGE[])
{
message_begin(MSG_ONE,g_Messages[g_iMsg_SetFOV], .player = id);
write_byte(89); // Вот это видимо баг движка раз без FOV не работает.
message_end();
message_begin(MSG_ONE,g_Messages[g_iMsg_CurWeapon], .player = id);
write_byte(1);
write_byte(2);
write_byte(-1);
message_end();
message_begin(MSG_ONE,g_Messages[g_iMsg_WeaponList], .player = id);
write_string(IMAGE);
write_byte(-1);
write_byte(-1);
write_byte(-1);
write_byte(-1);
write_byte(0);
write_byte(11);
write_byte(2);
write_byte(0);
message_end();
message_begin(MSG_ONE,g_Messages[g_iMsg_SetFOV], .player = id);
write_byte(90); //Возвращает FOV в дефолт
message_end();
}
//Этой функцией удаляем спрайт, "выдаётся оружием под индексом 29", остальное по нулям
public RemoveSprites(iTask)
{
new id= ID_TASK_DELAY_KILLER
iIndexDelay[id] = 0; //Сбросили, чтобы не блокировать больше события
message_begin(MSG_ONE,g_Messages[g_iMsg_CurWeapon], .player = id);
write_byte(0);
write_byte(0);
write_byte(0);
message_end();
message_begin(MSG_ONE,g_Messages[g_iMsg_WeaponList], .player = id);
write_string("weapon_knife");
write_byte(-1);
write_byte(-1);
write_byte(-1);
write_byte(-1);
write_byte(2);
write_byte(1);
write_byte(29);
write_byte(0);
message_end();
}
Добавлено спустя 10 минут 8 секунд:
Тут ещё и проверки на оружие нужны будут, если вдруг ты будешь спрайты киллов показывать, проверки на снайперки, чтобы у них прицел не появлялся, блокировать HideWeapon.
Исправил функцию удаления, забыл что задание поставил.
Сейчас этот форум просматривают: Yandex [Bot] и гости: 11