#include #include #include #include #include new g_zclassid_fs new cvar_pattack_rate, cvar_sattack_rate, cvar_dmgmulti new bool:g_HasFast[33] const m_pPlayer = 41 const m_flNextPrimaryAttack = 46 const m_flNextSecondaryAttack = 47 const m_flTimeWeaponIdle = 48 new const zclass_name[] = "Fast" new const zclass_info[] = "Little damage" new const zclass_model[] = "zombie_source" new const zclass_clawmodel[] = "v_knife_zombie.mdl" const zclass_health = 3000 // health const zclass_speed = 300 // speed const Float:zclass_gravity = 0.49 // gravity const Float:zclass_knockback = 1.0 // knockback public plugin_init() { register_plugin("[ZP] Zombie Class: Fast", "1.0", "fl0wer") g_zclassid_fs = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback) cvar_pattack_rate = register_cvar("zp_fast_attack1_rate", "0.3") cvar_sattack_rate = register_cvar("zp_fast_attack2_rate", "0.6") cvar_dmgmulti = register_cvar("zp_fast_damage", "2") RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage") RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_knife", "fw_Knife_PrimaryAttack_Post", 1) RegisterHam(Ham_Weapon_SecondaryAttack, "weapon_knife", "fw_Knife_SecondaryAttack_Post", 1) RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1) } public zp_user_infected_post(id, infector) { if (zp_get_user_zombie_class(id) == g_zclassid_fs) { g_HasFast[id] = true client_print(id, print_chat, "[ZP] You're using a zombie class! A speed hack :D and little damage!") } } public client_putinserver(id) { g_HasFast[id] = false } public client_disconnect(id) { g_HasFast[id] = false } public fw_PlayerSpawn_Post(id) { if(!zp_get_user_zombie(id)) { g_HasFast[id] = false } } public fw_Knife_PrimaryAttack_Post(knife) { if(g_HasFast[knife]) { static Float:flRate flRate = get_pcvar_float(cvar_pattack_rate) set_pdata_float(knife, m_flNextPrimaryAttack, flRate, 4) set_pdata_float(knife, m_flNextSecondaryAttack, flRate, 4) set_pdata_float(knife, m_flTimeWeaponIdle, flRate, 4) } return HAM_IGNORED } public fw_Knife_SecondaryAttack_Post(knife) { if(g_HasFast[knife]) { static Float:flRate flRate = get_pcvar_float(cvar_sattack_rate) set_pdata_float(knife, m_flNextPrimaryAttack, flRate, 4) set_pdata_float(knife, m_flNextSecondaryAttack, flRate, 4) set_pdata_float(knife, m_flTimeWeaponIdle, flRate, 4) } return HAM_IGNORED } public fw_TakeDamage(victim, inflictor, attacker, Float: damage) { if(g_HasFast[attacker]) { if(victim!=attacker) { { SetHamParamFloat(4, damage / get_pcvar_float(cvar_dmgmulti)) } } } }