AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   block a command for a certain time (https://forums.alliedmods.net/showthread.php?t=147181)

Shiro 01-06-2011 06:26

block a command for a certain time
 
Hi all,
How to block a command for a certain time? For 5 or more seconds.. thanks

PHP Code:

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

#define PLUGIN "Respawn"
#define VERSION "1.0"
#define AUTHOR "fR4gn0tiX!"

new lastused[33]

stock register_saycmd(saycommand[], function[], flags = -1info[])
{
    static 
sTemp[64]
    
formatex(sTempsizeof sTemp 1"say /%s"saycommand)
    
register_clcmd(sTemp, function, flagsinfo)
    
formatex(sTempsizeof sTemp 1"say .%s"saycommand)
    
register_clcmd(sTemp, function, flagsinfo)
    
formatex(sTempsizeof sTemp 1"say_team /%s"saycommand)
    
register_clcmd(sTemp, function, flagsinfo)
    
formatex(sTempsizeof sTemp 1"say_team .%s"saycommand)
    
register_clcmd(sTemp, function, flagsinfo)
}


public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_cvar("gacocxleba""v1.0 by fR4gn0tiX!"FCVAR_SERVER|FCVAR_SPONLY)
    
    
register_concmd("amx_respawn""cmd_gacocxleba"ADMIN_SLAY"< saxeli | #userid > - Respawn player")    
    
register_saycmd("respawn""cl_gacocxleba"ADMIN_SLAY"Respawn yourself")            
}

public 
cmd_gacocxleba(idlevelcid)
{
    if (!
cmd_access(idlevelcid2))
       return 
PLUGIN_HANDLED
       
    
new Argument[32
    
    
read_argv(1Argument31
    
    new 
Target cmd_target(idArgumentCMDTARGET_ALLOW_SELF CMDTARGET_OBEY_IMMUNITY
    
    if (
Target
    {    
        if (
is_user_alive(Target)) 
        {
            new 
saxeli[32]            
            
get_user_name(Targetsaxeli31)    
            
            
console_print(id"%s is already alive!"saxeli
            return 
PLUGIN_HANDLED
        
}
        
        
ExecuteHamB(Ham_CS_RoundRespawnTarget)
        return 
PLUGIN_HANDLED
    
}
    return 
PLUGIN_HANDLED
}

public 
cl_gacocxleba(id)
{
    if (
is_user_alive(id)) 
    {
        
client_print(idprint_chat"You are already alive!"
        return 
PLUGIN_HANDLED
    
}
    
    
ExecuteHamB(Ham_CS_RoundRespawnid
    return 
PLUGIN_HANDLED



SnoW 01-06-2011 06:36

Re: block a command for a certain time
 
You would check a certain global variable whether or not the action related to the command should be executed. When blocking the command you would change the value of the global variable and set_task to change the global variable to it's original value.

Elusive138 01-06-2011 07:25

Re: block a command for a certain time
 
For this kind of purpose (cooldown) it should be more efficient to do this..

PHP Code:

new Float:gCooldown[33], cvarCooldown

public plugin_init() {
    
cvarCooldown register_cvar("revive_cooldown""5.0"FCVAR_SPONLY)
}

public 
ReviveFunction(id)
{
    
// access level check (cmd_access) here.
    //Also anything else you don't want disabled.

    
new Float:cooldownTime get_pcvar_float(cvarCooldown)
    new 
Float:currentTime get_gametime()
    if (
gCooldown[id] > currentTime)
    {
        
//command disabled
        
return PLUGIN_HANDLED
    
}
    
gCooldown[id] = currentTime cooldownTime
    
    
// Command enabled. Continue here.


That will only check when the function is called. gCooldown[id] is set to the time the command is enabled again.

I recommend you use the id of the player to be respawned (Target)

See http://forums.alliedmods.net/showthread.php?t=43049 (near the end of the first post) for more info..

SnoW 01-06-2011 08:03

Re: block a command for a certain time
 
That is very true, sir. But how is your array only 32 long? You should never use "function" as a function name, at least use PAWN-tags then.

Elusive138 01-06-2011 08:30

Re: block a command for a certain time
 
Quote:

Originally Posted by SnoW (Post 1387304)
That is very true, sir. But how is your array only 32 long? You should never use "function" as a function name, at least use PAWN-tags then.

Sorry, the function was supposed to be an example :P

And the array size was just a stupid mistake. Thanks for pointing it out :)

Shiro 01-06-2011 08:53

Re: block a command for a certain time
 
oh, warning 209 :D - ReviveFunction

Elusive138 01-06-2011 09:20

Re: block a command for a certain time
 
You know, it would really help if you put those examples of how to use a cooldown into your actual code :P

PHP Code:

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

#define PLUGIN "Respawn"
#define VERSION "1.0"
#define AUTHOR "fR4gn0tiX!"

new Float:gCooldown[33], cvarCooldown

stock register_saycmd
(saycommand[], function[], flags = -1info[])
{
    static 
sTemp[64]
    
formatex(sTempsizeof sTemp 1"say /%s"saycommand)
    
register_clcmd(sTemp, function, flagsinfo)
    
formatex(sTempsizeof sTemp 1"say .%s"saycommand)
    
register_clcmd(sTemp, function, flagsinfo)
    
formatex(sTempsizeof sTemp 1"say_team /%s"saycommand)
    
register_clcmd(sTemp, function, flagsinfo)
    
formatex(sTempsizeof sTemp 1"say_team .%s"saycommand)
    
register_clcmd(sTemp, function, flagsinfo)
}


public 
plugin_init() {
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_cvar("gacocxleba""v1.0 by fR4gn0tiX!"FCVAR_SERVER|FCVAR_SPONLY)
    
    
register_concmd("amx_respawn""cmd_gacocxleba"ADMIN_SLAY"< saxeli | #userid > - Respawn player")    
    
register_saycmd("respawn""cl_gacocxleba"ADMIN_SLAY"Respawn yourself")            

    
cvarCooldown register_cvar("revive_cooldown""5.0"FCVAR_SPONLY)
}

public 
cmd_gacocxleba(idlevelcid)
{
    if (!
cmd_access(idlevelcid2))
       return 
PLUGIN_HANDLED
       
    
new Argument[32
    
    
read_argv(1Argument31
    
    new 
Target cmd_target(idArgumentCMDTARGET_ALLOW_SELF CMDTARGET_OBEY_IMMUNITY
    
    if (
Target
    {    
        if (
is_user_alive(Target)) 
        {
            new 
saxeli[32]            
            
get_user_name(Targetsaxeli31)    
            
            
console_print(id"%s is already alive!"saxeli
            return 
PLUGIN_HANDLED
        
}
    
        new 
Float:cooldownTime get_pcvar_float(cvarCooldown)
        new 
Float:currentTime get_gametime()
        if (
gCooldown[Target] > currentTime)
        {
            
client_print(idprint_console"Please wait another %i seconds before attempting to revive this player."floatround(gCooldown[Target] - currentTime))
            return 
PLUGIN_HANDLED
        
}
        
gCooldown[Target] = currentTime cooldownTime
    
        ExecuteHamB
(Ham_CS_RoundRespawnTarget)
        return 
PLUGIN_HANDLED
    
}
    return 
PLUGIN_HANDLED
}

public 
cl_gacocxleba(id)
{
    if (
is_user_alive(id)) 
    {
        
client_print(idprint_chat"You are already alive!"
        return 
PLUGIN_HANDLED
    
}
    
    new 
Float:cooldownTime get_pcvar_float(cvarCooldown)
    new 
Float:currentTime get_gametime()
    if (
gCooldown[id] > currentTime)
    {
        
client_print(idprint_chat"Please wait another %i seconds before attempting to revive yourself."floatround(gCooldown[id] - currentTime))
        return 
PLUGIN_HANDLED
    
}
    
gCooldown[id] = currentTime cooldownTime
    
    ExecuteHamB
(Ham_CS_RoundRespawnid
    return 
PLUGIN_HANDLED


Untested. Cooldown is on target (i.e. player can only be revived once per cooldown). Change cooldown time with cvar revive_cooldown.

Shiro 01-06-2011 09:56

Re: block a command for a certain time
 
Elusive138, big thanks! Close


All times are GMT -4. The time now is 02:10.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.