#pragma semicolon 1
#pragma newdecls required
int iCooldown,
iEnd;
public void OnPluginStart()
{
ConVar hCvar;
HookConVarChange((hCvar = CreateConVar("sm_timer_time", "45")), CvarChanged_TT);
iCooldown = hCvar.IntValue;
HookEvent("round_start", Event_RoundStart, EventHookMode_PostNoCopy);
HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy);
}
public void CvarChanged_TT(ConVar hCvar, const char[] oldValue, const char[] newValue)
{
iCooldown = hCvar.IntValue;
}
public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
CreateTimer(1.0, CallBack_Timer, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
iEnd = GetTime() + iCooldown; // устанавливаем время окончания отсчёта
}
public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)
{
iEnd = 0; // сбрасываем время до окончания отсчёта
}
public Action CallBack_Timer(Handle hTimer)
{
static int dif; // получаем время до окончания отсчёта
if((dif = iEnd - GetTime()) < 1)
{
// если время не было сброшено, то извещаем о том, что отсчёт времени завершён
if(iEnd) for(int i = MaxClients; i > 0; i--) if(IsPlayerValid(i)) PrintHintText(i, "Время вышло!");
return Plugin_Stop;
}
else for(int i = MaxClients; i > 0; i--) if(IsPlayerValid(i)) PrintHintText(i, "Осталось %iсек", dif);
return Plugin_Continue;
}
stock bool IsPlayerValid(int client)
{
return IsClientInGame(client) && !IsFakeClient(client) && GetClientTeam(client) == 3;
}