#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); }