SA-MP Forums

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

Reply
 
Thread Tools Display Modes
Old 21/04/2012, 06:11 PM   #1
stabker
High-roller
 
Join Date: Mar 2012
Posts: 1,320
Reputation: 86
Default Как предовратить повторный запуск таймера?

Суть вопроса в том, что я хочу оптимизировать спидометр. Делаю запуск таймера для обновления спидометра когда игрок садится в транспорт, останавливаю его когда выходит.
Сделал это так:
в newstate == PLAYER_STATE_DRIVER поставил старт, а oldstate == PLAYER_STATE_DRIVER остановку (удаление)
Также дополнительно останавливаю таймер при выходе из игры.

Но проблема в том, что иногда таймер запускается несколько раз и id нового таймера хранится в переменной, а старого нет, но он все еще работает. Понятно что таймер обновляет текстдравы скорости, бензина и т.д., а когда их несколько то бензин снимается быстрее в столько раз, сколько и запущено лишних таймеров (обычно не более 2х). Удалить "гуляющий" таймер который уже выпал из переменной нельзя, задаюсь вопросом как сделать чтобы он не мог запустится несколько раз?

P.S. Если есть другое решение проблемы, буду очень рад его выслушать
stabker is offline   Reply With Quote
Old 21/04/2012, 06:14 PM   #2
OKStyle
High-roller
 
OKStyle's Avatar
 
Join Date: May 2008
Location: Russia, Orenburg Money: GTA$ 999,999,999
Posts: 3,067
Reputation: 117
Default Re: Как предовратить повторный запуск таймера?

Делать таймер без повтора и запускать каждую итерацию с проверкой на положение (вне авто или в нём).
__________________
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 21/04/2012, 06:21 PM   #3
stabker
High-roller
 
Join Date: Mar 2012
Posts: 1,320
Reputation: 86
Default Re: Как предовратить повторный запуск таймера?

Quote:
Originally Posted by OKStyle View Post
Делать таймер без повтора и запускать каждую итерацию с проверкой на положение (вне авто или в нём).
Тоесть это нужно запускать таймер без повтора, в этом же таймере, в конце, сделать проверку на положение и если оно равно PLAYER_STATE_DRIVER то опять запускать таймер?
Не будет ли такой "цикл запусков" слишком нагружать сервер?
stabker is offline   Reply With Quote
Old 21/04/2012, 06:53 PM   #4
OKStyle
High-roller
 
OKStyle's Avatar
 
Join Date: May 2008
Location: Russia, Orenburg Money: GTA$ 999,999,999
Posts: 3,067
Reputation: 117
Default Re: Как предовратить повторный запуск таймера?

Гораздо меньше, чем повторяющийся таймер. Коллизий точно не будет.
__________________
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 21/04/2012, 11:30 PM   #5
jhonyxakep
Gangsta
 
jhonyxakep's Avatar
 
Join Date: May 2011
Location: Russia, Moscow
Posts: 789
Reputation: 43
Default Re: Как предовратить повторный запуск таймера?

А я бы вообще без таймеров делал. ИМХО 2 условия в OnPlayerUpdate отлично подойдут. И не говорите мне, что бла бла нельзя в OnPlayerUpdate. Предположим, что у нас таймер игрока 40 мсек, обновлять спидометр надо раз в 100 мсек, можно спокойно раз в 2-3 OnPlayerUpdate обновлять спидометр.
jhonyxakep is offline   Reply With Quote
Old 22/04/2012, 12:58 PM   #6
stabker
High-roller
 
Join Date: Mar 2012
Posts: 1,320
Reputation: 86
Default Re: Как предовратить повторный запуск таймера?

Quote:
Originally Posted by jhonyxakep View Post
А я бы вообще без таймеров делал. ИМХО 2 условия в OnPlayerUpdate отлично подойдут. И не говорите мне, что бла бла нельзя в OnPlayerUpdate. Предположим, что у нас таймер игрока 40 мсек, обновлять спидометр надо раз в 100 мсек, можно спокойно раз в 2-3 OnPlayerUpdate обновлять спидометр.
И не говорите мне, что бла бла нельзя в OnPlayerUpdate... - а я скажу всетаки что нельзя. У меня таймер каждые 300 мсек выполняется, на сек грубо говоря 3 раза. OnPlayerUpdate выполняется около 7-9 раз на секунду если я не ошибаюсь и все это время надо обновлять тексдравы? А если еще учитывать то что у меня там проверка на скорость для античита и т.д. то вряд ли что-то хорошее получится.
stabker is offline   Reply With Quote
Old 22/04/2012, 01:08 PM   #7
Jon_De
High-roller
 
Join Date: Mar 2011
Location: ru
Posts: 1,245
Reputation: 16
Default Re: Как предовратить повторный запуск таймера?

Всё в OnPlayerUpdate можно, в меру конечно. А против говорят в основном те кто даже не тестировал код при онлайне
Jon_De is offline   Reply With Quote
Old 22/04/2012, 02:02 PM   #8
iEnemY
Huge Clucker
 
iEnemY's Avatar
 
Join Date: Jun 2010
Location: Somewhere . . .
Posts: 465
Reputation: 6
Default Re: Как предовратить повторный запуск таймера?

Я возражу. У меня спидометр в OnPlayerUpdate - но: после использования спидометра (обновления тексдрава), ставится таймер, блокирующий спидометр на 500 мс. Т.е., спидометр выполняется 2 раза в секунду. Но всё равно таймер то используется.. плюс, OnPlayerUpdate очень динамичный - он может выполнятся 2 раза в секунду, а может и 20 - например, когда игрок целится.
iEnemY is offline   Reply With Quote
Old 22/04/2012, 02:03 PM   #9
Mutha_X
Gangsta
 
Join Date: Sep 2009
Location: recursion
Posts: 644
Reputation: 31
Default Re: Как предовратить повторный запуск таймера?

Главное отрегулировать частоту вызова onplayerupdate - стандартных конфигов вполне досточно.
__________________
Russian forums: asking question - taking grammar notations.
Учитесь задавать вопросы по существу и изучать матчасть: иначе приобретайте лекарство "НИБОМБИН".
Mutha_X is offline   Reply With Quote
Old 23/04/2012, 01:56 AM   #10
jhonyxakep
Gangsta
 
jhonyxakep's Avatar
 
Join Date: May 2011
Location: Russia, Moscow
Posts: 789
Reputation: 43
Default Re: Как предовратить повторный запуск таймера?

Quote:
И не говорите мне, что бла бла нельзя в OnPlayerUpdate... - а я скажу всетаки что нельзя. У меня таймер каждые 300 мсек выполняется, на сек грубо говоря 3 раза. OnPlayerUpdate выполняется около 7-9 раз на секунду если я не ошибаюсь и все это время надо обновлять тексдравы? А если еще учитывать то что у меня там проверка на скорость для античита и т.д. то вряд ли что-то хорошее получится.
Сделайте переключатель. Я об этом в своем посте и говорил. Условие+переменная+код изменения значения переменной позволит избавится от таймера, и запихать все в OnPlayerUpdate
jhonyxakep 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
Запуск сервера в режиме nogui -Stranger- Русский/Russian 11 23/02/2012 04:08 PM
Запуск сервера на линуксе с выбором ip Roberto_Bruny Русский/Russian 1 14/01/2012 10:06 PM
Запуск сервера под Ubuntu cyber01 Русский/Russian 8 26/02/2011 06:27 PM


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


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