SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Русский/Russian

Reply
 
Thread Tools Display Modes
Old 29/01/2018, 06:57 AM   #1
Josipo
Big Clucker
 
Join Date: Dec 2010
Posts: 98
Reputation: 0
Default Не убиваются таймеры

Долгое время использовал y_timers, но решил вернуть обычные таймеры.

В OnPlayerConnect:
PlayerInfo[playerid][pTimer] = SetTimerEx("PlayerTimer", 500, true, "i", playerid);

В OnPlayerDisconnect:
KillTimer(PlayerInfo[playerid][pTimer]);

При первом входе на сервер всё нормально. Но если перезайти, то таймеры начинаются выполняться в 2 раза быстрее. И так каждый раз в 2 раза быстрее.
Похоже на то, что таймер не убивается при выходе. А при входе создаётся еще один.

Почему так может быть?
Josipo is offline   Reply With Quote
Old 29/01/2018, 07:50 AM   #2
Mutha_X
Gangsta
 
Join Date: Sep 2009
Location: recursion
Posts: 643
Reputation: 31
Default Re: Не убиваются таймеры

Самостоятельно вызвать OnPlayerDisconnect для каждого игрока при вызове перезагрузки.
Либо, если OnPlayerDisconnect изначально не был предназначен у вас для такого случая, вызвать те процедуры из этого callback, которые приведут к убийству таймера, сохранению данных и ещё чего-либо нужного.
__________________
Russian forums: asking question - taking grammar notations.
Учитесь задавать вопросы по существу и изучать матчасть: иначе приобретайте лекарство "НИБОМБИН".
Mutha_X is offline   Reply With Quote
Old 29/01/2018, 08:15 AM   #3
Josipo
Big Clucker
 
Join Date: Dec 2010
Posts: 98
Reputation: 0
Default Re: Не убиваются таймеры

Quote:
Originally Posted by Mutha_X View Post
Самостоятельно вызвать OnPlayerDisconnect для каждого игрока при вызове перезагрузки.
Либо, если OnPlayerDisconnect изначально не был предназначен у вас для такого случая, вызвать те процедуры из этого callback, которые приведут к убийству таймера, сохранению данных и ещё чего-либо нужного.
Не совсем понял чем мне это поможет. Проблема возникает не при перезагрузке. А при обычном релоге.
И судя по всему, таймер как раз и не убивается в OnPlayerDisconnect
Josipo is offline   Reply With Quote
Old 29/01/2018, 09:02 AM   #4
pawnoholic
Big Clucker
 
Join Date: Oct 2017
Posts: 76
Reputation: 3
Default Re: Не убиваются таймеры

Отдебаж PlayerInfo[playerid][pTimer] до и после вызова KillTimer

Таймер зациклен, можно киллнуть его внутри него, если игрок отключен.
__________________
GitHub: @pawnoholic
pawnoholic is offline   Reply With Quote
Old 29/01/2018, 09:15 AM   #5
Jasno
Little Clucker
 
Join Date: Nov 2017
Posts: 21
Reputation: 0
Default Re: Не убиваются таймеры

Легче SetTimerEx("PlayerTimer", 500, false, "i", playerid);
public PlayerTimer(playerid)
{
if(!IsPlayerConnected(playerid)) return 0;
SetTimerEx("PlayerTimer", 500, false, "i", playerid);
return 1;
}

Или

public PlayerTimer(playerid)
{
if(!IsPlayerConnected(playerid)) return KillTimer(PlayerInfo[playerid][pTimer]);
return 1;
}
Jasno is offline   Reply With Quote
Old 29/01/2018, 11:50 AM   #6
Mexanizm93
Big Clucker
 
Mexanizm93's Avatar
 
Join Date: Jan 2013
Location: Russia. Voronezh
Posts: 166
Reputation: 6
Default Re: Не убиваются таймеры

А что мешает создать один таймер, который будет просчитывать игроков, и не заморачиваться ?
В теле таймера гнать цикл и проверять игроков на коннект итд. Не придётся ничего создавать и убивать таймер.
__________________
We do not drink vodka every day and do not play the balalaika you think about us. ^_^ © Mexanizm
Mexanizm93 is offline   Reply With Quote
Old 29/01/2018, 12:09 PM   #7
Josipo
Big Clucker
 
Join Date: Dec 2010
Posts: 98
Reputation: 0
Default Re: Не убиваются таймеры

Quote:
Originally Posted by Mexanizm93 View Post
А что мешает создать один таймер, который будет просчитывать игроков, и не заморачиваться ?
В теле таймера гнать цикл и проверять игроков на коннект итд. Не придётся ничего создавать и убивать таймер.
Ничего. Но слышал мнение, что это хуже с точки зрения производительности.
Josipo is offline   Reply With Quote
Old 29/01/2018, 01:52 PM   #8
OKStyle
High-roller
 
OKStyle's Avatar
 
Join Date: May 2008
Location: Russia, Orenburg Money: GTA$ 999,999,999
Posts: 3,064
Reputation: 117
Default Re: Не убиваются таймеры

Quote:
Originally Posted by Jasno View Post
Легче SetTimerEx("PlayerTimer", 500, false, "i", playerid);
public PlayerTimer(playerid)
{
if(!IsPlayerConnected(playerid)) return 0;
SetTimerEx("PlayerTimer", 500, false, "i", playerid);
return 1;
}
Нормальная тема.
__________________
O.K.Style™ Laboratory
Kalcor: "... it's makes the game look like it's not GTA. This mod is called San Andreas Multiplayer. It's not a custom game engine which you can script..."
OKStyle is offline   Reply With Quote
Old 29/01/2018, 03:20 PM   #9
Josipo
Big Clucker
 
Join Date: Dec 2010
Posts: 98
Reputation: 0
Default Re: Не убиваются таймеры

Quote:
Originally Posted by OKStyle View Post
Нормальная тема.
Этот вариант отлично работает. Спасибо тому, кто предложил.

Но всё же очень странно почему таймер не убивается.

Это даже в логах видно.

[19:06:23] PlayerTimer 0
[19:06:23] PlayerTimer 0
[19:06:24] PlayerTimer 0
[19:06:24] PlayerTimer 0
[19:06:24] PlayerTimer 0
[19:06:24] [part] Manuel_Moralez has left the server (0:1)
[19:06:24] PlayerTimer 0
[19:06:25] PlayerTimer 0
[19:06:25] PlayerTimer 0
[19:06:25] PlayerTimer 0
[19:06:25] PlayerTimer 0
[19:06:26] PlayerTimer 0
Josipo is offline   Reply With Quote
Old 29/01/2018, 03:37 PM   #10
DartfoL
Gangsta
 
DartfoL's Avatar
 
Join Date: Apr 2012
Posts: 764
Reputation: 38
Default Re: Не убиваются таймеры

возможно, где-то выше в OnPlayerDisconnect происходит runtime ошибка и выполнение паблика прерывается, поэтому таймер и не убивается. crashdetect стоит?
__________________
DartfoL is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Таймеры Josipo Русский/Russian 4 17/01/2016 05:02 PM
Таймеры Prolific Русский/Russian 7 30/08/2015 03:41 PM
Таймеры AlexeyTrekkkk Русский/Russian 14 21/07/2014 01:14 AM


All times are GMT. The time now is 04:32 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.