Перезарядки команд

x330122

Участник
Сообщения
357
Реакции
152
Флуд/Оффтоп
Привет ребят.:acute: Возможно ли сделать систему перезарядки если есть enum список ?
Либо предложите альтернативу перезарядки команд. Просто не хочется для каждой команды свой таймер делать. :crazy:
И вот сам пример собственно.:buba:
Таймер должен вычитать единицу из перезарядки где она есть.:blush2:
C-подобный:
enum Command_List{
NULL = 0,
Command1,
Command2
}
public OnPluginStart()
{
CreateTimer(1.0, Cooldown_Counter, TIMER_REPEAT);
RegConsoleCmd("test", Test1);
RegConsoleCmd("test2", Test2);
}
public Action Test1(client,args)
{
if(Reload[client[Command1]] > 0)
{
PrintToChat(client,"Подождите немного, еще %i", seconds);
return Plugin_Handled.
}
Reload[client[Command1]] += 50;
}
public Action Test2(client,args)
{
if(Reload[client[Command2]] > 0)
{
PrintToChat(client,"Подождите немного, еще %i", seconds);
return Plugin_Handled.
}
Reload[client[Command2]] += 50;
}
public Action:Cooldown_Counter(Handle:hTimer)
{
     for (new X = 1; X <= MaxClients; X++)
    {
       Reload[client] -= 1;
     }
}
 
Последнее редактирование:

Someone

Участник
Сообщения
1,933
Реакции
1,653
Привет ребят.:acute: Возможно ли сделать систему перезарядки если есть enum список ?
Либо предложите альтернативу перезарядки команд. Просто не хочется для каждой команды свой таймер делать. :crazy:
И вот сам пример собственно.:buba:
Таймер должен вычитать единицу из перезарядки где она есть.:blush2:
Оффтоп
GetGameTime · halflife · SourceMod Scripting API Reference
GetEngineTime · halflife · SourceMod Scripting API Reference
GetTime · sourcemod · SourceMod Scripting API Reference

Получаешь время, а потом сравниваешь.
PHP:
g_iTime[iClient] = GetTime ()+120;


if (g_iTime[iClient]  <= GetTime ())
{
    // Код
}

Вообще у меня где-то самопальный и недоделанный аля Cooldown Manager валялся.
 
Последнее редактирование:

x330122

Участник
Сообщения
357
Реакции
152
GetGameTime · halflife · SourceMod Scripting API Reference
GetEngineTime · halflife · SourceMod Scripting API Reference
GetTime · sourcemod · SourceMod Scripting API Reference

Получаешь время, а потом сравниваешь.
PHP:
g_iTime[iClient] = GetTime ()+120;


if (g_iTime[iClient]  <= GetTime ())
{
    // Код
}

Вообще у меня где-то самопальный и недоделанный аля Cooldown Manager валялся.
Так это для одной команды. Мне вот надо что-то типо вот такого(P.S Взято из другого плагина. Язык:C++)
И потом как-то на подобии этой штуки надо сделать перезарядку
Оффтоп
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
Так это для одной команды. Мне вот надо что-то типо вот такого(P.S Взято из другого плагина. Язык:C++)
И потом как-то на подобии этой штуки надо сделать перезарядку
Оффтоп
g_iTime[MAXPLAYERS+1][Command_List]
 

Someone

Участник
Сообщения
1,933
Реакции
1,653
И если g_iTime в таймере просто отнимать то он со всех будет отнимать значения да ?
Не помню, вроде бы как нет, ибо ты можешь передать UserID игрока, а таймере его в ClientID перевести и по нему обнулять.

Есть более оптимальный вариант для перезарядки, но без оповещения - в StringMap помещать название команды и GetTime() + КД. Ну и полностью обнулять его по окончанию карты/раунда через StringMap.Clear().

Кстати, если тебе подробный отсчет (с мс) нужен, то можешь использовать OnGameFrame/SDKHook_ThinkPost/CreateTimer (0.1 и Repeat) + GetEngineTime/GetGameTime и выводить его в Hint или HUD.
 
Сверху Снизу