Code: Select all
#include <amxmodx>
#include <amxmisc>
#include <biohazard>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <fun>
#include <zb_stocks>
native bool:bio_has_custom_skin(id)
native bio_update_custom_skin(id)
#define write_coord_fl(%1) engfunc(EngFunc_WriteCoord, %1)
#define message_begin_fl(%1,%2,%3,%4) engfunc(EngFunc_MessageBegin, %1, %2, %3, %4)
new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
new const V_USP_MODEL[] = "models/v_usp.mdl"
new const P_USP_MODEL[] = "models/p_usp.mdl"
new const W_USP_MODEL[] = "models/w_usp.mdl"
new const W_OLD_USP_MODEL[] = "models/w_usp.mdl"
enum _:Sprites
{
SPRITE_FROST,
SPRITE_FROST2,
SPRITE_FLAKE
}
new g_iUSPFrostSpr, g_iMsgScreenFade, g_iMaxPlayers, g_iHudSync, g_iSpriteLaser, g_iGlassGibs, g_iFreezeDmg, g_fFrostTime, g_iDmgMultiplier, g_iStatusIcon
new bool:g_bHasFrostUSP[33], g_bIsFrozen[33]
new g_iDmg[33]
public plugin_init()
{
register_plugin("ZU USP Neox Pistole", "1.5", "sPe3d*oN.")
// Cvars
g_fFrostTime = register_cvar("zu_neox_time", "2.5") // Freeze Time. It's Float you can make it 0.5
g_iFreezeDmg = register_cvar("zu_freezing_neox_damage", "1000") // Damage Requried So Zombie got Frozen
g_iDmgMultiplier = register_cvar("zu_multiplier_neox_damage", "5") // Multiplie Weapon Damage
register_clcmd("say /neox", "CmdBuyNeox", ADMIN_LEVEL_H)
register_clcmd("say_team /neox", "CmdBuyNeox", ADMIN_LEVEL_H)
register_concmd("amx_neox", "CmdGiveNeox", ADMIN_RCON, "<name>")
// Message IDS
g_iHudSync = CreateHudSyncObj()
g_iMsgScreenFade = get_user_msgid("ScreenFade")
g_iStatusIcon = get_user_msgid("StatusIcon")
// Server Max Slots
g_iMaxPlayers = get_maxplayers()
// Events
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_event("WeapPickup","CheckModel","b","1=19")
register_event("CurWeapon","CurrentWeapon","be","1=1")
register_event("DeathMsg", "EventDeathMsg", "a")
// Forwards
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
register_forward(FM_SetModel, "fw_SetModel")
// Hams
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
RegisterHam(Ham_Item_AddToPlayer, "weapon_usp", "fw_FrostUSPAddToPlayer")
}
public plugin_precache()
{
// Models
precache_model(V_USP_MODEL)
precache_model(P_USP_MODEL)
precache_model(W_USP_MODEL)
// Sprites
g_iSpriteLaser = precache_model( "sprites/Newlightning.spr")
}
public client_putinserver(id)
{
g_bHasFrostUSP[id] = false
g_bIsFrozen[id] = false
}
public client_disconnect(id)
{
g_bHasFrostUSP[id] = false
g_bIsFrozen[id] = false
RemoveEntity(id)
}
public CmdBuyNeox(id,level,cid)
{
if (!cmd_access(id,level,cid,2))
{
ColorChat(id, "!y[!gZombie UniQue!y] !tAccess denied!y, !gNeox Pistole !yis only for !gVIP's Members")
client_cmd( id, "spk ^"access denied^"" );
return PLUGIN_HANDLED
}
if ( !is_user_alive(id) )
{
ColorChat(id, "!y[!gZombie UniQue!y] To Get !gNeox Pistole !yYou need to be alive!t!!")
return PLUGIN_HANDLED
}
if (cs_get_user_team(id) == CS_TEAM_T)
{
ColorChat(id, "!y[!gZombie UniQue!y] You can't Get !gNeox !yvalid Only for !gHumans!t!!")
return PLUGIN_HANDLED
}
if (g_bHasFrostUSP[id])
{
ColorChat(id, "!y[!gZombie UniQue!y] You can get !gNeox !yone time per round!t, !ywait next round!t!!")
return PLUGIN_HANDLED
}
g_bHasFrostUSP[id] = true
give_item(id, "weapon_usp")
cs_set_user_bpammo(id, CSW_USP, 200)
g_bHasFrostUSP[id] = true
new szName[32]
get_user_name(id, szName, charsmax(szName))
set_hudmessage(0, 200, 255, -1.0, 0.21, 1, 0.0, 5.0, 1.0, 1.0, -1)
show_hudmessage(0, "%s Have Now a Neox Pistole!!", szName)
ColorChat(id, "!y[!gZombie UniQue!y] !yYou Have Got !gNeox Pistole")
return PLUGIN_HANDLED
}
public CmdGiveNeox(id,level,cid)
{
if (!cmd_access(id,level,cid,2))
return PLUGIN_HANDLED;
new arg[32];
read_argv(1,arg,31);
new player = cmd_target(id,arg,7);
if (!player)
return PLUGIN_HANDLED;
new name[32];
get_user_name(player,name,31);
if (is_user_zombie(player))
{
client_print(id, print_console, "!y you can't !ggive Neox Pistole to !g%s !yhe is !tzombie!", name)
return PLUGIN_HANDLED;
}
new szAdminName[32]
get_user_name(id, szAdminName, charsmax(szAdminName))
ColorChat(id, "!y[!gZombie UniQue!y] !tADMIN !g%s !tgive !gNeox Pistole !tto Player !g%s", szAdminName, name)
give_item(player, "weapon_usp")
cs_set_user_bpammo(player, CSW_USP, 200)
g_bHasFrostUSP[player] = true
return PLUGIN_HANDLED
}
public TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], pentru, iDamageType)
{
if(!is_user_alive(iAttacker))
return
if(get_user_weapon(iAttacker) != CSW_USP || !g_bHasFrostUSP[iAttacker])
return
set_hudmessage(0, 200, 255, -1.0, 0.17, 1, 0.0, 2.0, 1.0, 1.0, -1)
ShowSyncHudMsg(iAttacker, g_iHudSync, "", 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, 200, 255, 255)
}
public event_round_start()
{
for (new i = 1; i <= g_iMaxPlayers; i++)
{
g_bHasFrostUSP[i] = false
g_bIsFrozen[i] = false
g_iDmg[i] = 0
if(is_user_alive(i))
{
Remove_Rendering(i)
}
}
}
public EventDeathMsg()
{
new iVictim = read_data(2)
RemoveEntity(iVictim)
Remove_Rendering(iVictim)
g_bIsFrozen[iVictim] = false
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(!is_user_connected(victim) || !is_user_connected(attacker) || attacker == victim || !attacker)
return HAM_IGNORED
if(g_bHasFrostUSP[attacker] && (get_user_weapon(attacker) == CSW_USP))
SetHamParamFloat(4, damage * get_pcvar_num(g_iDmgMultiplier))
// For Frost Effect Ring
static Float:originF[3]
pev(victim, pev_origin, originF)
// For Frost Effect Sound
static originF2[3]
get_user_origin(victim, originF2)
if((get_user_weapon(attacker) == CSW_USP) && g_bHasFrostUSP[attacker])
{
g_iDmg[attacker] += (floatround(damage) * get_pcvar_num(g_iDmgMultiplier))
}
if((g_iDmg[attacker] >= get_pcvar_num(g_iFreezeDmg)) && (get_user_weapon(attacker) == CSW_USP) && g_bHasFrostUSP[attacker])
{
new sName[32]
get_user_name(victim, sName, charsmax(sName))
FrostEffect(victim)
FrostEffectRing(originF)
FrostEffectSound(originF2)
}
return HAM_IGNORED
}
public CheckModel(id)
{
if (is_user_alive(id))
{
set_pev(id, pev_viewmodel2, V_USP_MODEL)
set_pev(id, pev_weaponmodel2, P_USP_MODEL)
}
return PLUGIN_HANDLED
}
public CurrentWeapon(id)
{
if ((get_user_weapon(id) == CSW_USP) && g_bHasFrostUSP[id] == true)
{
CheckModel(id)
}
else
{
ClearSyncHud(id, g_iHudSync)
}
return PLUGIN_HANDLED
}
public FrostEffect(id)
{
// Only effect alive unfrozen zombies
if (!is_user_alive(id) || !is_user_zombie(id) || g_bIsFrozen[id])
return
message_begin(MSG_ONE_UNRELIABLE, g_iMsgScreenFade, _, id)
write_short(4096*1) // duration
write_short(4096*1) // hold time
write_short(0x0000) // fade type
write_byte(0) // red
write_byte(50) // green
write_byte(200) // blue
write_byte(100) // alpha
message_end()
message_begin(MSG_ONE, g_iStatusIcon, {0,0,0}, id)
write_byte(1) // Status [0=Hide, 1=Show, 2=Flash]
write_string("dmg_cold") // Sprite Name
write_byte(000) // Red
write_byte(206) // Green
write_byte(209) // Blue
message_end()
new ent = create_entity("info_target")
new Float:iOrigin[3]
entity_get_vector(id, EV_VEC_origin, iOrigin)
set_pev(ent, pev_body, 1)
iOrigin[2] -= 35
entity_set_origin(ent, iOrigin)
set_pev(ent, pev_owner, id)
set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 255)
entity_set_string(ent, EV_SZ_classname, "ent_frozen")
entity_set_int(ent, EV_INT_solid, 2)
new Float: iOriginNew[3]
entity_get_vector(id, EV_VEC_origin, iOriginNew)
switch(bio_has_custom_skin(id))
{
case false: set_user_rendering(id, kRenderFxGlowShell, 0, 200, 250, kRenderNormal, 16)
case true: set_user_rendering(bio_update_custom_skin(id), kRenderFxGlowShell, 0, 200, 250, kRenderNormal, 16)
}
g_bIsFrozen[id] = true
set_task(get_pcvar_float(g_fFrostTime), "RemoveFrost", id) // Time to Remove Frost Effect
}
public fw_PlayerPreThink(id)
{
// Not alive or Not Zombie
if (!is_user_alive(id) || !g_bIsFrozen[id])
return
// Stop motion
set_pev(id, pev_velocity, Float:{0.0,0.0,0.0})
set_user_maxspeed(id, 1.0)
}
// Frost Effect Sound
public FrostEffectSound(iOrigin[3])
{
new Entity = create_entity("info_target")
new Float:flOrigin[3]
IVecFVec(iOrigin, flOrigin)
entity_set_origin(Entity, flOrigin)
emit_sound(Entity, CHAN_WEAPON, "warcraft3/impalehit.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
remove_entity(Entity)
}
// Frost Effect Ring
FrostEffectRing(const Float:originF3[3])
{
// Largest ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF3, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF3[0]) // x
engfunc(EngFunc_WriteCoord, originF3[1]) // y
engfunc(EngFunc_WriteCoord, originF3[2]) // z
engfunc(EngFunc_WriteCoord, originF3[0]) // x axis
engfunc(EngFunc_WriteCoord, originF3[1]) // y axis
engfunc(EngFunc_WriteCoord, originF3[2]+100.0) // z axis
write_short(g_iUSPFrostSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(60) // width
write_byte(0) // noise
write_byte(0) // red
write_byte(200) // green
write_byte(255) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
}
// Remove Frost Effect
public RemoveFrost(id)
{
// Not alive or not frozen anymore
if (!is_user_alive(id) || !g_bIsFrozen[id])
return
// Unfreeze
g_bIsFrozen[id] = false;
set_task(0.1, "remove_jibs", id)
// Rest Player Speed
ExecuteHamB(Ham_Player_ResetMaxSpeed, id)
Remove_Rendering(id)
RemoveStatusIcon(id)
}
public remove_jibs(id)
{
RemoveEntity(id)
new Float:origin[3]
pev(id,pev_origin,origin)
message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0)
write_byte(TE_IMPLOSION)
write_coord_fl(origin[0]) // x
write_coord_fl(origin[1]) // y
write_coord_fl(origin[2] + 8.0) // z
write_byte(64) // radius
write_byte(10) // count
write_byte(3) // duration
message_end()
message_begin_fl(MSG_PVS,SVC_TEMPENTITY,origin,0)
write_byte(TE_SPARKS)
write_coord_fl(origin[0]) // x
write_coord_fl(origin[1]) // y
write_coord_fl(origin[2]) // z
message_end()
message_begin_fl(MSG_PAS,SVC_TEMPENTITY,origin,0)
write_byte(TE_BREAKMODEL)
write_coord_fl(origin[0]) // x
write_coord_fl(origin[1]) // y
write_coord_fl(origin[2] + 24.0) // z
write_coord_fl(16.0) // size x
write_coord_fl(16.0) // size y
write_coord_fl(16.0) // size z
write_coord(random_num(-50,50)) // velocity x
write_coord(random_num(-50,50)) // velocity y
write_coord_fl(0) // velocity z
write_byte(10) // random velocity
write_short(g_iGlassGibs) // model
write_byte(10) // count
write_byte(25) // life
write_byte(0x01) // flags
message_end()
}
stock ColorPrint(const id, const input[], any: ...)
{
new count = 1, players[32]
static msg[192]
vformat(msg, 191, input, 3)
replace_all(msg, 191, "!g", "^4")
replace_all(msg, 191, "!y", "^1")
replace_all(msg, 191, "!t", "^3")
replace_all(msg, 191, "!t2", "^0")
if (id) players[0] = id;else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected( players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i])
write_string(msg)
message_end()
}
}
}
}
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 RemoveStatusIcon(id)
{
// Remove Status Icon
message_begin(MSG_ONE, g_iStatusIcon, {0,0,0}, id)
write_byte(0) // Status [0=Hide, 1=Show, 2=Flash]
write_string("dmg_cold") // Sprite Name
message_end()
}
public fw_SetModel(entity, model[])
{
if(!is_valid_ent(entity))
return FMRES_IGNORED
if(!equali(model, W_OLD_USP_MODEL))
return FMRES_IGNORED
static iOwner, iStoredUSPID
// Frost USP Owner
iOwner = entity_get_edict(entity, EV_ENT_owner)
// Get drop weapon index (Frost USP) to use in fw_FrostUSPAddToPlayer forward
iStoredUSPID = find_ent_by_owner(-1, "weapon_usp", entity)
// If Player Has Frost USP and It's weapon_usp
if(g_bHasFrostUSP[iOwner] && is_valid_ent(iStoredUSPID))
{
// Setting weapon options
entity_set_int(iStoredUSPID, EV_INT_impulse, 1997)
// Rest Var
g_bHasFrostUSP[iOwner] = false
// Set weaponbox new model
entity_set_model(entity, W_USP_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public fw_FrostUSPAddToPlayer(FrostUSP, id)
{
// Make sure that this is USP
if(is_valid_ent(FrostUSP) && is_user_connected(id) && entity_get_int(FrostUSP, EV_INT_impulse) == 1997)
{
// Update Var
g_bHasFrostUSP[id] = true
// Reset weapon options
entity_set_int(FrostUSP, EV_INT_impulse, 0)
return HAM_HANDLED
}
return HAM_IGNORED
}
stock Remove_Rendering(id)
{
switch(bio_has_custom_skin(id))
{
case false: set_user_rendering(id, kRenderFxNone, 255, 255, 255, kRenderNormal, 16)
case true: set_user_rendering(bio_update_custom_skin(id), kRenderFxNone, 255, 255, 255, kRenderNormal, 16)
}
}
public RemoveEntity(id)
{
if(!is_user_connected(id))
return
new iEnt = find_ent_by_owner(-1, "ent_frozen", id);
if(pev_valid(iEnt))
remove_entity(iEnt)
}