/* That class created by Nikita "Trinity" Kushnir
v0.1.0 - Plugin published
v0.1.1 - Force Duck added
v0.1.2 - Hit Zones added
© iNSaNe Modders 2009
*/
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <hlsdk_const>
#include <zombieplague>
#include <fun>
#define PLUGIN "[ZP] Class : Head Crab"
#define VERSION "0.1.2"
#define AUTHOR "Trinity"
#define FACTOR 2.35 // Duck Speed
new g_zclass_crab, g_glow_red, g_glow_green, g_glow_blue, g_invisible_amount
new has_silent[33]
new const zclass_name[] = { "Head Crab" }
new const zclass_info[] = { "Created by Trinity" }
new const zclass_model[] = { "head_crab" }
new const zclass_clawmodel[] = { "hc_claws.mdl" }
const zclass_health = 1000
const zclass_speed = 350
const Float:zclass_gravity = 0.4
const Float:zclass_knockback = 1.0
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_forward(FM_PlayerPreThink, "PlayerPreThink") //Duck Speed
set_cvar_float("sv_maxspeed", 610.0);
register_cvar("zp_zclass_head_crab",VERSION,FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY)
g_invisible_amount = register_cvar("zp_crab_invisibility", "100")
g_glow_red = register_cvar("zp_crab_glow_red", "150")
g_glow_green = register_cvar("zp_crab_glow_green", "150")
g_glow_blue = register_cvar("zp_crab_glow_blue", "300")
register_forward(FM_AddToFullPack,"fw_addtofullpack",1)
register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
set_user_hitzones(0, 0, 255);
}
public plugin_precache()
{
g_zclass_crab = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}
///Begin of "Duck Speed" "0.0.1" "ConnorMcLeod"
public client_connect(id)
{
client_cmd(id, "cl_forwardspeed 610;cl_backspeed 610;cl_sidespeed 610")
}
public PlayerPreThink(id)
{
if( pev(id, pev_button) & IN_DUCK )
{
if( !(pev(id, pev_oldbuttons) & IN_DUCK) )
{
cs_set_user_duckspeed(id)
}
}
else
{
if( pev(id, pev_oldbuttons) & IN_DUCK )
{
cs_reset_user_maxspeed(id)
}
}
}
stock cs_reset_user_maxspeed(id)
{
new Float:flMaxSpeed;
switch ( get_user_weapon(id) )
{
case CSW_SG550, CSW_AWP, CSW_G3SG1 : flMaxSpeed = 210.0;
case CSW_M249 : flMaxSpeed = 220.0;
case CSW_AK47 : flMaxSpeed = 221.0;
case CSW_M3, CSW_M4A1 : flMaxSpeed = 230.0;
case CSW_SG552 : flMaxSpeed = 235.0;
case CSW_XM1014, CSW_AUG, CSW_GALIL, CSW_FAMAS : flMaxSpeed = 240.0;
case CSW_P90 : flMaxSpeed = 245.0;
case CSW_SCOUT : flMaxSpeed = 260.0;
default : flMaxSpeed = 250.0;
}
engfunc(EngFunc_SetClientMaxspeed, id, flMaxSpeed);
set_pev(id, pev_maxspeed, flMaxSpeed);
}
stock cs_set_user_duckspeed(id)
{
new Float:flMaxSpeed;
switch ( get_user_weapon(id) )
{
case CSW_SG550, CSW_AWP, CSW_G3SG1 : flMaxSpeed = 210.0*FACTOR;
case CSW_M249 : flMaxSpeed = 220.0*FACTOR;
case CSW_AK47 : flMaxSpeed = 221.0*FACTOR;
case CSW_M3, CSW_M4A1 : flMaxSpeed = 230.0*FACTOR;
case CSW_SG552 : flMaxSpeed = 235.0*FACTOR;
case CSW_XM1014, CSW_AUG, CSW_GALIL, CSW_FAMAS : flMaxSpeed = 240.0*FACTOR;
case CSW_P90 : flMaxSpeed = 245.0*FACTOR;
case CSW_SCOUT : flMaxSpeed = 260.0*FACTOR;
default : flMaxSpeed = 250.0*FACTOR;
}
engfunc(EngFunc_SetClientMaxspeed, id, flMaxSpeed);
set_pev(id, pev_maxspeed, flMaxSpeed);
}
///End of "Duck Speed" "0.0.1" "ConnorMcLeod"
public fw_PlayerPreThink(player)
{
if(!is_user_alive(player))
return FMRES_IGNORED
if(zp_get_user_zombie(player) && zp_get_user_zombie_class(player) == g_zclass_crab)
set_pev(player, pev_flTimeStepSound, 999)
return FMRES_IGNORED
}
public fw_addtofullpack(es_handle,e,ent,host,hostflags,player,pSet)
{
if(!is_user_alive(ent) || !is_user_alive(host))
return FMRES_IGNORED
if(zp_get_user_zombie(ent) && !zp_get_user_nemesis(ent) && zp_get_user_zombie_class(ent) == g_zclass_crab)
{
set_es(es_handle, ES_RenderMode, kRenderTransAlpha)
set_es(es_handle, ES_RenderAmt, get_pcvar_num(g_invisible_amount))
set_es(es_handle, ES_RenderFx, kRenderFxGlowShell)
static color[3];
color[0] = get_pcvar_num(g_glow_red);
color[1] = get_pcvar_num(g_glow_green);
color[2] = get_pcvar_num(g_glow_blue);
set_es(es_handle,ES_RenderColor,color);
}
return FMRES_IGNORED
}
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
// Victim is not taking damage from a fall
if (!(damage_type & DMG_FALL) || !zp_get_user_zombie(victim) || zp_get_user_zombie_class(victim) != g_zclass_crab)
return HAM_IGNORED
SetHamParamFloat(4, 0.0)
return HAM_HANDLED
}
stock fm_set_user_footsteps(id, bool:set = true)
{
set_pev(id, pev_flTimeStepSound,set ? 999 : 400)
has_silent[id] = set
return 1
}
stock fm_set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 255)
{
new Float:RenderColor[3]
RenderColor[0] = float®
RenderColor[1] = float(g)
RenderColor[2] = float(b)
set_pev(entity, pev_renderfx, fx)
set_pev(entity, pev_rendercolor, RenderColor)
set_pev(entity, pev_rendermode, render)
set_pev(entity, pev_renderamt, float(amount))
return 1
}