Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#pragma semicolon 1
#define SetBit(%0,%1) ((%0) |= (1 << (%1)))
#define ClearBit(%0,%1) ((%0) &= ~(1 << (%1)))
#define IsSetBit(%0,%1) ((%0) & (1 << (%1)))
#define InvertBit(%0,%1) ((%0) ^= (1 << (%1)))
#define IsNotSetBit(%0,%1) (~(%0) & (1 << (%1)))
#define MsgId_CurWeapon 66
#define MsgId_SayText 76
#define m_bloodColor 89
#define MsgId_ScreenFade 98
#define jbe_is_user_valid(%0) (%0 && %0 <= g_iMaxPlayers)
#define TASK_AMBIENCE_SOUND 124567
#define TASK_Go_Shturm 785684
native jbe_register_day_mode(szLang[32], iBlock, iTime);
native jbe_get_user_team(id);
native jbe_set_user_model(id, const szModel[]);
new g_iDayModeShturm, bool:g_bDayModeStatus, g_iMaxPlayers, g_TimeGoShturm, g_iHudShow,
HamHook:g_iHamHookForwards[14];
new const g_szHamHookEntityBlock[][] =
{
"func_vehicle", // ??????????? ??????
"func_tracktrain", // ??????????? ?????
"func_tank", // ??????????? ?????
"game_player_hurt", // ??? ????????? ??????? ?????? ???????????
"func_recharge", // ?????????? ?????? ???????????
"func_healthcharger", // ?????????? ????????? ????????
"game_player_equip", // ?????? ??????
"player_weaponstrip", // ???????? ??? ??????
"trigger_hurt", // ??????? ?????? ???????????
"trigger_gravity", // ????????????? ?????? ???? ??????????
"armoury_entity", // ?????? ??????? ?? ?????, ??????, ????? ??? ???????
"weaponbox", // ?????? ??????????? ???????
"weapon_shield" // ???
};
public plugin_precache()
{
engfunc(EngFunc_PrecacheGeneric, "sound/jb_engine_restart/days_mode/president/ambience.mp3");
}
public plugin_init()
{
register_plugin("[JBE_DM] Ghosts", "1.1", "Freedo.m");
new i;
for(i = 0; i <= 7; i++) DisableHamForward(g_iHamHookForwards[i] = RegisterHam(Ham_Use, g_szHamHookEntityBlock[i], "HamHook_EntityBlock", 0));
for(i = 8; i <= 12; i++) DisableHamForward(g_iHamHookForwards[i] = RegisterHam(Ham_Touch, g_szHamHookEntityBlock[i], "HamHook_EntityBlock", 0));
DisableHamForward(g_iHamHookForwards[13] = RegisterHam(Ham_Killed, "player", "HamHook_Killed_Player_Post", 1));
register_clcmd("drop", "ClCmd_Drop");
g_iDayModeShturm = jbe_register_day_mode("JBE_DAY_MODE_SHTURM", 0, 213);
g_iMaxPlayers = get_maxplayers();
g_iHudShow = CreateHudSyncObj();
}
public HamHook_EntityBlock() return HAM_SUPERCEDE;
public HamHook_Killed_Player_Post(iVictim)
{
if(jbe_get_user_team(iVictim) == 2)
fm_set_user_rendering(iVictim, kRenderFxNone, 0.0, 0.0, 0.0, kRenderNormal, 0.0);
}
public ClCmd_Drop()
{
if(g_bDayModeStatus) return PLUGIN_HANDLED;
return PLUGIN_CONTINUE;
}
public jbe_day_mode_start(iDayMode, iAdmin)
{
if(iDayMode == g_iDayModeShturm)
{
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(!is_user_alive(i)) continue;
switch(jbe_get_user_team(i))
{
case 1:
{
fm_strip_user_weapons(i);
fm_give_item(i, "weapon_m4a1");
fm_set_user_bpammo(i, CSW_M4A1, 200);
fm_give_item(i, "weapon_ak47");
fm_set_user_bpammo(i, CSW_AK47, 200);
fm_give_item(i, "item_assaultsuit");
set_pev(i, pev_health, 120.0);
set_pev(i, pev_flags, pev(i, pev_flags) | FL_FROZEN);
set_pev(i, pev_takedamage, DAMAGE_NO);
UTIL_ScreenFade(i, 0, 0, 4, 0, 0, 0, 255);
}
case 2:
{
fm_strip_user_weapons(i);
fm_give_item(i, "weapon_m4a1");
fm_set_user_bpammo(i, CSW_M4A1, 200);
fm_give_item(i, "weapon_ak47");
fm_set_user_bpammo(i, CSW_AK47, 200);
fm_give_item(i, "item_assaultsuit");
set_pev(i, pev_health, 350.0);
set_pev(i, pev_maxspeed, 320.0);
}
}
}
client_cmd(0, "mp3 play sound/jb_engine_restart/days_mode/president/ambience.mp3");
for(new i; i < sizeof(g_iHamHookForwards); i++) EnableHamForward(g_iHamHookForwards[i]);
set_lights("d"),g_TimeGoShturm = 23;
freezetimeron();
g_bDayModeStatus = true;
}
}
public freezetimeron()
{
set_task(1.0, "jbe_go_shturm", TASK_Go_Shturm, _, _, "a",g_TimeGoShturm);
}
public jbe_go_shturm()
{
if(--g_TimeGoShturm)
{
set_hudmessage(160, 255, 50, -1.0, 0.16, 0, 0.0, 0.9, 0.1, 0.1, -1);
ShowSyncHudMsg(0, g_iHudShow, "Cuvari imate %d sekundi da se sakrijete!", g_TimeGoShturm);
}
else
{
remove_task(TASK_Go_Shturm);
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(!is_user_alive(i)) continue;
if(jbe_get_user_team(i) == 1)
{
UTIL_ScreenFade(i, 0, 0, 0, 0, 0, 0, 0, 1);
set_pev(i, pev_flags, pev(i, pev_flags) & ~FL_FROZEN);
set_pev(i, pev_takedamage, DAMAGE_YES);
}
}
set_hudmessage(0, 40, 230, -1.0, 0.16, 0, 0.0, 0.9, 0.1, 0.1, -1);
ShowSyncHudMsg(0, g_iHudShow, "Zatvorenici idu u napad!");
set_lights("d");
}
}
public jbe_day_mode_ended(iDayMode, iWinTeam)
{
if(iDayMode == g_iDayModeShturm)
{
for(new i; i < sizeof(g_iHamHookForwards); i++) DisableHamForward(g_iHamHookForwards[i]);
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(is_user_alive(i))
{
switch(jbe_get_user_team(i))
{
case 1:
{
if(iWinTeam) fm_strip_user_weapons(i, 1);
else ExecuteHamB(Ham_Killed, i, i, 0);
fm_set_user_rendering(i, kRenderFxNone, 0.0, 0.0, 0.0, kRenderNormal, 0.0);
}
case 2: fm_strip_user_weapons(i, 1);
}
}
}
set_lights("#OFF");
remove_task(TASK_Go_Shturm);
remove_task(TASK_AMBIENCE_SOUND);
client_cmd(0, "mp3 stop");
g_bDayModeStatus = false;
}
}
stock fm_give_item(id, const szItem[])
{
new iEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szItem));
if(!pev_valid(iEntity)) return 0;
new Float:fOrigin[3];
pev(id, pev_origin, fOrigin);
set_pev(iEntity, pev_origin, fOrigin);
set_pev(iEntity, pev_spawnflags, pev(iEntity, pev_spawnflags) | SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, iEntity);
new iSolid = pev(iEntity, pev_solid);
dllfunc(DLLFunc_Touch, iEntity, id);
if(pev(iEntity, pev_solid) == iSolid)
{
engfunc(EngFunc_RemoveEntity, iEntity);
return -1;
}
return iEntity;
}
stock fm_strip_user_weapons(id, iType = 0)
{
new iEntity; static iszWeaponStrip;
if(iszWeaponStrip || (iszWeaponStrip = engfunc(EngFunc_AllocString, "player_weaponstrip"))) iEntity = engfunc(EngFunc_CreateNamedEntity, iszWeaponStrip);
if(!pev_valid(iEntity)) return 0;
if(iType && get_user_weapon(id) != CSW_KNIFE)
{
engclient_cmd(id, "weapon_knife");
message_begin(MSG_ONE_UNRELIABLE, MsgId_CurWeapon, _, id);
write_byte(1);
write_byte(CSW_KNIFE);
write_byte(0);
message_end();
}
dllfunc(DLLFunc_Spawn, iEntity);
dllfunc(DLLFunc_Use, iEntity, id);
engfunc(EngFunc_RemoveEntity, iEntity);
return 1;
}
stock fm_set_user_rendering(id, iRenderFx, Float:flRed, Float:flGreen, Float:flBlue, iRenderMode, Float:flRenderAmt)
{
new Float:fRenderColor[3];
fRenderColor[0] = flRed;
fRenderColor[1] = flGreen;
fRenderColor[2] = flBlue;
set_pev(id, pev_renderfx, iRenderFx);
set_pev(id, pev_rendercolor, fRenderColor);
set_pev(id, pev_rendermode, iRenderMode);
set_pev(id, pev_renderamt, flRenderAmt);
}
stock fm_set_user_bpammo(id, iWeapon, iAmount)
{
new iOffset;
switch(iWeapon)
{
case CSW_AWP: iOffset = 377; // ammo_338magnum
case CSW_SCOUT, CSW_AK47, CSW_G3SG1: iOffset = 378; // ammo_762nato
case CSW_M249: iOffset = 379; // ammo_556natobox
case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALI, CSW_SG552: iOffset = 380; // ammo_556nato
case CSW_M3, CSW_XM1014: iOffset = 381; // ammo_buckshot
case CSW_USP, CSW_UMP45, CSW_MAC10: iOffset = 382; // ammo_45acp
case CSW_FIVESEVEN, CSW_P90: iOffset = 383; // ammo_57mm
case CSW_DEAGLE: iOffset = 384; // ammo_50ae
case CSW_P228: iOffset = 385; // ammo_357sig
case CSW_GLOCK18, CSW_MP5NAVY, CSW_TMP, CSW_ELITE: iOffset = 386; // ammo_9mm
case CSW_FLASHBANG: iOffset = 387;
case CSW_HEGRENADE: iOffset = 388;
case CSW_SMOKEGRENADE: iOffset = 389;
case CSW_C4: iOffset = 390;
default: return;
}
set_pdata_int(id, iOffset, iAmount);
}
stock UTIL_ScreenFade(pPlayer, iDuration, iHoldTime, iFlags, iRed, iGreen, iBlue, iAlpha, iReliable = 0)
{
switch(pPlayer)
{
case 0:
{
message_begin(iReliable ? MSG_ALL : MSG_BROADCAST, MsgId_ScreenFade);
write_short(iDuration);
write_short(iHoldTime);
write_short(iFlags);
write_byte(iRed);
write_byte(iGreen);
write_byte(iBlue);
write_byte(iAlpha);
message_end();
}
default:
{
engfunc(EngFunc_MessageBegin, iReliable ? MSG_ONE : MSG_ONE_UNRELIABLE, MsgId_ScreenFade, {0.0, 0.0, 0.0}, pPlayer);
write_short(iDuration);
write_short(iHoldTime);
write_short(iFlags);
write_byte(iRed);
write_byte(iGreen);
write_byte(iBlue);
write_byte(iAlpha);
message_end();
}
}
}
stock UTIL_SayText(id, const szMessage[], any:...)
{
new szBuffer[190];
if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
else copy(szBuffer, charsmax(szBuffer), szMessage);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
switch(id)
{
case 0:
{
for(new i = 1; i <= g_iMaxPlayers; i++)
{
if(!is_user_connected(i)) continue;
message_begin(MSG_ONE_UNRELIABLE, MsgId_SayText, _, i);
write_byte(i);
write_string(szBuffer);
message_end();
}
}
default:
{
message_begin(MSG_ONE_UNRELIABLE, MsgId_SayText, _, id);
write_byte(id);
write_string(szBuffer);
message_end();
}
}
}