Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Mr.Ivan on February 15, 2021, 01:30:23 PM
-
Добрый день!
Подскажите вот что. Скрипт работает по кругу, пока не остановишь вручную.
А есть ли какая-то команда, чтобы она работал много-много раз, пока не наступит скажем 2 часа ночи? В это время он выключается и всё.
-
В меню Команды есть раздел Системные переменные, там есть нужные команды.
В самом конце скрипта нужно вставить такую проверку времени.
IF($_time_h >= 2) // если время 2 часа ночи, или больше
HALT(1) // стоп и закрыть кликер
END_IF
-
IF($_time_h >= 2) // если время 2 часа ночи, или больше
То есть скрипт будет работать всего два часа, с 12 до двух ночи. Остальное время > либо = двум.
Правильно - IF($_time_h = 2).
Если полное выполнение скрипта может длиться больше часа, что мало вероятно, то можно выкинуть условие в отдельный поток с установкой флага финишного выполнения:
THREAD(finish, 1)
IF($_time_h = 2) // если время 2 часа ночи
$end_work = 1 // запоминаем, что пора спать
SETTHREAD (finish, 0) // отключаем поток
END_IF
wait(5)
END_THREAD
// основной скрипт
//...............
//...............
//...............
//в конце
IF($end_work = 1) // проверяем, пора ли спать
HALT(1) // стоп и закрыть кликер
END_IF
-
Большое спасибо. Испытаю
-
Основная ошибка это знак >=. Представь, что мне нужно выключить скрипт в 12 ночи. В таком условии кликер сразу вырубится, и не важно сколько времени. Правильный знак в условии должен быть = .
-
Основная ошибка это знак >=. Представь, что мне нужно выключить скрипт в 12 ночи. В таком условии кликер сразу вырубится, и не важно сколько времени. Правильный знак в условии должен быть = .
Спасибо за подсказку, мне с этими знаками >= сразу понятно было, хотелось как то обойти ограничение на 1 час работы скрипта. Мой утренний скрипт с такой же проблемой, не работает если цифра времени старта больше цифры времени отключения скрипта. Идея со смещением времени не оправдалась. Свой неправильный пост выше удаляю.
Сейчас еще поковырял немного и бросил, даже если что-то и получится, то этот скрипт будет больше основного. В итоге, исправляю >= на = и заканчиваю "помогать". ;D
Ничего лучше этого у меня пока не получилось:
//-------------------------
WAIT(1) // основной скрипт
//-------------------------
IF($_time_h = 2) // если время 2 часа ночи
HALT(1) // стоп и закрыть кликер
END_IF
THREAD(name, 1)
IF($_time_h = 2) // если время 2 часа ночи
HALT(1) // стоп и закрыть кликер
END_IF
WAIT(5)
END_THREAD
-
...хотелось как то обойти ограничение на 1 час работы скрипта.
Так вот и мне хотелось, простейшим вариантом был поток.
Но мы же так просто не сдаемся!?
Немного усложнил задачу и добавил остановку по часу и минуте. И не важно сколько времени длится скрипт. Не используя отдельный поток.
Изначально расчеты взял отсюда http://crapware.aidf.org/forum/index.php?topic=5210.msg33805#msg33805
//вводим вручную время остановки, час и минуту
$end_h = 2 // час остановки
$end_m = 0 // минута остановки
//рассчет время окончания в юникс
IF($end_time_unix = 0)
IF(int(($date_y-1968)/4) = ($date_y-1968)/4)
STRSEPARATE ("31,29,31,30,31,30,31,31,30,31,30,31", ",", $month)
ELSE
STRSEPARATE ("31,28,31,30,31,30,31,31,30,31,30,31", ",", $month)
END_IF
FOR($a=0,$a<$_date_m-1)
$all_md = $month[$a] + $all_md
END_CYC
IF($_time_h > $end_h)
$end_time_unix =(($_date_y-1970)*365+int(($_date_y-1969)/4))*86400 + $all_md*86400 + $_date_d*86400 + $end_h*3600 + $end_m*60
ELSE
$end_time_unix =(($_date_y-1970)*365+int(($_date_y-1969)/4))*86400 + $all_md*86400 + ($_date_d-1)*86400 + $end_h*3600 + $end_m*60
END_IF
END_IF
//----------------------
// основной скрипт
//...............
//...............
//...............
//в конце
IF($_time_t >= $end_time_unix)//если реальное время больше назначенного выше
halt(1) // стоп и закрыть кликер
END_IF
-
Круто конечно. Мне такое даже осмыслить пока будет трудно. Но попробую в этом разобраться, пригодится.
С временем юникс тоже вчера пробовал экспериментировать, но потом отказался. Мне показалось, что я слишком углубился и полез в дебри, и что всё должно быть гораздо проще. Закончил свои вчерашние опыты на сравнении вот таких строк.
LOGWRITE (STRFILTER(STRCONCAT($_date_str, $_time_str), ":.", 0)) // 17022021162947
В таком сравнении >= тоже будет работать. Кажется, что надо то всего дождаться когда такая строка совпадет с указанным временем остановки скрипта. Само время остановки можно собрать в строку из отдельных элементов $_date_y, $_date_m, $_time_m,... Лишние разряды, такие как секунды, можно отбросить сразу, или динамически, или на основании настроек. Мне кажется это перспективным. Будет время, продолжу. Может и у меня получится сделать универсальный таймер. :)
-
Да, вполне рабочий вариант, и намного проще и понятнее выйдет при использовании.
Только нужно учитывать, что число 17022021162947 очень большое, за пределами 4 байт. Не известно как такие числа будут вести себя в скрипте, скорее всего все будет норм.
-
Вот такая хреновина получилась. ;D
Большие числа не мешают, только INT иногда почему то приписывает к этим числам дробную часть (как и ROUND), но это ни на что не влияет.
Устанавливать время отключения в этом таймере не удобно, нужно соблюдать формат. Для удобства вставил разделители " :.", но все равно можно легко ошибиться. Зато можно установить любое время, с точностью до секунды.
DEFINE($stop_time, "2021.02.19 02:00:00") // время отключения кликера (год.месяц.число часы:минуты:секунды)
WAIT(1) // основной скрипт
IF(INT(STRCONCAT($_date_y, STRCONCAT(STRCUT("00", 1, 2-STRLEN($_date_m)), $_date_m), STRCONCAT(STRCUT("00", 1, 2-STRLEN($_date_d)), $_date_d), STRCONCAT(STRCUT("00", 1, 2-STRLEN($_time_h)), $_time_h), STRCONCAT(STRCUT("00", 1, 2-STRLEN($_time_m)), $_time_m), STRCONCAT(STRCUT("00", 1, 2-STRLEN($_time_s)), $_time_s))) >= INT(STRFILTER($stop_time, " :.", 0)))
HALT(1) // стоп и закрыть кликер
END_IF
Что то мне кажется, что зря я вчера забраковал свой вариант со смещением времени, он интересней и я его просто не дожал. В том варианте таймер устанавливается на 24 часа максимум, что обычно и требуется.