#include <amxmisc>
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <zombieplague>
static const PLUGIN_NAME[] = "[ZP] Fulladt Zombie";
static const PLUGIN_VERSION[] = "1.2";
static const PLUGIN_AUTHOR[] = "tuty/CHyC";
enum
{
WATERLEVEL_NOT,
};
#define DMG_DROWN (1<<14)
new cvar_enabled;
new g_zclass_drowned;
new drowned_speed;
new Float:g_cvar_speed;
new bool:g_alive[33];
new bool:g_counter_strike;
new const zclass_name[] = { "Fulladt Zombie" } // name
new const zclass_info[] = { "Vizben nem sebzodik" } // description
new const zclass_model[] = { "zombie_fulladt" } // model
new const zclass_clawmodel[] = { "v_knife_zombie_fulladt.mdl" } // claw model
const zclass_health = 3500 // health
const zclass_speed = 270 // speed
const Float:zclass_gravity = 0.9 // gravity
const Float:zclass_knockback = 1.2 // knockback
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
RegisterHam(Ham_TakeDamage, "player", "FwdTakeDamage");
cvar_enabled = register_cvar("zp_drowned", "1");
register_forward(FM_PlayerPreThink, "FwdPlayerPreThink");
RegisterHam(Ham_Spawn, "player", "FwdPlayerSpawn", 1);
drowned_speed = register_cvar("zp_drowned_speed", "50000.0");
g_counter_strike = bool:is_running("cstrike");
}
public plugin_precache()
{
g_zclass_drowned = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
}
public FwdTakeDamage(id, inflictor, attacker, Float:damage, damagebits)
{
if(get_pcvar_num(cvar_enabled) != 1)
return HAM_IGNORED;
if(!is_user_alive(id) || !zp_get_user_zombie(id))
return HAM_IGNORED;
if(zp_get_user_zombie_class(id) != g_zclass_drowned)
return HAM_IGNORED;
if(damagebits & DMG_DROWN)
{
return HAM_SUPERCEDE;
}
return HAM_IGNORED;
}
public FwdPlayerPreThink(client)
{
static old_waterlevel[33];
if( !g_alive[client] || !get_pcvar_float(drowned_speed) || !zp_get_user_zombie(client) || zp_get_user_zombie_class(client) != g_zclass_drowned || pev(client, pev_movetype) == MOVETYPE_NOCLIP )
{
old_waterlevel[client] = WATERLEVEL_NOT;
return;
}
new waterlevel = pev(client, pev_waterlevel);
if( waterlevel != WATERLEVEL_NOT )
{
SetMaxspeed(client, g_cvar_speed);
}
else if( old_waterlevel[client] != WATERLEVEL_NOT )
{
ResetMaxspeed(client);
}
old_waterlevel[client] = waterlevel;
}
public FwdPlayerSpawn(client)
{
if( is_user_alive(client) )
{
g_alive[client] = true;
}
}
ResetMaxspeed(client)
{
if( g_counter_strike )
{
static Float:maxspeed;
switch ( get_user_weapon(client) )
{
case CSW_SG550, CSW_AWP, CSW_G3SG1: maxspeed = 210.0;
case CSW_M249: maxspeed = 220.0;
case CSW_AK47: maxspeed = 221.0;
case CSW_M3, CSW_M4A1: maxspeed = 230.0;
case CSW_SG552: maxspeed = 235.0;
case CSW_XM1014, CSW_AUG, CSW_GALIL, CSW_FAMAS: maxspeed = 240.0;
case CSW_P90: maxspeed = 245.0;
case CSW_SCOUT: maxspeed = 260.0;
default: maxspeed = 250.0;
}
SetMaxspeed(client, maxspeed);
}
else
{
SetMaxspeed(client, 250.0);
}
}
SetMaxspeed(client, Float:maxspeed)
{
engfunc(EngFunc_SetClientMaxspeed, client, maxspeed);
set_pev(client, pev_maxspeed, maxspeed);
}