#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <hamsandwich>
#include <xs>
#include <fun>
#include <round_terminator>
#define PLUGIN "Zombie Swarm"
#define VERSION "3.0 B7e"
#define AUTHOR "Mini_Midget"
/*================================================================================
[Changeable Defines]
=================================================================================*/
#define SURVIVOR_BACKSPEED 0.9
#define SURVIVOR_PUNCHANGLE 55.0
#define ZOMBIE_SLASH_MIN 12.0
#define ZOMBIE_SLASH_MAX 20.0
#define ZOMBIE_STAB_MIN 45.0
#define ZOMBIE_STAB_MAX 65.0
#define ZOMBIE_RADIO_SPEED 70
/*================================================================================
[CS Offesets]
=================================================================================*/
//#define OFFSET_ARMOR 112
#define DMG_HEGRENADE (1<<24)
#define STATUSICON_BOMB (1<<1)
/*================================================================================
[Hide HUD]
=================================================================================*/
#define HIDE_HUD (1<<0) //crosshair, ammo, weapons list
#define HIDE_FLASH (1<<1) //flashlight, +
#define HIDE_HP_HUD (1<<3) //Health, armour and radar
#define HIDE_MONEY (1<<5) //money, +
#define HIDE_NONE (1<<7) //+
/* Symbol + mean that an additional crosshair will be drawn.
That crosshair looks exactly like the one from Crosshair message.*/
/*================================================================================
[Tasks Offsets]
=================================================================================*/
#define TASKID_STRIP 2046
#define TASKID_REFRESH 4573
#define TASKID_SHOWHUD 2931
#define TASKID_MODEL 3810
#define TASKID_NVG 8382
#define TASKID_PISTOL 2347
#define TASKID_ROUND 3769
/*================================================================================
[Classnames]
=================================================================================*/
#define CLASS_WEATHER "zswarm_weather"
#define CLASS_AMBIENCE "zswarm_ambience"
#define CLASS_FLESH "flesh throw"
new g_fw_spawn
new const g_Map_Entities[][] =
{
"info_map_parameters",
"func_bomb_target",
"info_bomb_target",
"hostage_entity",
"monster_scientist",
"func_hostage_rescue",
"info_hostage_rescue",
"info_vip_start",
"func_vip_safetyzone",
"func_escapezone"
}
/*================================================================================
[Sounds/Waves]
=================================================================================*/
new const g_sound_thunder1[] = "ambience/thunder_clap.wav"
new const g_sound_thunder2[] = "de_torn/torn_thndrstrike.wav"
//new const g_sound_ambience[] = "zombie_swarm/ambience.wav"
new const g_sound_roundstart[][] =
{
"zombie_swarm/GermM1a.wav",
"zombie_swarm/BoomerBacteria.wav",
"zombie_swarm/HunterBacteria.wav",
"zombie_swarm/HunterBacteriaS.wav"
}
new const g_sound_zombiewin[] = "zombie_swarm/LeftForDeathHit.wav"
new const g_sound_humanwin[] = "zombie_swarm/themonsterswithout.wav"
new const g_sound_miss[][] =
{
"zombie/claw_miss1.wav",
"zombie/claw_miss2.wav"
}
new const g_sound_hit[][] =
{
"zombie/claw_strike1.wav",
"zombie/claw_strike2.wav",
"zombie/claw_strike3.wav"
}
new const g_sound_pain[][] =
{
"aslave/slv_pain1.wav",
"aslave/slv_pain2.wav",
"headcrab/hc_pain1.wav",
"headcrab/hc_pain2.wav",
"headcrab/hc_pain3.wav",
"zombie/zo_pain1.wav",
"zombie/zo_pain2.wav"
}
new const g_sound_die[][] =
{
"aslave/slv_die1.wav",
"aslave/slv_die2.wav",
"bullchicken/bc_die1.wav",
"bullchicken/bc_die3.wav",
"headcrab/hc_die1.wav",
"headcrab/hc_die2.wav"
}
new const g_SendAudio_Radio[][] =
{
"%!MRAD_COVERME",
"%!MRAD_TAKEPOINT",
"%!MRAD_POSITION",
"%!MRAD_REGROUP",
"%!MRAD_FOLLOWME",
"%!MRAD_HITASSIST",
"%!MRAD_GO", //Conflicts with round start audio
"%!MRAD_FALLBACK",
"%!MRAD_STICKTOG",
"%!MRAD_GETINPOS",
"%!MRAD_STORMFRONT",
"%!MRAD_REPORTIN",
"%!MRAD_AFFIRM",
"%!MRAD_ROGER",
"%!MRAD_ENEMYSPOT",
"%!MRAD_BACKUP",
"%!MRAD_CLEAR",
"%!MRAD_INPOS",
"%!MRAD_REPRTINGIN",
"%!MRAD_BLOW",
"%!MRAD_NEGATIVE",
"%!MRAD_ENEMYDOWN"
}
new const g_SendAudio_RoundStart[][] =
{
// "%!MRAD_GO", //Conflicts with client radio command
"%!MRAD_LETSGO",
"%!MRAD_MOVEOUT",
"%!MRAD_LOCKNLOAD"
}
/*================================================================================
[Models]
=================================================================================*/
new const ZOMBIE_PLAYER_MODEL[] = "zombie_swarm";
new const ZOMBIE_MODEL[] = "models/player/zombie_swarm/zombie_swarm.mdl";
new const ZOMBIE_CLAWS[] = "models/v_knife_zombie.mdl";
new const ZOMBIE_FLESHTHROW[] = "models/hgibs.mdl"; //11 Submodels
new mdl_gib_flesh, mdl_gib_head, mdl_gib_legbone
new mdl_gib_lung, mdl_gib_meat, mdl_gib_spine
new spr_blood_drop, spr_blood_spray
/*================================================================================
[Global Variables]
=================================================================================*/
new mod_name[32] = "Zombie Swarm";
new player_model[33][32];
new Float: g_counter;
new bool: g_zombie[33];
new bool: g_infreezetime;
new bool: g_model[33];
new Float: g_LastLeap[33];
new Float: g_LastFthrow[33];
new g_hitgroups[33];
new bool: g_WeapRecieved[33];
new bool: g_GivePistol[33];
new bool: g_RoundStarted;
new players_weapon[33][31];
new CsArmorType:armortype[33];
new armoramount[33];
new Float:display_damage[33];
stock const WeaponNames[31][] = {
"",
"weapon_p228",
"weapon_shield",
"weapon_scout",
"weapon_hegrenade",
"weapon_xm1014",
"",
"weapon_mac10",
"weapon_aug",
"weapon_smokegrenade",
"weapon_elite",
"weapon_fiveseven",
"weapon_ump45",
"weapon_sg550",
"weapon_galil",
"weapon_famas",
"weapon_usp",
"weapon_glock18",
"weapon_awp",
"weapon_mp5navy",
"weapon_m249",
"weapon_m3",
"weapon_m4a1",
"weapon_tmp",
"weapon_g3sg1",
"weapon_flashbang",
"weapon_deagle",
"weapon_sg552",
"weapon_ak47",
"",
"weapon_p90"
}
new bool: g_light_flashing
new g_light_style[3][2] = { "b", "a", "m" }
new g_light_stylenum
new g_light_counter
new g_light_num
new g_maxplayers
new g_roundcounter
new msg_hideweapon /*, msg_statusicon*/
new g_hudsync
/*================================================================================
[CVARS]
=================================================================================*/
new cvar_switch, cvar_health, cvar_armour, cvar_gravity, cvar_footsteps, cvar_speed, cvar_skyname, cvar_lights,
cvar_autonvg, cvar_blocknvg, cvar_leap, cvar_leapcd, cvar_lforce, cvar_lheight, cvar_fleshthrow,
cvar_fforce, cvar_fleshdmg, cvar_fselfdmg, cvar_dmg_hp, cvar_dmg_ap, cvar_crosshair,
cvar_rounds, cvar_teams, cvar_breakents
/*================================================================================
[Precache]
=================================================================================*/
public plugin_precache()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar(PLUGIN, VERSION, FCVAR_SPONLY|FCVAR_SERVER)
set_cvar_string(PLUGIN, VERSION)
register_dictionary("zombie_swarm.txt")
register_concmd("zombie_swarm", "concmd_zombieswarm", ADMIN_BAN, "<0/1> Disable/Enable Zombie Swarm")
cvar_switch = register_cvar("zswarm_enable", "1")
if (!get_pcvar_num(cvar_switch)) return
precache_model(ZOMBIE_CLAWS);
// precache_model(ZOMBIE_CLAWS);
precache_model(ZOMBIE_MODEL);
precache_sound(g_sound_thunder1);
precache_sound(g_sound_thunder2);
precache_sound(g_sound_zombiewin);
precache_sound(g_sound_humanwin);
precache_model(ZOMBIE_FLESHTHROW);
mdl_gib_flesh = precache_model("models/Fleshgibs.mdl")
mdl_gib_meat = precache_model("models/GIB_B_Gib.mdl")
mdl_gib_head = precache_model("models/GIB_Skull.mdl")
mdl_gib_spine = precache_model("models/GIB_B_Bone.mdl")
mdl_gib_lung = precache_model("models/GIB_Lung.mdl")
mdl_gib_legbone = precache_model("models/GIB_Legbone.mdl")
spr_blood_drop = precache_model("sprites/blood.spr")
spr_blood_spray = precache_model("sprites/bloodspray.spr")
//engfunc(EngFunc_PrecacheSound, g_sound_ambience);
new iNum
for (iNum = 0; iNum < sizeof g_sound_miss; iNum++)
precache_sound(g_sound_miss[iNum])
for (iNum = 0; iNum < sizeof g_sound_hit; iNum++)
precache_sound(g_sound_hit[iNum])
for (iNum = 0; iNum < sizeof g_sound_pain; iNum++)
precache_sound(g_sound_pain[iNum])
for (iNum = 0; iNum < sizeof g_sound_die; iNum++)
precache_sound(g_sound_die[iNum])
for (iNum = 1; iNum < sizeof g_sound_roundstart; iNum++)
precache_sound(g_sound_roundstart[iNum])
new iEntity = create_entity(g_Map_Entities[0]); //info_map_parameters
DispatchKeyValue( iEntity, "buying", "1" ); //0 - Anyone can buy, 1 - T's can't buy, 2 - CT's can't buy, 3 - No one can buy
DispatchSpawn( iEntity );
g_fw_spawn = register_forward(FM_Spawn, "fw_spawn")
}
/*================================================================================
[Plugin start]
=================================================================================*/
public plugin_init()
{
if (!get_pcvar_num(cvar_switch)) return
cvar_health = register_cvar("zswarm_health", "1500")
cvar_armour = register_cvar("zswarm_armour", "750")
cvar_gravity = register_cvar("zswarm_gravity", "700")
cvar_speed = register_cvar("zswarm_speed", "350")
cvar_footsteps = register_cvar("zswarm_footsteps", "1")
cvar_lights = register_cvar("zswarm_light", "1")
cvar_skyname = register_cvar("zswarm_skyname", "space")
cvar_rounds = register_cvar("zswarm_rounds", "5")
cvar_teams = register_cvar("zswarm_blockteams", "1")
cvar_autonvg = register_cvar("zswarm_autonvg", "1")
cvar_blocknvg = register_cvar("zswarm_blocknvg","1")
cvar_leap = register_cvar("zswarm_leap", "1")
cvar_leapcd = register_cvar("zswarm_cooldown","5.0")
cvar_lforce = register_cvar("zswarm_lforce", "525")
cvar_lheight = register_cvar("zswarm_lheight", "260")
cvar_fleshthrow = register_cvar("zswarm_fleshthrow", "1")
cvar_fforce = register_cvar("zswarm_fforce", "1500")
cvar_fleshdmg = register_cvar("zswarm_fleshdmg","20")
cvar_fselfdmg = register_cvar("zswarm_fselfdmg","100")
cvar_breakents = register_cvar("zswarm_breakents", "1")
cvar_crosshair = register_cvar("zswarm_crosshair", "1")
cvar_dmg_hp = register_cvar("zswarm_dmg_hp_percent", "50")
cvar_dmg_ap = register_cvar("zswarm_dmg_ap_percent", "35")
RegisterHam(Ham_Spawn, "player", "bacon_spawn", 1)
RegisterHam(Ham_TakeDamage,"player", "bacon_takedamage")
RegisterHam(Ham_TakeDamage,"player", "bacon_takedamage_post" , 1 )
RegisterHam(Ham_Killed, "player", "bacon_killed_post", 1)
RegisterHam(Ham_Touch, "weaponbox", "bacon_touch")
RegisterHam(Ham_Touch, "armoury_entity", "bacon_touch")
RegisterHam(Ham_Touch, "weapon_shield", "bacon_touch")
register_logevent("Round_Start", 2, "1=Round_Start")
register_logevent("Round_End" , 2, "1=Round_End")
register_event("TextMsg", "Round_End", "a", "2&#Game_C", "2&#Game_w" );
register_event("HLTV", "event_new_round", "a", "1=0", "2=0")
register_event("CurWeapon", "event_cur_weapon", "be")
register_message(get_user_msgid("ScoreAttrib"), "message_ScoreAttrib")
register_message(get_user_msgid("StatusIcon"), "message_StatusIcon")
register_message(get_user_msgid("TextMsg"), "message_TextMessage")
register_message(get_user_msgid("SendAudio"), "message_SendAudio")
register_message(get_user_msgid("Health"), "message_Health")
register_message(get_user_msgid("RoundTime"), "message_RoundTimer");
register_clcmd("nightvision", "clcmd_nightvision")
register_clcmd("chooseteam", "clcmd_teams")
new iEnt = create_entity("ambient_generic");
if(iEnt)
{
call_think(iEnt);
entity_set_string(iEnt, EV_SZ_classname, CLASS_WEATHER);
DispatchKeyValue(iEnt, "message", g_sound_thunder1);
DispatchKeyValue(iEnt, "targetname", "boom");
DispatchKeyValue(iEnt, "pitchstart", "100");
DispatchKeyValue(iEnt, "pitch", "100") ;
DispatchKeyValue(iEnt, "health", "10");
DispatchKeyValue(iEnt, "spawnflags", "49");
DispatchSpawn(iEnt);
set_pev(iEnt, pev_nextthink, get_gametime() + 2.0);
}
if(g_fw_spawn > 0)
unregister_forward(FM_Spawn, g_fw_spawn)
format(mod_name, 31, "%s %s", PLUGIN, VERSION)
register_forward(FM_GetGameDescription, "fw_GameDescription")
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink", 1)
register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
register_forward(FM_ClientUserInfoChanged, "fw_ClientUserInfoChanged")
register_forward(FM_EmitSound, "fw_EmitSound")
register_forward(FM_Touch, "fw_Touch")
register_forward(FM_Think, "fw_Think_lights", 1)
register_forward(FM_TraceLine, "fw_Traceline", 1)
msg_hideweapon = get_user_msgid("HideWeapon")
//msg_statusicon = get_user_msgid("StatusIcon")
// set_msg_block(get_user_msgid("ClCorpse"), BLOCK_SET)
g_hudsync = CreateHudSyncObj()
g_maxplayers = get_maxplayers()
new skyname[32]
get_pcvar_string(cvar_skyname, skyname, 31)
set_cvar_string("sv_skyname", skyname)
set_cvar_num("sv_skycolor_r", 0)
set_cvar_num("sv_skycolor_g", 0)
set_cvar_num("sv_skycolor_b", 0)
server_cmd("sv_maxspeed 2000")
}
public client_putinserver(id)
{
g_zombie[id] = false;
}
public client_impulse(id, impulse)
{
if(g_zombie[id] && impulse == 100)
return PLUGIN_HANDLED_MAIN
return PLUGIN_CONTINUE
}
public fw_GameDescription()
{
forward_return(FMV_STRING, mod_name)
return FMRES_SUPERCEDE
}
public concmd_zombieswarm(id, level, cid)
{
if (!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
new sz_arg[8]
read_argv(1, sz_arg, 7)
if ( equali(sz_arg, "1") || equali(sz_arg, "on") || equali(sz_arg, "enable") )
{
set_task(5.0, "Task_Restart")
set_pcvar_num(cvar_switch, 1)
set_hudmessage(255, 255, 255, -1.0, 0.25, 0, 1.0, 5.0, 0.1, 0.2, -1)
show_hudmessage(0, "%L", LANG_PLAYER, "PLUGIN_HON_MSG", PLUGIN)
console_print(0, "%L", LANG_PLAYER, "PLUGIN_TON_MSG", PLUGIN)
for(new i = 1; i < 6; i++)
client_print(0, print_chat, "%L", LANG_PLAYER, "PLUGIN_TON_MSG", PLUGIN)
return PLUGIN_HANDLED
}
else if ( equali(sz_arg, "0") || equali(sz_arg, "off") || equali(sz_arg, "disable") )
{
set_task(5.0, "Task_Restart")
set_pcvar_num(cvar_switch, 0)
set_hudmessage(255, 255, 255, -1.0, 0.25, 0, 1.0, 5.0, 0.1, 0.2, -1)
show_hudmessage(0, "%L", LANG_PLAYER, "PLUGIN_HOFF_MSG", PLUGIN)
console_print(0, "%L", LANG_PLAYER, "PLUGIN_TOFF_MSG", PLUGIN)
for(new i = 1; i < 6; i++)
client_print(0, print_chat, "%L", LANG_PLAYER, "PLUGIN_TOFF_MSG", PLUGIN)
return PLUGIN_HANDLED
}
console_print(id, "Invalid argument!")
return PLUGIN_HANDLED
}
public bacon_spawn(id)
{
if (!is_user_alive(id))
return
static CsTeams: team ; team = cs_get_user_team(id)
if (team == CS_TEAM_CT) //Terr
{
new health, Float:gravity, armour, footsteps
health = get_pcvar_num(cvar_health)
gravity = get_pcvar_float(cvar_gravity) / 800
armour = get_pcvar_num(cvar_armour)
footsteps = get_pcvar_num(cvar_footsteps)
g_zombie[id] = true
if(!task_exists(TASKID_STRIP + id))
set_task(0.2, "Task_Strip", TASKID_STRIP + id)
set_pev(id, pev_max_health, float(health));
set_user_health(id, health);
cs_set_user_armor(id, armour, CS_ARMOR_VESTHELM);
set_user_gravity(id, gravity);
set_user_footsteps(id, footsteps);
set_user_rendering(id);
if (!cs_get_user_nvg(id))
cs_set_user_nvg(id);
if (get_pcvar_num(cvar_autonvg))
set_task(0.2, "Task_NVG", TASKID_NVG + id);
copy(player_model[id], 31, ZOMBIE_PLAYER_MODEL);
new currentmodel[32];
fm_get_user_model(id, currentmodel, charsmax(currentmodel) );
if(!equal(currentmodel, player_model[id]))
{
set_task(0.5 + g_counter, "Task_Model", id + TASKID_MODEL);
g_counter += 0.2;
}
new rand_num = random_num(0, 1);
if (get_pcvar_num(cvar_leap) && (rand_num == 0))
client_print(id, print_chat, "%L", LANG_PLAYER, "LEAP_MSG", get_pcvar_num(cvar_leapcd));
else if (get_pcvar_num(cvar_fleshthrow) && (rand_num == 1))
client_print(id, print_chat, "%L", LANG_PLAYER, "FLESH_MSG", get_pcvar_num(cvar_fleshdmg), get_pcvar_num(cvar_fselfdmg));
if(!task_exists(TASKID_SHOWHUD + id))
set_task(0.2, "Task_ShowHUD", TASKID_SHOWHUD + id);
}
else if (team == CS_TEAM_T) // CT
{
set_pev(id, pev_max_health, 100.0);
g_zombie[id] = false;
fm_reset_user_model(id);
set_user_footsteps(id, 0);
set_user_rendering(id);
}
}
//Credits to Bugsy!!!
public bacon_takedamage(victim, inflictor, attacker, Float:damage, damagetype)
{
if ( damagetype & DMG_GENERIC || /*victim == attacker ||*/ !is_user_alive(victim) || !is_user_connected( attacker ) )
return HAM_IGNORED;
new CsArmorType: ArmorType, iArmor = cs_get_user_armor( victim , ArmorType );
new iDmgHP = floatround( damage * (get_pcvar_float(cvar_dmg_hp) / 100.0) );
new iDmgArmor = floatround( damage * (get_pcvar_float(cvar_dmg_ap) / 100.0) ); //or 0.35
new iHealth = get_user_health( victim );
new maxArmour = get_pcvar_num(cvar_armour);
if ( ((iHealth - iDmgHP) > 0) && (g_zombie[victim]) && (iArmor) )
{
ExecuteHam( Ham_TakeDamage , victim , inflictor , attacker , 0.0 , DMG_BULLET | DMG_NEVERGIB );
set_user_health( victim , iHealth - iDmgHP );
cs_set_user_armor( victim , clamp( iArmor - iDmgArmor , 0 , maxArmour), ArmorType );
display_damage[ victim ] = float( iDmgHP );
// *** for testing ***
// client_print( iAttacker , print_chat , "Adjusted Damage = %d" , iDmgHP );
return HAM_SUPERCEDE;
}
new weapon = get_user_weapon(attacker);
if( (weapon == CSW_KNIFE) && (!g_zombie[victim]) )
{
new button = get_user_button(attacker);
if ( button & IN_ATTACK)
damage = random_float(ZOMBIE_SLASH_MIN, ZOMBIE_SLASH_MAX);
else if ( button & IN_ATTACK2)
damage = random_float(ZOMBIE_STAB_MIN, ZOMBIE_STAB_MAX);
if(g_hitgroups[victim] == HIT_HEAD)
damage = damage * 1.5;
SetHamParamFloat(4, damage);
return HAM_HANDLED;
}
return HAM_IGNORED;
}
//Credits to Bugsy!!!
public bacon_takedamage_post(victim, inflictor, attacker, Float:damage, damagetype)
{
if ( display_damage[victim])
{
set_pev(victim, pev_dmg_take, display_damage[victim]);
display_damage[victim] = 0.0;
}
else if( is_user_alive(victim) || is_user_connected(attacker))
{
if(!g_zombie[victim])
{
if(damage >= SURVIVOR_PUNCHANGLE)
{
new Float: Angle[3];
for(new i = 0 ; i < 3 ; i++)
Angle = random_float(-45.0, 45.0);
set_pev(victim, pev_punchangle, Angle);
}
}
}
}
public bacon_killed_post(id, iKiller)
{
if(g_zombie[id])
{
static Victim_Origin[3]
get_user_origin(id, Victim_Origin);
// entity_set_int(id, EV_INT_effects, entity_get_int(id, EV_INT_effects) | EF_NODRAW);
set_user_rendering(id, kRenderFxGlowShell, 0, 0 , 0, kRenderTransAlpha, 0)
//Credits to JTP10181 for his amx_gore_ultimate!!!
new flesh[2]
flesh[0] = mdl_gib_flesh
flesh[1] = mdl_gib_meat
new gibtime = 100 //10 seconds
// Gib explosions
// Head
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(Victim_Origin[0])
write_coord(Victim_Origin[1])
write_coord(Victim_Origin[2] + 40)
write_coord(random_num(0, 80))
write_coord(random_num(0, 80))
write_coord(random_num(80, 200))
write_angle(random_num(0, 360))
write_short(mdl_gib_head)
write_byte(0) // bounce
write_byte(gibtime) // life
message_end()
// Parts
for(new i = 0; i < 4; i++)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(Victim_Origin[0])
write_coord(Victim_Origin[1])
write_coord(Victim_Origin[2])
write_coord(random_num(0,80))
write_coord(random_num(0,80))
write_coord(random_num(80, 200))
write_angle(random_num(0,360))
write_short(flesh[random_num(0,1)])
write_byte(0) // bounce
write_byte(gibtime) // life
message_end()
}
// Spine
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(Victim_Origin[0])
write_coord(Victim_Origin[1])
write_coord(Victim_Origin[2]+30)
write_coord(random_num(0,80))
write_coord(random_num(0,80))
write_coord(random_num(80, 200))
write_angle(random_num(0,360))
write_short(mdl_gib_spine)
write_byte(0) // bounce
write_byte(gibtime) // life
message_end()
// Lung
for(new i = 0; i <= 1; i++)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(Victim_Origin[0])
write_coord(Victim_Origin[1])
write_coord(Victim_Origin[2]+10)
write_coord(random_num(0,80))
write_coord(random_num(0,80))
write_coord(random_num(80, 200))
write_angle(random_num(0,360))
write_short(mdl_gib_lung)
write_byte(0) // bounce
write_byte(gibtime) // life
message_end()
}
//Legs
for(new i = 0; i <= 1; i++)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_MODEL)
write_coord(Victim_Origin[0])
write_coord(Victim_Origin[1])
write_coord(Victim_Origin[2]-10)
write_coord(random_num(0,80))
write_coord(random_num(0,80))
write_coord(random_num(80, 200))
write_angle(random_num(0,360))
write_short(mdl_gib_legbone)
write_byte(0) // bounce
write_byte(gibtime) // life
message_end()
}
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(Victim_Origin[0])
write_coord(Victim_Origin[1])
write_coord(Victim_Origin[2]+20)
write_short(spr_blood_spray)
write_short(spr_blood_drop)
write_byte(247) // color index
write_byte(20) // size
message_end()
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(Victim_Origin[0] + random_num(-50,50))
write_coord(Victim_Origin[1] + random_num(-50,50))
write_coord(Victim_Origin[2] - 36)
write_byte(random_num(204, 205)) // index
message_end()
for(new i = 0 ; i < 8 ; i++)
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(Victim_Origin[0] + random_num(-100,100))
write_coord(Victim_Origin[1] + random_num(-100,100))
write_coord(Victim_Origin[2] - 36)
write_byte(random_num(190, 197)) // index
message_end()
}
}
}
public event_new_round()
{
g_infreezetime = true
for(new i = 1 ; i <= g_maxplayers; i++)
{
if(g_WeapRecieved)
give_weapons(i)
else if (g_GivePistol)
set_task(0.1, "Task_Give_Pistol", TASKID_PISTOL + i);
set_task(0.2, "Task_Refresh", TASKID_REFRESH + i)
}
g_roundcounter++;
new rounds = get_pcvar_num(cvar_rounds);
if(rounds > 0)
client_print(0, print_chat, "%L", LANG_PLAYER, "ROUND_COUNTER", g_roundcounter, rounds);
}
public Round_Start()
{
g_RoundStarted = true;
g_infreezetime = false;
}
public Round_End()
{
remove_task(TASKID_ROUND);
g_counter = 0.0
new rounds = get_pcvar_num(cvar_rounds)
if(rounds > 0)
{
if ( g_roundcounter >= rounds )
{
g_roundcounter = 0
client_print(0, print_chat, "%L", LANG_PLAYER, "ROUND_CHANGE")
for(new i = 1 ; i <= g_maxplayers; i++)
{
if (!is_user_connected(i))
continue;
switch(cs_get_user_team(i))
{
case CS_TEAM_UNASSIGNED, CS_TEAM_SPECTATOR:
continue;
case CS_TEAM_CT:
{
if(is_user_alive(i))
{
if(!g_WeapRecieved)
g_GivePistol = true;
}
else
{
if(g_WeapRecieved)
{
g_WeapRecieved = false;
}
}
cs_set_user_team(i, CS_TEAM_CT)
g_zombie = true;
}
case CS_TEAM_T:
{
if(is_user_alive(i))
{
g_WeapRecieved = true;
get_weapons(i);
}
else
{
g_WeapRecieved = false;
}
cs_set_user_team(i, CS_TEAM_T)
g_zombie[i] = false;
}
}
}
}
}
}
public get_weapons(id)
{
arrayset(players_weapon[id], 0, 31)
if(is_user_alive(id))
{
armoramount[id] = cs_get_user_armor(id, armortype[id])
for( new i = 1 ; i <= 30 ; i++)
{
if(i != 2 && i != CSW_C4 && i != CSW_KNIFE)
{
if(user_has_weapon(id, i))
{
players_weapon[id][i] = cs_get_user_bpammo(id, i)
if(!players_weapon[id][i])
players_weapon[id][i] = 1
}
}
}
}
}
public give_weapons(id)
{
if(is_user_alive(id) && !g_zombie[id])
{
cs_set_user_armor(id, armoramount[id], armortype[id])
strip_user_weapons(id)
for( new i = 1 ; i <= 30 ; i++)
{
if(/* i != 2 && */i != CSW_C4 && i != CSW_KNIFE)
{
if(players_weapon[id][i])
{
give_item(id, WeaponNames[i])
cs_set_user_bpammo(id, i, players_weapon[id][i])
}
}
}
give_item(id, "weapon_knife")
g_WeapRecieved[id] = false;
}
}
public Task_Give_Pistol(task)
{
new id = task - TASKID_PISTOL;
if(is_user_alive(id))
{
strip_user_weapons(id);
give_item(id, "weapon_knife");
give_item(id, "weapon_usp");
give_item(id, "ammo_45acp");
give_item(id, "ammo_45acp");
cs_set_user_armor(id, 0, CS_ARMOR_NONE);
g_GivePistol[id] = false;
}
}
public event_cur_weapon(id)
{
if(!is_user_alive(id))
return PLUGIN_HANDLED
if (g_zombie[id])
{
new weapon = read_data(2)
if (weapon != CSW_KNIFE)
{
engclient_cmd(id, "weapon_knife")
set_pev(id, pev_viewmodel2, ZOMBIE_CLAWS)
set_pev(id, pev_weaponmodel2, "")
}
message_begin(MSG_ONE_UNRELIABLE, msg_hideweapon, _ , id)
write_byte(HIDE_HUD | HIDE_FLASH | HIDE_HP_HUD | HIDE_MONEY)
message_end()
}
else
{
if (get_pcvar_num(cvar_crosshair))
{
message_begin(MSG_ONE_UNRELIABLE, msg_hideweapon, _ , id)
write_byte(HIDE_NONE)
message_end()
}
}
return PLUGIN_CONTINUE
}
public message_ScoreAttrib(msg_id, msg_dest, id)
{
new attrib = get_msg_arg_int(2)
if(attrib == STATUSICON_BOMB)
set_msg_arg_int(2, ARG_BYTE, 0)
}
public message_StatusIcon(msg_id, msg_dest, id)
{
if(!is_user_connected(id) || !g_zombie[id])
return PLUGIN_CONTINUE;
new icon[4]; get_msg_arg_string(2, icon, charsmax(icon) );
if(equal(icon, "buy"))
return PLUGIN_HANDLED;
else if (equal(icon, "c4"))
{
engclient_cmd(id, "drop", "weapon_c4");
set_task(0.1, "Task_C4");
return PLUGIN_HANDLED;
}
return PLUGIN_CONTINUE;
}
public message_TextMessage(msg_id, msg_dest, id)
{
if(get_msg_arg_int(1) != 4)
return PLUGIN_CONTINUE
new text_msg[25], win_msg[32]
get_msg_arg_string(2, text_msg, charsmax(text_msg) )
if(equal(text_msg[1], "Game_bomb_drop") || equal(text_msg[1], "Terrorist_cant_buy"))
return PLUGIN_HANDLED
else if(equal(text_msg[1], "Terrorists_Win"))
{
formatex(win_msg, charsmax(win_msg), "%L", LANG_SERVER, "WIN_ZOMBIE")
set_msg_arg_string(2, win_msg)
}
else if(equal(text_msg[1], "Target_Saved") || equal(text_msg[1], "CTs_Win"))
{
formatex(win_msg, charsmax(win_msg) , "%L", LANG_SERVER, "WIN_HUMAN")
set_msg_arg_string(2, win_msg)
}
return PLUGIN_CONTINUE
}
public message_SendAudio(msg_id, msg_dest, id)
{
new AudioCode[22];
get_msg_arg_string(2, AudioCode, charsmax(AudioCode) )
for(new i = 0 ; i < sizeof g_SendAudio_Radio ; i++)
{
if(g_zombie[id])
{
if(equal(AudioCode, g_SendAudio_Radio[i]))
set_msg_arg_int(3, ARG_SHORT, ZOMBIE_RADIO_SPEED)
}
}
for(new i = 0 ; i < sizeof g_SendAudio_RoundStart ; i++)
{
if(equal(AudioCode, g_SendAudio_RoundStart[i]))
set_msg_arg_string(2, g_sound_roundstart[random(sizeof g_sound_roundstart)])
}
if(equal(AudioCode, "%!MRAD_terwin"))
set_msg_arg_string(2, g_sound_zombiewin)
else if(equal(AudioCode, "%!MRAD_ctwin"))
set_msg_arg_string(2, g_sound_humanwin)
return PLUGIN_CONTINUE
}
public message_Health(msg_id, msg_dest, id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE
static health ; health = get_msg_arg_int(1)
if(health > 255 && (health % 256) == 0)
set_msg_arg_int(1, ARG_BYTE, ++health)
return PLUGIN_CONTINUE
}
public message_RoundTimer()
{
if(g_RoundStarted)
{
g_RoundStarted = false;
set_task( float( get_msg_arg_int( 1 ) ), "Task_RoundEnd", TASKID_ROUND );
}
}
public clcmd_nightvision(id)
{
if(!g_zombie[id] && get_pcvar_num(cvar_blocknvg) && cs_get_user_nvg(id))
{
client_print(id, print_center, "%L", LANG_PLAYER, "BLOCK_NVG")
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public clcmd_teams(id)
{
if (!get_pcvar_num(cvar_teams))
return PLUGIN_CONTINUE
client_print(id, print_center, "%L", LANG_PLAYER, "BLOCK_TEAMS")
return PLUGIN_HANDLED
}
public clcmd_throw(id)
{
static Float: Origin[3], Float: Velocity[3], Float: Angle[3], MinBox[3], MaxBox[3]
pev(id, pev_origin, Origin)
pev(id, pev_velocity, Velocity)
for(new i = 0 ; i < 3 ; i++)
Angle[i] = random_float(0.0, 360.0);
static Health, Float: damage
Health = get_user_health(id)
damage = get_pcvar_float(cvar_fselfdmg)
if (Health > damage)
{
static ent ; ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
set_pev(ent, pev_classname, CLASS_FLESH)
engfunc(EngFunc_SetModel, ent, ZOMBIE_FLESHTHROW)
set_pev(ent, pev_body, random_num(1, 10)); //Submodel 0 is skull/head
MinBox = { -0.5, -0.5, -0.5 }
MaxBox = { 0.5, 0.5, 0.5 }
engfunc(EngFunc_SetSize, ent, MinBox, MaxBox)
engfunc(EngFunc_SetOrigin, ent, Origin)
set_pev(ent, pev_movetype, MOVETYPE_TOSS)
set_pev(ent, pev_solid, SOLID_TRIGGER)
set_pev(ent, pev_owner, id)
velocity_by_aim(id, get_pcvar_num(cvar_fforce), Velocity)
set_pev(ent, pev_velocity, Velocity)
set_pev(ent, pev_angles, Angle)
emit_sound(id, CHAN_VOICE, g_sound_pain[random(sizeof g_sound_pain)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
set_pev(id, pev_health, Health - damage)
}
else
{
client_print(id, print_center, "%L", LANG_PLAYER, "FLESH_HEALTH")
}
}
public fw_spawn(ent)
{
if(!pev_valid(ent))
return FMRES_IGNORED
static classname[32]
pev(ent, pev_classname, classname, 31)
for(new i = 0; i < sizeof g_Map_Entities; ++i)
{
if(equal(classname, g_Map_Entities[i]))
{
remove_entity(ent);
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public fw_PlayerPreThink(id)
{
if(!is_user_alive(id))
return FMRES_IGNORED
static Float: velocity[3], Float: Time
static button, flag
button = pev(id, pev_button)
flag = pev(id, pev_flags)
Time = get_gametime()
if (g_zombie[id])
{
if ( (!g_infreezetime) && (button & IN_RELOAD) && (flag & FL_ONGROUND))
{
if (get_pcvar_num(cvar_leap))
{
static Float: cooldown, Float: lheight, lforce
cooldown = get_pcvar_float(cvar_leapcd)
lforce = get_pcvar_num(cvar_lforce)
lheight = get_pcvar_float(cvar_lheight)
if (Time - cooldown > g_LastLeap[id])
{
set_pev(id, pev_button, button & ~IN_RELOAD)
velocity_by_aim(id, lforce, velocity)
velocity[2] = lheight
set_pev(id, pev_velocity, velocity)
emit_sound(id, CHAN_VOICE, g_sound_pain[random(sizeof g_sound_pain)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
g_LastLeap[id] = Time
}
}
}
else if ( (!g_infreezetime) && (button & IN_ATTACK) && (button & IN_ATTACK2))
{
if (get_pcvar_num(cvar_fleshthrow))
{
if(Time - 1.1 > g_LastFthrow[id])
{
clcmd_throw(id)
g_LastFthrow[id] = Time
}
}
}
else if (!g_infreezetime)
{
static Float:speed; speed = get_pcvar_float(cvar_speed)
set_pev(id, pev_maxspeed, speed)
}
}
else if (!g_zombie[id])
{
if ( (button & IN_BACK) && (flag & FL_ONGROUND) )
{
pev(id, pev_velocity, velocity)
xs_vec_mul_scalar(velocity, SURVIVOR_BACKSPEED, velocity)
set_pev(id, pev_velocity, velocity)
}
}
return FMRES_IGNORED
}
public fw_SetClientKeyValue(id, infobuffer, key[], value[])
{
if (g_model[id] && equal(key, "model"))
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
public fw_ClientUserInfoChanged(id, infobuffer)
{
if (!g_model[id])
return FMRES_IGNORED
new currentmodel[32];
fm_get_user_model(id, currentmodel, charsmax(currentmodel) );
if(!equal(currentmodel, player_model[id]))
fm_set_user_model(id, player_model[id])
return FMRES_IGNORED
}
public fw_EmitSound(id, channel, sample[], Float:volume, Float:attn, flag, pitch)
{
if(!is_user_connected(id) || !g_zombie[id])
return FMRES_IGNORED
//KNIFE
if (sample[0] == 'w' && sample[1] == 'e' && sample[8] == 'k' && sample[9] == 'n')
{
switch(sample[17])
{
case 'l':
return FMRES_SUPERCEDE
case 's', 'w':
{
emit_sound(id, CHAN_WEAPON, g_sound_miss[random(sizeof g_sound_miss)], volume, attn, flag, pitch)
return FMRES_SUPERCEDE
}
case 'b', '1', '2', '3', '4':
{
emit_sound(id, CHAN_WEAPON, g_sound_hit[random(sizeof g_sound_hit)], volume, attn, flag, pitch)
return FMRES_SUPERCEDE
}
}
}
//PAIN
else if (sample[1] == 'l' && sample[2] == 'a' && sample[3] == 'y' && ( (containi(sample, "bhit") != -1) || (containi(sample, "pain") != -1) || (containi(sample, "shot") != -1)))
{
emit_sound(id, CHAN_VOICE, g_sound_pain[random(sizeof g_sound_pain)], volume, attn, flag, pitch)
return FMRES_SUPERCEDE
}
//DEATH
else if (sample[7] == 'd' && (sample[8] == 'i' && sample[9] == 'e' || sample[12] == '6'))
{
emit_sound(id, CHAN_VOICE, g_sound_die[random(sizeof g_sound_die)], volume, attn, flag, pitch)
return FMRES_SUPERCEDE
}
//NVG
else if (sample[6] == 'n' && sample[7] == 'v' && sample[8] == 'g')
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
public bacon_touch(ent, id)
{
if (is_user_alive(id) && g_zombie[id])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fw_Touch(pToucher, pTouched)
{
if ( pev_valid(pToucher))
{
static className[32], className2[32]
pev(pToucher, pev_classname, className, 31)
if ( pev_valid(pTouched)) pev(pTouched, pev_classname, className2, 31)
if ( equal(className, CLASS_FLESH))
{
static attacker ; attacker = pev(pToucher, pev_owner)
if ( pev_valid(pTouched))
{
if ( equal(className2, "player") && is_user_connected(pTouched))
{
static vOrigin[3], Float: damage
get_user_origin(pTouched, vOrigin)
damage = get_pcvar_float(cvar_fleshdmg)
static CsTeams:team[2]
team[0] = cs_get_user_team(pTouched), team[1] = cs_get_user_team(attacker)
if (attacker == pTouched)
return FMRES_SUPERCEDE
if (!get_cvar_num("mp_friendlyfire") && team[0] == team[1])
return FMRES_SUPERCEDE
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BLOOD)
write_coord(vOrigin[0])
write_coord(vOrigin[1])
write_coord(vOrigin[2] + 10)
write_coord(random_num(-360, 360))
write_coord(random_num(-360, 360))
write_coord(-10)
write_byte(70)
write_byte(random_num(15, 35))
message_end()
ExecuteHamB(Ham_TakeDamage, pTouched, pToucher, attacker, damage, DMG_BULLET | DMG_NEVERGIB)
}
else if ( equal(className2, "func_breakable") && (get_pcvar_num(cvar_breakents)) )
dllfunc(DLLFunc_Use, pTouched, attacker)
else if ( equal(className2, CLASS_FLESH))
return FMRES_SUPERCEDE
}
remove_entity(pToucher);
}
}
return FMRES_IGNORED
}
public fw_Think_lights(iEnt)
{
if (!pev_valid(iEnt))
return FMRES_IGNORED
static className[32]
pev(iEnt, pev_classname, className, 31);
static Float:gametime; gametime = get_gametime()
if (equal(className, CLASS_WEATHER))
{
switch (get_pcvar_num(cvar_lights))
{
case 0:
{
engfunc(EngFunc_LightStyle, 0, "m")
set_pev(iEnt, pev_nextthink, gametime + 0.1)
}
case 1:
{
static thinkReturn, randNum;
if(!g_light_flashing)
{
randNum = random_num(0, 1)
if(randNum)
set_pev(iEnt, pev_message, g_sound_thunder1)
else
set_pev(iEnt, pev_message, g_sound_thunder2)
g_light_flashing = true
g_light_num = random_num(1, 3)
dllfunc(DLLFunc_Use, iEnt, 0)
}
thinkReturn = lightning()
if(thinkReturn)
set_pev(iEnt, pev_nextthink, gametime + random_float(9.5, 16.5))
else
set_pev(iEnt, pev_nextthink, gametime + 0.1)
}
case 2:
{
engfunc(EngFunc_LightStyle, 0, "b")
set_pev(iEnt, pev_nextthink, gametime + 0.1)
}
default:
{
engfunc(EngFunc_LightStyle, 0, "a")
set_pev(iEnt, pev_nextthink, gametime + 0.1)
}
}
}
return FMRES_HANDLED;
}
lightning()
{
switch(g_light_num)
{
// Flash 1 time
case 1:
{
g_light_counter += 1;
switch(g_light_counter)
{
case 1: g_light_stylenum = 1;
case 2: g_light_stylenum = 2;
case 3: g_light_stylenum = 1;
case 4: g_light_stylenum = 0;
}
engfunc(EngFunc_LightStyle, 0, g_light_style[g_light_stylenum])
if(g_light_counter == 4)
{
g_light_counter = 0;
g_light_flashing = false;
return 1;
}
else
return 0;
}
// Flash 2 times
case 2:
{
g_light_counter += 1;
switch(g_light_counter)
{
case 1: g_light_stylenum = 1;
case 2: g_light_stylenum = 2;
case 3: g_light_stylenum = 1;
case 4: g_light_stylenum = 2;
case 5: g_light_stylenum = 1;
case 6: g_light_stylenum = 0;
}
engfunc(EngFunc_LightStyle, 0, g_light_style[g_light_stylenum])
if(g_light_counter == 6)
{
g_light_counter = 0;
g_light_flashing = false;
return 1;
}
else
return 0;
}
// Flash 3 times
case 3:
{
g_light_counter += 1;
switch(g_light_counter)
{
case 1: g_light_stylenum = 1;
case 2: g_light_stylenum = 2;
case 3: g_light_stylenum = 1;
case 4: g_light_stylenum = 2;
case 5: g_light_stylenum = 1;
case 6: g_light_stylenum = 2;
case 7: g_light_stylenum = 1;
case 8: g_light_stylenum = 0;
}
engfunc(EngFunc_LightStyle, 0, g_light_style[g_light_stylenum])
if(g_light_counter == 8)
{
g_light_counter = 0;
g_light_flashing = false;
return 1;
}
else
return 0;
}
}
return 1;
}
public fw_Traceline(Float:start[3], Float:end[3], nomonsters, id, trace)
{
if(!is_user_connected(id))
return FMRES_IGNORED;
static victim, hitgroup
victim = get_tr2(trace, TR_pHit);
hitgroup = get_tr2(trace, TR_iHitgroup);
if(!is_user_connected(victim))
return FMRES_IGNORED;
static CsTeams:team[2]
team[0] = cs_get_user_team(id), team[1] = cs_get_user_team(victim)
if (team[0] == team[1])
{
return FMRES_SUPERCEDE
}
switch(hitgroup)
{
case HIT_GENERIC: g_hitgroups[victim] = HIT_GENERIC
case HIT_HEAD: g_hitgroups[victim] = HIT_HEAD
case HIT_CHEST: g_hitgroups[victim] = HIT_HEAD
case HIT_STOMACH: g_hitgroups[victim] = HIT_STOMACH
case HIT_LEFTARM: g_hitgroups[victim] = HIT_LEFTARM
case HIT_RIGHTARM: g_hitgroups[victim] = HIT_RIGHTARM
case HIT_LEFTLEG: g_hitgroups[victim] = HIT_LEFTLEG
case HIT_RIGHTLEG: g_hitgroups[victim] = HIT_RIGHTLEG
default: return -1
}
set_tr2(trace, TR_iHitgroup, g_hitgroups[victim])
return FMRES_IGNORED
}
/*================================================================================
[Tasks]
=================================================================================*/
public Task_Restart()
{
new mapname[32]
get_mapname(mapname, 31)
server_cmd("changelevel %s", mapname)
}
public Task_ShowHUD(task)
{
new id = task - TASKID_SHOWHUD
if(!is_user_alive(id) || !g_zombie[id])
return PLUGIN_HANDLED
static health, armour;
health = get_user_health(id);
armour = get_user_armor(id);
set_hudmessage(255, 180, 0, 0.02, 0.97, 0, 0.0, 0.3, 0.0, 0.0)
ShowSyncHudMsg(id, g_hudsync , "Health: %d | Armour: %d", health, armour)
set_task(0.1, "Task_ShowHUD", TASKID_SHOWHUD + id)
return PLUGIN_CONTINUE
}
public Task_Strip(task)
{
new id = task - TASKID_STRIP
if (cs_get_user_submodel(id))
cs_set_user_submodel(id, 0)
strip_user_weapons(id)
give_item(id, "weapon_knife")
set_pev(id, pev_viewmodel2, ZOMBIE_CLAWS)
set_pev(id, pev_weaponmodel2, "")
}
public Task_Refresh(task)
{
new id = task - TASKID_REFRESH
client_cmd(id, "slot2")
client_cmd(id, "slot1")
}
public Task_Model(task)
{
new id = task - TASKID_MODEL
fm_set_user_model(id, player_model[id])
}
public Task_NVG(task)
{
new id = task - TASKID_NVG
engclient_cmd(id, "nightvision")
for(new i = 0; i < 10; i++)
client_cmd(id, "-nvgadjust")
}
public Task_C4()
{
new ent = find_ent_by_class(-1, "weaponbox");
while (ent > 0)
{
new model[33]
pev(ent, pev_model, model, charsmax(model) );
if (equali(model, "models/w_backpack.mdl"))
{
remove_entity(ent);
return PLUGIN_CONTINUE;
}
ent = find_ent_by_class(-1, "weapon");
}
return PLUGIN_CONTINUE;
}
public Task_RoundEnd( ) {
TerminateRound(RoundEndType_Draw);
}
/*================================================================================
[Stocks]
=================================================================================*/
stock fm_set_user_model(player, modelname[])
{
engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", modelname)
g_model[player] = true
}
stock fm_get_user_model(player, model[], len)
{
engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
}
stock fm_reset_user_model(player)
{
g_model[player] = false
dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
}