#include <zombie_escape>
#include <cstrike>
#include <engine>
new const V_M4A1_MODEL[] = "models/zombie_escape/v_frost_m4a1.mdl"
new const P_M4A1_MODEL[] = "models/zombie_escape/p_frost_m4a1.mdl"
new const W_M4A1_MODEL[] = "models/zombie_escape/w_frost_m4a1.mdl"
new const W_OLD_M4A1_MODEL[] = "models/w_m4a1.mdl"
new g_iItemID, g_iHudSync, g_iSpriteLaser, g_iFreezeDmg, g_iDmgMultiplier
new bool:g_bHasFrostM4A1[33]
new g_iDmg[33]
public plugin_init()
{
register_plugin("[ZE] Extra Item: Frost M4A1", "1.0", "Raheem")
// Cvars
g_iFreezeDmg = register_cvar("ze_freezing_m4a1_damage", "2000") // Damage Requried So Zombie got Frozen
g_iDmgMultiplier = register_cvar("ze_multiplier_m4a1_damage", "2") // Multiplie Weapon Damage
// Message IDS
g_iHudSync = CreateHudSyncObj()
// ITEM NAME & COST
g_iItemID = ze_register_item("Frost M4A1", 30, 0) // It's cost 30 Ammo Pack
// Events
register_event("WeapPickup", "CheckModel", "b", "1=19")
register_event("CurWeapon", "CurrentWeapon", "be", "1=1")
// Forwards
register_forward(FM_SetModel, "Fw_SetModel")
// HookChains
RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage_Post", 1)
// Hams
RegisterHam(Ham_TraceAttack, "player", "Fw_TraceAttack_Post", 1)
RegisterHam(Ham_TraceAttack, "worldspawn", "Fw_TraceAttack_Post", 1)
RegisterHam(Ham_Item_AddToPlayer, "weapon_m4a1", "Fw_AddFrostM4A1ToPlayer")
}
public plugin_precache()
{
// Models
precache_model(V_M4A1_MODEL)
precache_model(P_M4A1_MODEL)
precache_model(W_M4A1_MODEL)
// Sprites
g_iSpriteLaser = precache_model( "sprites/Newlightning.spr")
}
public client_disconnected(id)
{
g_bHasFrostM4A1[id] = false
}
public ze_select_item_pre(id, itemid)
{
// Return Available and we will block it in Post, So it dosen't affect other plugins
if (itemid != g_iItemID)
return ZE_ITEM_AVAILABLE
// Available for Humans only, So don't show it for zombies
if (ze_is_user_zombie(id))
return ZE_ITEM_DONT_SHOW
return ZE_ITEM_AVAILABLE
}
public ze_select_item_post(player, itemid)
{
if (itemid != g_iItemID)
return
g_bHasFrostM4A1[player] = true
rg_remove_item(player, "weapon_m4a1")
rg_give_item(player, "weapon_m4a1", GT_APPEND)
rg_set_user_bpammo(player, WeaponIdType:get_weaponid("weapon_m4a1"), 90)
new szName[32]
get_user_name(player, szName, charsmax(szName))
set_hudmessage(random(255), random(255), random(255), -1.0, 0.17, 1, 0.0, 5.0, 1.0, 1.0, -1)
show_hudmessage(0, "%s Has bought Frost M4A1!", szName)
ze_colored_print(player, "!tYou Have bought Frost M4A1!y!")
}
public Fw_TraceAttack_Post(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
if(!is_user_alive(iAttacker) && ze_is_user_zombie(iEnt))
return
if(get_user_weapon(iAttacker) != CSW_M4A1 || !g_bHasFrostM4A1[iAttacker])
return
set_hudmessage(34, 138, 255, -1.0, 0.17, 1, 0.0, 2.0, 1.0, 1.0, -1)
ShowSyncHudMsg(iAttacker, g_iHudSync, "Freeze Damage^n%d/%d", g_iDmg[iAttacker], get_pcvar_num(g_iFreezeDmg))
new vec1[3], vec2[3]
get_user_origin(iAttacker, vec1, 1)
get_user_origin(iAttacker, vec2, 4)
make_beam(vec1, vec2, g_iSpriteLaser, 0, 50, 200, 200)
}
public ze_user_infected(infected)
{
if (g_bHasFrostM4A1[infected])
{
g_bHasFrostM4A1[infected] = false
}
}
public ze_user_humanized(id)
{
g_bHasFrostM4A1[id] = false
g_iDmg[id] = 0
}
public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, bitsDamageType)
{
// Not Vaild Victim or Attacker
if (!is_user_connected(iVictim) || !is_user_connected(iAttacker))
return HC_CONTINUE
// Victim is not a Zombie.
if (!ze_is_user_zombie(iVictim))
return HC_CONTINUE
if (g_bHasFrostM4A1[iAttacker] && (get_user_weapon(iAttacker) == CSW_M4A1))
{
SetHookChainArg(4 , ATYPE_FLOAT, fDamage * get_pcvar_num(g_iDmgMultiplier))
}
if((get_user_weapon(iAttacker) == CSW_M4A1) && g_bHasFrostM4A1[iAttacker])
{
g_iDmg[iAttacker] += (floatround(fDamage) * get_pcvar_num(g_iDmgMultiplier))
}
if((g_iDmg[iAttacker] >= get_pcvar_num(g_iFreezeDmg)) && (get_user_weapon(iAttacker) == CSW_M4A1) && g_bHasFrostM4A1[iAttacker])
{
new szName[32]
get_user_name(iVictim, szName, charsmax(szName))
ze_set_frost_grenade(iVictim, true)
g_iDmg[iAttacker] = 0
set_dhudmessage(34, 138, 255, -1.0, 0.25, 2, 6.0, 3.0, 0.1, 1.5)
show_dhudmessage(iAttacker, "%s Has been Freezed!", szName)
}
return HC_CONTINUE
}
public CheckModel(id)
{
if (is_user_alive(id))
{
set_pev(id, pev_viewmodel2, V_M4A1_MODEL)
set_pev(id, pev_weaponmodel2, P_M4A1_MODEL)
}
return PLUGIN_CONTINUE
}
public CurrentWeapon(id)
{
if ((get_user_weapon(id) == CSW_M4A1) && g_bHasFrostM4A1[id] == true)
{
CheckModel(id)
}
else
{
ClearSyncHud(id, g_iHudSync)
}
return PLUGIN_CONTINUE
}
make_beam(const origin2[3], const origin[3], sprite, red, green, blue, alpha)
{
//BEAMENTPOINTS
message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
write_byte (0) //TE_BEAMENTPOINTS 0
write_coord(origin2[0])
write_coord(origin2[1])
write_coord(origin2[2])
write_coord(origin[0])
write_coord(origin[1])
write_coord(origin[2])
write_short(sprite) // sprite
write_byte(1) // framestart
write_byte(5) // framerate
write_byte(2) // life
write_byte(20) // width
write_byte(0) // noise
write_byte(red) // r, g, b
write_byte(green) // r, g, b
write_byte(blue) // r, g, b
write_byte(alpha) // brightness
write_byte(150) // speed
message_end()
}
public Fw_SetModel(entity, model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED
if(!equali(model, W_OLD_M4A1_MODEL))
return FMRES_IGNORED
new className[33]
entity_get_string(entity, EV_SZ_classname, className, 32)
static iOwner, iStoredM4A1ID
// Frost M4A1 Owner
iOwner = entity_get_edict(entity, EV_ENT_owner)
// Get drop weapon index (Frost M4A1) to use in fw_FrostM4A1AddToPlayer forward
iStoredM4A1ID = find_ent_by_owner(-1, "weapon_m4a1", entity)
// If Player Has Frost M4A1 and It's weapon_m4a1
if(g_bHasFrostM4A1[iOwner] && is_valid_ent(iStoredM4A1ID))
{
// Setting weapon options
entity_set_int(iStoredM4A1ID, EV_INT_impulse, 1997)
// Rest Var
g_bHasFrostM4A1[iOwner] = false
// Set weaponbox new model
entity_set_model(entity, W_M4A1_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public Fw_AddFrostM4A1ToPlayer(FrostM4A1, id)
{
// Make sure that this is M4A1
if(is_valid_ent(FrostM4A1) && is_user_connected(id) && entity_get_int(FrostM4A1, EV_INT_impulse) == 1997)
{
// Update Var
g_bHasFrostM4A1[id] = true
// Reset weapon options
entity_set_int(FrostM4A1, EV_INT_impulse, 0)
return HAM_HANDLED
}
return HAM_IGNORED
}