Сделать таймер который будет сохраняться после смены карты

pokypka20

Участник
Сообщения
244
Реакции
31
Подскажите как можно сделать таймер который будет запоминать время игры игрока на сервере даже после смены карты и по исчетению времени выполнять команду.

Идея такова нужно сделать бонус игроку который играет 1 час на сервере, простые таймеры сбиваются после смены карты. И можно ли сделать чтобы если больше 10 минут (в течении этого часа) игрока сидит в спекторах таймер анулируется?
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #2
pokypka20, обычный таймер просто не ставишь флага TIMER_FLAG_NO_MAPCHANGE
 

pokypka20

Участник
Сообщения
244
Реакции
31
pokypka20, обычный таймер просто не ставишь флага TIMER_FLAG_NO_MAPCHANGE

Можно ли сделать чтобы при выходе игрока в спектора таймер сбивался? чтоб не просто игрок там сидел и наматывал время либо добавить какуюто проверку на активность. Только чтобы не сбивалось если он зашол в спектора после смены карты (случайно)
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
при выходе игрока в спектора таймер сбивался
Отслеживай событие смены команды и убивай таймер такого игрока.
не сбивалось если он зашол в спектора после смены карты (случайно)
Добавить переменную-блокиратор.
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
pokypka20, чтобы убивать таймер его нужно записывать в handle

PHP:
new Handle:g_hTimer[MAXPLAYERS+1] = {INVALID_HANDLE, ...};

// Создание таймера
g_hTimer[iClient] = CreateTimer(60.0, Timer_Func, GetClientUserId(iClient));

// Игрок вышел
public OnClientDisconnect(iClient)
{
	if(g_hTimer[iClient] != INVALID_HANDLE)
	{
		KillTimer(g_hTimer[iClient]);
		g_hTimer[iClient] = INVALID_HANDLE;
	}
}
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #6
AlmazON, с какой радости будут ошибки в логах?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
R1KO, таймер сработал - всё нормально. Потом клиент выходит. А его встречает код:
PHP:
if(g_hTimer[iClient] != INVALID_HANDLE)    {        KillTimer(g_hTimer[iClient]);
В итоге, у тебя убивается уже сработавший таймер. Уже плоховато.
Ошибки зависят от того, где таймер применяется (его исток, повторные сработки/создание).
 

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #8
AlmazON, если ты про
public Action:Timer_Func(Handle:timer, any:iClient)
{
g_hTimer[iClient] = INVALID_HANDLE;
//Действия по окончании таймера.
То да, но я не стал этого писать т.к. вопрос был не в этом, да и это и так должно быть ясно.
 
Сверху Снизу