/*================================================================================
-----------------------------------
-*- [ZP] Hunter L4D -*-
-----------------------------------
~~~~~~~~~~~~~~~
- Description -
~~~~~~~~~~~~~~~
This zombie has long jumps as well as the popular game L4D2
Well, this time the skill is good and better,
to jump you have to press Ctrl + E and look where you want to jump.
================================================================================*/
#include <amxmodx>
#include <basebuilder>
#include <hamsandwich>
#include <fun>
#include <cstrike>
#include <amxmisc>
#include <fakemeta>
/*================================================================================
[Customizations]
=================================================================================*/
new const g_spawm_blody[][] = { "basebuilder/spawn_hunter.wav" }
#define KILL_HUNTER "basebuilder/die_hunter.wav"
// Zombie Attributes
new const zclass_name[] = "Hunter Zombie"
new const zclass_info[] = "Salto + HP+ Speed"
new const zclass_model[] = "SVL_Hunter_Zombie"
new const zclass_clawmodel[] = "v_knife_zombie_hunter"
const zclass_health = 3000
const zclass_speed = 300
const Float:zclass_gravity = 0.6
const Float:zclass_knockback = 1.0
const zclass_adminflags = ADMIN_ADMIN
new const leap_sound[4][] = { "left_4_dead2/hunter_jump.wav", "left_4_dead2/hunter_jump1.wav", "left_4_dead2/hunter_jump2.wav", "left_4_dead2/hunter_jump3.wav" }
/*================================================================================
Customization ends here!
Any edits will be your responsibility
=================================================================================*/
// Variables
new g_hunter
// Arrays
new Float:g_lastleaptime[33]
// Cvar pointers
new cvar_force, cvar_cooldown
// Plugin info.
#define PLUG_VERSION "0.2"
#define PLUG_AUTHOR "DJHD!"
/*================================================================================
[Init, CFG and Precache]
=================================================================================*/
public plugin_precache()
{
precache_sound(KILL_HUNTER)
// Register the new class and store ID for reference
g_hunter = bb_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback, zclass_adminflags)
// Sound
static i
for(i = 0; i < sizeof leap_sound; i++)precache_sound(leap_sound[i])
for(i = 0; i < sizeof g_spawm_blody; i++) precache_sound(g_spawm_blody[i])
}
public plugin_init()
{
// Plugin Info
register_plugin("[ZP] Zombie Class: Hunter L4D2 Zombie", PLUG_VERSION, PLUG_AUTHOR)
// Forward
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
// Cvars
cvar_force = register_cvar("zp_hunter_jump_force", "520")
cvar_cooldown = register_cvar("zp_hunter_jump_cooldown", "20")
RegisterHam(Ham_Spawn, "player", "ham_PlayerSpawn_Post", 1)
register_forward(FM_EmitSound, "fm_emitsound")
static szCvar[30]
formatex(szCvar, charsmax(szCvar), "v%s by %s", PLUG_VERSION, PLUG_AUTHOR)
register_cvar("zp_zclass_hunterl4d2", szCvar, FCVAR_SERVER|FCVAR_SPONLY)
}
/*================================================================================
[Zombie Plague Forwards]
=================================================================================*/
/*================================================================================
[Main Forwards]
=================================================================================*/
public fw_PlayerPreThink(id)
{
if(!is_user_alive(id))
return
if(is_user_connected(id))
{
if (allowed_hunterjump(id))
{
static Float:velocity[3]
velocity_by_aim(id, get_pcvar_num(cvar_force), velocity)
set_pev(id, pev_velocity, velocity)
emit_sound(id, CHAN_STREAM, leap_sound[random_num(0, sizeof leap_sound -1)], 1.0, ATTN_NORM, 0, PITCH_HIGH)
// Set the current super jump time
g_lastleaptime[id] = get_gametime()
}
}
}
/*================================================================================
[Internal Functions]
=================================================================================*/
allowed_hunterjump(id)
{
if (!zp_get_user_zombie(id))
return false
if (bb_get_user_zombie_class(id) != g_hunter)
return false
if (!((pev(id, pev_flags) & FL_ONGROUND) && (pev(id, pev_flags) & FL_DUCKING)))
return false
static buttons
buttons = pev(id, pev_button)
// Not doing a longjump (added bot support)
if (!(buttons & IN_ATTACK2) && !is_user_bot(id))
return false
static Float:cooldown
cooldown = get_pcvar_float(cvar_cooldown)
if (get_gametime() - g_lastleaptime[id] < cooldown)
return false
return true
}
public fm_emitsound(id, channel, const sample[], Float:volume, Float:attn, flags, pitch)
{
if(!bb_is_user_zombie(id))
return;
if(equal(sample[7], "die", 3) || equal(sample[7], "dea", 3))
{
new class = bb_get_user_zombie_class(id);
if(class == g_hunter)
emit_sound( id, channel, KILL_HUNTER, volume, attn, flags, pitch)
}
/* else if((sample[7] == 'b' && sample[8] == 'h' && sample[9] == 'i' && sample[10] == 't') || (sample[7] == 'h' && sample[8] == 'e' && sample[9] == 'a' && sample[10] == 'd'))
{
if( bb_get_user_zombie_class(id) == g_bloody)
emit_sound( id, channel, g_sound_neme[random(sizeof(g_sound_neme))], volume, attn, flags, pitch)*/
}
public ham_PlayerSpawn_Post(id)
{
if (!is_user_alive(id))
return ;
if(bb_is_user_zombie(id) && bb_get_user_zombie_class(id) == g_hunter)
{
emit_sound(id, CHAN_STREAM, g_spawm_blody[random_num(0, sizeof g_spawm_blody -1)], 1.0, ATTN_NORM, 0, PITCH_HIGH)
}
}