Post by prodark on Dec 15, 2022 12:48:20 GMT
Hi everyone.. firstly i'm a new member on the forum because I have no knowledge to fix plugins, so need help
I want to use Nuke M4A1 on my server, the plugin is compiling normally but when active on the server an error appears in the logs
Important information: my addons is Zombie Plague Advance and the file: hamdata.ini is active on amxmodx/configs
Error message in log:
L 12/14/2022 - 18:29:55: Start of error session.
L 12/14/2022 - 18:29:55: Info (map "zm_effect") (file "addons/amxmodx/logs/error_20221214.log")
L 12/14/2022 - 18:29:55: [HAMSANDWICH] Function TraceAttack not found.
L 12/14/2022 - 18:29:55: [AMXX] Displaying debug trace (plugin "zp_extra_m4a1nuke.amxx", version "1.4")
L 12/14/2022 - 18:29:55: [AMXX] Run time error 10: native error (native "RegisterHam")
L 12/14/2022 - 18:29:55: [AMXX] [0] zp_extra_m4a1nuke.sma::plugin_init (line 64)
Line 64 on SMA: RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
Full SMA:
#include <amxmodx>
#include <zombieplague>
#include <dhudmessage>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <fun>
#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 const V_M4A1_MODEL[] = "models/zombie_plague/v_nuke_m4a1.mdl"
new const P_M4A1_MODEL[] = "models/zombie_plague/p_nuke_m4a1.mdl"
new const W_M4A1_MODEL[] = "models/zombie_plague/w_nuke_m4a1.mdl"
new const W_OLD_M4A1_MODEL[] = "models/w_m4a1.mdl"
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }; // Added By ShaunCraft
new g_iItemID, g_iMaxPlayers, g_iHudSync, g_iSpriteLaser, g_iFreezeDmg, g_fNukeTime, g_iDmgMultiplier
new bool:g_bHasNukeM4A1[33]
new g_iDmg[33]
public plugin_init()
{
register_plugin("[ZP] Extra Item: Nuke M4A1", "1.4", "ShaunCraft")
register_clcmd("say /nukeme","Nuke");
//Note: This Plugin is made by Raheem But a glitch of model i fix it.
//Raheem: Original Mader of Nuke M4a1.
//ShaunCraft: Fix the Model Bug.
// Cvars
g_fNukeTime = register_cvar("zp_nuke_m4a1_time", "2.0") // Freeze Time. It's Float you can make it 0.5
g_iFreezeDmg = register_cvar("zp_nuke_m4a1_damage", "1900") // Damage Requried So Zombie got Frozen
g_iDmgMultiplier = register_cvar("zp_nuke_m4a1_damage_x", "2") // Multiplie Weapon Damage
// Message IDS
g_iHudSync = CreateHudSyncObj()
// Server Max Slots
g_iMaxPlayers = get_maxplayers()
// ITEM NAME & COST
g_iItemID = zp_register_extra_item("Nuke M4A1 (Cega + 2x Dano) ", 30, ZP_TEAM_HUMAN) // It's cost 30 Ammo Pack
// 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")
// Forwards
register_forward(FM_SetModel, "fw_SetModel")
// Hams
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
RegisterHam(Ham_Item_AddToPlayer, "weapon_m4a1", "fw_NukeM4A1AddToPlayer")
}
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/xenobeam.spr")
}
public client_putinserver(id)
{
g_bHasNukeM4A1[id] = false
}
public client_disconnect(id)
{
g_bHasNukeM4A1[id] = false
RemoveEntity(id)
}
public zp_extra_item_selected(player, itemid)
{
if (itemid == g_iItemID)
{
g_bHasNukeM4A1[player] = true
ham_strip_weapon(player, "weapon_m4a1")
give_item(player, "weapon_m4a1")
cs_set_user_bpammo(player, CSW_M4A1, 90)
new sName[32]
get_user_name(player, sName, 31)
set_hudmessage(random(255), random(255), random(255), -1.0, 0.17, 1, 0.0, 5.0, 1.0, 1.0, -1)
ColorPrint(player, "^1[^4ZP^1] ^3Voce comprou Nuke M4A1^1!")
}
}
public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType) // Added By ShaunCraft
{
if(!is_user_alive(iAttacker))
return
new g_currentweapon = get_user_weapon(iAttacker)
if(g_currentweapon != CSW_M4A1) return
if(!g_bHasNukeM4A1[iAttacker]) return
static Float:end[3]
get_tr2(ptr, TR_vecEndPos, end)
if(iEnt)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY )
write_byte(TE_BEAMENTPOINT)
write_short(iAttacker | 0x1000)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_short(g_iSpriteLaser)
write_byte(1) // framerate
write_byte(5) // framerate
write_byte(1) // life
write_byte(20) // width
write_byte(0)// noise
write_byte(0)// r, g, b
write_byte(255)// r, g, b
write_byte(0)// r, g, b
write_byte(200) // brightness
write_byte(50) // speed
message_end()
}
public zp_user_infected_post(infected, infector)
{
if (g_bHasNukeM4A1[infected])
{
g_bHasNukeM4A1[infected] = false
}
}
public zp_user_humanized_post(id)
{
g_bHasNukeM4A1[id] = false
g_iDmg[id] = 0
RemoveEntity(id)
}
public event_round_start()
{
for (new i = 1; i <= g_iMaxPlayers; i++)
{
g_bHasNukeM4A1 = false
g_iDmg = 0
if(is_user_alive(i))
{
Remove_Rendering(i)
}
}
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(!is_user_connected(victim) || !is_user_connected(attacker) || zp_get_user_nemesis(victim) || attacker == victim || !attacker)
return HAM_IGNORED;
if(g_bHasNukeM4A1[attacker] && (get_user_weapon(attacker) == CSW_M4A1))
SetHamParamFloat(4, damage * get_pcvar_num(g_iDmgMultiplier))
// For Nuke Effect Sound
static originF2[3]
get_user_origin(victim, originF2)
if((get_user_weapon(attacker) == CSW_M4A1) && g_bHasNukeM4A1[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_M4A1) && g_bHasNukeM4A1[attacker])
{
new sName[32]
get_user_name(victim, sName, charsmax(sName))
Nuke(victim);
g_iDmg[attacker] = 0
}
return HAM_IGNORED
}
public Nuke(victim)
{
UTIL_ScreenFade(victim,{0,0,0}, 1.0, get_pcvar_float(g_fNukeTime),255);
set_user_rendering(victim, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 20)
set_task(get_pcvar_float(g_fNukeTime), "UnNuke", victim)
return PLUGIN_HANDLED;
}
public UnNuke(victim)
{
if(is_user_alive(victim))
{
set_user_rendering(victim);
}
}
public CheckModel(id)
{
if(zp_get_user_survivor(id))
return PLUGIN_HANDLED
if (is_user_alive(id))
{
set_pev(id, pev_viewmodel2, V_M4A1_MODEL)
set_pev(id, pev_weaponmodel2, P_M4A1_MODEL)
}
return PLUGIN_HANDLED
}
public CurrentWeapon(id)
{
if ((get_user_weapon(id) == CSW_M4A1) && g_bHasNukeM4A1[id] == true)
{
CheckModel(id)
}
else
{
ClearSyncHud(id, g_iHudSync)
}
return PLUGIN_HANDLED
}
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))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players)
write_byte(players)
write_string(msg)
message_end()
}
}
}
}
stock ham_strip_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0
new wId = get_weaponid(weapon)
if(!wId) return 0
new wEnt
while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
if(!wEnt) return 0
if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)
if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
ExecuteHamB(Ham_Item_Kill,wEnt)
set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))
return 1
}
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_bHasNukeM4A1[iOwner] && is_valid_ent(iStoredM4A1ID))
{
// Setting weapon options
entity_set_int(iStoredM4A1ID, EV_INT_impulse, 1997)
// Rest Var
g_bHasNukeM4A1[iOwner] = false
// Set weaponbox new model
entity_set_model(entity, W_M4A1_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public fw_NukeM4A1AddToPlayer(NukeM4A1, id)
{
// Make sure that this is M4A1
if(is_valid_ent(NukeM4A1) && is_user_connected(id) && entity_get_int(NukeM4A1, EV_INT_impulse) == 1997)
{
// Update Var
g_bHasNukeM4A1[id] = true
// Reset weapon options
entity_set_int(NukeM4A1, EV_INT_impulse, 0)
return HAM_HANDLED
}
return HAM_IGNORED
}
stock Remove_Rendering(id)
{
set_user_rendering(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)
}
#define FFADE_IN 0x0000 // Just here so we don't pass 0 into the function
#define FFADE_OUT 0x0001 // Fade out (not in)
#define FFADE_MODULATE 0x0002 // Modulate (don't blend)
#define FFADE_STAYOUT 0x0004 // ignores the duration, stays faded out until new ScreenFade message received
enum {
Red,
Green,
Blue
};
stock UTIL_ScreenFade(id=0,iColor[3]={0,0,0},Float:flFxTime=-1.0,Float:flHoldTime=0.0,iAlpha=0,iFlags=FFADE_IN,bool:bReliable=false,bool:bExternal=false)
{
if( id && !is_user_connected(id))
return;
new iFadeTime;
if( flFxTime == -1.0 )
{
iFadeTime = 4;
}
else
{
iFadeTime = FixedUnsigned16( flFxTime , 1<<12 );
}
static gmsgScreenFade;
if( !gmsgScreenFade )
{
gmsgScreenFade = get_user_msgid("ScreenFade");
}
new MSG_DEST;
if( bReliable )
{
MSG_DEST = id ? MSG_ONE : MSG_ALL;
}
else
{
MSG_DEST = id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST;
}
if( bExternal )
{
emessage_begin( MSG_DEST, gmsgScreenFade, _, id );
ewrite_short( iFadeTime );
ewrite_short( FixedUnsigned16( flHoldTime , 1<<12 ) );
ewrite_short( iFlags );
ewrite_byte( iColor[Red] );
ewrite_byte( iColor[Green] );
ewrite_byte( iColor[Blue] );
ewrite_byte( iAlpha );
emessage_end();
}
else
{
message_begin( MSG_DEST, gmsgScreenFade, _, id );
write_short( iFadeTime );
write_short( FixedUnsigned16( flHoldTime , 1<<12 ) );
write_short( iFlags );
write_byte( iColor[Red] );
write_byte( iColor[Green] );
write_byte( iColor[Blue] );
write_byte( iAlpha );
message_end();
}
}
stock FixedUnsigned16(Float:flValue, iScale)
{
new iOutput;
iOutput = floatround(flValue * iScale);
if ( iOutput < 0 )
iOutput = 0;
if ( iOutput > 0xFFFF )
iOutput = 0xFFFF;
return iOutput;
}
I want to use Nuke M4A1 on my server, the plugin is compiling normally but when active on the server an error appears in the logs
Important information: my addons is Zombie Plague Advance and the file: hamdata.ini is active on amxmodx/configs
Error message in log:
L 12/14/2022 - 18:29:55: Start of error session.
L 12/14/2022 - 18:29:55: Info (map "zm_effect") (file "addons/amxmodx/logs/error_20221214.log")
L 12/14/2022 - 18:29:55: [HAMSANDWICH] Function TraceAttack not found.
L 12/14/2022 - 18:29:55: [AMXX] Displaying debug trace (plugin "zp_extra_m4a1nuke.amxx", version "1.4")
L 12/14/2022 - 18:29:55: [AMXX] Run time error 10: native error (native "RegisterHam")
L 12/14/2022 - 18:29:55: [AMXX] [0] zp_extra_m4a1nuke.sma::plugin_init (line 64)
Line 64 on SMA: RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
Full SMA:
#include <amxmodx>
#include <zombieplague>
#include <dhudmessage>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <fun>
#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 const V_M4A1_MODEL[] = "models/zombie_plague/v_nuke_m4a1.mdl"
new const P_M4A1_MODEL[] = "models/zombie_plague/p_nuke_m4a1.mdl"
new const W_M4A1_MODEL[] = "models/zombie_plague/w_nuke_m4a1.mdl"
new const W_OLD_M4A1_MODEL[] = "models/w_m4a1.mdl"
new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }; // Added By ShaunCraft
new g_iItemID, g_iMaxPlayers, g_iHudSync, g_iSpriteLaser, g_iFreezeDmg, g_fNukeTime, g_iDmgMultiplier
new bool:g_bHasNukeM4A1[33]
new g_iDmg[33]
public plugin_init()
{
register_plugin("[ZP] Extra Item: Nuke M4A1", "1.4", "ShaunCraft")
register_clcmd("say /nukeme","Nuke");
//Note: This Plugin is made by Raheem But a glitch of model i fix it.
//Raheem: Original Mader of Nuke M4a1.
//ShaunCraft: Fix the Model Bug.
// Cvars
g_fNukeTime = register_cvar("zp_nuke_m4a1_time", "2.0") // Freeze Time. It's Float you can make it 0.5
g_iFreezeDmg = register_cvar("zp_nuke_m4a1_damage", "1900") // Damage Requried So Zombie got Frozen
g_iDmgMultiplier = register_cvar("zp_nuke_m4a1_damage_x", "2") // Multiplie Weapon Damage
// Message IDS
g_iHudSync = CreateHudSyncObj()
// Server Max Slots
g_iMaxPlayers = get_maxplayers()
// ITEM NAME & COST
g_iItemID = zp_register_extra_item("Nuke M4A1 (Cega + 2x Dano) ", 30, ZP_TEAM_HUMAN) // It's cost 30 Ammo Pack
// 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")
// Forwards
register_forward(FM_SetModel, "fw_SetModel")
// Hams
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_wall", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_door", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_door_rotating", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_plat", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "func_rotating", "fw_TraceAttack", 1) // Added By ShaunCraft
RegisterHam(Ham_TraceAttack, "player", "TraceAttack", 1)
RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
RegisterHam(Ham_Item_AddToPlayer, "weapon_m4a1", "fw_NukeM4A1AddToPlayer")
}
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/xenobeam.spr")
}
public client_putinserver(id)
{
g_bHasNukeM4A1[id] = false
}
public client_disconnect(id)
{
g_bHasNukeM4A1[id] = false
RemoveEntity(id)
}
public zp_extra_item_selected(player, itemid)
{
if (itemid == g_iItemID)
{
g_bHasNukeM4A1[player] = true
ham_strip_weapon(player, "weapon_m4a1")
give_item(player, "weapon_m4a1")
cs_set_user_bpammo(player, CSW_M4A1, 90)
new sName[32]
get_user_name(player, sName, 31)
set_hudmessage(random(255), random(255), random(255), -1.0, 0.17, 1, 0.0, 5.0, 1.0, 1.0, -1)
ColorPrint(player, "^1[^4ZP^1] ^3Voce comprou Nuke M4A1^1!")
}
}
public fw_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType) // Added By ShaunCraft
{
if(!is_user_alive(iAttacker))
return
new g_currentweapon = get_user_weapon(iAttacker)
if(g_currentweapon != CSW_M4A1) return
if(!g_bHasNukeM4A1[iAttacker]) return
static Float:end[3]
get_tr2(ptr, TR_vecEndPos, end)
if(iEnt)
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
write_short(iEnt)
message_end()
}
else
{
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
message_end()
}
message_begin(MSG_BROADCAST, SVC_TEMPENTITY )
write_byte(TE_BEAMENTPOINT)
write_short(iAttacker | 0x1000)
engfunc(EngFunc_WriteCoord, end[0])
engfunc(EngFunc_WriteCoord, end[1])
engfunc(EngFunc_WriteCoord, end[2])
write_short(g_iSpriteLaser)
write_byte(1) // framerate
write_byte(5) // framerate
write_byte(1) // life
write_byte(20) // width
write_byte(0)// noise
write_byte(0)// r, g, b
write_byte(255)// r, g, b
write_byte(0)// r, g, b
write_byte(200) // brightness
write_byte(50) // speed
message_end()
}
public zp_user_infected_post(infected, infector)
{
if (g_bHasNukeM4A1[infected])
{
g_bHasNukeM4A1[infected] = false
}
}
public zp_user_humanized_post(id)
{
g_bHasNukeM4A1[id] = false
g_iDmg[id] = 0
RemoveEntity(id)
}
public event_round_start()
{
for (new i = 1; i <= g_iMaxPlayers; i++)
{
g_bHasNukeM4A1 = false
g_iDmg = 0
if(is_user_alive(i))
{
Remove_Rendering(i)
}
}
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
if(!is_user_connected(victim) || !is_user_connected(attacker) || zp_get_user_nemesis(victim) || attacker == victim || !attacker)
return HAM_IGNORED;
if(g_bHasNukeM4A1[attacker] && (get_user_weapon(attacker) == CSW_M4A1))
SetHamParamFloat(4, damage * get_pcvar_num(g_iDmgMultiplier))
// For Nuke Effect Sound
static originF2[3]
get_user_origin(victim, originF2)
if((get_user_weapon(attacker) == CSW_M4A1) && g_bHasNukeM4A1[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_M4A1) && g_bHasNukeM4A1[attacker])
{
new sName[32]
get_user_name(victim, sName, charsmax(sName))
Nuke(victim);
g_iDmg[attacker] = 0
}
return HAM_IGNORED
}
public Nuke(victim)
{
UTIL_ScreenFade(victim,{0,0,0}, 1.0, get_pcvar_float(g_fNukeTime),255);
set_user_rendering(victim, kRenderFxGlowShell, 0, 255, 0, kRenderNormal, 20)
set_task(get_pcvar_float(g_fNukeTime), "UnNuke", victim)
return PLUGIN_HANDLED;
}
public UnNuke(victim)
{
if(is_user_alive(victim))
{
set_user_rendering(victim);
}
}
public CheckModel(id)
{
if(zp_get_user_survivor(id))
return PLUGIN_HANDLED
if (is_user_alive(id))
{
set_pev(id, pev_viewmodel2, V_M4A1_MODEL)
set_pev(id, pev_weaponmodel2, P_M4A1_MODEL)
}
return PLUGIN_HANDLED
}
public CurrentWeapon(id)
{
if ((get_user_weapon(id) == CSW_M4A1) && g_bHasNukeM4A1[id] == true)
{
CheckModel(id)
}
else
{
ClearSyncHud(id, g_iHudSync)
}
return PLUGIN_HANDLED
}
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))
{
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players)
write_byte(players)
write_string(msg)
message_end()
}
}
}
}
stock ham_strip_weapon(id,weapon[])
{
if(!equal(weapon,"weapon_",7)) return 0
new wId = get_weaponid(weapon)
if(!wId) return 0
new wEnt
while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
if(!wEnt) return 0
if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)
if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
ExecuteHamB(Ham_Item_Kill,wEnt)
set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))
return 1
}
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_bHasNukeM4A1[iOwner] && is_valid_ent(iStoredM4A1ID))
{
// Setting weapon options
entity_set_int(iStoredM4A1ID, EV_INT_impulse, 1997)
// Rest Var
g_bHasNukeM4A1[iOwner] = false
// Set weaponbox new model
entity_set_model(entity, W_M4A1_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public fw_NukeM4A1AddToPlayer(NukeM4A1, id)
{
// Make sure that this is M4A1
if(is_valid_ent(NukeM4A1) && is_user_connected(id) && entity_get_int(NukeM4A1, EV_INT_impulse) == 1997)
{
// Update Var
g_bHasNukeM4A1[id] = true
// Reset weapon options
entity_set_int(NukeM4A1, EV_INT_impulse, 0)
return HAM_HANDLED
}
return HAM_IGNORED
}
stock Remove_Rendering(id)
{
set_user_rendering(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)
}
#define FFADE_IN 0x0000 // Just here so we don't pass 0 into the function
#define FFADE_OUT 0x0001 // Fade out (not in)
#define FFADE_MODULATE 0x0002 // Modulate (don't blend)
#define FFADE_STAYOUT 0x0004 // ignores the duration, stays faded out until new ScreenFade message received
enum {
Red,
Green,
Blue
};
stock UTIL_ScreenFade(id=0,iColor[3]={0,0,0},Float:flFxTime=-1.0,Float:flHoldTime=0.0,iAlpha=0,iFlags=FFADE_IN,bool:bReliable=false,bool:bExternal=false)
{
if( id && !is_user_connected(id))
return;
new iFadeTime;
if( flFxTime == -1.0 )
{
iFadeTime = 4;
}
else
{
iFadeTime = FixedUnsigned16( flFxTime , 1<<12 );
}
static gmsgScreenFade;
if( !gmsgScreenFade )
{
gmsgScreenFade = get_user_msgid("ScreenFade");
}
new MSG_DEST;
if( bReliable )
{
MSG_DEST = id ? MSG_ONE : MSG_ALL;
}
else
{
MSG_DEST = id ? MSG_ONE_UNRELIABLE : MSG_BROADCAST;
}
if( bExternal )
{
emessage_begin( MSG_DEST, gmsgScreenFade, _, id );
ewrite_short( iFadeTime );
ewrite_short( FixedUnsigned16( flHoldTime , 1<<12 ) );
ewrite_short( iFlags );
ewrite_byte( iColor[Red] );
ewrite_byte( iColor[Green] );
ewrite_byte( iColor[Blue] );
ewrite_byte( iAlpha );
emessage_end();
}
else
{
message_begin( MSG_DEST, gmsgScreenFade, _, id );
write_short( iFadeTime );
write_short( FixedUnsigned16( flHoldTime , 1<<12 ) );
write_short( iFlags );
write_byte( iColor[Red] );
write_byte( iColor[Green] );
write_byte( iColor[Blue] );
write_byte( iAlpha );
message_end();
}
}
stock FixedUnsigned16(Float:flValue, iScale)
{
new iOutput;
iOutput = floatround(flValue * iScale);
if ( iOutput < 0 )
iOutput = 0;
if ( iOutput > 0xFFFF )
iOutput = 0xFFFF;
return iOutput;
}