PHP Code:
include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <fun>
#include <engine>
#include <hamsandwich>
#include <xs>
#define TASKID_NVG 1000
#define TASKID_STRIP 2000
#define TASKID_RESPAWN 3000
#define TASKID_MODEL 4000
#define TASKID_LEAP 5000
new bool:g_bZombie[33], bool:g_bSpeed, bool:g_bFalling[33], bool:g_bModelSet[33], bool:g_bRoundEnded
new Float:g_fVecVel[3], Float:g_fCounter
new g_fwdSpawn, g_model[33][32]
new g_playerModel[] = "Hunter"
new g_playerModelDir[] = "models/player/Hunter/Hunter.mdl"
new g_handsModel[] = "models/v_knife_zombie.mdl"
new g_soundMiss[2][] =
{
"zombie/claw_miss1.wav",
"zombie/claw_miss2.wav"
}
new g_soundHit[3][] =
{
"zombie/claw_strike1.wav",
"zombie/claw_strike2.wav",
"zombie/claw_strike3.wav"
}
new const g_soundPain[7][] =
{
"l4d/pain1_hunter.wav",
"l4d/pain2_hunter.wav",
"l4d/pain3_hunter.wav",
"l4d/pain4_hunter.wav",
"l4d/pain5_hunter.wav",
"l4d/pain6_hunter.wav",
"l4d/pain7_hunter.wav"
}
new g_soundDeath[6][] =
{
"l4d/die1_hunter.wav",
"l4d/die2_hunter.wav",
"l4d/die3_hunter.wav",
"l4d/die4_hunter.wav",
"l4d/die5_hunter.wav",
"l4d/die6_hunter.wav"
}
new g_soundHumansWin[] = "l4d/humans_win.wav"
new g_soundZombiesWin[] = "l4d/zombies_win.wav"
new g_radio[24][] =
{
"radio1", "coverme", "takepoint", "holdpos", "regroup", "followme", "takingfire",
"radio2", "go", "fallback", "sticktog", "getinpos", "stormfront", "report",
"radio3", "roger", "enemyspot", "needbackup", "sectorclear", "inposition", "reportingin", "getout", "negative", "enemydown"
}
new g_entities[9][] =
{
"func_bomb_target",
"info_bomb_target",
"hostage_entity",
"monster_scientist",
"func_hostage_rescue",
"info_hostage_rescue",
"info_vip_start",
"func_vip_safetyzone",
"func_escapezone"
}
enum
{
KBPOWER_357SIG = 0,
KBPOWER_762NATO,
KBPOWER_BUCKSHOT,
KBPOWER_45ACP,
KBPOWER_556NATO,
KBPOWER_9MM,
KBPOWER_57MM,
KBPOWER_338MAGNUM,
KBPOWER_556NATOBOX,
KBPOWER_50AE
}
new const g_knockback[] =
{
-1,
KBPOWER_357SIG,
-1,
KBPOWER_762NATO,
-1,
KBPOWER_BUCKSHOT,
-1,
KBPOWER_45ACP,
KBPOWER_556NATO,
-1,
KBPOWER_9MM,
KBPOWER_57MM,
KBPOWER_45ACP,
KBPOWER_556NATO,
KBPOWER_556NATO,
KBPOWER_556NATO,
KBPOWER_45ACP,
KBPOWER_9MM,
KBPOWER_338MAGNUM,
KBPOWER_9MM,
KBPOWER_556NATOBOX,
KBPOWER_BUCKSHOT,
KBPOWER_556NATO,
KBPOWER_9MM,
KBPOWER_762NATO,
-1,
KBPOWER_50AE,
KBPOWER_556NATO,
KBPOWER_762NATO,
-1,
KBPOWER_57MM
}
new Float:g_fKnockbackPower[] =
{
3.0, // KBPOWER_357SIG
4.0, // KBPOWER_762NATO
9.5, // KBPOWER_BUCKSHOT
3.0, // KBPOWER_45ACP
4.5, // KBPOWER_556NATO
3.0, // KBPOWER_9MM
3.5, // KBPOWER_57MM
12.0, // KBPOWER_338MAGNUM
10.0, // M249
3.8 // KBPOWER_50AE
}
new zm_survival, zm_health, zm_armor, zm_gravity, zm_speed, zm_light, zm_killhp, zm_respawn, zm_radio, zm_knockback, zm_use, zm_leap, zm_regen
public plugin_precache()
{
zm_survival = register_cvar("zm_survival", "1", FCVAR_SPONLY|FCVAR_SERVER)
if (!get_pcvar_num(zm_survival))
return
g_fwdSpawn = register_forward(FM_Spawn, "fwdSpawn")
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_fog"))
fm_set_kvd(ent, "density", "0.0016", "env_fog")
fm_set_kvd(ent, "rendercolor", "128 128 128", "env_fog")
engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "env_rain"))
new ent2 = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_bomb_target"))
if (ent2)
{
dllfunc(DLLFunc_Spawn, ent2)
set_pev(ent2, pev_solid, SOLID_NOT)
}
precache_model(g_playerModelDir)
precache_model(g_handsModel)
precache_sound(g_soundHumansWin)
precache_sound(g_soundZombiesWin)
new i
for (i = 0; i < 2; i++)
precache_sound(g_soundMiss[i])
for (i = 0; i < 3; i++)
precache_sound(g_soundHit[i])
for (i = 0; i < 6; i++)
precache_sound(g_soundDeath[i])
for (i = 0; i < 7; i++)
precache_sound(g_soundPain[i])
}
public plugin_init()
{
register_plugin("Zombie Mod Survival", "2.1", "hleV")
register_concmd("amx_zmsurvival", "cmdZMSurvival", ADMIN_RCON, "<1|0> - enables/disabled Zombie Mod Survival")
zm_health = register_cvar("zm_health", "1000")
zm_armor = register_cvar("zm_armor", "500")
zm_gravity = register_cvar("zm_gravity", "800")
zm_speed = register_cvar("zm_speed", "260")
zm_light = register_cvar("zm_light", "b")
zm_killhp = register_cvar("zm_killhp", "250")
zm_respawn = register_cvar("zm_respawn", "1")
zm_radio = register_cvar("zm_radio", "0")
zm_knockback = register_cvar("zm_knockback", "1")
zm_use = register_cvar("zm_use", "0")
zm_leap = register_cvar("zm_leap", "1")
zm_regen = register_cvar("zm_regen", "20")
register_clcmd("drop", "cmdDrop")
for (new i; i < 24; i++)
register_clcmd(g_radio[i], "cmdRadio")
register_event("HLTV", "newRound", "a", "1=0", "2=0")
register_event("CurWeapon", "curWeapon", "be")
register_event("DeathMsg", "playerDeath", "a")
register_event("Damage", "playerDamage", "b", "2!0", "4!0", "5!0", "6!0")
register_logevent("roundStart", 2, "1=Round_Start")
register_logevent("joinedTeam", 3, "1=joined team")
RegisterHam(Ham_Spawn, "player", "fwdSpawnPlayer", 1)
RegisterHam(Ham_TraceAttack, "player", "fwdTraceAttackPlayer")
RegisterHam(Ham_TraceAttack, "func_pushable", "fwdTraceAttackPushable")
RegisterHam(Ham_Touch, "weaponbox", "fwdTouch")
RegisterHam(Ham_Touch, "armoury_entity", "fwdTouch")
RegisterHam(Ham_Touch, "weapon_shield", "fwdTouch")
RegisterHam(Ham_Touch, "grenade", "fwdTouch")
RegisterHam(Ham_Use, "func_pushable", "fwdUsePushable")
unregister_forward(FM_Spawn, g_fwdSpawn)
register_forward(FM_PlayerPreThink, "fwdPlayerPreThink")
register_forward(FM_SetClientKeyValue, "fwdSetClientKeyValue")
register_forward(FM_ClientUserInfoChanged, "fwdClientUserInfoChanged")
register_forward(FM_Think, "fwdThink", 1)
register_forward(FM_CmdStart, "fwdCmdStart")
register_forward(FM_EmitSound, "fwdEmitSound")
register_message(get_user_msgid("SendAudio"), "msgSendAudio")
register_message(get_user_msgid("TextMsg"), "msgTextMsg")
set_cvar_string("sv_skyname", "drkg")
if (get_pcvar_num(zm_regen))
set_task(1.0, "zombieRegen", _, _, _, "b")
}
public client_connect(id)
{
if (!get_pcvar_num(zm_survival))
return
g_bZombie[id] = false
g_bModelSet[id] = false
g_bFalling[id] = false
client_cmd(id, "cl_weather 1")
client_cmd(id, "cl_minmodels 0")
}
public cmdZMSurvival(id, level)
{
if (!(get_user_flags(id) & level))
{
console_print(id, "You have no access to that command.")
return PLUGIN_HANDLED
}
new arg[32]
read_argv(1, arg, 31)
if (equali(arg, "1"))
{
if (!get_pcvar_num(zm_survival))
{
console_print(id, "Zombie Mod Survival has been turned on!")
set_pcvar_num(zm_survival, 1)
}
else
console_print(id, "Zombie Mod Survival is already enabled.")
}
else if (equali(arg, "0"))
{
if (get_pcvar_num(zm_survival))
{
console_print(id, "Zombie Mod Survival has been turned off.")
set_pcvar_num(zm_survival, 0)
}
else
console_print(id, "Zombie Mod Survival is already disabled.")
}
else
console_print(id, "Usage: amx_zmsurvival <1|0> - enables/disables Zombie Mod Survival.")
return PLUGIN_HANDLED
}
public cmdDrop(id)
{
if (get_pcvar_num(zm_survival) && g_bZombie[id])
{
console_print(id, "This command is restricted.")
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public cmdRadio(id)
{
if (get_pcvar_num(zm_survival) && !get_pcvar_num(zm_radio) && g_bZombie[id])
{
console_print(id, "This command is restricted.")
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}
public newRound()
{
if (!get_pcvar_num(zm_survival))
return
if (g_bRoundEnded)
{
client_cmd(0, "stopsound")
g_bRoundEnded = false
}
g_bSpeed = false
}
public curWeapon(id)
{
if (!get_pcvar_num(zm_survival) || !is_user_connected(id) || !is_user_alive(id) || !g_bZombie[id])
return
if (read_data(2) != CSW_KNIFE)
{
engclient_cmd(id, "weapon_knife")
set_pev(id, pev_viewmodel2, g_handsModel)
set_pev(id, pev_weaponmodel2, "")
}
message_begin(MSG_ONE, get_user_msgid("HideWeapon"), _, id)
write_byte((1<<0)|(1<<1)|(1<<3)|(1<<5))
message_end()
}
public playerDeath()
{
if (!get_pcvar_num(zm_survival))
return
new killer = read_data(1)
new victim = read_data(2)
if (get_pcvar_num(zm_respawn) && g_bZombie[victim] && !is_user_alive(victim))
{
set_task(1.9, "respawnZombie", TASKID_RESPAWN + victim)
set_task(2.0, "respawnZombie", TASKID_RESPAWN + victim)
}
if (get_pcvar_num(zm_killhp) && g_bZombie[killer] && killer != victim)
set_pev(killer, pev_health, get_user_health(killer) + get_pcvar_float(zm_killhp))
}
public playerDamage(id)
{
if (!get_pcvar_num(zm_survival) || !get_pcvar_num(zm_knockback) || !g_bZombie[id])
return PLUGIN_HANDLED
new inflictor = entity_get_edict(id, EV_ENT_dmg_inflictor)
if (inflictor <= get_maxplayers())
return PLUGIN_CONTINUE
new class[8]
entity_get_string(inflictor, EV_SZ_classname, class, 7)
if (!equal(class, "grenade"))
return PLUGIN_CONTINUE
new Float:fUpVector[3]
fUpVector[0] = float(read_data(4))
fUpVector[1] = float(read_data(5))
fUpVector[2] = float(read_data(6))
new damageRept = read_data(2)
set_velocity_from_origin(id, fUpVector, 20.0 * damageRept)
return PLUGIN_CONTINUE
}
public roundStart()
{
if (!get_pcvar_num(zm_survival))
return
g_bSpeed = true
}
public joinedTeam()
{
if (!get_pcvar_num(zm_survival))
return
for (new id = 1; id <= get_maxplayers(); id++)
{
if (!is_user_connected(id))
return
new CsTeams:team = cs_get_user_team(id)
if (team == CS_TEAM_T)
g_bZombie[id] = true
else if (team == CS_TEAM_CT)
g_bZombie[id] = false
}
}
public fwdSpawn(ent)
{
if (!get_pcvar_num(zm_survival) || !pev_valid(ent))
return FMRES_IGNORED
static class[32]
pev(ent, pev_classname, class, 31)
static i
for (i = 0; i < 9; ++i)
{
if (equal(class, g_entities[i]))
{
engfunc(EngFunc_RemoveEntity, ent)
return FMRES_SUPERCEDE
}
}
return FMRES_IGNORED
}
public fwdSpawnPlayer(id)
{
if (!get_pcvar_num(zm_survival) || !is_user_alive(id))
return
static CsTeams:team; team = cs_get_user_team(id)
if (team == CS_TEAM_T)
{
g_bZombie[id] = true
if (get_pcvar_num(zm_health) != 100)
set_pev(id, pev_health, get_pcvar_float(zm_health))
if (get_pcvar_num(zm_armor))
cs_set_user_armor(id, get_pcvar_num(zm_armor), CS_ARMOR_NONE)
if (get_pcvar_num(zm_gravity) != 800)
set_pev(id, pev_gravity, get_pcvar_float(zm_gravity) / 800)
if (!cs_get_user_nvg(id))
cs_set_user_nvg(id)
if (!task_exists(TASKID_NVG + id))
set_task(0.2, "setZombieNVG", TASKID_NVG + id)
if (!task_exists(TASKID_STRIP +id))
set_task(0.1, "stripZombieWeapons", TASKID_STRIP + id)
copy(g_model[id], 31, g_playerModel)
new currentModel[32]
fm_get_user_model(id, currentModel, 31)
if (!equal(currentModel, g_model[id]))
{
set_task(0.1 + g_fCounter, "setZombieModel", TASKID_MODEL + id)
g_fCounter += 0.2
}
}
else if (team == CS_TEAM_CT)
{
g_bZombie[id] = false
fm_reset_user_model(id)
}
}
public fwdTraceAttackPlayer(victim, attacker, Float:fDamage, Float:fDirection[3], traceHandle, damageType)
{
if (!get_pcvar_num(zm_survival) || !get_pcvar_num(zm_knockback) || !(damageType & DMG_BULLET) || !is_user_connected(attacker) || !g_bZombie[victim])
return HAM_IGNORED
static power
power = g_knockback[get_user_weapon(attacker)]
if (power != -1)
{
static Float:fOrigins[2][3]
pev(victim, pev_origin, fOrigins[0])
pev(attacker, pev_origin, fOrigins[1])
if (get_distance_f(fOrigins[0], fOrigins[1]) <= 280.0)
{
static Float:fVelocity[3]
pev(victim, pev_velocity, fVelocity)
static Float:fTempVec
fTempVec = fVelocity[2]
xs_vec_mul_scalar(fDirection, fDamage, fDirection)
xs_vec_mul_scalar(fDirection, 1.0, fDirection)
xs_vec_mul_scalar(fDirection, g_fKnockbackPower[power], fDirection)
xs_vec_add(fDirection, fVelocity, fVelocity)
fVelocity[2] = fTempVec
set_pev(victim, pev_velocity, fVelocity)
return HAM_HANDLED
}
}
return HAM_IGNORED
}
public fwdTraceAttackPushable(ent, attacker, Float:fDamage, Float:fDirection[3])
{
if (!get_pcvar_num(zm_survival) || !get_pcvar_num(zm_knockback) || !is_user_alive(attacker) || get_user_weapon(attacker) == CSW_KNIFE)
return
static Float:fVelocity[3]
pev(ent, pev_velocity, fVelocity)
static Float:fTempVec
fTempVec = fVelocity[2]
xs_vec_mul_scalar(fDirection, fDamage, fDirection)
xs_vec_mul_scalar(fDirection, g_bZombie[attacker] ?
2.0 + 3.0 : 2.0, fDirection)
xs_vec_add(fDirection, fVelocity, fVelocity)
fVelocity[2] = fTempVec
set_pev(ent, pev_velocity, fVelocity)
}
public fwdTouch(ent, id)
{
if (get_pcvar_num(zm_survival) && is_user_connected(id) && is_user_alive(id) && g_bZombie[id])
return HAM_SUPERCEDE
return HAM_IGNORED
}
public fwdUsePushable()
return HAM_SUPERCEDE
public fwdPlayerPreThink(id)
{
if (!get_pcvar_num(zm_survival) || !is_user_connected(id) || !is_user_alive(id) || !g_bZombie[id])
return FMRES_IGNORED
static flags
flags = pev(id, pev_flags)
if (flags & FL_ONGROUND)
{
if (get_pcvar_num(zm_knockback))
pev(id, pev_velocity, g_fVecVel)
}
else
{
static Float:fFallVelocity
pev(id, pev_flFallVelocity, fFallVelocity)
g_bFalling[id] = fFallVelocity >= 350.0 ? true : false
}
if (g_bSpeed && get_pcvar_num(zm_speed) != 250)
set_pev(id, pev_maxspeed, get_pcvar_float(zm_speed))
if (!cs_get_user_money(id))
cs_set_user_money(id, 0)
new button = fm_get_user_button(id)
if (fm_get_user_longjump(id) && (button & IN_DUCK) && (button & IN_JUMP) || ((button & IN_DUCK) && (button & IN_JUMP) && ((button & IN_FORWARD) || (button & IN_MOVELEFT) || (button & IN_MOVERIGHT) || (button & IN_BACK))))
set_task(0.1 , "checkLeap", TASKID_LEAP + id)
return FMRES_IGNORED
}
public fwdSetClientKeyValue(id, infoBuffer, key[])
{
if (get_pcvar_num(zm_survival) && g_bModelSet[id] && equal(key, "model"))
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
public fwdClientUserInfoChanged(id)
{
if (!get_pcvar_num(zm_survival) || !g_bModelSet[id] || !g_bZombie[id])
return FMRES_IGNORED
new currentModel[32]
fm_get_user_model(id, currentModel, 31)
if (!equal(currentModel, g_model[id]))
fm_set_user_model(id, g_model[id])
set_pev(id, pev_viewmodel2, g_handsModel)
set_pev(id, pev_weaponmodel2, "")
return FMRES_IGNORED
}
public fwdThink()
{
if (!get_pcvar_num(zm_survival))
return
static light[2]
get_pcvar_string(zm_light, light, 1)
engfunc(EngFunc_LightStyle, 0, light)
}
public fwdCmdStart(id, handle, seed)
{
if (!get_pcvar_num(zm_survival) || !is_user_alive(id) || !g_bZombie[id])
return FMRES_IGNORED
static impulse
impulse = get_uc(handle, UC_Impulse)
if (impulse == 100)
{
set_uc(handle, UC_Impulse, 0)
console_print(id, "This command is restricted.")
return FMRES_SUPERCEDE
}
static button
button = get_uc(handle, UC_Buttons)
if (!get_pcvar_num(zm_use) && button & IN_USE)
{
button = (button & ~IN_USE)
set_uc (handle, UC_Buttons, button)
return FMRES_HANDLED
}
return FMRES_IGNORED
}
public fwdEmitSound(id, channel, sample[], Float:fVolume, Float:fAttn, flag, pitch)
{
if (!is_user_connected(id) || !g_bZombie[id])
return FMRES_IGNORED
if (sample[0] == 'w' && sample[1] == 'e' && sample[8] == 'k' && sample[9] == 'n')
{
switch (sample[17])
{
case 'l': return FMRES_SUPERCEDE
case 's':
{
emit_sound(id, CHAN_WEAPON, g_soundMiss[random(2)], VOL_NORM, fAttn, flag, pitch)
return FMRES_SUPERCEDE
}
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_soundPain[random(sizeof g_soundPain)], volume, attn, flag, pitch)
return FMRES_SUPERCEDE
}
case 'b', '1', '2', '3', '4':
{
emit_sound(id, CHAN_WEAPON, g_soundHit[random(3)], VOL_NORM, fAttn, flag, pitch)
return FMRES_SUPERCEDE
}
}
}
else if (sample[7] == 'd' && (sample[8] == 'i' && sample[9] == 'e' || sample[12] == '6'))
{
emit_sound(id, CHAN_VOICE, g_soundDeath[random(6)], VOL_NORM, fAttn, flag, pitch)
return FMRES_SUPERCEDE
}
else if (sample[6] == 'n' && sample[7] == 'v' && sample[8] == 'g')
return FMRES_SUPERCEDE
return FMRES_IGNORED
}
public msgSendAudio(msgid, dest, id)
{
if (!get_pcvar_num(zm_survival))
return PLUGIN_CONTINUE
static audio[22]
get_msg_arg_string(2, audio, 21)
if (equal(audio[7], "terwin"))
set_msg_arg_string(2, g_soundZombiesWin)
else if (equal(audio[7], "ctwin"))
set_msg_arg_string(2, g_soundHumansWin)
g_bRoundEnded = true
return PLUGIN_CONTINUE
}
public msgTextMsg(msgid, dest, id)
{
if (!get_pcvar_num(zm_survival) || get_msg_arg_int(1) != 4)
return PLUGIN_CONTINUE
static text[25], win[32]
get_msg_arg_string(2, text, 24)
if (equal(text[1], "Game_bomb_drop"))
return PLUGIN_HANDLED
else if (equal(text[1], "Terrorists_Win"))
{
formatex(win, 31, "Zombies Win!")
set_msg_arg_string(2, win)
}
else if (equal(text[1], "Target_Saved") || equal(text[1], "CTs_Win"))
{
formatex(win, 31, "Humans Win!")
set_msg_arg_string(2, win)
}
return PLUGIN_CONTINUE
}
public setZombieNVG(task)
{
new id = task - TASKID_NVG
engclient_cmd(id, "nightvision")
}
public stripZombieWeapons(task)
{
new id = task - TASKID_STRIP
fm_strip_user_weapons(id)
give_item(id, "weapon_knife")
set_pev(id, pev_viewmodel2, g_handsModel)
set_pev(id, pev_weaponmodel2, "")
if (get_pcvar_num(zm_leap))
{
fm_set_user_longjump(id, false, false)
set_task(5.0, "leapCooldown", TASKID_LEAP + id)
}
}
public leapCooldown(task)
{
new id = task - TASKID_LEAP
if (!is_user_alive(id))
return PLUGIN_HANDLED
if (g_bZombie[id])
fm_set_user_longjump(id, true, false)
return PLUGIN_CONTINUE
}
public respawnZombie(task)
{
new id = task - TASKID_RESPAWN
if (g_bZombie[id])
spawn(id)
}
public checkLeap(task)
{
new id = task - TASKID_LEAP
if (fm_get_user_longjump(id))
{
fm_set_user_longjump(id, false, false)
set_task(5.0, "leapCooldown", TASKID_LEAP + id)
}
}
public setZombieModel(task)
{
new id = task - TASKID_MODEL
fm_set_user_model(id, g_model[id])
}
public zombieRegen()
for (new id = 1; id <= get_maxplayers(); id++)
if (get_pcvar_num(zm_regen) && is_user_connected(id) && is_user_alive(id) && g_bZombie[id] && get_user_health(id) < get_pcvar_num(zm_health))
set_user_health(id, get_user_health(id) + get_pcvar_num(zm_regen))
stock fm_set_kvd(entity, const key[], const value[], const className[] = "")
{
if (className[0])
set_kvd(0, KV_ClassName, className)
else
{
new class[32]
pev(entity, pev_classname, class, 31)
set_kvd(0, KV_ClassName, class)
}
set_kvd(0, KV_KeyName, key)
set_kvd(0, KV_Value, value)
set_kvd(0, KV_fHandled, 0)
return dllfunc(DLLFunc_KeyValue, entity, 0)
}
stock fm_strip_user_weapons(index)
{
static ent
ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "player_weaponstrip"))
if (!pev_valid(ent))
return 0
dllfunc(DLLFunc_Spawn, ent)
dllfunc(DLLFunc_Use, ent, index)
engfunc(EngFunc_RemoveEntity, ent)
return 1
}
stock set_velocity_from_origin(ent, Float:fOrigin[3], Float:fSpeed)
{
new Float:fVelocity[3]
get_velocity_from_origin(ent, fOrigin, fSpeed, fVelocity)
entity_set_vector(ent, EV_VEC_velocity, fVelocity)
return (1)
}
stock get_velocity_from_origin(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
new Float:fEntOrigin[3]
entity_get_vector(ent, EV_VEC_origin, fEntOrigin)
new Float:fDistance[3]
fDistance[0] = fEntOrigin[0] - fOrigin[0]
fDistance[1] = fEntOrigin[1] - fOrigin[1]
fDistance[2] = fEntOrigin[2] - fOrigin[2]
new Float:fTime = (vector_distance( fEntOrigin,fOrigin ) / fSpeed)
fVelocity[0] = fDistance[0] / fTime
fVelocity[1] = fDistance[1] / fTime
fVelocity[2] = fDistance[2] / fTime
return (fVelocity[0] && fVelocity[1] && fVelocity[2])
}
stock fm_get_user_model(player, model[], len)
engfunc(EngFunc_InfoKeyValue, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", model, len)
stock fm_set_user_model(player, modelName[])
{
engfunc(EngFunc_SetClientKeyValue, player, engfunc(EngFunc_GetInfoKeyBuffer, player), "model", modelName)
g_bModelSet[player] = true
}
stock fm_reset_user_model(player)
{
g_bModelSet[player] = false
dllfunc(DLLFunc_ClientUserInfoChanged, player, engfunc(EngFunc_GetInfoKeyBuffer, player))
}
stock fm_get_user_button(index)
return pev(index, pev_button)
stock bool:fm_get_user_longjump(index)
{
new value[2]
engfunc(EngFunc_GetPhysicsKeyValue, index, "slj", value, 1)
switch (value[0])
{
case '1': return true
}
return false
}
stock fm_set_user_longjump(index, bool:bLongjump = true, bool:bTempIcon = true)
{
if (bLongjump == fm_get_user_longjump(index))
return
if (bLongjump)
{
engfunc(EngFunc_SetPhysicsKeyValue, index, "slj", "1")
if (bTempIcon)
{
static msgItemPickup
if (!msgItemPickup)
msgItemPickup = get_user_msgid("ItemPickup")
message_begin(MSG_ONE, msgItemPickup, _, index)
write_string("item_longjump")
message_end()
}
}
else
engfunc(EngFunc_SetPhysicsKeyValue, index, "slj", "0")
}