Какое минимальное время CreateDataTimer

KGB1st

Участник
Сообщения
60
Реакции
0
PHP:
CreateDataTimer( 0.1, Regeneration, pack );
Можно использовать мс?
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
минимальное время 0.0
Если выставить нулевое время, то коллбек выполнится на следующем фрейме.
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
минимальное время 0.0
Если выставить нулевое время, то коллбек выполнится на следующем фрейме.

Как же вы любите показывать, что вы всё знаете, а таких простых вещей не знаете. При этом посылать людей на вики вы тоже любите, но сами не до конца её прочитали или поняли, что там написано.
https://wiki.alliedmods.net/Timers_(SourceMod_Scripting)
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.
Специально для вас расскажу, что же это значит. У таймеров высокая точность, но они основаны на текущем тике. Так как фрейм есть 1/tickrate, то при 100 тикрейтах мы получаем, что 0.1 секунда (минимальный рекомендуемый интервал таймера) будет содержать 10 тиков (циклов OnGameFrame). Таймер вызывается каждый 10 тик, а его вызов производится на произвольном числе тиков (например, может быть вызван на 1, на 5, на 8). Таким образом, утверждение, что минимальное время равно 0.0 является полностью неправильным. Нельзя утверждать, что таймер будет вызван на следующем тике, это выражение будет правильным лишь в 10% случаев. На деле таймер будет вызван через N тиков, где N - число в интервале от [0; 9] тиков.
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");
	}
}
Поэтому можно ставить числа меньше, чем 0.1 секунда, но точность при этом будет очень низкой. Например, таймер на 1.234 секунд может быть не вызван, пока не пройдет 1.242 секунд (для тикрейта = 66).
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Как же вы любите показывать, что вы всё знаете, а таких простых вещей не знаете. При этом посылать людей на вики вы тоже любите, но сами не до конца её прочитали или поняли, что там написано.
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] тиков.
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");
	}
}
Поэтому можно ставить числа меньше, чем 0.1 секунда, но точность при этом будет очень низкой. Например, таймер на 1.234 секунд может быть не вызван, пока не пройдет 1.242 секунд (для тикрейта = 66).

Тогда о какой высокой точности идёт речь? Противоречие на замечаешь?
 

Reiko1231

AlexTheRegent
Сообщения
508
Реакции
1,336
Высокая точность относительно тиков, низкая правильность относительно реального времени. Таймер всегда будет вызван на 10 тике для тикрейта в 100. Но не факт, что будет вызван на 1.234 секунде для таймера в 1.234 секунд, а может быть вызван и на 1.242 секунде. Еще раз цитирую вики:
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
Таймеры обладают высокой точностью, но низкой правильностью, поскольку текущее время основано на игровом числе тикоа, не системных часах
И вообще, какое отношение это имеет к вопросу к теме? Вы высказали неверное утверждение, я вас поправил, попутно сказав, что вы любите показывать себя умным, но сами не знаете простых вещей. Теперь вы цепляетесь к слову, еще раз показав, что не понимаете, как работают таймеры.
И к тому же, такие "противоречия" есть не только тут - в квантовой физике есть принцип неопределённости Гейзенберга - чем точнее измеряется одна характеристика частицы, тем менее точно можно измерить вторую. Так же и тут - точный номер тика, но далеко не точное реальное время.
И так же от себя - Оффтоп.
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Высокая точность относительно тиков, низкая правильность относительно реального времени. Таймер всегда будет вызван на 10 тике для тикрейта в 100. Но не факт, что будет вызван на 1.234 секунде для таймера в 1.234 секунд, а может быть вызван и на 1.242 секунде. Еще раз цитирую вики:


И вообще, какое отношение это имеет к вопросу к теме? Вы высказали неверное утверждение, я вас поправил, попутно сказав, что вы любите показывать себя умным, но сами не знаете простых вещей. Теперь вы цепляетесь к слову, еще раз показав, что не понимаете, как работают таймеры.
И к тому же, такие "противоречия" есть не только тут - в квантовой физике есть принцип неопределённости Гейзенберга - чем точнее измеряется одна характеристика частицы, тем менее точно можно измерить вторую. Так же и тут - точный номер тика, но далеко не точное реальное время.
И так же от себя - Оффтоп.

Это не то чтобы простая вещь. Эта не нужная вещь. Я с тобой нелепой дотошностью не писал тесты, так как высокая точность в игре просто не нужна. Я когда-то у преда вроде увидел коммент возле таймера, в котором время было выставлено 0.0, что мол ждём следующего фрейма.
И сами таймеры организованы не на системном времени потому, что точностью можно спокойно жертвовать.
Но спасибо за уточнение. Вряд ли это знание мне понадобится.
 
Сверху Снизу