Автокликер Clickermann :: Форум
Основной раздел => Общие вопросы => Topic started by: Evgeny 888 on July 15, 2018, 03:29:39 PM
-
Добрый день, в программировании чистый лист, т.ч заранее извиняюсь за....
Набросал себе такое расписание, подпрограмма должна запускаться с 14:00 до 15:30 каждые 30 мин, и далее с 16:30 до 19:30 тоже самое
также 3 условия должны включиться в определённое время 16:00, 20:00 и 21:10. Что можно сделать проще и короче? Подскажите пжл.
[SUB(GOB) // подпрограмма
//=============================================
FOR($a=0, $a < 1)
EXECUTE("sound\police.wav")
$time2=0
$time2 = $_time_t + 600
WHILE($time2 > $_time_t) //условие выпол-ся в теч 10 мин
GETSCREEN
IF_PIXEL_IN(1450,500, 1550,620, 61951)
LCLICK($_return1+rnd(147,151), $_return2+rnd(-1,2))
SOUND("sound\virus_1.wav")
print("attack")
WAIT(1)
LCLICK(1165,605) // 4 точка
LCLICK(965,605) // 3 точка
LCLICK(965,650) // 2 точка
LCLICK(500,650) // 1 точка
WAIT(9)
END_IF
END_CYC
print("end")
END_CYC
//=============================================
END_SUB
IF(($_time_h > 13)&($_time_h < 16)&($_time_m = 00)&($_time_s = 02))
GOB()
END_IF
IF(($_time_h > 13)&($_time_h < 20)&($_time_m = 30)&($_time_s = 02))
GOB()
END_IF
IF(($_time_h > 16)&($_time_h < 19)&($_time_m = 00)&($_time_s = 02))
GOB()
END_IF
$var=0
IF(($_time_h = 16)&($_time_m = 00)&($_time_s = 02))
$var=1
#include "Захватчики.cms"
END_IF
WAITMS(500)
$var=0
IF(($_time_h = 20)&($_time_m = 00)&($_time_s = 02))
$var=1
#include "Море.cms"
END_IF
$var=0
IF(($_time_h = 21)&($_time_m = 10)&($_time_s = 02))
$var=1
#include "Поле_боя.cms"
END_IF
WAITMS(500)
HALT
]
-
IF(($_time_h = 14)&($_time_m = 0)&($run = 0)) // Разрешаем выполнение в 14:00
$run = 1
END_IF
IF(($_time_h = 19)&($_time_m > 30)&($run = 1)) // Запрещаем выполнение в 19:30
$run = 0
END_IF
IF(($time < $_time_t)&($run = 1))
FOR($a=0, $a < 1)
EXECUTE("sound\police.wav")
$time2 = $_time_t + 600
WHILE($time2 > $_time_t) //условие выпол-ся в теч 10 мин
GETSCREEN
IF_PIXEL_IN(1450,500, 1550,620, 61951)
LCLICK($_return1+rnd(147,151), $_return2+rnd(-1,2))
SOUND("sound\virus_1.wav")
print("attack")
WAIT(1)
LCLICK(1165,605) // 4 точка
LCLICK(965,605) // 3 точка
LCLICK(965,650) // 2 точка
LCLICK(500,650) // 1 точка
WAIT(9)
ELSE
WAITMS(50)
END_IF
END_CYC
print("end")
END_CYC
$time = $_time_t + 1800 // Условие сработает снова через 30 минут
END_IF
$var=0
IF(($_time_h = 16)&($_time_m = 0)&($_time_s = 2))
$var=1
#include "Захватчики.cms"
END_IF
WAITMS(200)
$var=0
IF(($_time_h = 20)&($_time_m = 0)&($_time_s = 2))
$var=1
#include "Море.cms"
END_IF
$var=0
IF(($_time_h = 21)&($_time_m = 10)&($_time_s = 2))
$var=1
#include "Поле_боя.cms"
END_IF
WAITMS(200)
-
Добрый день, спасибо за ответ. Но у меня проблема с циклом через ** минут. здесь тестовый вариант ч/з 2 минуты. Не хотел беспокоить, тупо читал посты где указывалось что тема изъедена и т.п. после недельных экспериментов начало подбешивать. Делаю всё как спецы пишут, но на выходе фигня. Помогите - что не так. может прогу переустановить надо? у меня по логам период 3 минуты и 1 секунда, откуда они беруться?
IF($time1 < $_time_t) // условие должно сработать ч/з 2 мин
LOGWRITE ("start")
$time2=0
$time2 = $_time_t + 60
WHILE($time2 > $_time_t) //условие выпол-ся в теч 1 мин
GETSCREEN
IF_PIXEL_IN(1450,500, 1550,620, 61951)
LCLICK($_return1+150, $_return2)
LOGWRITE ("Атака")
WAIT(1)
LCLICK(1165,625) // 4 точка
LCLICK(965,625) // 3 точка
LCLICK(965,625) // 2 точка
LCLICK(500,625) // 1 точка
WAIT(9)
END_IF
END_CYC
LOGWRITE ("end_1")
$time1 = $_time_t + 120
END_IF
-
В цикле нет задержки если пиксел не найден. В этом случаи частые вызовы GETSCREEN будут сильно нагружать процессор.
Добавь еще записи в лог.
IF($time1 < $_time_t) // условие должно сработать ч/з 2 мин
LOGWRITE ("start")
$time2 = $_time_t + 60
$m = $_ms // засекаем время
WHILE($time2 > $_time_t) //условие выпол-ся в теч 1 мин
GETSCREEN
IF_PIXEL_IN(1450,500, 1550,620, 61951)
LCLICK($_return1+150, $_return2)
LOGWRITE ("Атака")
WAIT(1)
LCLICK(1165,625) // 4 точка
LCLICK(965,625) // 3 точка
LCLICK(965,625) // 2 точка
LCLICK(500,625) // 1 точка
WAIT(9)
END_IF
LOGWRITE ("Осталось: ", $time2-$_time_t, " сек")
WAITMS(50)
END_CYC
LOGWRITE ("end_1")
LOGWRITE ("Прошло: ", $_ms-$m, " мс")
$time1 = $_time_t + 120
END_IF
HALT
Лог:
16:31:31 end_1
16:31:31 Прошло: 60880 мс
-
Добрый день,
Загнал в ваш скрипт все свои действия, согл реальной ситуации, вырезал все звук эфф, добавил везде время ожидания.
И все равно скрипт работает с периодом 3 минут, против 2 заданных. по ходу в период добавляется время исполнения тела "в течении"
Где ошибка?IF($time1 < $_time_t) // условие должно сработать ч/з 2 мин
LOGWRITE ("start")
$time2 = $_time_t + 60
$m = $_ms // засекаем время
WHILE($time2 > $_time_t) //условие выпол-ся в теч 1 мин
GETSCREEN
IF_PIXEL_IN(1450,500, 1550,620, 61951)
LCLICK($_return1+150, $_return2)
LOGWRITE ("Атака")
WAIT(1)
DBLCLICK(500,490) // 1 точка
WAITMS(50)
DBLCLICK(965,630) // 3 точка
WAITMS(50)
DBLCLICK(970,640)
WAITMS(50)
DBLCLICK(975,650) // 3 точка
WAITMS(50)
DBLCLICK(1160,640) // 4 точка
WAITMS(50)
DBLCLICK(1165,650) // 4 точка
WAITMS(50)
DBLCLICK(1170,660)
WAIT(9)
ELSE
WAITMS(50)
END_IF
LOGWRITE ("Осталось: ", $time2-$_time_t, " сек")
WAITMS(50)
END_CYC
LOGWRITE ("end_1")
$time1 = $_time_t + 120
END_IF
-
Спасибо что подсказали где ошибка, был бы очень признателен за правильный вариант. как вы уже догадались чего я добиваюсь от скрипта.
-
Кирилл, добрый день. Спасибо за то что возитесь со мной, я тут с утра тож набросал, не так элегантно как увас, но вроде работало. Но! и в моём и сейчас проверил в вашем варианте, присутствует 1 лишняя секунда в цикле ч/з 2 мин, и меня это беспокоит. Откуда она берётся и как от неё избавится?
IF($time1 < $_time_t) // условие должно сработать ч/з 2 мин
$time1 = $_time_t + 120
LOGWRITE ("start")
FOR($a=0, $a < 1)
$time2 = $_time_t + 60
WHILE($time2 > $_time_t) //условие выпол-ся в теч 1 мин
GETSCREEN
IF_PIXEL_IN(1450,500, 1550,620, 61951)
LCLICK($_return1+150, $_return2)
LOGWRITE ("Атака")
WAIT(1)
LCLICK(500,485) // 1 точка
WAITMS(50)
LCLICK(500,495) // 1 точка
WAITMS(50)
LCLICK(965,630) // 3 точка
WAITMS(50)
LCLICK(970,640) // 3 точка
WAITMS(50)
LCLICK(975,650) // 3 точка
WAITMS(50)
LCLICK(1160,640) // 4 точка
WAITMS(50)
LCLICK(1165,650) // 4 точка
WAITMS(50)
LCLICK(1170,660) // 4 точка
WAIT(9)
ELSE
WAITMS(50)
END_IF
END_CYC
LOGWRITE ("end_1")
END_CYC
END_IF
-
проверил в вашем варианте, присутствует 1 лишняя секунда в цикле ч/з 2 мин, и меня это беспокоит. Откуда она берётся и как от неё избавится?
Как откуда, вот отсюда
LOGWRITE("Ожидание старта ", $time1-$_time_t, " сек")
WAIT(1) //частота проверок во время ожидания повторных стартов
Ждём 1 секунду между проверками.
Если нужна точность выше, нужно ставить там маленькую задержку и убирать LOGWRITE.
Почему kiril так написал? Для отладки и чтоб ты понял смотря в лог. А выводить в лог каждые 10 ms невозможно и всё засрётся, поэтому стоит 1 секунда.
P.S. А что делает чудо-цикл выполняемый один раз?
FOR($a=0, $a < 1)
:o
-
Тоже здравствуйте.
Нет, вот скрипт от Кирилла с моими функционалами и убранными функциями по контролю (только старт цикла, атаки и конец "в течени") И лог где эта гадкая секунда к каждому циклу:(
IF($time1 < $_time_t)
$time1 = $_time_t + 120 // условие должно сработать повторно ч/з 2 мин
$time2 = $_time_t + 60 //цикл выпол-ся в теч 1 мин
LOGWRITE ("Старт")
EXECUTE("sound\police.wav")
WHILE($time2 > $_time_t)
GETSCREEN (1450,500, 1550,620)
IF_PIXEL_IN(1450,500, 1550,620, 61951)
LCLICK($_return1+150, $_return2)
LOGWRITE ("Атака")
SOUND("sound\virus_1.wav")
WAIT(1)
LCLICK(500,485) // 1 точка
WAITMS(50)
LCLICK(500,495) // 1 точка
WAITMS(50)
LCLICK(965,630) // 3 точка
WAITMS(50)
LCLICK(970,640) // 3 точка
WAITMS(50)
LCLICK(975,650) // 3 точка
WAITMS(50)
LCLICK(1160,640) // 4 точка
WAITMS(50)
LCLICK(1165,650) // 4 точка
WAITMS(50)
WAIT(9)
ELSE
WAITMS(50)
END_IF
END_CYC
LOGWRITE ("Конец_10")
END_IF
-
Ты удалил паузу для разгрузки процессора во время ожидания между $time1.
Но это к делу не относится.
Не нужно смотреть на время в файле лога. Точнее можно смотреть, только интерпретировать правильно.
$time1 = $_time_t + 120 // условие должно сработать повторно ч/з 2 мин
ключевое слово здесь "через", т.е. по истечении 120 секунд.
Внутрь условия мы не попадём, пока не прощёлкает 120 секунд, а когда попадём будет уже 121-я.
Т.к. в логе время с точностью до секунды, то всё правильно, началась уже 121-я секунда во время принта.
Допустим $_time_t = 1000.
Прибавляем 120, $time1 = 1000 + 120 = 1120.
Через ровно 120 секунд (пока последняя секунда не закончилась) $_time_t стало 1120, условие IF($time1 < $_time_t) будет проверяться в таком виде
IF(1120 < 1120)
1120 меньше 1120? Нет. IF выполнится на следующей секунде, когда сто двадцатая закончится и будет
IF(1120 < 1121)
:)
Но и это ещё не всё. Если тебе нужна точность до 1 секунды то, как известно, нужно использовать единицы измерения более высокого порядка.
Значит нужно использовать переменную более точную, у нас это $_ms с милисекундами
-
Спасибо за внятное объяснение, просто думал что при увеличении периода будет расти погрешность, 2 минуты было для тестов. в реале 30 мин. и 1 сек там ничего не решает. Ещё раз благодарю