View Single Post
Author Message
Hn.S Xmix
Member
Join Date: May 2021
Old 05-03-2024 , 10:55   Duration & Cooldown
Reply With Quote #1

Hello.

i tried my best to make this zombie class skills with duration & cooldown.
Like the time of climb is 10 seconds and when duration of climb end he will wait 10 secnods to climb again.

can anyone please help me to solve this.

PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>
#include <hamsandwich>
//#include <fakemeta_util>

#define STR_T           33

// Stuff taken from fakemeta_util
#define fm_get_user_button(%1) pev(%1, pev_button)    
/* stock fm_get_user_button(index)
    return pev(index, pev_button) */

#define fm_get_entity_flags(%1) pev(%1, pev_flags)
/* stock fm_get_entity_flags(index)
    return pev(index, pev_flags) */

stock fm_set_user_velocity(entity, const Float:vector[3]) {
    
set_pev(entitypev_velocityvector);

    return 
1;
}
//End of stuff from fakemeta_util
//new STR_T[32]
new Float:g_lastusetime[33]
new 
Float:g_nextuse[33]
new 
bool:g_WallClimb[33]
new 
Float:g_wallorigin[32][3]
new 
cvar_zp_wallclimbcvar_zp_wallclimb_nemesiscvar_zp_wallclimb_survivorcvar_climb_cooldowncvar_climb_duration
new g_zclass_climb
  
// Climb Zombie Atributes
new const zclass_name[] = { "Climb Zombie" // name
new const zclass_info[] = { "HP-- Speed+ Jump+ Knockback++" // description
new const zclass_model[] = { "sirenzz" // model
new const zclass_clawmodel[] = { "v_knife_zombie.mdl" // claw model
const zclass_health 1200 // health
const zclass_speed 220 // speed
const Float:zclass_gravity 0.8 // gravity
const Float:zclass_knockback 1.5 // knockback

public plugin_init() 
{
    
register_plugin("[ZP] Wallclimb ""1.0""WallClimb by Python1320/Cheap_Suit, Plagued by Dabbi")
    
register_forward(FM_Touch,         "fwd_touch")
    
register_forward(FM_PlayerPreThink,     "fwd_playerprethink")
    
//register_forward(FM_PlayerPostThink,     "fwd_playerpostthink")
    
register_event("DeathMsg","EventDeathMsg","a")
    
cvar_zp_wallclimb register_cvar("zp_wallclimb""1")
    
cvar_zp_wallclimb_survivor register_cvar("zp_wallclimb_survivor""0")
    
cvar_zp_wallclimb_nemesis register_cvar("zp_wallclimb_nemesis""0")
    
cvar_climb_cooldown register_cvar("zp_wallclimb_cooldown""10.0"
    
cvar_climb_duration register_cvar("zp_wallclimb_duration""10.0"
    
    
RegisterHam(Ham_Spawn"player""FwdPlayerSpawn"1);
    
RegisterHam(Ham_Killed"player""FwdPlayerKilled"1);
    
}

public 
plugin_precache()
{
    
g_zclass_climb zp_register_zombie_class(zclass_namezclass_infozclass_modelzclass_clawmodelzclass_healthzclass_speedzclass_gravityzclass_knockback)
}

public 
EventDeathMsg()    
{
    new 
id read_data(2)
    
g_WallClimb[id] = true
    
return PLUGIN_HANDLED
}

public 
FwdPlayerSpawn(id)
{
    if(!
is_user_alive(id)) return HAM_IGNORED;
    
    
ResetPlayerData(id);

    return 
HAM_IGNORED;
}

public 
FwdPlayerKilled(id)
    
ResetPlayerData(id);

public 
client_disconnected(id)
    
ResetPlayerData(id);

public 
client_putinserver(id)
    
ResetPlayerData(id);

public 
client_connect(id) {
    
g_WallClimb[id] = true    
}

public 
fwd_touch(idworld)
{
    if(!
is_user_alive(id) || !g_WallClimb[id] || !pev_valid(id))
        return 
FMRES_IGNORED

    
new player STR_T
    
if (!player)
        return 
FMRES_IGNORED
        
    
new classname[STR_T]
    
pev(worldpev_classnameclassname, (STR_T))
    
    if(
equal(classname"worldspawn") || equal(classname"func_wall") || equal(classname"func_breakable"))
        
pev(idpev_origing_wallorigin[id])

    return 
FMRES_IGNORED
}

public 
client_PreThink(id)
{
    if(
zp_get_user_zombie_class(id) == g_zclass_climb
        {
        if(!
is_user_alive(id) || !zp_get_user_zombie(id)) return PLUGIN_CONTINUE;

        new 
Float:gametime get_gametime();
        new 
Float:timeleft_climb g_nextuse[id] - gametime;
        
        if( 
timeleft_climb >= 0.0)
        {
            
set_hudmessage(255255255, -1.00.8016.012.00.01.08);
            
show_hudmessage(id"[WallClimb]^nDuration^n> %.1f <"timeleft_climb);
        }
    }
    return 
PLUGIN_CONTINUE;
}

public 
checking(idbutton)
     if(
g_WallClimb[id])
             
wallclimb(idbutton)

public 
wallclimb(idbutton)
{
    static 
Float:origin[3]
    
pev(idpev_originorigin)

    if(
get_distance_f(origing_wallorigin[id]) > 25.0)
        return 
FMRES_IGNORED  // if not near wall
    
    
if(fm_get_entity_flags(id) & FL_ONGROUND)
        return 
FMRES_IGNORED
        
            
if(button IN_FORWARD)
            {
               static 
Float:velocity[3]
               
velocity_by_aim(id120velocity)
               
fm_set_user_velocity(idvelocity)
            }
            else if(
button IN_BACK)
            {
               static 
Float:velocity[3]
               
velocity_by_aim(id, -120velocity)
               
fm_set_user_velocity(idvelocity)
            }
    
    return 
FMRES_IGNORED
}    

public 
fwd_playerprethink(id
{
    new 
Float:gametime get_gametime();
    if(!
g_WallClimb[id] || !zp_get_user_zombie(id)) 
        return 
FMRES_IGNORED
        
    
if(zp_is_survivor_round() && get_pcvar_num(cvar_zp_wallclimb_survivor) == 0)
        return 
FMRES_IGNORED
        
    
if(zp_is_nemesis_round() && get_pcvar_num(cvar_zp_wallclimb_nemesis) == 0)
        return 
FMRES_IGNORED
    
    
new button fm_get_user_button(id)
    
    new 
Float:cooldown get_pcvar_float(cvar_climb_cooldown)
    new 
Float:duration get_pcvar_float(cvar_climb_duration)
    
    
//set_task(duration, "RemoveClimb", id)
    //g_WallClimb[id] = true
    
if (gametime >= g_lastusetime[id])
    {
            
g_nextuse[id] = gametime duration;
            
g_lastusetime[id] = gametime duration cooldown;
    }
    else
    {
            
set_hudmessage(255255255, -1.00.2016.012.00.01.0, -1);
            
show_hudmessage(id"[WallClimb]^nCooldown^n> %.1f <"g_lastusetime[id] - gametime);
    }
    if((
get_pcvar_num(cvar_zp_wallclimb) == 1) && (button IN_USE) && (zp_get_user_zombie_class(id) == g_zclass_climb)) //Use button = climb
    
wallclimb(idbutton)
    else if((
get_pcvar_num(cvar_zp_wallclimb) == 2) && (button IN_JUMP) && button IN_DUCK && (zp_get_user_zombie_class(id) == g_zclass_climb)) //Jump + Duck = climb
    
wallclimb(idbutton)
    
g_WallClimb[id] = true
    
return FMRES_IGNORED
}

public 
RemoveClimb(id)
{
        
g_WallClimb[id] = false
}

ResetPlayerData(id)
{
    
g_lastusetime[id] = 0.0;
    
g_nextuse[id] = 0.0;

Attached Files
File Type: sma Get Plugin or Get Source (zp_class_climb.sma - 17 views - 5.9 KB)

Last edited by Hn.S Xmix; 05-03-2024 at 10:57.
Hn.S Xmix is offline