Анти спам

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
Приветствую ребят.
Подскажите пожалуйста, готовлю новый плагин и очень большой риск спама командой. Как сделать проверку к примеру 2 раза в 3 секунды?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
запоминай время последнего использования
 

xstage

🏹
Сообщения
726
Реакции
754
C-подобный:
int iLastUsed[MAXPLAYERS+1]

if(iLastUsed[client] > GetTime() - 3)
{
//Spam command
}
//Код
iLastUsed[client] = GetTime()
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
xstage, ну для 2 раз в 3 секунды нужно 1.5 секунды, а это float и GetGameTime()
 

Nekro

Терра инкогнита
Сообщения
4,042
Реакции
2,295
C-подобный:
int iLastUsed[MAXPLAYERS+1]

if(iLastUsed[client] > GetTime() - 3)
{
//Spam command
}
//Код
iLastUsed[client] = GetTime()
Можно пример или пример в плагине? Что то у меня ничего не блокирует..

C-подобный:
public Action Cmd(int iClient, any args)   
{
    if(bEnable)
    {
        int iLastUsed[MAXPLAYERS+1]

        if(iLastUsed[iClient] > GetTime() - 4)
        {
            //Spam command
            PrintToChat(iClient, "Можно только 2 раза в 4 секунды");
        }
        //Код
        iLastUsed[iClient] = GetTime()
        if(iClient && !args) CreateIcon(iClient);
        if(Engine_Version == GAME_CSGO) CGOPrintToChat(iClient, "%t", "Caused a risk", iClient);
        if(Engine_Version == GAME_CSS_34) CPrintToChat(iClient, "%t", "Caused a risk", iClient);
        if(Engine_Version == GAME_CSS) CPrintToChat(iClient, "%t", "Caused a risk", iClient);
    }
    return Plugin_Handled;
}
 

xstage

🏹
Сообщения
726
Реакции
754
Можно пример или пример в плагине? Что то у меня ничего не блокирует..

C-подобный:
public Action Cmd(int iClient, any args)  
{
    if(bEnable)
    {
        int iLastUsed[MAXPLAYERS+1]

        if(iLastUsed[iClient] > GetTime() - 4)
        {
            //Spam command
            PrintToChat(iClient, "Можно только 2 раза в 4 секунды");
        }
        //Код
        iLastUsed[iClient] = GetTime()
        if(iClient && !args) CreateIcon(iClient);
        if(Engine_Version == GAME_CSGO) CGOPrintToChat(iClient, "%t", "Caused a risk", iClient);
        if(Engine_Version == GAME_CSS_34) CPrintToChat(iClient, "%t", "Caused a risk", iClient);
        if(Engine_Version == GAME_CSS) CPrintToChat(iClient, "%t", "Caused a risk", iClient);
    }
    return Plugin_Handled;
}
Ну потому что кто-то создаёт переменную в начале, и в итоге время не сохраняется, ее нужно создавать глобально.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,569
Реакции
5,071
C-подобный:
public Action Cmd(int client, any args)
{
    if(bEnable && client)
    {
        static int last_used[MAXPLAYERS+1];
        if(last_used[client] > GetTime() - 2)
        {    //Spam command
            PrintToChat(client, "Можно только раз в 2 секунды");
            return Plugin_Handled;
        }
        //Код
        last_used[client] = GetTime();
        if(!args) CreateIcon(client);

        if(Engine_Version == GAME_CSGO) CGOPrintToChat(client, "%t", "Caused a risk", client);
        else if(Engine_Version == GAME_CSS_34) CPrintToChat(client, "%t", "Caused a risk", client);
        else if(Engine_Version == GAME_CSS) CPrintToChat(client, "%t", "Caused a risk", client);
    }
    return Plugin_Handled;
}
 
Сверху Снизу