Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Таймер
panorama Дата: Четверг, 15.08.2013, 08:56:36 | Сообщение # 1
Сообщений: 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
Сообщений: 221
Репутация: 18 [ +/- ]
Эм, что это за функция? Обычно таймеры убивают после его исполнения. Например, в повторяющемся таймере проверяем какое-либо условие, и если он выполнено KillTimer(timer);
 
panorama Дата: Четверг, 15.08.2013, 11:33:01 | Сообщение # 3
Сообщений: 203
Репутация: 2 [ +/- ]
Цитата (Darkeneez)
Эм, что это за функция? Обычно таймеры убивают после его исполнения. Например, в повторяющемся таймере проверяем какое-либо условие, и если он выполнено KillTimer(timer);

Например игрок возродился запустился таймер на 300 секунд , раунд закончился и по идеи должен новый таймер запуститься ! Но старый все еще работает !
 
Meow_1337 Дата: Четверг, 15.08.2013, 12:12:55 | Сообщение # 4
Сообщений: 207
Репутация: 11 [ +/- ]
Цитата (panorama)
раунд закончился и по идеи должен новый таймер запуститься ! Но старый все еще работает !

А ты старый таймер убил?


Сообщение отредактировал Meow_1337 - Четверг, 15.08.2013, 12:15:27
 
Scarface_slv Дата: Четверг, 15.08.2013, 12:15:09 | Сообщение # 5
Сообщений: 737
Репутация: 61 [ +/- ]
Цитата (panorama)
В консоле сервера после этого способа ошибка выходит !

Если Panel глобальная переменная то таймер можно убит где угодно, а какая ошибка?
 
panorama Дата: Пятница, 16.08.2013, 06:31:27 | Сообщение # 6
Сообщений: 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
Сообщений: 563
Репутация: 78 [ +/- ]
Весь код кинь
 
ThRunningMan Дата: Пятница, 16.08.2013, 14:11:47 | Сообщение # 8
Сообщений: 140
Репутация: 12 [ +/- ]
Если это глобальный таймер то убиваешь ег опо имени как у тебя в примере и дано, это можно сделать где угодно, в конце раунда или в начале, или при спауне игрока, или при закрытии панели или что там утебя...
Или сделать это в самом плагине если выполнилось какое-то условие то сделать return Plugin_Stop если пока не выполнилось продолжать return Plugin_Continue
 
panorama Дата: Пятница, 16.08.2013, 14:13:51 | Сообщение # 9
Сообщений: 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
Сообщений: 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;
}

Думаю понятен смысл
 
  • Страница 1 из 1
  • 1
Поиск: