Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Описание: Как работает disabletimer и enabletimer
Kostick
Отправлено: 06 Ноября, 2022 - 20:06:52
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 184
Дата рег-ции: Авг. 2020  
Репутация: 1




Допустим, у меня таймер должен срабатывает каждые 5 минут (300 000 мс). Если я его останавливаю с помощью функции disabletimer (например если нашлась определенная картинка с помощью findimage), а потом снова запускаю через какое-либо время с помощью функции enabletimer , то время таймера начнет отсчет заново или с той миллисекунды, на которой таймер остановился?
И если отсчет начинается заново, как можно сделать, чтобы он начинался с той миллисекунды, на которой был выключен?
Можно например, записать время, на котором остановился таймер, а потом через sendtimer изменить старое время на новое?
Или можно проще?

(Отредактировано автором: 06 Ноября, 2022 - 20:11:44)

 
 Top
Zireael
Отправлено: 06 Ноября, 2022 - 21:55:12
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017  
Репутация: 585




 Цитата:
снова запускаю через какое-либо время с помощью функции enabletimer , то время таймера начнет отсчет заново или с той миллисекунды, на которой таймер остановился?

Заново.

Для примера. Каждые 5 секунд переменная x увеличивается на 1, при нажатии клавиши z таймер останавливается, при повторном нажатии z продолжает работу, с того момента когда был остановлен.
CODE:
int Cooldown = 5000; // время срабатывания таймера
int Timer = gettime() + Cooldown;
int TimerLast = 0;
int TimerLastFlag = 0;
int TimerStop = 0;

int x = 0;
enabletimer(0);

loop()
{
if(getkeystate(90)) // если нажата клавиша Z
{
while(getkeystate(90))sleep(10); // ждать пока нажата клавиша Z
if(TimerStop==0)TimerStop = 1; // таймер не остановлен
else TimerStop = 0;
}

textout(0, 200, 60, "x = " + format(x), 1);
sleep(100);
}


CREATE_TIMER(0, 30)
{
if(TimerStop != 0) // если таймер остановлен
{
if(TimerLastFlag == 0) // если время остановки таймера ещё не записано
{
TimerLastFlag = 1;
TimerLast = Timer - gettime(); // записать время остановки таймера
}
return;
}
else // таймер работает
{
if(TimerLastFlag == 1) // если время остановки было записано
{
TimerLastFlag = 0; // время не записано
Timer = gettime() + TimerLast; // установить время срабатывания таймера
}
}

textout(1, 200, 80, format(Timer - gettime()), 1);

if(Timer < gettime()) // пришло время для срабатывания таймера
{
Timer = gettime() + Cooldown; // установить новое время

// нужные действия каждые 5 секунд
x++;
}
}
 
 Top
Kostick
Отправлено: 07 Ноября, 2022 - 12:04:54
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 184
Дата рег-ции: Авг. 2020  
Репутация: 1




 Zireael пишет:
 Цитата:
снова запускаю через какое-либо время с помощью функции enabletimer , то время таймера начнет отсчет заново или с той миллисекунды, на которой таймер остановился?

Заново.

Для примера. Каждые 5 секунд переменная x увеличивается на 1, при нажатии клавиши z таймер останавливается, при повторном нажатии z продолжает работу, с того момента когда был остановлен.
CODE:
int Cooldown = 5000; // время срабатывания таймера
int Timer = gettime() + Cooldown;
int TimerLast = 0;
int TimerLastFlag = 0;
int TimerStop = 0;

int x = 0;
enabletimer(0);

loop()
{
if(getkeystate(90)) // если нажата клавиша Z
{
while(getkeystate(90))sleep(10); // ждать пока нажата клавиша Z
if(TimerStop==0)TimerStop = 1; // таймер не остановлен
else TimerStop = 0;
}

textout(0, 200, 60, "x = " + format(x), 1);
sleep(100);
}


CREATE_TIMER(0, 30)
{
if(TimerStop != 0) // если таймер остановлен
{
if(TimerLastFlag == 0) // если время остановки таймера ещё не записано
{
TimerLastFlag = 1;
TimerLast = Timer - gettime(); // записать время остановки таймера
}
return;
}
else // таймер работает
{
if(TimerLastFlag == 1) // если время остановки было записано
{
TimerLastFlag = 0; // время не записано
Timer = gettime() + TimerLast; // установить время срабатывания таймера
}
}

textout(1, 200, 80, format(Timer - gettime()), 1);

if(Timer < gettime()) // пришло время для срабатывания таймера
{
Timer = gettime() + Cooldown; // установить новое время

// нужные действия каждые 5 секунд
x++;
}
}

Ого, красиво. Благодарю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 2 (гостей: 2, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by