Post by ShaunCraft15 on Dec 14, 2021 20:06:28 GMT
Hello Guys i have problem on my fire m4a1 plugin on tracer on zpsp i fix model bug fix plz code
/*-----------------------------------------------------------------------------------------------------
[[ZP] Extra Item: Fire M4A1]
- Credits:
* [P]erfec[T] [S]cr[@]s[H]: For The Elemental Code
* ShaunCraft: Removing The Frost Effect From Elemental and add the new tracer
- YouTube:
* Link: https://www.youtube.com/channel/UCWVhiguRxt4tyacImGjiqQw
- Releases:
V1.0:
* First Release
V1.1:
* Tracer is always show
V1.2:
* Changed The Tracer
V1.3:
* Fixed More Bugs
V1.4:
* Removed the sprite Folder
* Fix the color of tracer
V1.5:
* Fixed The W_ Model Bug
* Supported For ZP4.3 + ZPA + ZPSP
V1.6:
* Added Fire Slowdown For ZP43 and ZPA + Changed Tracer System with fixed one
* New Fire M4A1 skin from Lost Souls New Update!!
V1.7:
* Added Fire Hud Icon When Zombie Burned
* Fix Damage System Burn Humans on ZP50
* Added ConCmd For Admin to burn users "zp_burn_user name"
* Supported Crxranks and you can disable it
* Added Command create_blast2 and you can disable it
* Add Block For Sniper Class (Custom Class) On ZP50
Sorry For bad english!!!
Enjoy :)
------------------------------------------------------------------------------------------------------*/
#define PLUGIN "[ZP-ALL] Extra Items: Fire M4A1"
#define VERSION "1.7"
#define AUTHOR "ShaunCraft"
//ZP43 Version if u don't went Zombie Plague 4.3 Version it use // from #example to ---> //#example
//#define ZP43_VERSION
//ZP50 Version if u don't went Zombie Plague 5.0 Version it use // from #example to ---> //#example
//#define ZP50_VERSION
//ZPA Version if u don't went Zombie Plague Advance Version it use // from #example to ---> //#example
//#define ZPA_VERSION
//ZPSP Version if u don't went Zombie Plague Special Version it use // from #example to ---> //#example
#define ZPSP_VERSION
/*------------------------------------------=[Includes]=--------------------------------------------*/
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <xs>
#include <cstrike>
//This define For Blast Effect From Grenade Fire if u dont need this use // from #example to ---> //#example
//#define ALLOW_MAKE_BLAST_EFFECT
//This define For Buy This Item with Level if u dont have or use crxranks use // from #example to ---> //#example
//#define CRXRANKS
//If You Choose Zombie Plague 4.3
#if defined ZP43_VERSION
#include <zombieplague>
#endif
//If You Choose Zombie Plague 5.0
#if defined ZP50_VERSION
//If You Have Sniper Class on Zombie Plague 5.0 if u don't Have Sniper Class use // from #example to ---> //#example
//#define ZP50_CUSTOM_CLASS
#include <zp50_core>
#include <zp50_items>
#include <zp50_class_nemesis>
#include <zp50_class_survivor>
#include <zp50_colorchat>
#include <zp50_grenade_fire>
#if defined ZP50_CUSTOM_CLASS
#include <zp50_class_sniper>
#endif
#endif
//If You Choose Zombie Plague Advance 1.6.1
#if defined ZPA_VERSION
#include <zombie_plague_advance>
#endif
//If You Choose Zombie Plague Special
#if defined ZPSP_VERSION
#include <zombie_plague_special>
#endif
/*-------------------------------=[Variables, Conts, Defines & Cvars]=-------------------------------*/
new FM_V_MODEL[] = "models/zombie_plague/v_fire_m4a1.mdl"
new FM_P_MODEL[] = "models/zombie_plague/p_fire_m4a1.mdl"
new FM_W_MODEL[] = "models/zombie_plague/w_fire_m4a1.mdl"
new g_itemid, bool:g_firem4[33]
new tracer_spr
#if defined ALLOW_MAKE_BLAST_EFFECT
new const GRENADE_FIRE[64] = "zombie_plague/grenade_explode.wav"
new g_sprite_grenade_ring[64] = "sprites/shockwave.spr"
new g_exploSpr
#endif
// Cvars
new cvar_dmgmultiplier, g_maxplayers, cvar_oneround, cvar_fire_damage
#if defined ZP43_VERSION
new cvar_burndmg, cvar_slowdown, cvar_hud_icon, cvar_burn_time
#define TASK_BURN 100
#define ID_BURN (taskid - TASK_BURN)
new g_burning_duration[33] // burning task duration
new g_MsgDamage
new const fire_player[][] = {"zombie_plague/zombie_burn3.wav", "zombie_plague/zombie_burn4.wav", "zombie_plague/zombie_burn5.wav", "zombie_plague/zombie_burn6.wav", "zombie_plague/zombie_burn7.wav"}
// Sprites
new g_sprite_grenade_fire[64] = "sprites/flame.spr"
new g_sprite_grenade_smoke[64] = "sprites/black_smoke3.spr"
new g_flameSpr, g_smokeSpr
#endif
#if defined ZPA_VERSION
new cvar_burndmg, cvar_slowdown, cvar_hud_icon, cvar_burn_time
#define TASK_BURN 100
#define ID_BURN (taskid - TASK_BURN)
new g_burning_duration[33] // burning task duration
new g_MsgDamage
new const fire_player[][] = {"zombie_plague/zombie_burn3.wav", "zombie_plague/zombie_burn4.wav", "zombie_plague/zombie_burn5.wav", "zombie_plague/zombie_burn6.wav", "zombie_plague/zombie_burn7.wav"}
// Sprites
new g_sprite_grenade_fire[64] = "sprites/flame.spr"
new g_sprite_grenade_smoke[64] = "sprites/black_smoke3.spr"
new g_flameSpr, g_smokeSpr
#endif
#if defined CRXRANKS
new cvar_req_level
#endif
//Bot Cvars
new g_hamczbots, cvar_botquota
new g_iDmg[33]
#if defined ZP50_VERSION
new cvar_fire_time
#endif
#if defined ZPSP_VERSION
new cvar_fire_time
#endif
new g_currentweapon[33]
#define ITEM_NAME "Fire M4A1 (Burn + x2 Damage)"
#define ITEM_COST 50
/*---------------------------------------=[Plugin Register]=-----------------------------------------*/
public plugin_init()
{
// Plugin Register
register_plugin(PLUGIN, VERSION, AUTHOR)
// Cvar Register
cvar_dmgmultiplier = register_cvar("zp_firem4_dmg_multiplier", "2") //Damage Multiplier
#if defined ZP43_VERSION
cvar_burndmg = register_cvar("zp_firem4_fire_dmg", "10") // Fire Damage
cvar_slowdown = register_cvar("zp_firem4_fire_slowdown", "0.5") //Fire M4A1 Burn Effect Slowdown
cvar_hud_icon = register_cvar("zp_firem4_fire_hud_icon", "1") //Fire M4A1 Fire Hud
cvar_burn_time = register_cvar("zp_firem4_burn_time", "10")
g_MsgDamage = get_user_msgid("Damage")
#endif
#if defined ZPA_VERSION
cvar_burndmg = register_cvar("zp_firem4_fire_dmg", "10") // Fire Damage
cvar_slowdown = register_cvar("zp_firem4_fire_slowdown", "0.5") //Fire M4A1 Burn Effect Slowdown
cvar_hud_icon = register_cvar("zp_firem4_fire_hud_icon", "1") //Fire M4A1 Fire Hud
cvar_burn_time = register_cvar("zp_firem4_burn_time", "10")
g_MsgDamage = get_user_msgid("Damage")
#endif
cvar_oneround = register_cvar("zp_firem4_one_round", "1") //Fire M4A1 For One Round
cvar_fire_damage = register_cvar("zp_firem4_fire_damage", "500") // Max Current Damage to Burn Task
#if defined ZP50_VERSION
cvar_fire_time = register_cvar("zp_firem4_fire_time", "5")
#endif
#if defined ZPSP_VERSION
cvar_fire_time = register_cvar("zp_firem4_fire_time", "5")
#endif
// Item Register For ALL ZP VERSIONS
#if defined ZP43_VERSION
g_itemid = zp_register_extra_item(ITEM_NAME, ITEM_COST, ZP_TEAM_HUMAN)
#endif
#if defined ZP50_VERSION
g_itemid = zp_items_register(ITEM_NAME, ITEM_COST)
#endif
#if defined ZPA_VERSION
g_itemid = zp_register_extra_item(ITEM_NAME, ITEM_COST, ZP_TEAM_HUMAN)
#endif
#if defined ZPSP_VERSION
g_itemid = zp_register_extra_item(ITEM_NAME, ITEM_COST, ZP_TEAM_HUMAN)
#endif
//Admin Funny Command
register_concmd("zp_burn_user", "cmd_burn_user", 0)
// Message: Cur Weapon
register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
// Events
register_event("DeathMsg", "Death", "a")
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_PlayerPreThink, "fw_PlayerPreThink")
register_forward(FM_SetModel, "fw_SetModel")
// Cvar Pointer
cvar_botquota = get_cvar_pointer("bot_quota")
// Hams
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1 )
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Item_AddToPlayer, "weapon_m4a1", "fw_AddToPlayer")
RegisterHam(Ham_TraceAttack, "player", "Ham_TraceAttack_Player", false);
RegisterHam(Ham_TraceAttack, "worldspawn", "Ham_TraceAttack_Player", false);
RegisterHam(Ham_TraceAttack, "func_breakable", "Ham_TraceAttack_Player", false)
RegisterHam(Ham_TraceAttack, "func_wall", "Ham_TraceAttack_Player", false)
RegisterHam(Ham_TraceAttack, "func_door", "Ham_TraceAttack_Player", false)
RegisterHam(Ham_TraceAttack, "func_door_rotating", "Ham_TraceAttack_Player", false)
RegisterHam(Ham_TraceAttack, "func_plat", "Ham_TraceAttack_Player", false)
RegisterHam(Ham_TraceAttack, "func_train", "Ham_TraceAttack_Player", false)
RegisterHam(Ham_TraceAttack, "func_conveyor", "Ham_TraceAttack_Player", false)
RegisterHam(Ham_TraceAttack, "hostage_entity", "Ham_TraceAttack_Player", false)
RegisterHam(Ham_TraceAttack, "func_illusionary", "Ham_TraceAttack_Player", false)
#if defined CS_HAM_BOTS
RegisterHamBots(Ham_TraceAttack, "Ham_TraceAttack_Player")
RegisterHamBots(Ham_TakeDamage, "fw_TakeDamage")
#endif
RegisterHam(Ham_Item_Deploy, "weapon_m4a1", "fw_ItemDeploy_Post", 1);
g_maxplayers = get_maxplayers()
}
/*------------------------------------------=[Precaches]=--------------------------------------------*/
public plugin_precache()
{
// Models
precache_model(FM_V_MODEL)
precache_model(FM_P_MODEL)
precache_model(FM_W_MODEL)
// Tracer Spr
tracer_spr = precache_model("sprites/xenobeam.spr")
//Blast Spr
#if defined ALLOW_MAKE_BLAST_EFFECT
g_exploSpr = precache_model(g_sprite_grenade_ring)
precache_sound(GRENADE_FIRE)
#endif
#if defined ZP43_VERSION
g_flameSpr = precache_model(g_sprite_grenade_fire)
g_smokeSpr = precache_model(g_sprite_grenade_smoke)
new i
for (i = 0; i < sizeof fire_player; i++)
engfunc(EngFunc_PrecacheSound, fire_player[i])
#endif
#if defined ZPA_VERSION
g_flameSpr = precache_model(g_sprite_grenade_fire)
g_smokeSpr = precache_model(g_sprite_grenade_smoke)
new i
for (i = 0; i < sizeof fire_player; i++)
engfunc(EngFunc_PrecacheSound, fire_player[i])
#endif
}
/*---------------------------------------=[Bug Prevention]=-----------------------------------------*/
public event_round_start()
{
if(get_pcvar_num(cvar_oneround))
{
for (new i = 1; i <= g_maxplayers; i++)
{
g_firem4[i] = false
#if defined ZP43_VERSION
remove_task(i+TASK_BURN)
g_burning_duration[i] = 0
#endif
#if defined ZPA_VERSION
remove_task(i+TASK_BURN)
g_burning_duration[i] = 0
#endif
}
}
}
public CheckModel(id)
{
#if defined ZP43_VERSION
if(zp_get_user_survivor(id)) return PLUGIN_HANDLED
#endif
#if defined ZP50_VERSION
if(zp_class_survivor_get(id)) return PLUGIN_HANDLED
#endif
#if defined ZPA_VERSION
if(zp_get_user_survivor(id)) return PLUGIN_HANDLED
#endif
#if defined ZPSP_VERSION
if(zp_get_user_survivor(id)) return PLUGIN_HANDLED
#endif
if (is_user_alive(id))
{
set_pev(id, pev_viewmodel2, FM_V_MODEL)
set_pev(id, pev_weaponmodel2, FM_P_MODEL)
}
return PLUGIN_HANDLED
}
public CurrentWeapon(id)
{
if ((get_user_weapon(id) == CSW_M4A1) && g_firem4[id] == true)
{
CheckModel(id)
}
else
{
ClearSyncHud(id, CreateHudSyncObj())
}
return PLUGIN_HANDLED
}
public Death() g_firem4[read_data(2)] = false
#if defined ZP43_VERSION
public fw_PlayerSpawn_Post(victim, attacker, shouldgib)
{
remove_task(victim+TASK_BURN)
g_burning_duration[victim] = 0
}
// Ham Player Killed Forward
public fw_PlayerKilled(victim, attacker, shouldgib)
{
// Stop burning
remove_task(victim+TASK_BURN)
g_burning_duration[victim] = 0
}
#endif
#if defined ZPA_VERSION
public fw_PlayerSpawn_Post(victim, attacker, shouldgib)
{
remove_task(victim+TASK_BURN)
g_burning_duration[victim] = 0
}
// Ham Player Killed Forward
public fw_PlayerKilled(victim, attacker, shouldgib)
{
// Stop burning
remove_task(victim+TASK_BURN)
g_burning_duration[victim] = 0
}
#endif
// Message Current Weapon
public message_cur_weapon(msg_id, msg_dest, id)
{
// Doesn't have a Sawn Off
if (!g_firem4[id])
return PLUGIN_CONTINUE
// Isn't alive / not active weapon
if (!is_user_alive(id) || get_msg_arg_int(1) != 1)
return PLUGIN_CONTINUE
// Update Weapon Array
g_currentweapon[id] = get_msg_arg_int(2) // get weapon ID
// Weapon isn't M3
if(g_currentweapon[id] != CSW_M4A1)
return PLUGIN_CONTINUE;
// Replace Models
entity_set_string(id, EV_SZ_viewmodel, FM_V_MODEL)
entity_set_string(id, EV_SZ_weaponmodel, FM_P_MODEL)
return PLUGIN_CONTINUE;
}
public client_disconnect(id)
{
g_firem4[id] = false
#if defined ZP43_VERSION
remove_task(id+TASK_BURN)
g_burning_duration[id] = 0
#endif
#if defined ZPA_VERSION
remove_task(id+TASK_BURN)
g_burning_duration[id] = 0
#endif
}
public client_putinserver(id)
{
g_firem4[id] = false
#if defined ZP43_VERSION
remove_task(id+TASK_BURN)
g_burning_duration[id] = 0
#endif
#if defined ZPA_VERSION
remove_task(id+TASK_BURN)
g_burning_duration[id] = 0
#endif
if (is_user_bot(id) && !g_hamczbots && cvar_botquota)
{
set_task(0.1, "register_ham_czbots", id);
}
}
public register_ham_czbots(id)
{
if (g_hamczbots || !is_user_bot(id) || !get_pcvar_num(cvar_botquota))
return;
RegisterHamFromEntity(Ham_TakeDamage, id, "fw_TakeDamage");
RegisterHamFromEntity(Ham_TraceAttack, id, "Ham_TraceAttack_Player", false);
g_hamczbots = true;
}
#if defined ZP43_VERSION
public zp_user_humanized_post(id, human)
{
g_firem4[id] = false
remove_task(id+TASK_BURN)
g_burning_duration[id] = 0
}
public zp_user_infected_post(id)
{
g_firem4[id] = false
remove_task(id+TASK_BURN)
g_burning_duration[id] = 0
}
#endif
#if defined ZPA_VERSION
public zp_user_humanized_post(id, human)
{
g_firem4[id] = false
remove_task(id+TASK_BURN)
g_burning_duration[id] = 0
}
public zp_user_infected_post(id)
{
g_firem4[id] = false
remove_task(id+TASK_BURN)
g_burning_duration[id] = 0
}
#endif
#if defined ZP50_VERSION
public zp_fw_core_infect_post(id) g_firem4[id] = false
public zp_fw_core_cure_post(id) g_firem4[id] = false
#endif
#if defined ZPSP_VERSION
public zp_user_infected_post(id) g_firem4[id] = false
public zp_user_humanized_post(id) g_firem4[id] = false
#endif
/*----------------------------------=[The Concmd]=------------------------------------*/
public cmd_burn_user(id, level, cid)
{
if ((get_user_flags(id) & level) != level)
return PLUGIN_HANDLED;
static arg[32], player;
read_argv(1, arg, charsmax(arg));
player = cmd_target(id, arg, (CMDTARGET_ONLY_ALIVE | CMDTARGET_ALLOW_SELF));
if (!player)
return PLUGIN_HANDLED;
#if defined ZP43_VERSION
set_user_burn(player)
zp_color_print(player, "You Get Burned By ^04Admin")
zp_color_print(id, "Player ^04%s ^01Burned!!")
#endif
#if defined ZPA_VERSION
set_user_burn(player)
zp_color_print(player, "You Get Burned By ^04Admin")
zp_color_print(id, "Player ^04%s ^01Burned!!")
#endif
#if defined ZPSP_VERSION
zp_set_user_burn(player, true)
zp_color_print(player, "You Get Burned By ^04Admin")
zp_color_print(id, "Player ^04%s ^01Burned!!")
set_task(get_pcvar_float(cvar_fire_time),"RemoveFire",player)
#endif
#if defined ZP50_VERSION
zp_grenade_fire_set(player, true)
zp_colored_print(player, "You Get Burned By ^04Admin")
zp_colored_print(id, "Player ^04%s ^01Burned!!")
set_task(get_pcvar_float(cvar_fire_time),"RemoveFire",player)
#endif
return PLUGIN_HANDLED;
}
/*----------------------------------=[Action on Choose the Item]=------------------------------------*/
#if defined ZP43_VERSION
public zp_extra_item_selected(player, itemid)
{
// check if the selected item matches any of our registered ones
if (itemid == g_itemid)
{
#if defined CRXRANKS
if(crxranks_get_user_level(player) <= get_pcvar_num(cvar_req_level))
{
zp_color_print(player, "You Need Level ^04%d ^01To Buy This Item", get_pcvar_num(cvar_req_level))
return PLUGIN_HANDLED
}
#endif
if(g_firem4[player])
{
zp_color_print(player, "You already Have ^4Fire ^3M4A1")
return PLUGIN_HANDLED
}
if (!zp_has_round_started())
{
zp_color_print(player, "Wait the round begins....")
return PLUGIN_HANDLED
}
g_firem4[player] = true;
ham_strip_weapon(player, "weapon_m4a1")
give_item(player, "weapon_m4a1");
cs_set_user_bpammo(player, CSW_M4A1, 90);
zp_color_print(player, "You Bought ^4Fire ^3M4A1")
}
return PLUGIN_CONTINUE
}
#endif
#if defined ZPA_VERSION
public zp_extra_item_selected(player, itemid)
{
// check if the selected item matches any of our registered ones
if (itemid == g_itemid)
{
#if defined CRXRANKS
if(crxranks_get_user_level(player) <= get_pcvar_num(cvar_req_level))
{
zp_color_print(player, "You Need Level ^04%d ^01To Buy This Item", get_pcvar_num(cvar_req_level))
return PLUGIN_HANDLED
}
#endif
if(g_firem4[player])
{
zp_color_print(player, "You already Have ^4Fire ^3M4A1")
return PLUGIN_HANDLED
}
if (!zp_has_round_started())
{
zp_color_print(player, "Wait the round begins....")
return PLUGIN_HANDLED
}
g_firem4[player] = true;
ham_strip_weapon(player, "weapon_m4a1")
give_item(player, "weapon_m4a1");
cs_set_user_bpammo(player, CSW_M4A1, 90);
zp_color_print(player, "You Bought ^4Fire ^3M4A1")
}
return PLUGIN_CONTINUE
}
#endif
#if defined ZP50_VERSION
public zp_fw_items_select_pre(id, itemid)
{
if(itemid != g_itemid) return ZP_ITEM_AVAILABLE;
if(zp_core_is_zombie(id)) return ZP_ITEM_DONT_SHOW;
if(zp_class_survivor_get(id)) return ZP_ITEM_DONT_SHOW;
#if defined ZP50_CUSTOM_CLASS
if(zp_class_sniper_get(id)) return ZP_ITEM_DONT_SHOW;
#endif
#if defined CRXRANKS
new szText[16]
formatex(szText, charsmax(szText), "\r[Level %d Needed]", get_pcvar_num(cvar_req_level))
if(crxranks_get_user_level(player) <= get_pcvar_num(cvar_req_level))
{
zp_items_menu_text_add(szText)
return ZP_ITEM_NOT_AVAILABLE
}
else zp_items_menu_text_add("\y[Available For You]")
#endif
if(g_firem4[id])
{
zp_items_menu_text_add(" \r[Buyed]")
return ZP_ITEM_NOT_AVAILABLE
}
return ZP_ITEM_AVAILABLE;
}
public zp_fw_items_select_post(player, itemid)
{
if(itemid != g_itemid)
return;
g_firem4[player] = true;
ham_strip_weapon(player, "weapon_m4a1")
give_item(player, "weapon_m4a1");
cs_set_user_bpammo(player, CSW_M4A1, 90);
zp_colored_print(player, "You Bought ^4Fire ^3M4A1")
}
#endif
#if defined ZPSP_VERSION
public zp_extra_item_selected(player, itemid)
{
// check if the selected item matches any of our registered ones
if (itemid == g_itemid)
{
g_firem4[player] = true;
ham_strip_weapon(player, "weapon_m4a1")
give_item(player, "weapon_m4a1");
cs_set_user_bpammo(player, CSW_M4A1, 90);
zp_color_print(player, "You Bought ^4Fire ^3M4A1")
}
return PLUGIN_CONTINUE
}
#endif
/*----------------------------------------=[Custom Model]=-------------------------------------------*/
public event_CurWeapon(id)
{
#if defined ZP43_VERSION
if (!is_user_alive(id) || zp_get_user_zombie(id)) return PLUGIN_HANDLED;
#endif
#if defined ZP50_VERSION
if (!is_user_alive(id) || zp_core_is_zombie(id)) return PLUGIN_HANDLED;
#endif
#if defined ZPA_VERSION
if (!is_user_alive(id) || zp_get_user_zombie(id)) return PLUGIN_HANDLED;
#endif
#if defined ZPSP_VERSION
if (!is_user_alive(id) || zp_get_user_zombie(id)) return PLUGIN_HANDLED;
#endif
if (read_data(2) == CSW_AK47 && g_firem4[id])
{
set_pev(id, pev_viewmodel2, FM_V_MODEL);
set_pev(id, pev_weaponmodel2, FM_P_MODEL);
}
return PLUGIN_CONTINUE;
}
public fw_ItemDeploy_Post(weapon_entity)
{
static id; id = get_weapon_ent_owner(weapon_entity);
if (pev_valid(id) && g_firem4[id])
{
set_pev(id, pev_viewmodel2, FM_V_MODEL);
set_pev(id, pev_weaponmodel2, FM_P_MODEL);
}
}
/*----------------------------------------=[Weapon Tracer]=------------------------------------------*/
public Ham_TraceAttack_Player(iVictim, iAttacker, Float:fDamage, Float:fDeriction[3], iTraceHandle, iBitDamage)
{
if(!is_user_alive(iAttacker)) return
if(get_user_weapon(iAttacker) != CSW_M4A1) return
free_tr2(iTraceHandle)
if(!g_firem4[iAttacker]) return
static Float:end[3]
get_tr2(iTraceHandle, TR_vecEndPos, 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(tracer_spr)
write_byte(1) // framerate
write_byte(5) // framerate
write_byte(1) // life
write_byte(23) // width
write_byte(0)// noise
write_byte(200)// r, g, b
write_byte(80)// r, g, b
write_byte(4)// r, g, b
write_byte(200) // brightness
write_byte(5) // speed
message_end()
}
/*-----------------------------------------=[Take Damage]=-------------------------------------------*/
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
static Float:originF[3]
pev(victim, pev_origin, originF)
if(is_user_alive(attacker) && get_user_weapon(attacker) == CSW_M4A1 && g_firem4[attacker])
{
SetHamParamFloat(4, damage * get_pcvar_float(cvar_dmgmultiplier));
}
if((get_user_weapon(attacker) == CSW_M4A1) && g_firem4[attacker])
{
g_iDmg[attacker] += (floatround(damage) * get_pcvar_num(cvar_dmgmultiplier))
}
#if defined ZP43_VERSION
if((g_iDmg[attacker] >= get_pcvar_num(cvar_fire_damage)) && (get_user_weapon(attacker) == CSW_M4A1) && g_firem4[attacker] && zp_get_user_zombie(victim))
{
#if defined ALLOW_MAKE_BLAST_EFFECT
create_blast2(originF)
emit_sound(0,CHAN_ITEM,GRENADE_FIRE,VOL_NORM,ATTN_NORM,0,PITCH_LOW)
#endif
set_user_burn(victim)
g_iDmg[attacker] = 0
}
#endif
#if defined ZP50_VERSION
if((g_iDmg[attacker] >= get_pcvar_num(cvar_fire_damage)) && (get_user_weapon(attacker) == CSW_M4A1) && g_firem4[attacker] && zp_core_is_zombie(victim))
{
#if defined ALLOW_MAKE_BLAST_EFFECT
create_blast2(originF)
emit_sound(0,CHAN_ITEM,GRENADE_FIRE,VOL_NORM,ATTN_NORM,0,PITCH_LOW)
#endif
zp_grenade_fire_set(victim, true)
set_task(get_pcvar_float(cvar_fire_time),"RemoveFire",victim)
g_iDmg[attacker] = 0
}
#endif
#if defined ZPA_VERSION
if((g_iDmg[attacker] >= get_pcvar_num(cvar_fire_damage)) && (get_user_weapon(attacker) == CSW_M4A1) && g_firem4[attacker] && zp_get_user_zombie(victim))
{
#if defined ALLOW_MAKE_BLAST_EFFECT
create_blast2(originF)
emit_sound(0,CHAN_ITEM,GRENADE_FIRE,VOL_NORM,ATTN_NORM,0,PITCH_LOW)
#endif
set_user_burn(victim)
g_iDmg[attacker] = 0
}
#endif
#if defined ZPSP_VERSION
if((g_iDmg[attacker] >= get_pcvar_num(cvar_fire_damage)) && (get_user_weapon(attacker) == CSW_M4A1) && g_firem4[attacker] && zp_get_user_zombie(victim))
{
#if defined ALLOW_MAKE_BLAST_EFFECT
create_blast2(originF)
emit_sound(0,CHAN_ITEM,GRENADE_FIRE,VOL_NORM,ATTN_NORM,0,PITCH_LOW)
#endif
zp_set_user_burn(victim, true)
set_task(get_pcvar_float(cvar_fire_time),"RemoveFire",victim)
g_iDmg[attacker] = 0
}
#endif
return HAM_IGNORED
}
/*-----------------------------------------=[World Model]=-------------------------------------------*/
public fw_SetModel(entity, model[])
{
static szClassName[33]; pev(entity, pev_classname, szClassName, charsmax(szClassName))
if(!equal(szClassName, "weaponbox")) return FMRES_IGNORED;
static owner, wpn
owner = pev(entity, pev_owner)
wpn = find_ent_by_owner(-1, "weapon_m4a1", entity)
if(g_firem4[owner] && pev_valid(wpn))
{
g_firem4[owner] = false
set_pev(wpn, pev_impulse, 324584)
engfunc(EngFunc_SetModel, entity, FM_W_MODEL)
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}
public fw_AddToPlayer(wpn, id)
{
if(pev_valid(wpn) && is_user_connected(id) && pev(wpn, pev_impulse) == 324584)
{
g_firem4[id] = true
set_pev(wpn, pev_impulse, 0)
return HAM_HANDLED
}
return HAM_IGNORED
}
/*-------------------------------------=[Flame Power and Effects ZP43 And ZPA]=-----------------------------------*/
#if defined ZP43_VERSION
public set_user_burn(victim)
{
if(is_user_alive(victim) && zp_get_user_zombie(victim))
{
// Heat icon?
if (get_pcvar_num(cvar_hud_icon))
{
message_begin(MSG_ONE_UNRELIABLE, g_MsgDamage, _, victim)
write_byte(0) // damage save
write_byte(0) // damage take
write_long(DMG_BURN) // damage type
write_coord(0) // x
write_coord(0) // y
write_coord(0) // z
message_end()
}
if (zp_get_user_nemesis(victim)) // fire duration (nemesis is fire resistant)
g_burning_duration[victim] += get_pcvar_num(cvar_burn_time)
else
g_burning_duration[victim] += get_pcvar_num(cvar_burn_time) * 5
// Set burning task on victim if not present
if (!task_exists(victim+TASK_BURN))
set_task(0.2, "burning_flame", victim+TASK_BURN, _, _, "b")
}
}
// Burning Flames
public burning_flame(taskid)
{
// Get player origin and flags
static origin[3], flags
get_user_origin(ID_BURN, origin)
flags = pev(ID_BURN, pev_flags)
// Madness mode - in water - burning stopped
if ((flags & FL_INWATER) || g_burning_duration[ID_BURN] < 1)
{
// Smoke sprite
message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
write_byte(TE_SMOKE) // TE id
write_coord(origin[0]) // x
write_coord(origin[1]) // y
write_coord(origin[2]-50) // z
write_short(g_smokeSpr) // sprite
write_byte(random_num(15, 20)) // scale
write_byte(random_num(10, 20)) // framerate
message_end()
// Task not needed anymore
remove_task(taskid);
return;
}
// Randomly play burning zombie scream sounds (not for nemesis)
if (!zp_get_user_nemesis(ID_BURN) && !random_num(0, 20))
engfunc(EngFunc_EmitSound, ID_BURN, CHAN_VOICE, fire_player[random_num(0, sizeof fire_player - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
// Fire slow down, unless nemesis
if (!zp_get_user_nemesis(ID_BURN) && (flags & FL_ONGROUND) && get_pcvar_float(cvar_slowdown) > 0.0)
{
static Float:velocity[3]
pev(ID_BURN, pev_velocity, velocity)
xs_vec_mul_scalar(velocity, get_pcvar_float(cvar_slowdown), velocity)
set_pev(ID_BURN, pev_velocity, velocity)
}
// Get player's health
static health
health = pev(ID_BURN, pev_health)
// Take damage from the fire
if (health - floatround(get_pcvar_float(cvar_burndmg), floatround_ceil) > 0)
fm_set_user_health(ID_BURN, health - floatround(get_pcvar_float(cvar_burndmg), floatround_ceil))
// Flame sprite
message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
write_byte(TE_SPRITE) // TE id
write_coord(origin[0]+random_num(-5, 5)) // x
write_coord(origin[1]+random_num(-5, 5)) // y
write_coord(origin[2]+random_num(-10, 10)) // z
write_short(g_flameSpr) // sprite
write_byte(random_num(5, 10)) // scale
write_byte(200) // brightness
message_end()
// Decrease burning duration counter
g_burning_duration[ID_BURN]--
}
#endif
#if defined ZPA_VERSION
public set_user_burn(victim)
{
if(is_user_alive(victim) && zp_get_user_zombie(victim))
{
// Heat icon?
if (get_pcvar_num(cvar_hud_icon))
{
message_begin(MSG_ONE_UNRELIABLE, g_MsgDamage, _, victim)
write_byte(0) // damage save
write_byte(0) // damage take
write_long(DMG_BURN) // damage type
write_coord(0) // x
write_coord(0) // y
write_coord(0) // z
message_end()
}
if (zp_get_user_nemesis(victim)) // fire duration (nemesis is fire resistant)
g_burning_duration[victim] += get_pcvar_num(cvar_burn_time)
else
g_burning_duration[victim] += get_pcvar_num(cvar_burn_time) * 5
// Set burning task on victim if not present
if (!task_exists(victim+TASK_BURN))
set_task(0.2, "burning_flame", victim+TASK_BURN, _, _, "b")
}
}
// Burning Flames
public burning_flame(taskid)
{
// Get player origin and flags
static origin[3], flags
get_user_origin(ID_BURN, origin)
flags = pev(ID_BURN, pev_flags)
// Madness mode - in water - burning stopped
if ((flags & FL_INWATER) || g_burning_duration[ID_BURN] < 1)
{
// Smoke sprite
message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
write_byte(TE_SMOKE) // TE id
write_coord(origin[0]) // x
write_coord(origin[1]) // y
write_coord(origin[2]-50) // z
write_short(g_smokeSpr) // sprite
write_byte(random_num(15, 20)) // scale
write_byte(random_num(10, 20)) // framerate
message_end()
// Task not needed anymore
remove_task(taskid);
return;
}
// Randomly play burning zombie scream sounds (not for nemesis)
if (!zp_get_user_nemesis(ID_BURN) && !random_num(0, 20))
engfunc(EngFunc_EmitSound, ID_BURN, CHAN_VOICE, fire_player[random_num(0, sizeof fire_player - 1)], 1.0, ATTN_NORM, 0, PITCH_NORM)
// Fire slow down, unless nemesis
if (!zp_get_user_nemesis(ID_BURN) && (flags & FL_ONGROUND) && get_pcvar_float(cvar_slowdown) > 0.0)
{
static Float:velocity[3]
pev(ID_BURN, pev_velocity, velocity)
xs_vec_mul_scalar(velocity, get_pcvar_float(cvar_slowdown), velocity)
set_pev(ID_BURN, pev_velocity, velocity)
}
// Get player's health
static health
health = pev(ID_BURN, pev_health)
// Take damage from the fire
if (health - floatround(get_pcvar_float(cvar_burndmg), floatround_ceil) > 0)
fm_set_user_health(ID_BURN, health - floatround(get_pcvar_float(cvar_burndmg), floatround_ceil))
// Flame sprite
message_begin(MSG_PVS, SVC_TEMPENTITY, origin)
write_byte(TE_SPRITE) // TE id
write_coord(origin[0]+random_num(-5, 5)) // x
write_coord(origin[1]+random_num(-5, 5)) // y
write_coord(origin[2]+random_num(-10, 10)) // z
write_short(g_flameSpr) // sprite
write_byte(random_num(5, 10)) // scale
write_byte(200) // brightness
message_end()
// Decrease burning duration counter
g_burning_duration[ID_BURN]--
}
#endif
#if defined ZP50_VERSION
public RemoveFire(id) zp_grenade_fire_set(id, false)
#endif
#if defined ZPSP_VERSION
public RemoveFire(id) zp_set_user_burn(id, false)
#endif
/*---------------------------------------------=[Blast Effect (Ring)]=--------------------------------------------*/
#if defined ALLOW_MAKE_BLAST_EFFECT
public create_blast2(const Float:originF[3])
{
// Smallest ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[2]+385.0) // z axis
write_short(g_exploSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(60) // width
write_byte(0) // noise
write_byte(200) // red
write_byte(100) // green
write_byte(0) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
// Medium ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[2]+470.0) // z axis
write_short(g_exploSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(60) // width
write_byte(0) // noise
write_byte(200) // red
write_byte(50) // green
write_byte(0) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
// Largest ring
engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, originF, 0)
write_byte(TE_BEAMCYLINDER) // TE id
engfunc(EngFunc_WriteCoord, originF[0]) // x
engfunc(EngFunc_WriteCoord, originF[1]) // y
engfunc(EngFunc_WriteCoord, originF[2]) // z
engfunc(EngFunc_WriteCoord, originF[0]) // x axis
engfunc(EngFunc_WriteCoord, originF[1]) // y axis
engfunc(EngFunc_WriteCoord, originF[2]+555.0) // z axis
write_short(g_exploSpr) // sprite
write_byte(0) // startframe
write_byte(0) // framerate
write_byte(4) // life
write_byte(60) // width
write_byte(0) // noise
write_byte(200) // red
write_byte(0) // green
write_byte(0) // blue
write_byte(200) // brightness
write_byte(0) // speed
message_end()
}
#endif
/*---------------------------------------------=[Stocks]=--------------------------------------------*/
stock give_item(index, const item[])
{
if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
return 0;
new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, item));
if (!pev_valid(ent))
return 0;
new Float:origin[3];
pev(index, pev_origin, origin);
set_pev(ent, pev_origin, origin);
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, ent);
new save = pev(ent, pev_solid);
dllfunc(DLLFunc_Touch, ent, index);
if (pev(ent, pev_solid) != save)
return ent;
engfunc(EngFunc_RemoveEntity, ent);
return -1;
}
// Set player's health (from fakemeta_util)
stock fm_set_user_health(id, health)
{
(health > 0) ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
}
//ZP50 Colorchat stock
stock zp_color_print(target, const message[], any:...)
{
static buffer[512], msg_SayText = 0
if( !msg_SayText ) msg_SayText = get_user_msgid("SayText")
// Send to everyone
if (!target)
{
static player, maxplayers, argscount
maxplayers = get_maxplayers()
argscount = numargs()
for (player = 1; player <= maxplayers; player++)
{
// Not connected
if (!is_user_connected(player))
continue;
// Remember changed arguments
static arg_index, changed_args[20], changedcount // [20] = max LANG_PLAYER occurencies
changedcount = 0
// Replace LANG_PLAYER with player id
for (arg_index = 2; arg_index < argscount; arg_index++)
{
if (getarg(arg_index) == LANG_PLAYER && arg_index + 1 < argscount)
{
// Check if next param string is a registered language translation
static lang_key[64], arg_subindex
arg_subindex = 0
while ((lang_key[arg_subindex] = getarg(arg_index + 1, arg_subindex++))) { /* keep looping */ }
if (GetLangTransKey(lang_key) != TransKey_Bad)
{
setarg(arg_index, 0, player)
changed_args[changedcount++] = arg_index
arg_index++ // skip next argument since we know it's a translation key
}
}
}
// Format message for player (+add ZP prefix)
vformat(buffer, charsmax(buffer), message, 3)
format(buffer, charsmax(buffer), "%s%s", "^x01[^x04ZP^x01] ", buffer)
// Send it
message_begin(MSG_ONE_UNRELIABLE, msg_SayText, _, player)
write_byte(player)
write_string(buffer)
message_end()
// Replace back player id's with LANG_PLAYER
for (arg_index = 0; arg_index < changedcount; arg_index++)
setarg(changed_args[arg_index], 0, LANG_PLAYER)
}
}
// Send to specific target
else
{
// Format message for player (+add ZP prefix)
vformat(buffer, charsmax(buffer), message, 3)
format(buffer, charsmax(buffer), "%s%s", "^x01[^x04ZP^x01] ", buffer)
// Send it
message_begin(MSG_ONE, msg_SayText, _, target)
write_byte(target)
write_string(buffer)
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
}
stock get_weapon_ent_owner(ent)
{
return get_pdata_cbase(ent, 41, 4);
}