Версия 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
Порядок запуска: качаем юпилот (можно прямо тут на форуме), открываем вкладку со скриптами и там делаем 3 вкладки со скриптами. Далее запускаем игру, затариваемся наживкой и едой, заходим на локацию Рыбхоз - карповая заводь. Достаем Донку, включаем бот...
Надо открыть все 3 скрипта в пилоте, чтобы они так и назывались (0, 1, 2)
Далее так же планирую привязать их к окну пилота, чтобы при запуске пилота сразу подгружались эти скрипты.
Предыдущие версии
версия 1.0
Готова версия 1.0 кодовое название КАРП
Вот собственно версия которая будет работать у всех.
Бот запрашивает место ловли, затем сам ловит рыбу, сам кушает, сам достает сачек. Ведет посчет количества выловленной рыбы. Делает перезабросы и т.д.
Пользователю остается следить чтобы была наживка и еда в наличии, ну и своевременно продавать рыбу.
Локация, пока только рыбхоз - карповая заводь.
Планирую дальше: минимизировать запросы от пользователя, сделать возможность боту самому пополнять запасы наживки и еды, а так же продавать выловленную рыбу. Плюс расширить места ловли (или сделать их универсальными)
[spoiler=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
[/spoiler]
версия 0.0
Решил попробовать написать простенький бот для такой незатейливой игры как Русская рыбалка.
Бот конечно получился под меня, т.к. координаты завязаны на абсолютные значения моего экрана. Впринципе любой кто немного соображает сможет перенастроить под себя перебив клики мышкой.
Если заморочиться то можно сделать бот с привязкой к окну, и вычислением координат от краев, но это если только делать не для себя а, например на продажу.
Итак. Бот сам ест, сам забрасывает донку, когда клюет он выуживает рыбу и достает ее сачком, далее заного проверяет не голодны ли вы и все по новой.
Я его сделал для ловли карпа на локации Рыбхоз. Карповая заводь.
за 1 час безостоновочной работы (пака я уехал на обед с работы) он выловил на 800к зачетного карпа. максимальный вес 36кг за шт.
Главное чтобы была наживка и еда в наличии и хорошая снасть.
С какими проблемами я столкнулся:
1) Бот категорически не хотел выполнять команду Send на домашнем компе (перелопатив форум понял что это скорее всего из-за системы, поэтому тупо сделал все на ноуте, на котором команда выполнялась отлично)
2) после вылва рыбы, закрытия окна с уловом, он категорически не хотел забрасывать удочку заново. Долго парился как это исправить (и привязку окна под курсором и просто прописывая номер активного окна, бот не закидывал удочку, а просто как-будто игнорировал эти строки. (исправил таким образом: в конце скрипта запускал другой скрипт, который просто переключит на рабочем столе окна, тыкнет на окно рыбалки и опять на окно юпилота, далее сам остановиться и запустит скрипт основной, а тот в свою очередь заного поймает окно рыбалки и все начинает работать.
вот собственно сам код. (с радостью приму предложения по оптимизации и конструктивную критику.)
[spoiler=скрипт основной]
Код
set #w windowfromcursor
set workwindow #w
//проверка еды
send_up f
:eda
get color #eda 196, 620 abs // надо всегда проверять место заброса
if #eda = 13032663 // цвет нет еды
move 340, 695 abs
left 340, 695 abs
wait 1s
move 854, 444 abs
left 854, 444 abs
wait 1s
left 916, 191 abs
move 916, 191 abs
wait 300
goto eda
else
wait random (1000)
end_if
wait random (400)
// начало ловли
move 757, 359 abs
set #w windowfromcursor
set workwindow #w
left 757, 359 abs
wait 1s
//send t // нажать t
wait random (1000)
// set $a 0 // для старта условного цикла нужна переменная $a с значением 0
:klev // цикл клева
get color #uda 725, 320 abs// надо всегда проверять место заброса
if #uda = 255 // цвет удочки в абс коорд
goto klev
else
send_down g
end_if
//начало выуживания
:leska
set #a #a + 1 //увеличение счетчика
if #a > 50
goto nachalo //перейти на метку
end_if
set #w windowfromcursor
set workwindow #w
get color #leska 648, 570 abs // цвет полосы лески
if #leska = 7117147 // цвет без нагрузки
send_up g
send_down h
wait 400
send_up h
send_down g
goto leska
else
goto ulov
end_if
//goto ulov
:palka
get color #palka 622, 555 abs // цвет полосы удочки
if #palka = 4356908 // цвет без нагрузки
send_up h
send_down g
send_down f
else
end_if
//проверка вылова
:ulov
send f
get color #ulov 443, 88 abs// цвет полосы окна
if #ulov = 1328284 // цвет окна
move 443, 88 abs
set #w windowfromcursor
set workwindow #w
send {Space}
wait random (1000)
//set workwindow 591816
else
goto leska
end_if
send_up f
wait random (1000)
:nachalo
start_script 2
end_script // завершиние работы скрипта закоментированно, поэтому работать код будет до ручного выключения
[/spoiler]