Конечно:Можно использовать мс?
CreateDataTimer(0.100, Regeneration, pack);
#define TIMER_MIN_ACCURACY 0.1
минимальное время 0.0
Если выставить нулевое время, то коллбек выполнится на следующем фрейме.
Специально для вас расскажу, что же это значит. У таймеров высокая точность, но они основаны на текущем тике. Так как фрейм есть 1/tickrate, то при 100 тикрейтах мы получаем, что 0.1 секунда (минимальный рекомендуемый интервал таймера) будет содержать 10 тиков (циклов OnGameFrame). Таймер вызывается каждый 10 тик, а его вызов производится на произвольном числе тиков (например, может быть вызван на 1, на 5, на 8). Таким образом, утверждение, что минимальное время равно 0.0 является полностью неправильным. Нельзя утверждать, что таймер будет вызван на следующем тике, это выражение будет правильным лишь в 10% случаев. На деле таймер будет вызван через N тиков, где N - число в интервале от [0; 9] тиков.The smallest possible interval is 0.1 seconds. Timers have high precision (floating point) but low accuracy, as the current time is based on the in-game tick count, not the system clock.
new bool: g_bRunning;
new bool: g_bWaitForNextTick;
public OnPluginStart()
{
RegConsoleCmd("sm_test", Command_Test);
}
public Action:Command_Test(iClient, iArgc)
{
CreateTimer(0.0, Timer_NextTick);
PrintToServer("timer created");
g_bRunning = true;
g_bWaitForNextTick = true;
return Plugin_Handled;
}
public Action:Timer_NextTick(Handle:hTimer)
{
g_bRunning = false;
PrintToServer("timer end");
}
public OnGameFrame()
{
if ( g_bWaitForNextTick ) {
PrintToServer("next tick");
g_bWaitForNextTick = false;
}
if ( g_bRunning ) {
PrintToServer("tick");
}
}
Как же вы любите показывать, что вы всё знаете, а таких простых вещей не знаете. При этом посылать людей на вики вы тоже любите, но сами не до конца её прочитали или поняли, что там написано.
https://wiki.alliedmods.net/Timers_(SourceMod_Scripting)
Специально для вас расскажу, что же это значит. У таймеров высокая точность, но они основаны на текущем тике. Так как фрейм есть 1/tickrate, то при 100 тикрейтах мы получаем, что 0.1 секунда (минимальный рекомендуемый интервал таймера) будет содержать 10 тиков (циклов OnGameFrame). Таймер вызывается каждый 10 тик, а его вызов производится на произвольном числе тиков (например, может быть вызван на 1, на 5, на 8). Таким образом, утверждение, что минимальное время равно 0.0 является полностью неправильным. Нельзя утверждать, что таймер будет вызван на следующем тике, это выражение будет правильным лишь в 10% случаев. На деле таймер будет вызван через N тиков, где N - число в интервале от [0; 9] тиков.
Поэтому можно ставить числа меньше, чем 0.1 секунда, но точность при этом будет очень низкой. Например, таймер на 1.234 секунд может быть не вызван, пока не пройдет 1.242 секунд (для тикрейта = 66).C-подобный:new bool: g_bRunning; new bool: g_bWaitForNextTick; public OnPluginStart() { RegConsoleCmd("sm_test", Command_Test); } public Action:Command_Test(iClient, iArgc) { CreateTimer(0.0, Timer_NextTick); PrintToServer("timer created"); g_bRunning = true; g_bWaitForNextTick = true; return Plugin_Handled; } public Action:Timer_NextTick(Handle:hTimer) { g_bRunning = false; PrintToServer("timer end"); } public OnGameFrame() { if ( g_bWaitForNextTick ) { PrintToServer("next tick"); g_bWaitForNextTick = false; } if ( g_bRunning ) { PrintToServer("tick"); } }
Timers have high precision (floating point) but low accuracy as the current time is based on the in-game tick count, not the system clock
И вообще, какое отношение это имеет к вопросу к теме? Вы высказали неверное утверждение, я вас поправил, попутно сказав, что вы любите показывать себя умным, но сами не знаете простых вещей. Теперь вы цепляетесь к слову, еще раз показав, что не понимаете, как работают таймеры.Таймеры обладают высокой точностью, но низкой правильностью, поскольку текущее время основано на игровом числе тикоа, не системных часах
Высокая точность относительно тиков, низкая правильность относительно реального времени. Таймер всегда будет вызван на 10 тике для тикрейта в 100. Но не факт, что будет вызван на 1.234 секунде для таймера в 1.234 секунд, а может быть вызван и на 1.242 секунде. Еще раз цитирую вики:
И вообще, какое отношение это имеет к вопросу к теме? Вы высказали неверное утверждение, я вас поправил, попутно сказав, что вы любите показывать себя умным, но сами не знаете простых вещей. Теперь вы цепляетесь к слову, еще раз показав, что не понимаете, как работают таймеры.
И к тому же, такие "противоречия" есть не только тут - в квантовой физике есть принцип неопределённости Гейзенберга - чем точнее измеряется одна характеристика частицы, тем менее точно можно измерить вторую. Так же и тут - точный номер тика, но далеко не точное реальное время.
И так же от себя - Оффтопмы на форуме, пишите на "вы" людям, которых не знаете, проявляйте уважение. Я к вам на "ты" не обращаюсь.