I want to add extra knife plugin to my knife menu. Its working with one extra knife, but when I add more, the server is crashing with Segmentation Fault. Raheem or Jack can you take a look here and add knife plugin to this menu? New knife cost: 500 coins
Knife menu:
- #include <zombie_escape>
- #include <engine>
- #include <fun>
- #include <ze_vip>
- #pragma tabsize 0
- #define HOLYSWORD_COST 2600
- // Models
- new const Storm_Models[][] =
- {
- "models/v_axe.mdl",
- "models/p_axe.mdl"
- }
- new const Turbulent9_Models[][] =
- {
- "models/v_turbulent9_knife.mdl",
- "models/p_turbulent9_knife.mdl"
- }
- new const Sabers_Models[][] =
- {
- "models/v_laser_knife.mdl",
- "models/p_laser_knife.mdl"
- }
- new const Plasma_Models[][] =
- {
- "models/v_stick.mdl",
- "models/p_stick.mdl"
- }
- new const Laevateinn_Models[][] =
- {
- "models/v_black.mdl",
- "models/p_black.mdl"
- }
- // Sounds
- new const g_sound_knife[] = "items/gunpickup2.wav"
- new const storm_sounds[][] =
- {
- "zombie_escape/knife_menu/storm_sword_deploy.wav",
- "zombie_escape/knife_menu/storm_sword_hit.wav",
- "zombie_escape/knife_menu/storm_sword_hit.wav",
- "zombie_escape/knife_menu/storm_sword_hit.wav",
- "zombie_escape/knife_menu/storm_sword_hit.wav",
- "zombie_escape/knife_menu/storm_sword_hitwall.wav",
- "zombie_escape/knife_menu/storm_sword_slash.wav",
- "zombie_escape/knife_menu/storm_sword_slash.wav",
- "zombie_escape/knife_menu/storm_sword_stab.wav"
- }
- new const turbulent9_sounds[][] =
- {
- "zombie_escape/knife_menu/turbulent9_deploy.wav",
- "zombie_escape/knife_menu/turbulent9_hit.wav",
- "zombie_escape/knife_menu/turbulent9_hit.wav",
- "zombie_escape/knife_menu/turbulent9_hit.wav",
- "zombie_escape/knife_menu/turbulent9_hit.wav",
- "zombie_escape/knife_menu/turbulent9_hitwall.wav",
- "zombie_escape/knife_menu/turbulent9_slash.wav",
- "zombie_escape/knife_menu/turbulent9_slash.wav",
- "zombie_escape/knife_menu/turbulent9_stab.wav"
- }
- new const sabers_sounds[][] =
- {
- "zombie_escape/knife_menu/laser_deploy.wav",
- "zombie_escape/knife_menu/laser_hit.wav",
- "zombie_escape/knife_menu/laser_hit.wav",
- "zombie_escape/knife_menu/laser_hit.wav",
- "zombie_escape/knife_menu/laser_hit.wav",
- "zombie_escape/knife_menu/laser_hitwall.wav",
- "zombie_escape/knife_menu/laser_slash1.wav",
- "zombie_escape/knife_menu/laser_slash2.wav",
- "zombie_escape/knife_menu/laser_stab.wav"
- }
- new const plasma_sounds[][] =
- {
- "zombie_escape/knife_menu/plasma_deploy.wav",
- "zombie_escape/knife_menu/plasma_hit.wav",
- "zombie_escape/knife_menu/plasma_hit.wav",
- "zombie_escape/knife_menu/plasma_hit.wav",
- "zombie_escape/knife_menu/plasma_hit.wav",
- "zombie_escape/knife_menu/plasma_hitwall.wav",
- "zombie_escape/knife_menu/plasma_slash.wav",
- "zombie_escape/knife_menu/plasma_slash.wav",
- "zombie_escape/knife_menu/plasma_stab.wav"
- }
- new const laevateinn_sounds[][] =
- {
- "zombie_escape/knife_menu/laevateinn_deploy.wav",
- "zombie_escape/knife_menu/laevateinn_hit.wav",
- "zombie_escape/knife_menu/laevateinn_hit.wav",
- "zombie_escape/knife_menu/laevateinn_hit.wav",
- "zombie_escape/knife_menu/laevateinn_hit.wav",
- "zombie_escape/knife_menu/laevateinn_hitwall.wav",
- "zombie_escape/knife_menu/laevateinn_slash.wav",
- "zombie_escape/knife_menu/laevateinn_slash.wav",
- "zombie_escape/knife_menu/laevateinn_stab.wav"
- }
- new const oldknife_sounds[][] =
- {
- "weapons/knife_deploy1.wav",
- "weapons/knife_hit1.wav",
- "weapons/knife_hit2.wav",
- "weapons/knife_hit3.wav",
- "weapons/knife_hit4.wav",
- "weapons/knife_hitwall1.wav",
- "weapons/knife_slash1.wav",
- "weapons/knife_slash2.wav",
- "weapons/knife_stab.wav"
- }
- new bool:g_bTurbulent9[33], bool:g_bSabers[33], bool:g_bPlasma[33],
- bool:g_bStorm[33], bool:g_bLaevateinn[33], bool:g_bNoSpeed, g_iUsedTimes[33], g_pCvarUseTimes
- new cvar_speed_storm
- new cvar_speed_turb
- new cvar_speed_sabers
- new cvar_speed_plasma
- new cvar_speed_laevat
- native SetUserHolySword(id)
- native DelUserHolySword(id)
- public plugin_precache()
- {
- new i
- for (i = 0; i <= charsmax(Storm_Models); i++)
- precache_model(Storm_Models[i])
- for (i = 0; i <= charsmax(Turbulent9_Models); i++)
- precache_model(Turbulent9_Models[i])
- for (i = 0; i <= charsmax(Sabers_Models); i++)
- precache_model(Sabers_Models[i])
- for (i = 0; i <= charsmax(Plasma_Models); i++)
- precache_model(Plasma_Models[i])
- for (i = 0; i <= charsmax(Laevateinn_Models); i++)
- precache_model(Laevateinn_Models[i])
- for (i = 0; i <= charsmax(storm_sounds); i++)
- precache_sound(storm_sounds[i])
- for (i = 0; i <= charsmax(turbulent9_sounds); i++)
- precache_sound(turbulent9_sounds[i])
- for (i = 0; i <= charsmax(sabers_sounds); i++)
- precache_sound(sabers_sounds[i])
- for (i = 0; i <= charsmax(plasma_sounds); i++)
- precache_sound(plasma_sounds[i])
- for (i = 0; i <= charsmax(laevateinn_sounds); i++)
- precache_sound(laevateinn_sounds[i])
- precache_sound(g_sound_knife)
- }
- public plugin_natives()
- {
- register_native("ze_open_knife_menu", "native_ze_open_knife_menu", 1)
- }
- public plugin_init()
- {
- register_plugin("[ZE] Addon: Knife Menu", "1.3", "Mark")
- register_forward(FM_EmitSound, "fw_EmitSound")
- register_forward(FM_PlayerPreThink, "fw_PlayerPreThink");
- register_event("CurWeapon", "CurrentWeapon", "be", "1=1")
- RegisterHookChain(RG_CBasePlayer_ResetMaxSpeed, "Fw_RestMaxSpeed_Post", 1)
- g_pCvarUseTimes = register_cvar("ze_knife_menu_use_times", "1000")
- register_message(get_user_msgid("DeathMsg"), "DeathMsg")
- register_clcmd("say /km", "Show_Knife_Menu")
- cvar_speed_storm = register_cvar("ze_storm_speed", "285.0")
- cvar_speed_turb = register_cvar("ze_turb_speed", "285.0")
- cvar_speed_sabers = register_cvar("ze_sabers_speed", "285.0")
- cvar_speed_plasma = register_cvar("ze_plasma_speed", "295.0")
- cvar_speed_laevat = register_cvar("ze_laevat_speed", "305.0")
- }
- public ze_user_humanized(id)
- {
- g_iUsedTimes[id] = 0
- }
- /*public ze_user_infected(Victim)
- {
- g_bStorm[Victim] = false
- g_bTurbulent9[Victim] = false
- g_bSabers[Victim] = false
- g_bPlasma[Victim] = false
- g_bLaevateinn[Victim] = false
- g_iUsedTimes[Victim] = 0
- }*/
- public client_putinserver(id)
- {
- DelUserHolySword(id)
- g_bStorm[id] = false
- g_bTurbulent9[id] = false
- g_bSabers[id] = false
- g_bPlasma[id] = false
- g_bLaevateinn[id] = false
- g_iUsedTimes[id] = 0
- }
- public client_disconnected(id)
- {
- DelUserHolySword(id)
- g_bStorm[id] = false
- g_bTurbulent9[id] = false
- g_bSabers[id] = false
- g_bPlasma[id] = false
- g_bLaevateinn[id] = false
- g_iUsedTimes[id] = 0
- }
- public ze_game_started()
- {
- g_bNoSpeed = true
- }
- public ze_zombie_release()
- {
- g_bNoSpeed = false
- // call the reset speed function ;)
- for(new id = 1; id <= 32; id++)
- {
- if (!is_user_alive(id))
- continue;
- rg_reset_maxspeed(id)
- }
- }
- public Show_Knife_Menu(id)
- {
- if (!is_user_connected(id))
- return PLUGIN_CONTINUE
- if (ze_is_user_zombie(id))
- {
- ze_colored_print(id, "!tZombies can't open knife menu!y.")
- return PLUGIN_HANDLED
- }
- if (g_iUsedTimes[id] >= get_pcvar_num(g_pCvarUseTimes))
- {
- ze_colored_print(id, "!tYou can only open knife menu !y[!g%dx!y] per round!", get_pcvar_num(g_pCvarUseTimes))
- return PLUGIN_HANDLED
- }
- if (!is_user_alive(id))
- {
- ze_colored_print(id, "!tDead can't open knife menu!y.")
- return PLUGIN_HANDLED
- }
- Knife_Menu(id)
- return PLUGIN_CONTINUE
- }
- public Knife_Menu(id)
- {
- new iMenu = menu_create("\rChoose Your Knife\w:^n^n- [ \ySpeed \rActivates \yon Zombie Release!\w ]^n\w- [ \r9 \yknives in Total!\w ] ^n-", "Menu_Handler")
- menu_additem(iMenu, "\yAxe \w[ \r285 Speed\w ]", "", 0)
- menu_additem(iMenu, "\yTurbulent-9 \w[ \r285 Speed\w ]", "", 0)
- menu_additem(iMenu, "\ySabers \w[ \r285 Speed\w ]", "", 0)
- if (ze_get_vip_flags(id) & VIP_A)
- {
- menu_additem(iMenu, "\yCrowbar \w[ \rVIP\w ] [ \r295 Speed\w ]", "", 0)
- }
- if (ze_get_vip_flags(id) & VIP_F)
- {
- menu_additem(iMenu, "\yBlack Sword \w[ \rSVIP\w ] [ \r305 Speed\w ]", "", 0)
- menu_additem(iMenu, "\yHolySword (SVIP) \w[\r2600 \ycoins\w]", "", 0)
- }
- menu_setprop(iMenu,MPROP_EXITNAME,"Close")
- menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL)
- menu_display(id, iMenu, 0)
- }
- public Menu_Handler(id, iMenu, iKey)
- {
- if(!is_user_alive(id) || ze_is_user_zombie(id))
- return PLUGIN_HANDLED
- switch(iKey)
- {
- case 0: // Storm
- {
- DelUserHolySword(id)
- g_bTurbulent9[id] = false
- g_bSabers[id] = false
- g_bPlasma[id] = false
- g_bStorm[id] = true
- g_bLaevateinn[id] = false
- g_iUsedTimes[id] = 0
- rg_remove_item(id, "weapon_knife")
- rg_give_item(id, "weapon_knife", GT_APPEND)
- //engclient_cmd(id, "weapon_knife")
- //g_iUsedTimes[id]++
- //emit_sound(id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)*/
- }
- case 1: // Turbulent
- {
- DelUserHolySword(id)
- g_bTurbulent9[id] = true
- g_bSabers[id] = false
- g_bPlasma[id] = false
- g_bStorm[id] = false
- g_bLaevateinn[id] = false
- g_iUsedTimes[id] = 0
- rg_remove_item(id, "weapon_knife")
- rg_give_item(id, "weapon_knife", GT_APPEND)
- //engclient_cmd(id, "weapon_knife")
- //g_iUsedTimes[id]++
- //emit_sound(id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)*/
- }
- case 2: // Sabers
- {
- DelUserHolySword(id)
- g_bTurbulent9[id] = false
- g_bSabers[id] = true
- g_bPlasma[id] = false
- g_bStorm[id] = false
- g_bLaevateinn[id] = false
- g_iUsedTimes[id] = 0
- rg_remove_item(id, "weapon_knife")
- rg_give_item(id, "weapon_knife", GT_APPEND)
- //engclient_cmd(id, "weapon_knife")
- //g_iUsedTimes[id]++
- //emit_sound(id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)*/
- }
- case 3: // Plasma
- {
- DelUserHolySword(id)
- g_bTurbulent9[id] = false
- g_bSabers[id] = false
- g_bPlasma[id] = true
- g_bStorm[id] = false
- g_bLaevateinn[id] = false
- g_iUsedTimes[id] = 0
- rg_remove_item(id, "weapon_knife")
- rg_give_item(id, "weapon_knife", GT_APPEND)
- //engclient_cmd(id, "weapon_knife")
- //g_iUsedTimes[id]++
- //emit_sound(id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)*/
- }
- case 4: // Laevateinn
- {
- DelUserHolySword(id)
- g_bTurbulent9[id] = false
- g_bSabers[id] = false
- g_bPlasma[id] = false
- g_bStorm[id] = false
- g_bLaevateinn[id] = true
- g_iUsedTimes[id] = 0
- rg_remove_item(id, "weapon_knife")
- rg_give_item(id, "weapon_knife", GT_APPEND)
- //engclient_cmd(id, "weapon_knife")
- //g_iUsedTimes[id]++
- //emit_sound(id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)*/
- }
- case 5: // Holysword
- {
- if (ze_get_escape_coins(id) < HOLYSWORD_COST)
- {
- //ze_set_escape_coins(id,ze_get_escape_coins(id)+HOLYSWORD_COST); //return coins
- return PLUGIN_HANDLED;
- }
- ze_set_escape_coins(id,ze_get_escape_coins(id) - HOLYSWORD_COST);
- SetUserHolySword(id)
- g_bTurbulent9[id] = false
- g_bSabers[id] = false
- g_bPlasma[id] = false
- g_bStorm[id] = false
- g_bLaevateinn[id] = false
- g_iUsedTimes[id] = 0
- rg_remove_item(id, "weapon_knife")
- rg_give_item(id, "weapon_knife", GT_APPEND)
- //engclient_cmd(id, "weapon_knife")
- //g_iUsedTimes[id]++
- //emit_sound(id, CHAN_BODY, g_sound_knife, 1.0, ATTN_NORM, 0, PITCH_NORM)*/
- }
- }
- menu_destroy(iMenu)
- return PLUGIN_HANDLED
- }
- public fw_EmitSound(id, channel, const sound[])
- {
- if(!is_user_alive(id) || ze_is_user_zombie(id))
- return FMRES_IGNORED
- new i
- for (i = 0; i <= charsmax(turbulent9_sounds); i++)
- for (i = 0; i <= charsmax(sabers_sounds); i++)
- for (i = 0; i <= charsmax(plasma_sounds); i++)
- for (i = 0; i <= charsmax(storm_sounds); i++)
- for (i = 0; i <= charsmax(laevateinn_sounds); i++)
- {
- if(equal(sound, oldknife_sounds[i]))
- {
- if ((g_bTurbulent9[id]))
- {
- emit_sound(id, channel, turbulent9_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
- return FMRES_SUPERCEDE
- }
- else if ((g_bSabers[id]))
- {
- emit_sound(id, channel, sabers_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
- return FMRES_SUPERCEDE
- }
- else if ((g_bPlasma[id]) && (ze_get_vip_flags(id) & VIP_A))
- {
- emit_sound(id, channel, plasma_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
- return FMRES_SUPERCEDE
- }
- else if ((g_bStorm[id]))
- {
- emit_sound(id, channel, storm_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
- return FMRES_SUPERCEDE
- }
- else if ((g_bLaevateinn[id]) && (ze_get_vip_flags(id) & VIP_F))
- {
- emit_sound(id, channel, laevateinn_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
- return FMRES_SUPERCEDE
- }
- else if (!g_bTurbulent9[id] || !g_bSabers[id] || !g_bPlasma[id] || !g_bStorm[id] || !g_bLaevateinn[id])
- {
- emit_sound(id, channel, oldknife_sounds[i], 1.0, ATTN_NORM, 0, PITCH_NORM)
- return FMRES_SUPERCEDE
- }
- }
- }
- return FMRES_IGNORED
- }
- public CurrentWeapon(id)
- {
- if(!is_user_alive(id) || ze_is_user_zombie(id))
- return
- if(get_user_weapon(id) & CSW_KNIFE)
- {
- if((g_bTurbulent9[id]))
- {
- cs_set_player_view_model(id, CSW_KNIFE, Turbulent9_Models[0])
- cs_set_player_weap_model(id, CSW_KNIFE, Turbulent9_Models[1])
- }
- else if((g_bSabers[id]))
- {
- cs_set_player_view_model(id, CSW_KNIFE, Sabers_Models[0])
- cs_set_player_weap_model(id, CSW_KNIFE, Sabers_Models[1])
- }
- else if((g_bPlasma[id]) && (ze_get_vip_flags(id) & VIP_A))
- {
- cs_set_player_view_model(id, CSW_KNIFE, Plasma_Models[0])
- cs_set_player_weap_model(id, CSW_KNIFE, Plasma_Models[1])
- }
- else if((g_bStorm[id]) && (ze_get_vip_flags(id) & VIP_A))
- {
- cs_set_player_view_model(id, CSW_KNIFE, Storm_Models[0])
- cs_set_player_weap_model(id, CSW_KNIFE, Storm_Models[1])
- }
- else if((g_bLaevateinn[id]) && (ze_get_vip_flags(id) & VIP_A))
- {
- cs_set_player_view_model(id, CSW_KNIFE, Laevateinn_Models[0])
- cs_set_player_weap_model(id, CSW_KNIFE, Laevateinn_Models[1])
- }
- }
- }
- public Fw_RestMaxSpeed_Post(id)
- {
- if (g_bNoSpeed)
- return
- set_task(0.1, "DelayLoad", id)
- }
- public DelayLoad(id)
- {
- new iWpnId = (get_user_weapon(id))
- if (iWpnId == CSW_KNIFE && g_bTurbulent9[id])
- {
- if ((get_entvar(id, var_button) & IN_JUMP) && !(get_entvar(id, var_oldbuttons) & IN_JUMP))
- {
- new iFlags = get_entvar(id, var_flags);
- new iWaterlvl = get_entvar(id, var_waterlevel)
- if (!(iFlags & FL_ONGROUND))
- return HC_CONTINUE
- if (iFlags & FL_WATERJUMP)
- return HAM_IGNORED
- if (iWaterlvl > 1)
- return HAM_IGNORED
- new Float:flVelocity[3]
- get_entvar(id , var_velocity , flVelocity)
- flVelocity[2] += 325
- set_entvar(id , var_velocity , flVelocity)
- set_entvar(id, var_gaitsequence, 6)
- }
- set_entvar(id, var_maxspeed, get_pcvar_float(cvar_speed_turb))
- }
- if (iWpnId == CSW_KNIFE && g_bSabers[id])
- {
- if ((get_entvar(id, var_button) & IN_JUMP) && !(get_entvar(id, var_oldbuttons) & IN_JUMP))
- {
- new iFlags = get_entvar(id, var_flags);
- new iWaterlvl = get_entvar(id, var_waterlevel)
- if (!(iFlags & FL_ONGROUND))
- return HC_CONTINUE
- if (iFlags & FL_WATERJUMP)
- return HAM_IGNORED
- if (iWaterlvl > 1)
- return HAM_IGNORED
- new Float:flVelocity[3]
- get_entvar(id , var_velocity , flVelocity)
- flVelocity[2] += 325
- set_entvar(id , var_velocity , flVelocity)
- set_entvar(id, var_gaitsequence, 6)
- }
- set_entvar(id, var_maxspeed, get_pcvar_float(cvar_speed_sabers))
- }
- if (iWpnId == CSW_KNIFE && g_bPlasma[id])
- {
- if ((get_entvar(id, var_button) & IN_JUMP) && !(get_entvar(id, var_oldbuttons) & IN_JUMP))
- {
- new iFlags = get_entvar(id, var_flags);
- new iWaterlvl = get_entvar(id, var_waterlevel)
- if (!(iFlags & FL_ONGROUND))
- return HC_CONTINUE
- if (iFlags & FL_WATERJUMP)
- return HAM_IGNORED
- if (iWaterlvl > 1)
- return HAM_IGNORED
- new Float:flVelocity[3]
- get_entvar(id , var_velocity , flVelocity)
- flVelocity[2] += 325
- set_entvar(id , var_velocity , flVelocity)
- set_entvar(id, var_gaitsequence, 6)
- }
- set_entvar(id, var_maxspeed, get_pcvar_float(cvar_speed_plasma))
- }
- if (iWpnId == CSW_KNIFE && g_bStorm[id])
- {
- if ((get_entvar(id, var_button) & IN_JUMP) && !(get_entvar(id, var_oldbuttons) & IN_JUMP))
- {
- new iFlags = get_entvar(id, var_flags);
- new iWaterlvl = get_entvar(id, var_waterlevel)
- if (!(iFlags & FL_ONGROUND))
- return HC_CONTINUE
- if (iFlags & FL_WATERJUMP)
- return HAM_IGNORED
- if (iWaterlvl > 1)
- return HAM_IGNORED
- new Float:flVelocity[3]
- get_entvar(id , var_velocity , flVelocity)
- flVelocity[2] += 325
- set_entvar(id , var_velocity , flVelocity)
- set_entvar(id, var_gaitsequence, 6)
- }
- set_entvar(id, var_maxspeed, get_pcvar_float(cvar_speed_storm))
- }
- if (iWpnId == CSW_KNIFE && g_bLaevateinn[id])
- {
- if ((get_entvar(id, var_button) & IN_JUMP) && !(get_entvar(id, var_oldbuttons) & IN_JUMP))
- {
- new iFlags = get_entvar(id, var_flags);
- new iWaterlvl = get_entvar(id, var_waterlevel)
- if (!(iFlags & FL_ONGROUND))
- return HC_CONTINUE
- if (iFlags & FL_WATERJUMP)
- return HAM_IGNORED
- if (iWaterlvl > 1)
- return HAM_IGNORED
- new Float:flVelocity[3]
- get_entvar(id , var_velocity , flVelocity)
- flVelocity[2] += 325
- set_entvar(id , var_velocity , flVelocity)
- set_entvar(id, var_gaitsequence, 6)
- }
- set_entvar(id, var_maxspeed, get_pcvar_float(cvar_speed_laevat))
- }
- return HAM_IGNORED
- }
- public DeathMsg(msg_id, msg_dest, id)
- {
- static szTruncatedWeapon[33], iAttacker
- get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
- iAttacker = get_msg_arg_int(1)
- if(!is_user_alive(iAttacker) || iAttacker == get_msg_arg_int(2) || !is_user_alive(get_msg_arg_int(2))) // get_msg_arg_int(2) = iVictim
- return
- if(equal(szTruncatedWeapon, "knife") && get_user_weapon(iAttacker) & CSW_KNIFE)
- {
- if(g_bTurbulent9[id])
- {
- set_msg_arg_string(4, "Turbulent9 knife")
- }
- else if(g_bSabers[id])
- {
- set_msg_arg_string(4, "Sabers knife")
- }
- else if(g_bPlasma[id])
- {
- set_msg_arg_string(4, "Plasma knife")
- }
- else if(g_bStorm[id])
- {
- set_msg_arg_string(4, "Storm knife")
- }
- else if(g_bLaevateinn[id])
- {
- set_msg_arg_string(4, "Laevateinn knife")
- }
- }
- }
- stock fm_set_user_maxspeed(index, Float:speed = -1.0)
- {
- engfunc(EngFunc_SetClientMaxspeed, index, speed);
- set_pev(index, pev_maxspeed, speed);
- return 1;
- }
- public native_ze_open_knife_menu(id)
- {
- Show_Knife_Menu(id)
- }
- /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
- *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
- */
- #include <amxmodx>
- #include <fakemeta>
- #include <fakemeta_util>
- #include <hamsandwich>
- #define _ZP
- #if !defined _ZP
- #tryinclude <zombieplague>
- #else
- #tryinclude <zombie_escape>
- #define zp_get_user_zombie ze_is_user_zombie
- #endif
- #define PLUGIN "[ZP] Extra: CSO Weapon"
- #define VERSION "1.0"
- #define AUTHOR "TemplateAuthor:KORD_12.7:WeaponAuthor:PaXaN-ZOMBIE"
- #pragma ctrlchar '\'
- #pragma compress 1
- //**********************************************
- //* Weapon Settings. *
- //**********************************************
- #define WEAPON_REFERANCE "weapon_knife"
- #define WEAPON_MODEL_VIEW "models/v_stormgiant2.mdl"
- #define WEAPON_MODEL_PLAYER "models/p_stormgiant.mdl"
- #define WEAPON_DAMAGE random_float(250.0, 3500.0)
- #define WEAPON_DAMAGE_STAB random_float(300.0, 550.0)
- #define WEAPON_DAMAGE_DRAW random_float(150.0, 200.0)
- #define WEAPON_DISTANCE_ATTACK 99.0
- #define WEAPON_DISTANCE_ATTACK_STAB 110.0
- #define WEAPON_KNOCKBACK 7.0
- #define WEAPON_KNOCKBACK_STAB 10.0
- #define SOUND_HIT "weapons/stormgiant_hit1.wav"
- #define SOUND_HIT_WALL "weapons/stormgiant_stone1.wav"
- #define SOUND_DRAW "weapons/stormgiant_draw.wav"
- #define SOUND_STAB_MISS "weapons/stormgiant_stab_miss.wav"
- #define ANIM_EXTENSION "knife"
- enum
- {
- ANIM_IDLE,
- ANIM_DRAW_ATTACK,
- ANIM_DRAW_ATTACK1,
- ANIM_DRAW,
- ANIM_SLASH_START,
- ANIM_SLASH_END,
- ANIM_SLASH_END2,
- ANIM_STAB_START,
- ANIM_STAB_END,
- ANIM_STAB_END2,
- ANIM_MSLASH1,
- ANIM_MSLASH2,
- ANIM_MSLASH3
- };
- //**********************************************
- //* Some macroses. *
- //**********************************************
- #define GET_SHOOTS(%0) get_pdata_int(%0, m_fInCheckShoots, extra_offset_weapon)
- #define SET_SHOOTS(%0,%1) set_pdata_int(%0, m_fInCheckShoots, %1, extra_offset_weapon)
- #define MDLL_Spawn(%0) dllfunc(DLLFunc_Spawn, %0)
- #define MDLL_Touch(%0,%1) dllfunc(DLLFunc_Touch, %0, %1)
- #define SET_MODEL(%0,%1) engfunc(EngFunc_SetModel, %0, %1)
- #define SET_ORIGIN(%0,%1) engfunc(EngFunc_SetOrigin, %0, %1)
- #define PRECACHE_MODEL(%0) engfunc(EngFunc_PrecacheModel, %0)
- #define PRECACHE_SOUND(%0) engfunc(EngFunc_PrecacheSound, %0)
- #define PRECACHE_GENERIC(%0) engfunc(EngFunc_PrecacheGeneric, %0)
- #define MODEL_INDEX(%0) engfunc(EngFunc_ModelIndex,%0)
- #define MESSAGE_BEGIN(%0,%1,%2,%3) engfunc(EngFunc_MessageBegin, %0, %1, %2, %3)
- #define MESSAGE_END() message_end()
- #define WRITE_ANGLE(%0) engfunc(EngFunc_WriteAngle, %0)
- #define WRITE_BYTE(%0) write_byte(%0)
- #define WRITE_COORD(%0) engfunc(EngFunc_WriteCoord, %0)
- #define WRITE_STRING(%0) write_string(%0)
- #define WRITE_SHORT(%0) write_short(%0)
- #define INSTANCE(%0) ((%0 == -1) ? 0 : %0)
- #define BitSet(%0,%1) (%0 |= (1 << (%1 - 1)))
- #define BitClear(%0,%1) (%0 &= ~(1 << (%1 - 1)))
- #define BitCheck(%0,%1) (%0 & (1 << (%1 - 1)))
- //**********************************************
- //* PvData Offsets. *
- //**********************************************
- // Linux extra offsets
- #define extra_offset_weapon 4
- #define extra_offset_player 5
- new g_bitIsConnected;
- #define m_rgpPlayerItems_CWeaponBox 34
- #define m_fInCheckShoots 39
- #define m_pPlayer 41
- #define m_flNextPrimaryAttack 46
- #define m_flNextSecondaryAttack 47
- #define m_flTimeWeaponIdle 48
- #define m_iDirection 60
- #define m_fWeaponState 74
- #define m_LastHitGroup 75
- #define m_flNextAttack 83
- #define m_iLastZoom 109
- #define m_fResumeZoom 110
- #define m_iFOV 363
- #define m_pActiveItem 373
- #define m_szAnimExtention 492
- #define IsValidPev(%0) (pev_valid(%0) == 2)
- new IsKnife[33];
- new iBlood[3];
- Weapon_OnPrecache()
- {
- PRECACHE_SOUNDS_FROM_MODEL(WEAPON_MODEL_VIEW);
- PRECACHE_MODEL(WEAPON_MODEL_VIEW);
- PRECACHE_MODEL(WEAPON_MODEL_PLAYER);
- PRECACHE_SOUND(SOUND_HIT);
- PRECACHE_SOUND(SOUND_HIT_WALL);
- PRECACHE_SOUND(SOUND_DRAW);
- PRECACHE_SOUND(SOUND_STAB_MISS);
- iBlood[0] = PRECACHE_MODEL("sprites/bloodspray.spr");
- iBlood[1] = PRECACHE_MODEL("sprites/blood.spr");
- iBlood[2] = PRECACHE_MODEL("sprites/ef_coilmg.spr");
- }
- Weapon_OnDeploy(const iItem, const iPlayer)
- {
- #pragma unused iItem, iPlayer
- Weapon_DefaultDeploy(iPlayer, WEAPON_MODEL_VIEW, WEAPON_MODEL_PLAYER, ANIM_DRAW_ATTACK, ANIM_EXTENSION);
- set_pdata_float(iItem, m_flTimeWeaponIdle, 0.6, extra_offset_weapon);
- set_pdata_float(iPlayer, m_flNextAttack, 0.4, extra_offset_player);
- engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_DRAW, 0.9, ATTN_NORM, 0, PITCH_NORM);
- set_pev(iItem, pev_fuser3, get_gametime() + 0.2);
- set_pev(iItem, pev_fuser4, get_gametime() + 0.6);
- set_pev(iItem, pev_iuser1, 1);
- }
- Weapon_OnHolster(const iItem, const iPlayer)
- {
- #pragma unused iItem, iPlayer
- set_pev(iItem, pev_fuser1, 0.0);
- set_pev(iItem, pev_fuser2, 0.0);
- set_pev(iItem, pev_fuser3, 0.0);
- set_pev(iItem, pev_fuser4, 0.0);
- set_pev(iItem, pev_iuser1, 0);
- }
- Weapon_OnIdle(const iItem, const iPlayer)
- {
- #pragma unused iItem, iPlayer
- ExecuteHamB(Ham_Weapon_ResetEmptySound, iItem);
- if (get_pdata_int(iItem, m_flTimeWeaponIdle, extra_offset_weapon) > 0.0)
- {
- return;
- }
- Weapon_SendAnim(iPlayer, ANIM_IDLE);
- set_pdata_float(iItem, m_flTimeWeaponIdle, 10.0, extra_offset_weapon);
- }
- Weapon_OnPrimaryAttack(const iItem, const iPlayer)
- {
- #pragma unused iItem, iPlayer
- static szAnimation[64];
- formatex(szAnimation, charsmax(szAnimation), "ref_shoot_%s", ANIM_EXTENSION);
- Weapon_SendAnim(iPlayer, ANIM_SLASH_START);
- set_pdata_float(iItem, m_flTimeWeaponIdle, 2.0, extra_offset_weapon);
- set_pdata_float(iItem, m_flNextPrimaryAttack, 1.5, extra_offset_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, 1.5, extra_offset_weapon);
- Player_SetAnimation(iPlayer, szAnimation);
- set_pev(iItem ,pev_fuser1, get_gametime() + 1.0);
- }
- public Weapon_OnSecondaryAttack(const iItem, const iPlayer)
- {
- #pragma unused iItem, iPlayer
- static szAnimation[64];formatex(szAnimation, charsmax(szAnimation), "ref_shoot_%s", ANIM_EXTENSION);
- static Float:iTime;pev(iItem, pev_fuser3, iTime);
- if (pev(iItem, pev_iuser1) && !iTime)
- {
- WeaponStab(iPlayer, iItem);
- set_pdata_float(iItem, m_flNextPrimaryAttack, 1.0, extra_offset_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, 1.0, extra_offset_weapon);
- set_pev(iItem, pev_iuser1, 0);
- set_pev(iItem, pev_fuser4, 0.0);
- }
- else
- {
- Weapon_SendAnim(iPlayer, ANIM_STAB_START);
- set_pdata_float(iItem, m_flTimeWeaponIdle, 2.0, extra_offset_weapon);
- set_pdata_float(iItem, m_flNextPrimaryAttack, 1.5, extra_offset_weapon);
- set_pdata_float(iItem, m_flNextSecondaryAttack, 1.5, extra_offset_weapon);
- Player_SetAnimation(iPlayer, szAnimation);
- set_pev(iItem ,pev_fuser2, get_gametime() + 1.0);
- }
- }
- //*********************************************************************
- //* Don't modify the code below this line unless *
- //* you know _exactly_ what you are doing!!! *
- //*********************************************************************
- public plugin_precache()
- {
- Weapon_OnPrecache();
- }
- public plugin_init()
- {
- register_plugin(PLUGIN, VERSION, AUTHOR);
- RegisterHam(Ham_Item_Deploy, WEAPON_REFERANCE, "HamHook_Item_Deploy_Post", true);
- RegisterHam(Ham_Item_Holster, WEAPON_REFERANCE, "HamHook_Item_Holster", false);
- RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_REFERANCE, "HamHook_Item_WeaponIdle", false);
- RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERANCE, "HamHook_Item_PrimaryAttack", false);
- RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_REFERANCE, "HamHook_Item_SecondaryAttack", false);
- RegisterHam(Ham_Spawn, "player", "HamHook_Player_Spawn", true);
- RegisterHam(Ham_Killed, "player", "HamHook_Player_Killed", false);
- register_forward(FM_UpdateClientData, "FakeMeta_UpdateClientData_Post", true);
- register_clcmd("GetWarHammer", "native_set_user_knife");
- register_clcmd("DelWarHammer", "native_delete_user_knife");
- }
- public plugin_natives()
- {
- register_native("SetUserWarHammer", "native_set_user_knife", true);
- register_native("DelUserWarHammer", "native_delete_user_knife", true) ;
- }
- public native_set_user_knife(iPlayer)
- {
- IsKnife[iPlayer] = true;
- Weapon_Select(iPlayer);
- }
- public native_delete_user_knife(iPlayer)
- {
- IsKnife[iPlayer] = false;
- new iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
- if (pev_valid(iItem))
- {
- ExecuteHamB(Ham_Item_Deploy, iItem);
- }
- }
- //**********************************************
- //* Block client weapon. *
- //**********************************************
- public FakeMeta_UpdateClientData_Post(const iPlayer, const iSendWeapons, const CD_Handle)
- {
- static iActiveItem;iActiveItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
- if(zp_get_user_zombie(iPlayer) || !IsKnife[iPlayer])
- {
- return FMRES_IGNORED;
- }
- if (!IsValidPev(iActiveItem) || get_user_weapon(iPlayer) != CSW_KNIFE)
- {
- return FMRES_IGNORED;
- }
- if (!IsKnife[iPlayer])
- {
- return FMRES_IGNORED;
- }
- static Float:iTime3;pev(iActiveItem, pev_fuser3, iTime3);
- if (iTime3 && iTime3 <= get_gametime())
- {
- WeaponSlashDraw(iPlayer, iActiveItem);
- set_pev(iActiveItem, pev_fuser3, 0.0);
- }
- static Float:iTime4;pev(iActiveItem, pev_fuser4, iTime4);
- if (iTime4 && iTime4 <= get_gametime())
- {
- Weapon_SendAnim(iPlayer, ANIM_DRAW);
- set_pdata_float(iActiveItem, m_flTimeWeaponIdle, 1.0, extra_offset_weapon);
- set_pev(iActiveItem, pev_fuser4, 0.0);
- set_pev(iActiveItem, pev_iuser1, 0);
- }
- static Float:iTime;pev(iActiveItem, pev_fuser1, iTime);
- if (iTime && iTime <= get_gametime())
- {
- WeaponSlash(iPlayer, iActiveItem);
- set_pev(iActiveItem, pev_fuser1, 0.0);
- }
- static Float:iTime2;pev(iActiveItem, pev_fuser2, iTime2);
- if (iTime2 && iTime2 <= get_gametime())
- {
- WeaponStab(iPlayer, iActiveItem);
- set_pev(iActiveItem, pev_fuser2, 0.0);
- }
- set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001);
- return FMRES_IGNORED;
- }
- //**********************************************
- //* Item (weapon) hooks. *
- //**********************************************
- #define _call.%0(%1,%2) \
- \
- Weapon_On%0 \
- ( \
- %1, \
- %2 \
- )
- public HamHook_Item_Deploy_Post(const iItem)
- {
- new iPlayer;
- if (!CheckItem(iItem, iPlayer))
- {
- return HAM_IGNORED;
- }
- _call.Deploy(iItem, iPlayer);
- return HAM_IGNORED;
- }
- public HamHook_Item_Holster(const iItem)
- {
- new iPlayer;
- if (!CheckItem(iItem, iPlayer))
- {
- return HAM_IGNORED;
- }
- set_pev(iPlayer, pev_viewmodel, 0);
- set_pev(iPlayer, pev_weaponmodel, 0);
- _call.Holster(iItem, iPlayer);
- return HAM_SUPERCEDE;
- }
- public HamHook_Item_WeaponIdle(const iItem)
- {
- static iPlayer;
- if (!CheckItem(iItem, iPlayer))
- {
- return HAM_IGNORED;
- }
- _call.Idle(iItem, iPlayer);
- return HAM_SUPERCEDE;
- }
- public HamHook_Item_PrimaryAttack(const iItem)
- {
- static iPlayer;
- if (!CheckItem(iItem, iPlayer))
- {
- return HAM_IGNORED;
- }
- _call.PrimaryAttack(iItem, iPlayer);
- return HAM_SUPERCEDE;
- }
- public HamHook_Item_SecondaryAttack(const iItem)
- {
- static iPlayer;
- if (!CheckItem(iItem, iPlayer))
- {
- return HAM_IGNORED;
- }
- _call.SecondaryAttack(iItem, iPlayer);
- return HAM_SUPERCEDE;
- }
- public HamHook_Player_Spawn(iPlayer)
- {
- if(is_user_alive(iPlayer))
- {
- new iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
- if (pev_valid(iItem))
- {
- ExecuteHamB(Ham_Item_Deploy, iItem);
- }
- }
- }
- public HamHook_Player_Killed(const iPlayer)
- {
- IsKnife[iPlayer] = false;
- }
- public WeaponSlashDraw(const iPlayer, const iItem)
- {
- PrimarySlash_Attack(iPlayer, iItem, 0.0,0.0, false, true);
- }
- public WeaponSlash(const iPlayer, const iItem)
- {
- PrimarySlash_Attack(iPlayer, iItem);
- }
- public WeaponStab(const iPlayer, const iItem)
- {
- PrimarySlash_Attack(iPlayer, iItem, 0.0,0.0,true);
- }
- //**********************************************
- //* Attack function. *
- //**********************************************
- PrimarySlash_Attack(const iPlayer, const iItem, const Float: flRightScale = 1.0, const Float: flUpScale = 1.0, bool:bStab=false, bool:bDraw=false)
- {
- new Float: Origin[3];
- new Float: vecEnd[3];
- new Float: vecScr[3];
- new Float: flFraction;
- new iTrace;
- new iVictim;
- Weapon_GetGunPosition(iPlayer, Origin, vecScr, 0.0, flRightScale, flUpScale);
- angle_vector(vecScr, ANGLEVECTOR_FORWARD, vecScr);
- if (bDraw)
- {
- xs_vec_mul_scalar(vecScr, 80.0, vecEnd);
- }
- else
- {
- xs_vec_mul_scalar(vecScr, bStab ? WEAPON_DISTANCE_ATTACK_STAB:WEAPON_DISTANCE_ATTACK, vecEnd);
- }
- xs_vec_add(Origin, vecEnd, vecEnd);
- engfunc(EngFunc_TraceLine, Origin, vecEnd, DONT_IGNORE_MONSTERS, iPlayer, (iTrace = create_tr2()));
- get_tr2(iTrace, TR_flFraction, flFraction);
- if (!bDraw)
- {
- switch (bStab)
- {
- case false:
- {
- Weapon_SendAnim(iPlayer, ANIM_SLASH_END);
- set_pdata_float(iItem, m_flTimeWeaponIdle, 2.0, extra_offset_weapon);
- }
- case true:
- {
- Weapon_SendAnim(iPlayer, ANIM_STAB_END);
- set_pdata_float(iItem, m_flTimeWeaponIdle, 1.0, extra_offset_weapon);
- engfunc(EngFunc_EmitSound, iPlayer, CHAN_ITEM, SOUND_STAB_MISS, 0.8, ATTN_NORM, 0, PITCH_NORM);
- }
- }
- }
- if (flFraction >= 1.0)
- {
- engfunc(EngFunc_TraceHull, Origin, vecEnd, DONT_IGNORE_MONSTERS, HULL_HEAD, iPlayer, iTrace);
- get_tr2(iTrace, TR_flFraction, flFraction);
- if (flFraction < 1.0)
- {
- iVictim = INSTANCE(get_tr2(iTrace, TR_pHit));
- if (!iVictim || ExecuteHamB(Ham_IsBSPModel, iVictim))
- {
- FindHullIntersection(Origin, iTrace, Float: {-16.0, -16.0, -18.0}, Float: {16.0, 16.0, 18.0}, iPlayer);
- }
- }
- }
- get_tr2(iTrace, TR_flFraction, flFraction);
- if (flFraction < 1.0)
- {
- iVictim = INSTANCE(get_tr2(iTrace, TR_pHit));
- new Float:iDamage;
- if (bDraw)
- {
- iDamage = WEAPON_DAMAGE_DRAW;
- }
- else
- {
- iDamage = (bStab ? WEAPON_DAMAGE_STAB:WEAPON_DAMAGE);
- }
- if(iVictim > 0 && pev(iVictim, pev_takedamage) != DAMAGE_NO && pev(iVictim, pev_solid) != SOLID_NOT)
- {
- if(ExecuteHamB(Ham_IsPlayer, iVictim))
- {
- engfunc(EngFunc_EmitSound, iPlayer, CHAN_ITEM, SOUND_HIT, 0.8, ATTN_NORM, 0, PITCH_NORM);
- if(!zp_get_user_zombie(iVictim))
- {
- return;
- }
- new Float:vecViewAngle[3]; pev(iPlayer, pev_v_angle, vecViewAngle);
- new Float:vecForward[3]; angle_vector(vecViewAngle, ANGLEVECTOR_FORWARD, vecForward);
- FakeKnockBack(iVictim, vecForward, bStab ? WEAPON_KNOCKBACK_STAB:WEAPON_KNOCKBACK);
- get_tr2(iTrace, TR_vecEndPos, vecEnd);
- Create_Blood(vecEnd, iBlood[0], iBlood[1], 76, 10);
- CreateExplosion(vecEnd, -10.0, iBlood[2], 2, 9, TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NOSOUND);
- static iHitGroup;
- switch ((iHitGroup = get_tr2(iTrace, TR_iHitgroup)))
- {
- case HIT_HEAD:iDamage *= 2;
- case HIT_CHEST:iDamage *= 1;
- case HIT_STOMACH:iDamage *= 1.25;
- case HIT_LEFTARM,HIT_RIGHTARM:iDamage *= 1;
- case HIT_LEFTLEG,HIT_RIGHTLEG:iDamage *= 0.75;
- }
- set_pdata_int(iVictim, m_LastHitGroup, iHitGroup, extra_offset_player);
- }
- ExecuteHamB(Ham_TakeDamage, iVictim, iItem, iPlayer, iDamage, DMG_CLUB | DMG_NEVERGIB);
- }
- else
- {
- get_tr2(iTrace, TR_vecEndPos, vecEnd);
- CreateExplosion(vecEnd, -10.0, iBlood[2], 2, 9, TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NOSOUND);
- engfunc(EngFunc_EmitSound, iPlayer, CHAN_ITEM, SOUND_HIT_WALL, 0.8, ATTN_NORM, 0, PITCH_NORM);
- }
- }
- free_tr2(iTrace);
- }
- //**********************************************
- //* Create and check our custom weapon. *
- //**********************************************
- Weapon_SendAnim(const iPlayer, const iAnim)
- {
- set_pev(iPlayer, pev_weaponanim, iAnim);
- MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0.0, 0.0, 0.0}, iPlayer);
- WRITE_BYTE(iAnim);
- WRITE_BYTE(0);
- MESSAGE_END();
- }
- stock Weapon_DefaultDeploy(const iPlayer, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[])
- {
- set_pev(iPlayer, pev_viewmodel2, szViewModel);
- set_pev(iPlayer, pev_weaponmodel2, szWeaponModel);
- set_pev(iPlayer, pev_fov, 90.0);
- set_pdata_int(iPlayer, m_iFOV, 90, extra_offset_player);
- set_pdata_int(iPlayer, m_fResumeZoom, 0, extra_offset_player);
- set_pdata_int(iPlayer, m_iLastZoom, 90, extra_offset_player);
- set_pdata_string(iPlayer, m_szAnimExtention * 4, szAnimExt, -1, extra_offset_player * 4);
- Weapon_SendAnim(iPlayer, iAnim);
- }
- stock Create_Blood(const Float:vStart[3], const iModel, const iModel2, const iColor, const iScale)
- {
- MESSAGE_BEGIN(MSG_BROADCAST, SVC_TEMPENTITY, vStart, 0);
- WRITE_BYTE(TE_BLOODSPRITE);
- WRITE_COORD(vStart[0])
- WRITE_COORD(vStart[1])
- WRITE_COORD(vStart[2])
- WRITE_SHORT(iModel);
- WRITE_SHORT(iModel2);
- WRITE_BYTE(iColor);
- WRITE_BYTE(iScale);
- MESSAGE_END();
- }
- public client_putinserver(id)
- {
- BitSet(g_bitIsConnected, id);
- }
- public client_disconnected(id)
- {
- BitClear(g_bitIsConnected, id);
- }
- bool: CheckItem(const iItem, &iPlayer)
- {
- if (!IsValidPev(iItem))
- {
- return false;
- }
- iPlayer = get_pdata_cbase(iItem, m_pPlayer, extra_offset_weapon);
- if (!BitCheck(g_bitIsConnected, iPlayer) || !IsValidPev(iPlayer) || zp_get_user_zombie(iPlayer) || !IsKnife[iPlayer])
- {
- return false;
- }
- return true;
- }
- bool: CheckItem2(const iPlayer, &iItem)
- {
- if (!BitCheck(g_bitIsConnected, iPlayer) || !IsValidPev(iPlayer) || zp_get_user_zombie(iPlayer) || get_user_weapon(iPlayer) != CSW_KNIFE)
- {
- return false;
- }
- iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
- if (!IsValidPev(iItem) || !IsKnife[iPlayer])
- {
- return false;
- }
- return true;
- }
- //**********************************************
- //* Some usefull stocks. *
- //**********************************************
- stock Weapon_GetGunPosition(const iPlayer, Float: fOrigin[3], Float: fAngles[3], Float: add_forward = 0.0, Float: add_right = 0.0, Float: add_up = 0.0)
- {
- static Float: Forward[3], Float: Right[3], Float: Up[3];
- if (IsValidPev(iPlayer)) ExecuteHamB(Ham_Player_GetGunPosition, iPlayer, fOrigin);
- pev(iPlayer, pev_angles, fAngles);
- pev(iPlayer, pev_v_angle, fAngles);
- global_get(glb_v_forward, Forward);
- global_get(glb_v_right, Right);
- global_get(glb_v_up, Up);
- xs_vec_mul_scalar(Forward, add_forward, Forward);
- xs_vec_mul_scalar(Right, add_right, Right);
- xs_vec_mul_scalar(Up, add_up, Up);
- fOrigin[0] = fOrigin[0] + Forward[0] + Right[0] + Up[0];
- fOrigin[1] = fOrigin[1] + Forward[1] + Right[1] + Up[1];
- fOrigin[2] = fOrigin[2] + Forward[2] + Right[2] + Up[2];
- }
- stock FindHullIntersection(const Float: vecSrc[3], &iTrace, const Float: vecMins[3], const Float: vecMaxs[3], const iEntity)
- {
- new iTempTrace;
- new Float: flFraction;
- new Float: flThisDistance;
- new Float: vecEnd[3];
- new Float: vecEndPos[3];
- new Float: vecHullEnd[3];
- new Float: vecMinMaxs[2][3];
- new Float: flDistance = 999999.0;
- xs_vec_copy(vecMins, vecMinMaxs[0]);
- xs_vec_copy(vecMaxs, vecMinMaxs[1]);
- get_tr2(iTrace, TR_vecEndPos, vecHullEnd);
- xs_vec_sub(vecHullEnd, vecSrc, vecHullEnd);
- xs_vec_mul_scalar(vecHullEnd, 2.0, vecHullEnd);
- xs_vec_add(vecHullEnd, vecSrc, vecHullEnd);
- engfunc(EngFunc_TraceLine, vecSrc, vecHullEnd, DONT_IGNORE_MONSTERS, iEntity, (iTempTrace = create_tr2()));
- get_tr2(iTempTrace, TR_flFraction, flFraction);
- if (flFraction < 1.0)
- {
- free_tr2(iTrace);
- iTrace = iTempTrace;
- return;
- }
- for (new j, k, i = 0; i < 2; i++)
- {
- for (j = 0; j < 2; j++)
- {
- for (k = 0; k < 2; k++)
- {
- vecEnd[0] = vecHullEnd[0] + vecMinMaxs[i][0];
- vecEnd[1] = vecHullEnd[1] + vecMinMaxs[j][1];
- vecEnd[2] = vecHullEnd[2] + vecMinMaxs[k][2];
- engfunc(EngFunc_TraceLine, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, iEntity, iTempTrace);
- get_tr2(iTempTrace, TR_flFraction, flFraction);
- if (flFraction < 1.0)
- {
- get_tr2(iTempTrace, TR_vecEndPos, vecEndPos);
- xs_vec_sub(vecEndPos, vecSrc, vecEndPos);
- if ((flThisDistance = xs_vec_len(vecEndPos)) < flDistance)
- {
- free_tr2(iTrace);
- iTrace = iTempTrace;
- flDistance = flThisDistance;
- }
- }
- }
- }
- }
- }
- stock CreateExplosion(const Float:Origin[3], const Float:CordZ = 0.0, const iModel, const iScale, const iFramerate, const iFlag)
- {
- message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
- write_byte(TE_EXPLOSION);
- engfunc(EngFunc_WriteCoord, Origin[0]);
- engfunc(EngFunc_WriteCoord, Origin[1]);
- engfunc(EngFunc_WriteCoord, Origin[2] + CordZ);
- write_short(iModel);
- write_byte(iScale);
- write_byte(iFramerate);
- write_byte(iFlag);
- message_end();
- }
- stock FakeKnockBack(iPlayer, Float:vecDirection[3], Float:flKnockBack)
- {
- static Float:vecVelocity[3]; pev(iPlayer, pev_velocity, vecVelocity);
- if (pev(iPlayer, pev_flags) & FL_DUCKING)
- {
- flKnockBack *= 0.7;
- }
- vecVelocity[0] = vecDirection[0] * 500.0 * flKnockBack;
- vecVelocity[1] = vecDirection[1] * 500.0 * flKnockBack;
- vecVelocity[2] = 300.0;
- set_pev(iPlayer, pev_velocity, vecVelocity);
- }
- stock Player_SetAnimation(const iPlayer, const szAnim[])
- {
- #define ACT_RANGE_ATTACK1 28
- // Linux extra offsets
- #define extra_offset_animating 4
- // CBaseAnimating
- #define m_flFrameRate 36
- #define m_flGroundSpeed 37
- #define m_flLastEventCheck 38
- #define m_fSequenceFinished 39
- #define m_fSequenceLoops 40
- // CBaseMonster
- #define m_Activity 73
- #define m_IdealActivity 74
- // CBasePlayer
- #define m_flLastAttackTime 220
- new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;
- if ((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1)
- {
- iAnimDesired = 0;
- }
- new Float: flGametime = get_gametime();
- set_pev(iPlayer, pev_frame, 0.0);
- set_pev(iPlayer, pev_framerate, 1.0);
- set_pev(iPlayer, pev_animtime, flGametime);
- set_pev(iPlayer, pev_sequence, iAnimDesired);
- set_pdata_int(iPlayer, m_fSequenceLoops, bLoops, extra_offset_animating);
- set_pdata_int(iPlayer, m_fSequenceFinished, 0, extra_offset_animating);
- set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, extra_offset_animating);
- set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, extra_offset_animating);
- set_pdata_float(iPlayer, m_flLastEventCheck, flGametime , extra_offset_animating);
- set_pdata_int(iPlayer, m_Activity, ACT_RANGE_ATTACK1, extra_offset_player);
- set_pdata_int(iPlayer, m_IdealActivity, ACT_RANGE_ATTACK1, extra_offset_player);
- set_pdata_float(iPlayer, m_flLastAttackTime, flGametime , extra_offset_player);
- }
- #if !defined _ZP
- public zp_user_infected_post(iPlayer)
- {
- IsKnife[iPlayer] = false;
- }
- #else
- public ze_user_infected_pre(iVictim, iInfector, iDamage)
- {
- IsKnife[iVictim] = false;
- }
- #endif
- public Weapon_Select(const iPlayer)
- {
- engclient_cmd(iPlayer, WEAPON_REFERANCE);
- IsKnife[iPlayer] = true;
- emessage_begin(MSG_ONE, get_user_msgid("CurWeapon"), _, iPlayer);
- ewrite_byte(1);
- ewrite_byte(CSW_KNIFE);
- ewrite_byte(-1);
- emessage_end();
- new iItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
- if (pev_valid(iItem))
- {
- ExecuteHamB(Ham_Item_Deploy, iItem);
- }
- }
- PRECACHE_SOUNDS_FROM_MODEL(const szModelPath[])
- {
- new iFile;
- if ((iFile = fopen(szModelPath, "rt")))
- {
- new szSoundPath[64];
- new iNumSeq, iSeqIndex;
- new iEvent, iNumEvents, iEventIndex;
- fseek(iFile, 164, SEEK_SET);
- fread(iFile, iNumSeq, BLOCK_INT);
- fread(iFile, iSeqIndex, BLOCK_INT);
- for (new k, i = 0; i < iNumSeq; i++)
- {
- fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET);
- fread(iFile, iNumEvents, BLOCK_INT);
- fread(iFile, iEventIndex, BLOCK_INT);
- fseek(iFile, iEventIndex + 176 * i, SEEK_SET);
- for (k = 0; k < iNumEvents; k++)
- {
- fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET);
- fread(iFile, iEvent, BLOCK_INT);
- fseek(iFile, 4, SEEK_CUR);
- if (iEvent != 5004)
- {
- continue;
- }
- fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR);
- if (strlen(szSoundPath))
- {
- strtolower(szSoundPath);
- PRECACHE_SOUND(szSoundPath);
- }
- }
- }
- }
- fclose(iFile);
- }
- /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
- *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
- */