Ограничение использования функций по времени

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
76
Реакции
3
Помог
1 раз(а)
Подскажите почему не работает?? жму биндом vip_menu, и меню сразу же отк, а блока нет

Код:
#include <amxmodx>

#define TIMEOUT 10

new g_NextTimeSay[MAX_PLAYERS+1];

public plugin_init() {
    register_clcmd("vip_menu", "CmdSay");
}

public client_putinserver(id) {
    g_NextTimeSay[id] = 0;
}

public CmdSay(id) {
    new systime = get_systime(0);
    if (g_NextTimeSay[id] > 0 && g_NextTimeSay[id] < systime) {
        return PLUGIN_HANDLED;
    }
    
    client_cmd(id, "vip_menu")
    
    g_NextTimeSay[id] = systime + TIMEOUT;
    return PLUGIN_CONTINUE;
}
 
Сообщения
76
Реакции
3
Помог
1 раз(а)
@zhorzh78,Привет, подскажите что не так я делаю.

Плагин должен работать как-то так, он блокирует использование команды на N сек, после можно использовать 1 раз потом опять кд.

Код:
#include <amxmodx>
#include <reapi>

#define ADMIN_DELAY_MENU 5

new g_ePlayerData[MAX_PLAYERS + 1]

public plugin_init()
{
    register_dictionary("PAUSESK.txt")
    register_clcmd("vip_menu", "displayMainMenu");
    register_clcmd("say 1", "displayMainMenu");
}

public displayMainMenu(id)
{
    new iTimerDelay = g_ePlayerData[id] - get_systime()
    if(iTimerDelay > 0)
    {
        client_print_color(id, id, "%L", id, "MSG_DELAY_N")
    }
    g_ePlayerData[id] = get_systime() + ADMIN_DELAY_MENU
}

Файл пример плагина команды skmenu, anew, say /skmenu, say /anew
13 Фев 2023
Прошу закрыть тему, пересоздал на покупке!
 

Вложения

Сообщения
1,082
Реакции
58
Помог
11 раз(а)
SanSannech, держи сток
Код:
/**
 * Gives a usage limit for the exposed seconds
 *
 * @param iSeconds       Time interval in seconds
 *
 * @return              Will return access to use
 */

stock bool:get_access_time(const iSeconds = 10) {
    static iUsageTime;
    new iCurrentTime = get_systime();

    if(iUsageTime > iCurrentTime)
        return false;

    iUsageTime = iCurrentTime +iSeconds;
    return true;
}
Код:
//Пример использования:
if(!get_access_time(20)) //после использования, 20 секунд код ниже не будет выполняться
    return
 
Сообщения
678
Реакции
579
Предупреждения
8
Помог
9 раз(а)
Code_0xABC, мне кажется для его задачи нужен индивидуальный таймер а не глобальный.
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Тогда вот
Код:
public displayMainMenu(id)
{
    new iTimerDelay = get_systime();

    if(g_ePlayerData[id] > iTimerDelay)
        client_print_color(id, id, "%L", id, "MSG_DELAY_N")

    g_ePlayerData[id] = iTimerDelay + ADMIN_DELAY_MENU
}
Хотя и сток можно немножко переделать
 
Сообщения
678
Реакции
579
Предупреждения
8
Помог
9 раз(а)
Конечно можно сделать iUsageTime[макс игроков]
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу