|
|
|
Создал Бот для Русской рыбалки, Игра Русская рыбалка. Ловля карпа. |
|
|
Strannik |
11.8.2015, 11:12
|
Neophyte
Сообщений: 33
Регистрация: 4.8.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.574
Возраст: 28
|
Цитата(DarkMaster @ 10.8.2015, 23:59) https://forum.uokit.com/index.php?showtopic=20548там есть про запуск пилота с ключами. Так же есть команда load_script. От себя хотелось бы порекомендовать по возможности не использовать кучу вкладок, если их работа пересекается либо используются старт/стопы скриптов. Спасибо за ссылку, еще много нового узнал) надо больше на форуме лазить) Теперь можно доделать эту версию и задумываться над еще улучшением))) в моем скрипте я пока задаю 4 окна пользователем перед началом скрипта, а можно это обойти будет... пока так делаю задаем параметры
Код // этот раздел посвящен заданию начальных параметров set #handlePilot findwindow () log #handlePilot log close log clear log open set #logSizeX 300 set #logSizeY 200 set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos 1 1 #logSizeX #logSizeY #handleLog log mode compact // 1 ищем необходимые окна - место заброса set workwindow 0 showwindow #handlePilot log Укажите точку заброса (Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while
set #zabrosX defX set #zabrosY defY set #zabrosAX defxabs set #zabrosAY defyabs set #fiderX #zabrosX - 32 set #fiderY #zabrosY - 37
set #zabros workwindow
// 3 ищем необходимые окна - полоса еды set workwindow 0 showwindow #handlePilot log Укажите на полоску еды в ее середину (Ctrl+A) while workwindow = 0 wait 200 showwindow #handlePilot end_while set #edaX defX set #edaY defY set #eda workwindow // 4 ищем необходимые окна - котелок set workwindow 0 showwindow #handlePilot log Укажите на котелок(Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while set #cotelX defX set #cotelY defY set #cotel workwindow set workwindow #cotel move #cotelX #cotelY left #cotelX #cotelY wait 400 // 5 ищем необходимые окна употребить set workwindow 0 showwindow #handlePilot log Укажите на кнопку употребить (Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while set #upotrebitX defX set #upotrebitY defY set #upotrebit workwindow send {Space}
// конец раздела начальных параметров
|
|
|
|
Strannik |
11.8.2015, 15:49
|
Neophyte
Сообщений: 33
Регистрация: 4.8.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.574
Возраст: 28
|
Готова версия 1.0 кодовое название КАРП Вот собственно версия которая будет работать у всех. Бот запрашивает место ловли, затем сам ловит рыбу, сам кушает, сам достает сачек. Ведет посчет количества выловленной рыбы. Делает перезабросы и т.д. Пользователю остается следить чтобы была наживка и еда в наличии, ну и своевременно продавать рыбу. Локация, пока только рыбхоз - карповая заводь. Планирую дальше: минимизировать запросы от пользователя, сделать возможность боту самому пополнять запасы наживки и еды, а так же продавать выловленную рыбу. Плюс расширить места ловли (или сделать их универсальными) script 0
Код // включение и настройка бота // необходимо достать удочку и забросить в место ловли // затем запускаем бот и следуем указаниям // раздел проверки нужны ли начальные параметры if #zabros > 0 and #eda > 0 and #cotel > 0 and #upotrebit > 0 goto eda else end_if // этот раздел посвящен заданию начальных параметров set #handlePilot findwindow () log #handlePilot log close log clear log open set #logSizeX 300 set #logSizeY 200 set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos 1 1 #logSizeX #logSizeY #handleLog log mode compact // 1 ищем необходимые окна - место заброса // карп 562, 329 set workwindow 0 showwindow #handlePilot log Укажите точку заброса (Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while
set #zabrosX defX set #zabrosY defY set #zabrosAX defxabs set #zabrosAY defyabs set #carpX 562 set #carpY 329 set #fiderX #carpX - 32 //дельта места заброса и конца фидера на карпа set #fiderY #carpY - 44 set #zabros workwindow // 2 ищем необходимые окна - окно игры и пилота в строке пуск set workwindow 0 showwindow #handlePilot log Укажите положение окна игры в строке пуск (Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while set #igraX defxabs set #igraY defyabs set workwindow 0 showwindow #handlePilot log Укажите положение окна UoPilot в строке пуск(Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while set #pilotX defxabs set #pilotY defyabs // 3 ищем необходимые окна - полоса еды set workwindow 0 showwindow #handlePilot log Укажите на полоску еды в ее середину (Ctrl+A) while workwindow = 0 wait 200 showwindow #handlePilot end_while set #edaX defX set #edaY defY set #eda workwindow move 416, 31 //относительные коорд рядом с бегунком лески get mouse_pos #leskaRX #leskaY abs//считываем абсолютные координаты окна рядом с леской set #leskaX #leskaRX + 1 move #leskaX #leskaY abs set #LeskaW windowfromcursor move 416, 12 //относительные коорд рядом с бегунком удочки get mouse_pos #udaRX #udaY abs//считываем абсолютные координаты окна рядом с леской set #udaX #udaRX + 1 move #udaX #udaY abs set #udaW windowfromcursor // 4 ищем необходимые окна - котелок set workwindow 0 showwindow #handlePilot log Укажите на котелок(Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while set #cotelX defX set #cotelY defY set #cotel workwindow set workwindow #cotel move #cotelX #cotelY left #cotelX #cotelY wait 400 // 5 ищем необходимые окна употребить set workwindow 0 showwindow #handlePilot log Укажите на кнопку употребить (Ctrl+A) while workwindow = 0 wait 100 showwindow #handlePilot end_while set #upotrebitX defX set #upotrebitY defY set #upotrebit workwindow send {Space}
// конец раздела начальных параметров //хотим ли есть?
:eda set workwindow #eda //окно полосок с едой get color #edacolor 27, 53 //координаты голода if #edacolor = 13032663 // цвет голода log Кушаю set #handleWin findwindow (Продукты) showwindow #handleWin wait random (1000) + 300 set workwindow #upotrebit left 10 10 send {space} goto eda else end_if // Начало заброса :zabros wait random (1000) + 500 log Забрасываю Удочку set workwindow #zabros //проверяем первый ли заброс set #a #a + 1 if #a = 1 move #carpX #carpY left #carpX #carpY goto klev end_if set #z random (2) if #z = 1 log забросил мышкой move #carpX #carpY left #carpX #carpY else send t log забросил кнопкой end_if :klev // цикл клева set #j #j + 1 if #j > 30 log возвращаюсь в начало (возможно есть проблемы) set #j 0 goto nachalo end_if wait random (1000) + 1500 get color #uda #fiderX, #fiderY// надо всегда проверять место заброса if #uda = 255 // цвет удочки goto klev else log Клюнуло, ВЫВАЖИВАЕМ! end_if
//вываживаем start_script 1 start_script 2
// проверка улова :ulov set #b #b + 1 //увеличение счетчика if #b > 150
Log не вываживается, либо сорвалась goto nachalo //сачек end_if set #a #a + 1 //увеличение счетчика if #a > 10
send f //сачек set #a 1 end_if move #zabrosAX #zabrosAY abs set #w windowfromcursor set workwindow #w if #w = #zabros// хендл окна заброса goto ulov else set #riba #riba + 1 log поймалась #riba рыбка stop_script 1 stop_script 2 wait random (1000) + 400 set #var findwindow (Садок) set workwindow #var send {Space} wait random (1000) + 400 end_if :nachalo stop_script 1 stop_script 2 log начинаем все поновой set #j 0 set #b 0 move #igraX, #igraY abs set #w windowfromcursor set workwindow #w left #igraX, #igraY abs wait random (300) move #pilotX, #pilotY abs left #pilotX, #pilotY abs wait random (300)
script 1
Код set workwindow #LeskaW.0 send_down g :leska get color #leska 21, 7 // цвет полосы лески if #leska = 4488494 // цвет без нагрузки send_up g else goto leska end_if
script 2
Код set workwindow #udaW.0 send_down h :palka get color #palka 18, 7 // цвет полосы лески if #palka = 4488494 // цвет без нагрузки send_up h else goto palka end_if
Надо открыть все 3 скрипта в пилоте, чтобы они так и назывались (0, 1, 2) Далее так же планирую привязать их к окну пилота, чтобы при запуске пилота сразу подгружались эти скрипты.
|
|
|
|
Strannik |
12.8.2015, 20:20
|
Neophyte
Сообщений: 33
Регистрация: 4.8.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.574
Возраст: 28
|
Цитата(cirus @ 12.8.2015, 2:16) Код get color #palka 18, 7 // цвет полосы лески if #palka = 4488494 // цвет без нагрузки get color тут по сути не нужен, можно заменить на: Код В начало скриптов лучше сразу добавить нужную задержку между строк. Код set linedelay 1 //установить задержку в 1 мсек. Спасибо. Обязательно учту. Понял как привязывать окна к родительскому. Буду оптимизировать скрипт... видимо этот процесс бесконечный)
|
|
|
|
Strannik |
12.8.2015, 21:07
|
Neophyte
Сообщений: 33
Регистрация: 4.8.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.574
Возраст: 28
|
Версия 2.0 Карп что добавлено: теперь пользовтелю ненадо НИЧЕГО настраивать в боте. Ему надо только зайти на локацию и достать удочку, проверить есть ли наживка и еда... Включаем бот и все) Функциональность пока без изменений (ловит, перезабрасывает, ест) Планируется: продажа рыбы, закупка еды и наживки, расширение мест ловли КАРП 2.0
Код set linedelay 1 //установить задержку в 1 мсек. // включение и настройка бота // необходимо достать удочку и забросить в место ловли // затем запускаем бот и следуем указаниям // раздел проверки нужны ли начальные параметры if #zabros > 0 and #eda > 0 and #cotel > 0 and #upotrebit > 0 goto eda else end_if // этот раздел посвящен заданию начальных параметров set #handlePilot findwindow () log #handlePilot log close log clear log open set #logSizeX 300 set #logSizeY 200 set #handleLog 0 while #handleLog = 0 set #handleLog findwindow (Log Window) end_while set #x (screenwidth - #logSizeX) / 2 set #y screenheight / 4 set windowpos 1 1 #logSizeX #logSizeY #handleLog log mode compact // окно заброса // карп 562, 329 set #ownerHandle findwindow (Рыбхоз: Карповая заводь) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #zabros getwindow (#tmp next) set #carpX 562 set #carpY 329 set #fiderX #carpX - 32 //дельта места заброса и конца фидера на карпа set #fiderY #carpY - 44 // окно - полоса еды set #ownerHandle findwindow (Рыбхоз: Карповая заводь) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp next) set #eda getwindow (#tmp next) // окно - бегунок лески set #ownerHandle findwindow (Рыбхоз: Карповая заводь) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #LeskaW getwindow (#tmp next) // окно - бегунок удочки set #ownerHandle findwindow (Рыбхоз: Карповая заводь) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #udaW getwindow (#tmp next) // окно - котелок set #ownerHandle findwindow (Рыбхоз: Карповая заводь) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #cotel getwindow (#tmp child) // окно употребить set #ownerHandle findwindow (Продукты) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #upotrebit getwindow (#tmp next) // конец поисков окон //хотим ли есть? :eda set workwindow #eda //окно полосок с едой get color #edacolor 27, 53 //координаты голода if #edacolor = 13032663 // цвет голода log Кушаю set #handleWin findwindow (Продукты) showwindow #handleWin wait random (1000) + 300 set workwindow #upotrebit left 10 10 send {space} goto eda else end_if // Начало заброса :zabros wait random (1000) + 500 log Забрасываю Удочку set workwindow #zabros //проверяем первый ли заброс set #a #a + 1 if #a = 1 move #carpX #carpY left #carpX #carpY goto klev end_if set #z random (2) if #z = 1 log забросил мышкой move #carpX #carpY left #carpX #carpY else send t log забросил кнопкой end_if :klev // цикл клева set #j #j + 1 if #j > 300 log возвращаюсь в начало (возможно есть проблемы) set #j 0 goto nachalo end_if wait random (1000) + 1500 get color #uda #fiderX, #fiderY// надо всегда проверять место заброса if #uda = 255 // цвет удочки goto klev else log Клюнуло, ВЫВАЖИВАЕМ! end_if //вываживаем start_script 1 start_script 2
// проверка улова :ulov set #b #b + 1 //увеличение счетчика if #b > 1500
Log не вываживается, либо сорвалась goto nachalo //сачек end_if set #a #a + 1 //увеличение счетчика if #a > 50
send f //сачек set #a 1 end_if set #zabros workwindow move #fiderX #fiderY set #w windowfromcursor set workwindow #w if #w = #zabros// хендл окна заброса goto ulov else set #riba #riba + 1 log поймалась #riba рыбка stop_script 1 stop_script 2 wait random (1000) + 400 set #var findwindow (Садок) set workwindow #var send {Space} wait random (1000) + 400 end_if :nachalo stop_script 1 stop_script 2 log начинаем все поновой set #j 0 set #b 0
script 1
Код set linedelay 1 //установить задержку в 1 мсек. set workwindow #LeskaW.4 send_down g :leska get color #leska 21, 7 // цвет полосы лески if #leska = 4488494 // цвет без нагрузки send_up g else goto leska end_if
script 2
Код set linedelay 1 //установить задержку в 1 мсек. set workwindow #udaW.4 send_down h :palka get color #palka 18, 7 // цвет полосы лески if #palka = 4488494 // цвет без нагрузки send_up h else goto palka end_if
|
|
|
|
Strannik |
13.8.2015, 11:12
|
Neophyte
Сообщений: 33
Регистрация: 4.8.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.574
Возраст: 28
|
Цитата(DarkMaster @ 13.8.2015, 10:51) Текст картинка или можно выделить мышкой?
текст как название окна я так понимаю я сделал так: выдергиваем цифры
Код set #ownerHandle findwindow (Садок) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #kolvo getwindow (#tmp next) set $kolvo getwindowtext (#kolvo) // в этой переменной нужный нам текст : //Рыб в садке: 27 / 300 //Общий вес: 176,397 кг set $ws садке: // левое от числа слово set #wlen size ( $ws ) // длина левого_слова set $w2 / // правое от числа слово set #n1 posex($ws $kolvo) // позиция в строке с которой начинается левое_слово set #n2 posex($w2 $kolvo) // позиция в строке с которой начинается правое_слово msg #n1 #n2 if ( #n1 > 0) and ( #n2 > 0 ) // если оба слова были найдены, то будем доставать число... set #pos #n1 + #wlen // позиция в строке с которой начинается число set #len #n2 - #pos // длина числа в символах set $res copy($kolvo #pos #len) // получаем из строки нужную нам подстроку с числом set #всего_рыбы $res // считаем сколько всего рыбы msg Вы наловили уже #всего_рыбы рыбы! // Получили наше число else msg Вы вообще чтото ловили?! // неправильные исходные данные end_if end_script
вроде норм работает)
|
|
|
|
Strannik |
13.8.2015, 12:29
|
Neophyte
Сообщений: 33
Регистрация: 4.8.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.574
Возраст: 28
|
Цитата(cirus @ 13.8.2015, 12:09) Можно всё упростить: Код set $kolvo Рыб в садке: 27 / 300 init_arr %a (1) $kolvo log Вы наловили уже %a [1 4] рыбы! stop_script во блин) надо массивы поизуачать))) это он показывает 4е слово в строке? соответственно можно потом присвоить это в числовую переменную Код set $kolvo Рыб в садке: 27 / 300 init_arr %a (1) $kolvo log Вы наловили уже %a [1 4] рыбы! set #fish %a [1 4] stop_script
|
|
|
|
Strannik |
13.8.2015, 16:59
|
Neophyte
Сообщений: 33
Регистрация: 4.8.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.574
Возраст: 28
|
придумал такой вариант. с помощью готового скрипта нахожу положение в дереве и хендл нужного окна на данные момент. Код set #ownerHandle findwindow (Рыболовная база Озеро) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp child) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #tmp getwindow (#tmp next) set #childHandle getwindow (#tmp next)
далее, т.к. окно меняет положение в дереве (по моим проверкам оно меняет положение только "по горизонтали"), но я знаю его размер (он уникальный). я сокращаю нексты до минимума и вставляю условие проверки каждого окна по размеру. Получилось примерно так: Код set #ownerHandle findwindow (Рыболовная база Озеро) set #tmp getwindow (#ownerHandle child) set #tmp getwindow (#tmp child) :proverka set #tmp getwindow (#tmp next) set #childHandle getwindow (#tmp next) set #a 80 // нужная нам длина set #b 88 // нужная нам ширина
get windowpos #childHandle #x #y #ves #shirina if #ves = #a and #shirina = #b msg #childHandle нужное нам окно else goto proverka end_if end_script
upd Блин, по вертикали тоже положение меняет. Видимо надо 2 условия вводить. и автоматизировать... задачка.
|
|
|
|
Strannik |
13.8.2015, 18:55
|
Neophyte
Сообщений: 33
Регистрация: 4.8.2015 Группа: Пользователи Наличность: 0
Пользователь №: 17.574
Возраст: 28
|
Цитата(DarkMaster @ 13.8.2015, 17:23) ищи не по размеру, а по тексту. Есть же какой-то шаблон, например, 1-3 цифры, потом "/", еще сколько-то цифр, пробел и слово "тапок". По такому шаблону можно достаточно уверенно определить окно. Регекспы: http://www.shtogrin.com/library/web/pcre/doc/pcre/там окно с названием только родительское, остальные являются только кнопками без названий окна.
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|