Таймер
|
|
panorama
|
Дата: Четверг, 15.08.2013, 08:56:36 | Сообщение # 1 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Здравствуйте ! Подскажите как можно остановить повторяющийся таймер . Код Panel = CreateTimer(1.0, ShowTimer, _, TIMER_REPEAT);
public KillTimerPanel() { if (Panel != INVALID_HANDLE) { KillTimer(Panel); Panel = INVALID_HANDLE; } }
В консоле сервера после этого способа ошибка выходит !
|
|
| |
Darkeneez
|
Дата: Четверг, 15.08.2013, 11:27:16 | Сообщение # 2 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 221
Репутация: 18 [ +/- ]
|
|
Эм, что это за функция? Обычно таймеры убивают после его исполнения. Например, в повторяющемся таймере проверяем какое-либо условие, и если он выполнено KillTimer(timer);
|
|
| |
panorama
|
Дата: Четверг, 15.08.2013, 11:33:01 | Сообщение # 3 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата (Darkeneez) Эм, что это за функция? Обычно таймеры убивают после его исполнения. Например, в повторяющемся таймере проверяем какое-либо условие, и если он выполнено KillTimer(timer); Например игрок возродился запустился таймер на 300 секунд , раунд закончился и по идеи должен новый таймер запуститься ! Но старый все еще работает !
|
|
| |
Meow_1337
|
Дата: Четверг, 15.08.2013, 12:12:55 | Сообщение # 4 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 207
Репутация: 11 [ +/- ]
|
|
Цитата (panorama) раунд закончился и по идеи должен новый таймер запуститься ! Но старый все еще работает ! А ты старый таймер убил?
Сообщение отредактировал Meow_1337 - Четверг, 15.08.2013, 12:15:27 |
|
| |
Scarface_slv
|
Дата: Четверг, 15.08.2013, 12:15:09 | Сообщение # 5 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 737
Репутация: 61 [ +/- ]
|
|
Цитата (panorama) В консоле сервера после этого способа ошибка выходит ! Если Panel глобальная переменная то таймер можно убит где угодно, а какая ошибка?
|
|
| |
panorama
|
Дата: Пятница, 16.08.2013, 06:31:27 | Сообщение # 6 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата (Meow_1337) А ты старый таймер убил? Вот я о том же как я его убью ?Добавлено (16.08.2013, 06:31:27) ---------------------------------------------
Цитата (panorama) Если Panel глобальная переменная то таймер можно убит где угодно, а какая ошибка? Что то типа Invalid timer его номер . Я проблему решил другим способом но он карявый . Я просто поставил второй таймер на эту же функцию , только изменил скорость Код Panel = CreateTimer(0.1, ShowTimer, _, TIMER_REPEAT); Проблема решилась но это глупый вариант ...
|
|
| |
TEIN
|
Дата: Пятница, 16.08.2013, 11:53:01 | Сообщение # 7 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Весь код кинь
|
|
| |
ThRunningMan
|
Дата: Пятница, 16.08.2013, 14:11:47 | Сообщение # 8 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 140
Репутация: 12 [ +/- ]
|
|
Если это глобальный таймер то убиваешь ег опо имени как у тебя в примере и дано, это можно сделать где угодно, в конце раунда или в начале, или при спауне игрока, или при закрытии панели или что там утебя... Или сделать это в самом плагине если выполнилось какое-то условие то сделать return Plugin_Stop если пока не выполнилось продолжать return Plugin_Continue
|
|
| |
panorama
|
Дата: Пятница, 16.08.2013, 14:13:51 | Сообщение # 9 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 203
Репутация: 2 [ +/- ]
|
|
Цитата (TEIN) Весь код кинь Код public Start(){ inf = 0; Panel = CreateTimer(1.0, ShowTimer, _, TIMER_REPEAT); } public Action:ShowTimer(Handle:timer) { if (++inf < 11) { PrintCenterTextAll("Прошло секунд ля ля %i", inf); return Plugin_Continue; } return Plugin_Stop; } public KillTimerPanel() { if (Panel != INVALID_HANDLE) { KillTimer(Panel); // Таймер убивается но пишется ошибка в логах CreateTimer(0.1, ShowTimer, _, TIMER_REPEAT); // Ускоряется таймер но получается некрасиво и глупо НО без ошибок в логах Panel = INVALID_HANDLE; } } Вот пример
|
|
| |
TEIN
|
Дата: Пятница, 16.08.2013, 16:08:03 | Сообщение # 10 |
![Пользователь](http://world-source.ru/groupicon/user_icon.jpg) |
Сообщений: 563
Репутация: 78 [ +/- ]
|
|
Код #include <sourcemod>
new Handle:hTimer = INVALID_HANDLE;
new Count = 0;
public OnPluginStart() { RegConsoleCmd("start", CallBack_Start); RegConsoleCmd("stop", CallBack_Stop); }
public Action:CallBack_Start(client, args) { if (hTimer != INVALID_HANDLE) { ReplyToCommand(client, "Таймер уже запущен ранее"); } else { hTimer = CreateTimer(1.0, Timer, INVALID_HANDLE, TIMER_REPEAT);
Count = 0;
ReplyToCommand(client, "Запущен таймер"); }
return Plugin_Handled; }
public Action:CallBack_Stop(client, args) { if (hTimer == INVALID_HANDLE) { ReplyToCommand(client, "Таймер не запущен"); } else { TimerKill();
ReplyToCommand(client, "Таймер убит"); }
return Plugin_Handled; }
public Action:Timer(Handle:timer) { if (++Count <= 10) { PrintToChatAll("TIME: %d", Count); } else { TimerKill(); } }
stock TimerKill() { KillTimer(hTimer, false); hTimer = INVALID_HANDLE; } Думаю понятен смысл
|
|
| |