Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Вопрос по таймеру

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

1. Kostick - 06 Ноября, 2022 - 12:06:52 - перейти к сообщению
Допустим, у меня таймер должен срабатывает каждые 5 минут (300 000 мс). Если я его останавливаю с помощью функции disabletimer (например если нашлась определенная картинка с помощью findimage), а потом снова запускаю через какое-либо время с помощью функции enabletimer , то время таймера начнет отсчет заново или с той миллисекунды, на которой таймер остановился?
И если отсчет начинается заново, как можно сделать, чтобы он начинался с той миллисекунды, на которой был выключен?
Можно например, записать время, на котором остановился таймер, а потом через sendtimer изменить старое время на новое?
Или можно проще?
2. Zireael - 06 Ноября, 2022 - 13:55:12 - перейти к сообщению
 Цитата:
снова запускаю через какое-либо время с помощью функции 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++;
}
}
3. Kostick - 07 Ноября, 2022 - 04:04:54 - перейти к сообщению
 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++;
}
}

Ого, красиво. Благодарю.

Powered by ExBB FM 1.0 Final