Не работает команда повторно.

N

nightcore

Если поставить матч на паузу, а потом снять/автоматом снимется, то после написания команды !pause просто ничего не происходит. Что не так?
C-подобный:
public Action:pause_on(client, args)
{  
    decl String:name[16]; 
    GetClientName(client, name, sizeof(name));
    if (!allowed)
    {
        if (IsPaused())
        {
            PrintToChat(client, "[SM] Матч и так стоит на паузе.");
           return Plugin_Handled;
        }
        if (g_PauseTimer[client] != INVALID_HANDLE)
        {
            PrintToChat(client, "[SM] Паузу можно ставить 1 раз в 1.5 минуты!");
            return Plugin_Handled;
        }
        PrintToChatAll("[SM] Админ %s поставил матч на паузу. Автоматически снимется через 1.5 минуты.", name);
        allowed = true;
        ServerCommand("mp_pause_match", client);
        g_PauseTimer[client] = CreateTimer(TIMER_LIMIT, RemoveRestriction, client);
    }

    return Plugin_Handled;
} 

public Action:pause_off(client, args)
{
    decl String:name[16]; 
    GetClientName(client, name, sizeof(name));
    if (allowed)
    {
        if (!IsPaused())
        {
            PrintToChat(client, "[SM] Матч не стоит на паузе.");
           return Plugin_Handled; 
        }
        if (g_PauseTimer[client] != INVALID_HANDLE)
        {
            PrintToChat(client, "[SM] Пауза снята автоматически");
            ServerCommand("mp_unpause_match", client);
            return Plugin_Handled;
        }
        PrintToChatAll("[SM] Админ %s снял матч с паузы", name);
        allowed = false;
        ServerCommand("mp_unpause_match", client);
    }

    return Plugin_Handled;
}

public Action:RemoveRestriction(Handle:RemoveRestriction, any:client)
{
    if (g_PauseTimer[client] != INVALID_HANDLE)
    {
        g_PauseTimer[client] = INVALID_HANDLE;
        ServerCommand("mp_unpause_match", client);
    }
}
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Если поставить матч на паузу, а потом снять/автоматом снимется, то после написания команды !pause просто ничего не происходит. Что не так?
C-подобный:
public Action:pause_on(client, args)
{
    decl String:name[16];
    GetClientName(client, name, sizeof(name));
    if (!allowed)
    {
        if (IsPaused())
        {
            PrintToChat(client, "[SM] Матч и так стоит на паузе.");
           return Plugin_Handled;
        }
        if (g_PauseTimer[client] != INVALID_HANDLE)
        {
            PrintToChat(client, "[SM] Паузу можно ставить 1 раз в 1.5 минуты!");
            return Plugin_Handled;
        }
        PrintToChatAll("[SM] Админ %s поставил матч на паузу. Автоматически снимется через 1.5 минуты.", name);
        allowed = true;
        ServerCommand("mp_pause_match", client);
        g_PauseTimer[client] = CreateTimer(TIMER_LIMIT, RemoveRestriction, client);
    }

    return Plugin_Handled;
}

public Action:pause_off(client, args)
{
    decl String:name[16];
    GetClientName(client, name, sizeof(name));
    if (allowed)
    {
        if (!IsPaused())
        {
            PrintToChat(client, "[SM] Матч не стоит на паузе.");
           return Plugin_Handled;
        }
        if (g_PauseTimer[client] != INVALID_HANDLE)
        {
            PrintToChat(client, "[SM] Пауза снята автоматически");
            ServerCommand("mp_unpause_match", client);
            return Plugin_Handled;
        }
        PrintToChatAll("[SM] Админ %s снял матч с паузы", name);
        allowed = false;
        ServerCommand("mp_unpause_match", client);
    }

    return Plugin_Handled;
}

public Action:RemoveRestriction(Handle:RemoveRestriction, any:client)
{
    if (g_PauseTimer[client] != INVALID_HANDLE)
    {
        g_PauseTimer[client] = INVALID_HANDLE;
        ServerCommand("mp_unpause_match", client);
    }
}

Может быть из-за:
PHP:
allowed = false;

Вместо GetClientName можно делать так:
PHP:
PrintToChatAll("[SM] Админ %N снял матч с паузы", client);
 
N

nightcore

N

nightcore

А что у тебя в таймере происходит ?
В смысле? *Не шарю* (Не моя часть кода) Типо, по истечению таймера сервер должен сняться с паузы и админ может 1 раз в 1.5 минуты юзать команду !pause

Забыл дефайны и переменные вставить.
C-подобный:
new bool:allowed = false;
new Handle:g_PauseTimer[MAXPLAYERS+1] = INVALID_HANDLE;
#define PLUGIN_VERSION "1.0"
#define TIMER_LIMIT 90.0
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
В смысле? *Не шарю* (Не моя часть кода) Типо, по истечению таймера сервер должен сняться с паузы и админ может 1 раз в 1.5 минуты юзать команду !pause

Забыл дефайны и переменные вставить.
C-подобный:
new bool:allowed = false;
new Handle:g_PauseTimer[MAXPLAYERS+1] = INVALID_HANDLE;
#define PLUGIN_VERSION "1.0"
#define TIMER_LIMIT 90.0

В таймер allowed = false; впихни.

Зачем client ?
PHP:
ServerCommand("mp_unpause_match", client);

И зачем таймер привязывать к игроку ?
PHP:
g_PauseTimer[client]
 
Сверху Снизу