GetTickDiff - исправление проблемы переполнения для GetTickCount
Описание:
Функция для вычисления времени, прошедшего между двумя вызовами GetTickCount(), с учётом возможности переполнения переданных значений.
Параметры:
newtick - текущее значение времени
oldtick - предыдущее значение времени
Возвращаемое значение:
Функция возвращает время, прошедшее между двумя переданными в неё значениями.
Код:
stock GetTickDiff(newtick, oldtick)
{
return newtick - oldtick;
}
Примечания:- Всегда знал, что данный фикс уже существует и не испытывал надобности в его написании, но после изучения реализации, рекомендуемой в wiki, понял, что она работает не корректно. Создал Pull Request в репозитории автора этого фикса, в котором вы можете найти код теста и его результаты. Также актуальную версию функции можно найти на GitHubGist.
Пример использования:
static
LastShot[MAX_PLAYERS];
public OnPlayerWeaponShot(playerid
, weaponid
, hittype
, hitid
, Float:fX
, Float:fY
, Float:fZ
) {
new
interval = GetTickDiff(current_tick, LastShot[playerid]);
printf("Last shot interval: %i ms", interval
);
LastShot[playerid] = current_tick;
return 1;
}
Автор: ziggi