Всем привет!
Проблема следующая, хочу поставить на сервер эффекты после убийства зомби но все знают что в Effects_Killer есть проблема с hud.txt. Так вот я хочу убрать из плагина эти спрайты, а сделать простой хад по середине экрана с надписью "1 kill", "2 kill"... и тд. и чтобы проигрывало звуки "First Kill", "Double Kill"... (звуки есть)
И желательно удалить ещё звуки от убийства гранатой/ножом и тд.
Кода даю 2, потому что нашёл два разных:
Код
#include <amxmodx>
#include <amxmisc>
//#include <hamsandwich>
//#include <engine>
#include <fakemeta>
#include <cssb/messages.inc>
#define PLUGIN "CSSB CSO Effect Kills"
#define VERSION "1.0"
#define AUTHOR "CSSB"
#pragma semicolon 1
/*
Флаги:
cssb_MultiKillMode < флаги >
"a" - показывать сообщение
"b" - звуковое сопровождение
"c" - отображение спрайтов
По умолчанию: "cssb_MultiKillMode" "abc"
Какие звуки будут проигрываться, зависит от флагов
"cssb_sound_flags" < флаги >
"a" - звук MULTIKILL
"b" - звук ULTRAKILL
"c" - звук IMPRESSIVE
"d" - звук MONSTERKILL
"e" - звук KILLINGSPREE
"f" - звук RAMPAGE
"g" - звук DOMINATING
"h" - звук HOLYSHIT
"i" - звук GODLIKE
По умолчанию: "cssb_sound_flags" "abcdefghi"
CVARS:
Эффекты появления текста:
0 - Плавный переход
1 - Мерцание + Плавный переход
2 - Печатная машинка
По умолчанию: "cssb_message_effect" "1"
//Показывать текст разными цветами
По умолчанию: "cssb_random_color" "0"
Флаги:
cssb_HeadshotKillMode < flags >
"a" - показывать сообщение
"b" - звуковое сопровождение
"c" - отображение спрайтов
По умолчанию: "cssb_HeadshotKillMode" "abc"
Флаги:
cssb_KnifeKillMode < flags >
"a" - показывать сообщение
"b" - звуковое сопровождение
"c" - отображение спрайтов
По умолчанию: "cssb_KnifeKillMode" "abc"
*/
new g_FM_Running;
enum(+= 100)
{
TASK_HIDESPR = 2000
};
#define ID_HIDESPR (taskid - TASK_HIDESPR)
enum
{
KILL_FIRST = 1,
C4_DEFUSE,
C4_SET,
MULTIKILL,
ULTRAKILL,
IMPRESSIVE,
MONSTERKILL,
KILLINGSPREE,
RAMPAGE,
DOMINATING,
HOLYSHIT,
GODLIKE
};
enum
{
KILL_NONE = 51,
KILL_HEGRENADE,
KILL_HEADSHOT,
KILL_KNIFE,
WALLSHOT,
WALLSHOT_HEADSHOT
};
new arrHeadshot[33][1];
new arrKills[33] = {0,...};
new arrDeaths[33] = {0,...};
new arrLevels[9] = {3, 5, 7, 9, 11,13,15,17,19};
new arrMultiKillSounds[9][] = {
"CSSB/UltS/multikill",
"CSSB/UltS/ultrakill",
"CSSB/UltS/impressive",
"CSSB/UltS/monsterkill",
"CSSB/UltS/killingspree",
"CSSB/UltS/rampage",
"CSSB/UltS/dominating",
"CSSB/UltS/holyshit",
"CSSB/UltS/godlike"};
/*
new arrMultiKillSprites[9][] = {
"sprites/mark/cssb_multikill.spr",
"sprites/mark/cssb_ultrakill.spr",
"sprites/mark/cssb_impressive.spr",
"sprites/mark/cssb_monsterkill.spr",
"sprites/mark/cssb_killingspree.spr",
"sprites/mark/cssb_rampage.spr",
"sprites/mark/cssb_dominating.spr",
"sprites/mark/cssb_holyshit.spr",
"sprites/mark/cssb_godlike.spr"};
*/
new arrMultiKillMessages[9][] = {
"UKILL_MULTIKILL",
"UKILL_ULTRAKILL",
"UKILL_IMPRESSIVE",
"UKILL_MONSTERKILL",
"UKILL_KILLINGSPREE",
"UKILL_RAMPAGE",
"UKILL_DOMINATING",
"UKILL_HOLYSHIT",
"UKILL_GODLIKE"
};
new iStatusIconMsg;
new iFirstKill;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);
register_dictionary("cssbUltimateSound.txt");
register_event("DeathMsg", "evDeathMsg", "a");
// register_event("DeathMsg","evDeathMsg","a","3=1");
// register_event("DeathMsg","evDeathMsg","a","4&kni");
// register_event("DeathMsg","evDeathMsg","a","4&gre");
register_event("HLTV", "evNewRound", "a", "1=0", "2=0");
iStatusIconMsg = get_user_msgid("StatusIcon");
register_cvar("cssb_HeadshotKillMode","abc");
register_cvar("cssb_KnifeKillMode","abc");
register_cvar("cssb_MultiKillMode","abc");
// Эффекты
// 0 - Плавный переход
// 1 - Мерцание + Плавный переход
// 2 - Печатная машинка
register_cvar("cssb_message_effect","1");
register_cvar("cssb_random_color","0");
register_cvar("cssb_sound_flags","abcdefghi");
g_FM_Running = is_module_loaded("FakeMeta");
return PLUGIN_CONTINUE;
}
public client_connect(idUser)
{
arrHeadshot[idUser][0] = 0;
arrKills[idUser] = 0;
arrDeaths[idUser] = 0;
}
public client_disconnect(idUser)
{
arrHeadshot[idUser][0] = 0;
arrKills[idUser] = 0;
arrDeaths[idUser] = 0;
}
public plugin_precache()
{
precache_generic("sprites/hud.txt");
//Звуки
precache_sound( "CSSB/UltS/multikill.wav");
precache_sound( "CSSB/UltS/ultrakill.wav");
precache_sound( "CSSB/UltS/impressive.wav");
precache_sound( "CSSB/UltS/monsterkill.wav");
precache_sound( "CSSB/UltS/killingspree.wav");
precache_sound( "CSSB/UltS/rampage.wav");
precache_sound( "CSSB/UltS/dominating.wav");
precache_sound( "CSSB/UltS/holyshit.wav");
precache_sound( "CSSB/UltS/godlike.wav");
precache_sound( "CSSB/UltS/headshot.wav");
precache_sound( "CSSB/UltS/humiliation.wav");
precache_sound( "CSSB/UltS/firstblood.wav");
precache_sound( "CSSB/UltS/nade_kill.wav");
precache_sound( "CSSB/UltS/c4set.wav");
precache_sound( "CSSB/UltS/c4defuse.wav");
//Спрайты
precache_model("sprites/mark/kill_first.spr");
precache_model("sprites/mark/c4_defuse.spr");
precache_model("sprites/mark/c4_set.spr");
precache_model("sprites/mark/kill_none.spr");
precache_model("sprites/mark/kill_he.spr");
precache_model("sprites/mark/kill_headshot.spr");
precache_model("sprites/mark/kill_knife.spr");
precache_model("sprites/mark/wall_shot.spr");
precache_model("sprites/mark/wall_shot_hs.spr");
precache_model("sprites/mark/cssb_multikill.spr");
precache_model("sprites/mark/cssb_ultrakill.spr");
precache_model("sprites/mark/cssb_impressive.spr");
precache_model("sprites/mark/cssb_monsterkill.spr");
precache_model("sprites/mark/cssb_killingspree.spr");
precache_model("sprites/mark/cssb_rampage.spr");
precache_model("sprites/mark/cssb_dominating.spr");
precache_model("sprites/mark/cssb_holyshit.spr");
precache_model("sprites/mark/cssb_godlike.spr");
return PLUGIN_CONTINUE;
}
public evNewRound()
{
iFirstKill = 1;
/*
static iPlayers[32], iPlayersNum, i;
get_players(iPlayers, iPlayersNum, "a");
for (i = 0; i <= iPlayersNum; ++i)
{
arrHeadshot[iPlayers[i]][0] = 0;
arrKills[iPlayers[i]] = 0;
arrDeaths[iPlayers[i]] = 0;
}*/
}
public evDeathMsg()
{
new idKiller = read_data(1);
new idVictim = read_data(2);
if (!is_user_connected(idKiller) || !is_user_connected(idVictim))
return PLUGIN_CONTINUE;
if (get_user_team(idKiller) == get_user_team(idVictim) && get_cvar_num("mp_friendlyfire") == 1)
// if (idKiller && get_user_team(idKiller) == get_user_team(idVictim))
return PLUGIN_CONTINUE;
new iHeadshot = read_data(3);
new szWeapon[32], iWpnIndex;
read_data(4, szWeapon, charsmax(szWeapon));
new szWeaponARG[4];
read_data(4,szWeaponARG,3);
// if(equal( szWeaponARG, "gre" ) || equal( szWeaponARG, "wor" ))
if(equal( szWeaponARG, "gre" ))
format(szWeapon, charsmax(szWeapon), "hegrenade");
format(szWeapon, charsmax(szWeapon), "weapon_%s", szWeapon);
iWpnIndex = get_weaponid(szWeapon);
// client_print(0,print_chat,"szWeaponARG: %s | iWpnIndex: %d",szWeaponARG,iWpnIndex);
arrHeadshot[idKiller][0] += read_data(3);/* headshot */
arrHeadshot[idVictim][0] = 0;
arrKills[idKiller] += 1;
arrKills[idVictim] = 0;
arrDeaths[idKiller] = 0;
arrDeaths[idVictim] += 1;
if ((iWpnIndex != CSW_KNIFE) && (iWpnIndex != CSW_HEGRENADE) && !can_see_fm(idKiller, idVictim))
{
if (iHeadshot)//Если убил в голову и через стену
{
show_hud(idKiller, WALLSHOT_HEADSHOT);
}
else
{
show_hud(idKiller, WALLSHOT);
}
}
else if (iHeadshot && iWpnIndex)//В голову и видя своего противника
{
fHeadshotKill(idKiller,idVictim);
}
else if (iWpnIndex == CSW_KNIFE)
{
fKnifeKill(idKiller,idVictim);
}
else if (iWpnIndex == CSW_HEGRENADE)//CSW_HEGRENADE
{
show_hud(idKiller, KILL_HEGRENADE);
client_cmd(0,"spk CSSB/UltS/nade_kill");
}
else
{
show_hud(idKiller, KILL_NONE);
}
// Первая кровь
if (iFirstKill)
{
iFirstKill = 0;
show_hud(idKiller, KILL_FIRST);
client_cmd(0,"spk CSSB/UltS/firstblood");
}
for (new i = 0; i < 9; i++)
{
if (arrKills[idKiller] == arrLevels[i])
{
fMultiKill(idKiller,i,arrKills[idKiller] ,arrHeadshot[idKiller][0]);
return PLUGIN_CONTINUE;
}
}
return PLUGIN_CONTINUE;
}
public bomb_defused(id)
{
new arrIdPlayers[32], iNumPlayers;
get_players(arrIdPlayers,iNumPlayers,"ah");
for(new i=0; i < iNumPlayers; i++)
show_hud(arrIdPlayers[i], C4_DEFUSE);
client_cmd(0,"spk CSSB/UltS/c4defuse");
}
public bomb_planted(id)
{
new arrIdPlayers[32], iNumPlayers;
get_players(arrIdPlayers,iNumPlayers,"ah");
for(new i=0; i < iNumPlayers; i++)
show_hud(arrIdPlayers[i], C4_SET);
client_cmd(0,"spk CSSB/UltS/c4set");
}
public fKnifeKill(idKiller,idVictim)
{
new szKnifeMode[4];
get_cvar_string("cssb_KnifeKillMode",szKnifeMode,charsmax(szKnifeMode));
new bitKnifeMode = read_flags(szKnifeMode);
new arrIdPlayers[32], iNumPlayers;
get_players(arrIdPlayers,iNumPlayers,"ah");
if (bitKnifeMode & 1)
{
new strNameKiller[33], strNameVictim[33];
get_user_name(idKiller,strNameKiller,33);
get_user_name(idVictim,strNameVictim,33);
formatex(szMessage,charsmax(szMessage), "^x03%s ^x01%L ^x04%s",strNameKiller,LANG_PLAYER,"UKILL_KNF", strNameVictim);
for(new i=0; i < iNumPlayers; i++)
{
if (arrIdPlayers[i] == idVictim)
continue;
if (arrIdPlayers[i] == idKiller)
continue;
message_begin(MSG_ONE, get_user_msgid("SayText"), {0,0,0}, arrIdPlayers[i]);
write_byte(idKiller);
write_string(szMessage);
message_end();
}
}
if (bitKnifeMode & 2)
{
client_cmd(0,"spk CSSB/UltS/humiliation");
}
if (bitKnifeMode & 4)
{
for(new i=0; i < iNumPlayers; i++)
{
if (arrIdPlayers[i] == idVictim)
continue;
show_hud(arrIdPlayers[i], KILL_KNIFE);
}
}
}
public fHeadshotKill(idKiller,idVictim)
{
new szMessageHSKill[256];
new szHeadshotMode[4];
get_cvar_string("cssb_HeadshotKillMode",szHeadshotMode,charsmax(szHeadshotMode));
new bitHeadshotMode = read_flags(szHeadshotMode);
if (bitHeadshotMode & 1)
{
new strNameKiller[33], strNameVictim[33];
get_user_name(idKiller,strNameKiller,33);
get_user_name(idVictim,strNameVictim,33);
formatex(szMessageHSKill, charsmax(szMessageHSKill), "^x03%L ^x04%s",LANG_PLAYER,"UKILL_HEADSHOT", strNameVictim);
cssbColoredPrint(idKiller,szMessageHSKill);
}
if (bitHeadshotMode & 2)
{
client_cmd(idKiller,"spk CSSB/UltS/headshot");
client_cmd(idVictim,"spk CSSB/UltS/headshot");
}
if (bitHeadshotMode & 4)
{
show_hud(idKiller, KILL_HEADSHOT);
}
}
fMultiKill(idKiller,iLevel,iNumKills,iNumHeadshot)
{
new szMultiKillMode[4];
get_cvar_string("cssb_MultiKillMode",szMultiKillMode,4);
new bitMultiKillMode = read_flags(szMultiKillMode);
new arrIdPlayers[32], iNumPlayers;
get_players(arrIdPlayers,iNumPlayers,"ah");
if (bitMultiKillMode & 1)//Просто сообщение
{
new szNameUser[32];
get_user_name(idKiller, szNameUser, charsmax(szNameUser));
new szHUDMessage[128];
format(szHUDMessage,127,"%L",LANG_PLAYER,arrMultiKillMessages[iLevel],szNameUser,iNumKills,iNumHeadshot);
if(get_cvar_num("cssb_random_color") == 1)
fHUDMessageRandomColor(szHUDMessage);
else
fHUDMessageColor(szHUDMessage,iLevel);
}
if (bitMultiKillMode & 2)//С звуковым сопровождением
{
new param[1];
param[0] = iLevel;
set_task(3.0,"fSoundMultiKill",0,param,1);
}
if (bitMultiKillMode & 4)//С отображением спрайтов
{
//client_print(0,print_chat,"bitMultiKillMode & 4");
for(new i = 0; i < iNumPlayers; i++)
{
if(iNumKills == 3)
show_hud(arrIdPlayers[i], MULTIKILL);
if(iNumKills == 5)
show_hud(arrIdPlayers[i], ULTRAKILL);
if(iNumKills == 7)
show_hud(arrIdPlayers[i], IMPRESSIVE);
if(iNumKills == 9)
show_hud(arrIdPlayers[i], MONSTERKILL);
if(iNumKills == 11)
show_hud(arrIdPlayers[i], KILLINGSPREE);
if(iNumKills == 13)
show_hud(arrIdPlayers[i], RAMPAGE);
if(iNumKills == 15)
show_hud(arrIdPlayers[i], DOMINATING);
if(iNumKills == 17)
show_hud(arrIdPlayers[i], HOLYSHIT);
if(iNumKills == 19)
show_hud(arrIdPlayers[i], GODLIKE);
}
}
}
public fSoundMultiKill(param[])
{
static flags[26];
get_cvar_string("cssb_sound_flags", flags, sizeof(flags) - 1);
new bitFlags = read_flags(flags);
if ((param[0] == 0) && !(bitFlags & 1))
return;
if ((param[0] == 1) && !(bitFlags & 2))
return;
if ((param[0] == 2) && !(bitFlags & 4))
return;
if ((param[0] == 3) && !(bitFlags & 8))
return;
if ((param[0] == 4) && !(bitFlags & 16))
return;
if ((param[0] == 5) && !(bitFlags & 32))
return;
if ((param[0] == 6) && !(bitFlags & 64))
return;
if ((param[0] == 7) && !(bitFlags & 128))
return;
if ((param[0] == 8) && !(bitFlags & 256))
return;
client_cmd(0, "spk %s", arrMultiKillSounds[param[0]]);
}
public fHUDMessageRandomColor(szHUDMessage[128])
{
new rgbRed, rgbGreen, rgbBlue;
// RANDOM
rgbRed = random_num(0, 255);
rgbGreen = random_num(0, 255);
rgbBlue = random_num(0, 255);
new iEffect, Float:iFadeIn, Float:iFadeOut, Float:iHoldTime;
switch(get_cvar_num("cssb_message_effect"))
{
case 1:
{
iEffect = 1;
iFadeIn = 0.2;
iFadeOut = 0.2;
iHoldTime = 7.0;
}
case 2:
{
iEffect = 2;
iFadeIn = 0.05;
iFadeOut = 0.5;
iHoldTime = 7.0;
}
default:
{
iEffect = 0;
iFadeIn = 0.5;
iFadeOut = 0.5;
iHoldTime = 7.0;
}
}
set_hudmessage(rgbRed, rgbGreen, rgbBlue, 0.05, 0.65, iEffect, 0.1, iHoldTime, iFadeIn, iFadeOut, 3);
show_hudmessage(0, "%s", szHUDMessage);
}
public fHUDMessageColor(szHUDMessage[128],iLevel)
{
new rgbRed, rgbGreen, rgbBlue;
switch(iLevel)
{
case 0:
{
// GREEN
rgbRed = 0;
rgbGreen = 255;
rgbBlue = 0;
}
case 1:
{
// RED
rgbRed= 255;
rgbGreen = 0;
rgbBlue = 0;
}
case 2:
{
rgbRed = 79;
rgbGreen = 30;
rgbBlue = 255;
}
case 3:
{
// YELLOW
rgbRed = 255;
rgbGreen = 255;
rgbBlue = 0;
}
case 4:
{
// CYAN
rgbRed = 0;
rgbGreen = 255;
rgbBlue = 255;
}
case 5:
{
// MAGENTA
rgbRed = 255;
rgbGreen = 0;
rgbBlue = 255;
}
case 6:
{
// ORANGE
rgbRed = 255;
rgbGreen = 128;
rgbBlue = 0;
}
case 7:
{
// VIOLET
rgbRed = 0;
rgbGreen = 128;
rgbBlue = 255;
}
case 8:
{
rgbRed = 128;
rgbGreen = 0;
rgbBlue = 255;
}
}
new iEffect, Float:iFadeIn, Float:iFadeOut, Float:iHoldTime;
switch(get_cvar_num("cssb_message_effect"))
{
case 1:
{
iEffect = 1;
iFadeIn = 0.2;
iFadeOut = 0.2;
iHoldTime = 7.0;
}
case 2:
{
iEffect = 2;
iFadeIn = 0.05;
iFadeOut = 0.5;
iHoldTime = 7.0;
}
default:
{
iEffect = 0;
iFadeIn = 0.5;
iFadeOut = 0.5;
iHoldTime = 7.0;
}
}
set_hudmessage(rgbRed, rgbGreen, rgbBlue, 0.05, 0.65, iEffect, 0.1, iHoldTime, iFadeIn, iFadeOut, 3);
show_hudmessage(0, "%s", szHUDMessage);
}
// #################### SHOW HUD ####################
show_hud(id, idhud)
{
if (!is_user_connected(id))
return;
show_spr(id, idhud);
}
show_spr(id, idspr)
{
if (idspr >= KILL_NONE)
hide_spr(id, 2);
else
hide_spr(id, 1);
spr_action(id, idspr, 1);
if (task_exists(id+TASK_HIDESPR))
remove_task(id+TASK_HIDESPR);
if(!is_user_bot(id))
set_task(2.0, "task_hidehud", id + TASK_HIDESPR);
}
hide_spr(id, idspr)
{
if (idspr == 1)
{
for (new i = KILL_FIRST; i <= GODLIKE; i++)
spr_action(id, i, 0);
}
if (idspr == 2)
{
for (new i = KILL_NONE; i <= WALLSHOT_HEADSHOT; i++)
{
spr_action(id, i, 0);
}
}
}
spr_action(id, spr, run)
{
new sprname[64];
format(sprname, charsmax(sprname), "%s", get_hud_data(spr));
message_begin(MSG_ONE,iStatusIconMsg,{0,0,0},id);
write_byte(run); // status (0=hide, 1=show, 2=flash)
write_string(sprname); // sprite name
message_end();
}
get_hud_data(idhud)
{
new value[64], sprname[33];
switch (idhud)
{
case KILL_FIRST:
sprname = "kill_first";
case C4_DEFUSE:
sprname = "c4_defuse";
case C4_SET:
sprname = "c4_set";
case MULTIKILL:
sprname = "cssb_multikill";
case ULTRAKILL:
sprname = "cssb_ultrakill";
case IMPRESSIVE:
sprname = "cssb_impressive";
case MONSTERKILL:
sprname = "cssb_monsterkill";
case KILLINGSPREE:
sprname = "cssb_killingspree";
case RAMPAGE:
sprname = "cssb_rampage";
case DOMINATING:
sprname = "cssb_dominating";
case HOLYSHIT:
sprname = "cssb_holyshit";
case GODLIKE:
sprname = "cssb_godlike";
case KILL_NONE:
sprname = "kill_none";
case KILL_HEGRENADE:
sprname = "kill_he";
case KILL_HEADSHOT:
sprname = "kill_headshot";
case KILL_KNIFE:
sprname = "kill_knife";
case WALLSHOT:
sprname = "wall_shot";
case WALLSHOT_HEADSHOT:
sprname = "wall_shot_hs";
}
format(value, charsmax(value), "%s", sprname);
return value;
}
public task_hidehud(taskid)
{
new id = ID_HIDESPR;
hide_spr(id, 2);
hide_spr(id, 1);
}
bool:can_see_fm(entindex1, entindex2)
{
if ((!g_FM_Running) || !entindex1 || !entindex2)
return false;
// new ent1, ent2
if (pev_valid(entindex1) && pev_valid(entindex1))
{
new flags = pev(entindex1, pev_flags);
if (flags & EF_NODRAW || flags & FL_NOTARGET)
{
return false;
}
new Float:lookerOrig[3];
new Float:targetBaseOrig[3];
new Float:targetOrig[3];
new Float:temp[3];
pev(entindex1, pev_origin, lookerOrig);
pev(entindex1, pev_view_ofs, temp);
lookerOrig[0] += temp[0];
lookerOrig[1] += temp[1];
lookerOrig[2] += temp[2];
pev(entindex2, pev_origin, targetBaseOrig);
pev(entindex2, pev_view_ofs, temp);
targetOrig[0] = targetBaseOrig [0] + temp[0];
targetOrig[1] = targetBaseOrig [1] + temp[1];
targetOrig[2] = targetBaseOrig [2] + temp[2];
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); // checks the had of seen player
if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
{
return false;
}
else
{
new Float:flFraction;
get_tr2(0, TraceResult:TR_flFraction, flFraction);
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true;
}
else
{
targetOrig[0] = targetBaseOrig [0];
targetOrig[1] = targetBaseOrig [1];
targetOrig[2] = targetBaseOrig [2];
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); // checks the body of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction);
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true;
}
else
{
targetOrig[0] = targetBaseOrig [0];
targetOrig[1] = targetBaseOrig [1];
targetOrig[2] = targetBaseOrig [2] - 17.0;
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0); // checks the legs of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction);
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true;
}
}
}
}
}
return false;
}
Второй:
Код
#include <amxmodx>
#include <fakemeta>
#include <nst_player>
#include <nst_zombie>
#include <nst_wpn>
#define PLUGIN "Effects Killer"
#define VERSION "3.0"
#define AUTHOR "NST"
#define LEVELS 8
new kills[33], Float:timekill[33], revenge[33], oneshot[33]
new iconstatus, g_firstkill, g_lastkill
new g_FM_Running
new cvar_time_kill, cvar_type, cvar_time_show
new const sound_combo[][] =
{
"vox/kill/%s/kill_1_%s.wav",
"vox/kill/%s/kill_2_%s.wav",
"vox/kill/%s/kill_3_%s.wav",
"vox/kill/%s/kill_4_%s.wav",
"vox/kill/%s/kill_5_%s.wav",
"vox/kill/%s/kill_6_%s.wav",
"vox/kill/%s/kill_7_%s.wav",
"vox/kill/%s/kill_8_%s.wav",
"vox/kill/%s/revenge_%s.wav",
"vox/kill/%s/headshot_%s.wav",
"vox/kill/%s/knife_%s.wav",
"vox/kill/%s/grenade_%s.wav"
}
enum(+= 100)
{
TASK_HIDESPR = 2000
}
#define ID_HIDESPR (taskid - TASK_HIDESPR)
enum
{
HUD_SOUND = 1,
HUD_MSGTEXT,
HUD_SPRNAME
}
enum
{
KILL_1 = 1,
KILL_2,
KILL_3,
KILL_4,
KILL_5,
KILL_6,
KILL_7,
KILL_8,
KILL_FIRST,
C4_DEFUSE,
C4_SET
}
enum
{
KILL_NONE = 51,
KILL_HEGRENADE,
KILL_HEADSHOT,
KILL_KNIFE,
KILL_LAST,
KILL_REVENGE,
WALLSHOT,
WALLSHOT_HEADSHOT,
ONESHOT_2KILL,
ONESHOT_3KILL
}
public plugin_precache()
{
for (new i = 1; i <= 2; i++)
{
new sex[32]
if (i == 1) sex = "woman"
else sex = "man"
for (new e = 0; e <= 11; e++)
{
new sound_ct[100], sound_t[100], team_ct[32] = "ct", team_t[32] = "t"
format(sound_ct, 99, sound_combo[e], sex, team_ct)
format(sound_t, 99, sound_combo[e], sex, team_t)
//precache_sound(sound_ct)
//precache_sound(sound_t)
}
}
//precache_sound("misc/MultiKill/C4_Defuse.wav")
//precache_sound("misc/MultiKill/C4_Set.wav")
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event("DeathMsg", "event_DeathMsg", "a")
cvar_time_kill = register_cvar("nst_ek_time_kill","3")
cvar_type = register_cvar("nst_ek_type","1")
cvar_time_show = register_cvar("nst_ek_time_show","2.0")
iconstatus = get_user_msgid("StatusIcon")
g_FM_Running = is_module_loaded("FakeMeta")
}
public event_round_start()
{
new reset_value[33]
g_firstkill = 1
kills = reset_value
revenge = reset_value
oneshot = reset_value
}
public event_DeathMsg()
{
// get value data
static killer, headshot, weapon[32], wpnindex, victim
killer = read_data(1)
victim = read_data(2)
headshot = read_data(3)
read_data(4, weapon, charsmax(weapon))
if (equali(weapon, "grenade")) format(weapon, charsmax(weapon), "hegrenade")
format(weapon, charsmax(weapon), "weapon_%s", weapon)
wpnindex = get_weaponid(weapon)
// none killer = victim
if (!is_user_connected(killer) || !is_user_connected(victim) || killer==victim) return;
if (get_user_team(killer)==get_user_team(victim) && !get_cvar_num("mp_friendlyfire")) return;
// reset kills of victim
kills[victim] = 0
// set revenge of victim
revenge[victim] = killer
// get num kill & one shoot multikill
new Float:timeleft = get_gametime()-timekill[killer]
if (timeleft <= get_pcvar_float(cvar_time_kill)) kills[killer] += 1
else kills[killer] = 1
if (kills[killer]>LEVELS) kills[killer] = 1
timekill[killer] = get_gametime()
if (!oneshot[killer]) oneshot[killer] = 1
if (!timeleft && wpnindex != CSW_HEGRENADE) oneshot[killer] += 1
else oneshot[killer] = 1
oneshot[killer] = min(3, oneshot[killer])
//client_print(killer, print_chat, "%i", oneshot[killer])
// get last kill
new players_ct[32], players_t[32], ict, ite
get_players(players_ct,ict,"ae","CT")
get_players(players_t,ite,"ae","TERRORIST")
if (ict == 0 || ite == 0) g_lastkill = 1
// check revenge
new g_revenge
if (victim == revenge[killer])
{
g_revenge = 1
revenge[killer] = 0
}
// hud 1
new check_sound
if (oneshot[killer] > 1)
{
if (oneshot[killer] == 2) show_hud(killer, ONESHOT_2KILL)
else if (oneshot[killer] == 3) show_hud(killer, ONESHOT_3KILL)
}
else if (g_lastkill)
{
g_lastkill = 0
show_hud(killer, KILL_LAST)
}
else if (g_revenge)
{
play_sound(killer, KILL_REVENGE)
show_hud(killer, KILL_REVENGE)
}
else if ((wpnindex != CSW_KNIFE) && (wpnindex != CSW_HEGRENADE) && !can_see_fm(killer, victim))
{
if (headshot)
{
if (kills[killer] == 1)
{
play_sound(killer, KILL_HEADSHOT)
check_sound = 1
}
show_hud(killer, WALLSHOT_HEADSHOT)
}
else show_hud(killer, WALLSHOT)
}
else if (headshot && wpnindex)
{
if (kills[killer] == 1)
{
play_sound(killer, KILL_HEADSHOT)
check_sound = 1
}
show_hud(killer, KILL_HEADSHOT)
}
else if (wpnindex == CSW_KNIFE)
{
if (kills[killer] == 1)
{
play_sound(killer, KILL_KNIFE)
check_sound = 1
}
show_hud(killer, KILL_KNIFE)
}
else if (wpnindex == CSW_HEGRENADE)
{
if (kills[killer] == 1)
{
play_sound(killer, KILL_HEGRENADE)
check_sound = 1
}
show_hud(killer, KILL_HEGRENADE)
}
else
{
show_hud(killer, KILL_NONE)
}
// hud 2
if (g_firstkill)
{
g_firstkill = 0
show_hud(killer, KILL_FIRST)
if (!check_sound) play_sound(killer, KILL_1)
}
else
{
show_hud(killer, kills[killer])
if (!check_sound) play_sound(killer, kills[killer])
}
}
public bomb_defused(id)
{
show_hud(id, C4_DEFUSE)
play_sound(id, C4_DEFUSE)
}
public bomb_planted(id)
{
show_hud(id, C4_SET)
play_sound(id, C4_SET)
}
// #################### SHOW HUD ####################
show_hud(id, idhud)
{
if (!is_user_connected(id)) return;
new type_cvar = get_pcvar_num(cvar_type)
if (type_cvar == 1) show_spr(id, idhud)
else if (type_cvar == 2) show_msg(id, idhud)
}
play_sound(id, idhud)
{
if (!is_user_connected(id)) return;
new sound[64], team[32], sex[32], cs_team
if (nst_get_mod_runing()==NST_MOD_ZB3) cs_team = nst_get_user_team(id)
else cs_team = get_user_team(id)
if (cs_team==1) team = "T"
else team = "CT"
if (get_user_sex(id) == 2) sex = "woman"
else sex = "man"
format(sound, charsmax(sound), "%s", get_hud_data(idhud, HUD_SOUND))
format(sound, charsmax(sound), sound, sex, team)
PlaySound(id, sound)
}
show_msg(id, idhud)
{
new msg[64]
format(msg, charsmax(msg), "%s", get_hud_data(idhud, HUD_MSGTEXT))
set_hudmessage(0, 204, 0, -1.0, 0.65, 1, 0.02, 3.0, 0.3, 0.3, 2)
show_hudmessage(id, msg)
}
show_spr(id, idspr)
{
if (idspr >= KILL_NONE) hide_spr(id, 2)
else hide_spr(id, 1)
spr_action(id, idspr, 1)
if (idspr < KILL_NONE)
{
if (task_exists(id+TASK_HIDESPR)) remove_task(id+TASK_HIDESPR)
set_task(get_pcvar_float(cvar_time_show), "task_hidehud", id+TASK_HIDESPR)
}
}
public task_hidehud(taskid)
{
new id = ID_HIDESPR
hide_spr(id, 2)
hide_spr(id, 1)
}
hide_spr(id, idspr)
{
if (idspr == 1)
{
for (new i = KILL_1; i <= C4_SET; i++)
{
spr_action(id, i, 0)
}
}
else if (idspr == 2)
{
for (new i = KILL_NONE; i <= ONESHOT_3KILL; i++)
{
spr_action(id, i, 0)
}
}
}
spr_action(id, spr, run)
{
new sprname[64]
format(sprname, charsmax(sprname), "%s", get_hud_data(spr, HUD_SPRNAME))
message_begin(MSG_ONE,iconstatus,{0,0,0},id)
write_byte(run) // status (0=hide, 1=show, 2=flash)
write_string(sprname) // sprite name
message_end()
}
get_hud_data(idhud, type)
{
new value[64], sprname[33], sound[64], msgtext[32]
switch (idhud)
{
case KILL_1:
{
sprname = "kill_1"
sound = "vox/kill/%s/kill_1_%s"
msgtext = "1 KILL"
}
case KILL_2:
{
sprname = "kill_2"
sound = "vox/kill/%s/kill_2_%s"
msgtext = "2 KILL"
}
case KILL_3:
{
sprname = "kill_3"
sound = "vox/kill/%s/kill_3_%s"
msgtext = "3 KILL"
}
case KILL_4:
{
sprname = "kill_4"
sound = "vox/kill/%s/kill_4_%s"
msgtext = "4 KILL"
}
case KILL_5:
{
sprname = "kill_5"
sound = "vox/kill/%s/kill_5_%s"
msgtext = "5 KILL"
}
case KILL_6:
{
sprname = "kill_6"
sound = "vox/kill/%s/kill_6_%s"
msgtext = "6 KILL"
}
case KILL_7:
{
sprname = "kill_7"
sound = "vox/kill/%s/kill_7_%s"
msgtext = "7 KILL"
}
case KILL_8:
{
sprname = "kill_8"
sound = "vox/kill/%s/kill_8_%s"
msgtext = "8 KILL"
}
case KILL_FIRST:
{
sprname = "kill_first"
msgtext = "FIRST KILL"
}
case C4_DEFUSE:
{
sprname = "c4_defuse"
sound = "vox/kill/c4_defuse"
}
case C4_SET:
{
sprname = "c4_set"
sound = "vox/kill/c4_set"
}
case KILL_NONE:
{
sprname = "kill_none"
}
case KILL_HEGRENADE:
{
sprname = "kill_he"
sound = "vox/kill/%s/grenade_%s"
msgtext = "GRENADE KILL"
}
case KILL_HEADSHOT:
{
sprname = "kill_headshot"
sound = "vox/kill/%s/headshot_%s"
msgtext = "HEADSHOT"
}
case KILL_KNIFE:
{
sprname = "kill_knife"
sound = "vox/kill/%s/knife_%s"
msgtext = "KNIFE KILL"
}
case KILL_LAST:
{
sprname = "kill_last"
}
case KILL_REVENGE:
{
sprname = "kill_revenge"
sound = "vox/kill/%s/revenge_%s"
msgtext = "REVENGE"
}
case WALLSHOT:
{
sprname = "wall_shot"
msgtext = "WALLSHOOT"
}
case WALLSHOT_HEADSHOT:
{
sprname = "wall_shot_hs"
msgtext = "WALLSHOOT HEADSHOT"
}
case ONESHOT_2KILL:
{
sprname = "1shot_2kill"
msgtext = "ONE SHOT 2 KILL"
}
case ONESHOT_3KILL:
{
sprname = "1shot_3kill"
msgtext = "ONE SHOT MULTIKILL"
}
}
if (type==HUD_SOUND) format(value, charsmax(value), "%s", sound)
else if (type==HUD_MSGTEXT) format(value, charsmax(value), "%s", msgtext)
else if (type==HUD_SPRNAME) format(value, charsmax(value), "%s", sprname)
return value;
}
get_user_sex(id)
{
new mod_runing, sex
mod_runing = nst_get_mod_runing()
if ( (mod_runing == NST_MOD_ZB3 || mod_runing == NST_MOD_ZBU || mod_runing == NST_MOD_ZBS) && nst_zb_get_user_zombie(id) )
{
sex = nst_zb_get_user_sex(id)
}
else
{
sex = nst_get_user_sex(id)
}
return sex;
}
// Plays a sound on clients
PlaySound(id, const sound[])
{
if (equal(sound[strlen(sound)-4], ".mp3"))
client_cmd(id, "mp3 play ^"sound/%s^"", sound)
else
client_cmd(id, "spk ^"%s^"", sound)
}
bool:can_see_fm(entindex1, entindex2)
{
if ((!g_FM_Running) || !entindex1 || !entindex2)
return false
// new ent1, ent2
if (pev_valid(entindex1) && pev_valid(entindex1))
{
new flags = pev(entindex1, pev_flags)
if (flags & EF_NODRAW || flags & FL_NOTARGET)
{
return false
}
new Float:lookerOrig[3]
new Float:targetBaseOrig[3]
new Float:targetOrig[3]
new Float:temp[3]
pev(entindex1, pev_origin, lookerOrig)
pev(entindex1, pev_view_ofs, temp)
lookerOrig[0] += temp[0]
lookerOrig[1] += temp[1]
lookerOrig[2] += temp[2]
pev(entindex2, pev_origin, targetBaseOrig)
pev(entindex2, pev_view_ofs, temp)
targetOrig[0] = targetBaseOrig [0] + temp[0]
targetOrig[1] = targetBaseOrig [1] + temp[1]
targetOrig[2] = targetBaseOrig [2] + temp[2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the had of seen player
if (get_tr2(0, TraceResult:TR_InOpen) && get_tr2(0, TraceResult:TR_InWater))
{
return false
}
else
{
new Float:flFraction
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true
}
else
{
targetOrig[0] = targetBaseOrig [0]
targetOrig[1] = targetBaseOrig [1]
targetOrig[2] = targetBaseOrig [2]
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the body of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true
}
else
{
targetOrig[0] = targetBaseOrig [0]
targetOrig[1] = targetBaseOrig [1]
targetOrig[2] = targetBaseOrig [2] - 17.0
engfunc(EngFunc_TraceLine, lookerOrig, targetOrig, 0, entindex1, 0) // checks the legs of seen player
get_tr2(0, TraceResult:TR_flFraction, flFraction)
if (flFraction == 1.0 || (get_tr2(0, TraceResult:TR_pHit) == entindex2))
{
return true
}
}
}
}
}
return false
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/