Change plugin
Hello Guys! I have a zombie which have a problem . When you press space he fly BUT after he get damage he go down and you must to press again!
Can you make the plugin when he get damage do no cancel that space ?
PHP Code:
#include <amxmodx>
#include <biohazard>
#include <hamsandwich>
#include <fakemeta_util>
#define DISABLE_TIME 2.0
#define STR_T 32
#define MAX_PLAYERS 32
#define D_ZOMBIE_NAME "Witch"
#define D_ZOMBIE_DESC "Space"
#define D_PLAYER_MODEL "models/player/Biohazard32/bio32_witch/witch.mdl"
#define D_CLAWS "models/bio32/v_knife_witch.mdl"
new g_class
new cvar_speed, g_smoke, cvar_minillum, cvar_damage, cvar_delay
new Float:g_wallorigin[33][3]
new Float:g_nextdmg[33]
new Float:g_shoottime[33]
new bool:g_bCantFly[33]
public plugin_init() {
register_plugin("bio_witchzombie","1.2b","bipbip")
is_biomod_active() ? plugin_init2() : pause("ad")
}
public plugin_precache() {
precache_model(D_PLAYER_MODEL)
precache_model(D_CLAWS)
g_smoke = precache_model( "sprites/steam1.spr" )
}
public plugin_init2() {
g_class = register_class(D_ZOMBIE_NAME, D_ZOMBIE_DESC)
if(g_class != -1)
{
set_class_data(g_class, DATA_HEALTH, 300.0)
set_class_data(g_class, DATA_SPEED, 280.0)
set_class_data(g_class, DATA_GRAVITY, 0.8)
set_class_data(g_class, DATA_REGENDLY, 0.3)
set_class_pmodel(g_class, D_PLAYER_MODEL)
set_class_wmodel(g_class, D_CLAWS)
}
cvar_speed = register_cvar("bh_zm_climbingspeed", "220")
cvar_minillum = register_cvar("bh_zm_minlight", "300")
cvar_damage = register_cvar("bh_zm_lightdamage", "0")
cvar_delay = register_cvar("bh_zm_climbdelay", "0")
RegisterHam(Ham_Touch, "player", "cheese_player_touch", 1)
RegisterHam(Ham_Player_PreThink, "player", "cheese_player_prethink", 1)
RegisterHam(Ham_TakeDamage, "player", "cheese_takedamage", 1)
}
public cheese_player_touch(id, world) {
if(!is_user_alive(id) || g_class != get_user_class(id))
return HAM_IGNORED
new classname[STR_T]
pev(world, pev_classname, classname, (STR_T-1))
if(equal(classname, "worldspawn") || equal(classname, "func_wall") || equal(classname, "func_breakable"))
pev(id, pev_origin, g_wallorigin[id])
return HAM_IGNORED
}
public cheese_player_prethink(id) {
// Player not alive or not zombie
if(!is_user_alive(id) || !is_user_zombie(id)) {
return HAM_IGNORED
}
static Float:test ; pev(id, pev_light_level, test)
// Player has not our zombie class
if(g_class != get_user_class(id)) {
return HAM_IGNORED
}
static Float:origin[3]
pev(id, pev_origin, origin)
if (get_gametime() > g_nextdmg[id]) {
static Float:lightlevel; pev(id,pev_light_level, lightlevel)
if (lightlevel > get_pcvar_float(cvar_minillum)) {
fm_fakedamage(id, "light", get_pcvar_float(cvar_damage), DMG_BURN)
// do some smokes
message_begin( MSG_BROADCAST, SVC_TEMPENTITY )
write_byte( TE_SMOKE )
engfunc(EngFunc_WriteCoord, origin[ 0 ] )
engfunc(EngFunc_WriteCoord, origin[ 1 ] )
engfunc(EngFunc_WriteCoord, origin[ 2 ] )
write_short( g_smoke )
write_byte( 20 )
write_byte( 10 )
message_end()
g_nextdmg[id] = get_gametime() + 1.0
}
}
// from Cheap_Suit's Upgrades Mod eXtended
static button ; button = pev(id, pev_button)
if(button & IN_JUMP && !g_bCantFly[id])
{
static Float:velocity[3]
velocity_by_aim(id, get_pcvar_num(cvar_speed), velocity)
fm_set_user_velocity(id, velocity)
}
return HAM_IGNORED
}
public event_infect(victim, attacker) {
g_nextdmg[victim] = 0.0
g_shoottime[victim] = 0.0
}
public cheese_takedamage(victim, inflictor, attacker, Float:damage, damagetype)
{
if (is_user_alive(victim))
{
if (g_class == get_user_class(victim))
{
g_shoottime[victim] = get_gametime() + get_pcvar_float(cvar_delay);
g_bCantFly[victim] = true;
set_task(DISABLE_TIME, "Reset", victim)
}
}
return HAM_IGNORED
}
public Reset(id) g_bCantFly[id] = false;
|