N
nightcore
Собственно, что нужно:
1. Не важно кто ставил матч на паузу, сервер или админ, нужно чтобы после !unpause или по истечение времени на паузу нельзя было опять поставить сервер на паузу в течение 90 секунд.
2. Таймер идёт во время раунда, а не пока матч на паузе. То есть, я могу запросить командой !pause поставить сервер на паузу. 90 секунд, после которых сервер должен сняться с паузы, длятся с того момента, как я ввёл команду, а не пока мы стоим каждый на своей респе. Я ради прикола ставил 5 секунд и во время матча ставил на паузу. Написал !pause во время раунда и через 5 секунд пишет, что пауза снята.
3. Когда я последний раз тестил этот плагин, у меня в каком-то моменте было так, что матч сначала можно поставить, а второй раз нет, ничего не происходит даже. Не помню что делал, правда. Может найдете ошибку.
1. Не важно кто ставил матч на паузу, сервер или админ, нужно чтобы после !unpause или по истечение времени на паузу нельзя было опять поставить сервер на паузу в течение 90 секунд.
2. Таймер идёт во время раунда, а не пока матч на паузе. То есть, я могу запросить командой !pause поставить сервер на паузу. 90 секунд, после которых сервер должен сняться с паузы, длятся с того момента, как я ввёл команду, а не пока мы стоим каждый на своей респе. Я ради прикола ставил 5 секунд и во время матча ставил на паузу. Написал !pause во время раунда и через 5 секунд пишет, что пауза снята.
3. Когда я последний раз тестил этот плагин, у меня в каком-то моменте было так, что матч сначала можно поставить, а второй раз нет, ничего не происходит даже. Не помню что делал, правда. Может найдете ошибку.
C-подобный:
public OnPluginStart()
{
RegAdminCmd("sm_pause", pause_on, ADMFLAG_SLAY, "Pause the match");
RegAdminCmd("sm_unpause", pause_off, ADMFLAG_SLAY, "Unpause the match");
}
public Action:pause_on(client, args)
{
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] Админ %N поставил матч на паузу. Автоматически снимется через 1.5 минуты.", client);
allowed = true;
ServerCommand("mp_pause_match");
g_PauseTimer[client] = CreateTimer(TIMER_LIMIT, RemoveRestriction, client);
}
return Plugin_Handled;
}
public Action:pause_off(client, args)
{
if (allowed)
{
if (!IsPaused())
{
PrintToChat(client, "[SM] Матч не стоит на паузе.");
return Plugin_Handled;
}
PrintToChatAll("[SM] Админ %N снял матч с паузы", client);
allowed = false;
ServerCommand("mp_unpause_match");
if (g_PauseTimer[client] != INVALID_HANDLE)
{
PrintToChat(client, "[SM] Пауза снята автоматически");
ServerCommand("mp_unpause_match", client);
return Plugin_Handled;
}
}
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");
allowed = false;
}
}
stock bool:IsPaused()
{
return bool:GameRules_GetProp("m_bMatchWaitingForResume");
}