Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot в онлайн играх _ Создал Бот для Русской рыбалки

Автор: Strannik 4.8.2015, 13:37

Версия 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]

Автор: DarkMaster 4.8.2015, 13:55

Тему прилепил. Кодебоксы лучше заменить на код+спойлер.

Автор: Strannik 4.8.2015, 14:17

Цитата(DarkMaster @ 4.8.2015, 14:55) *

Тему прилепил. Кодебоксы лучше заменить на код+спойлер.

спасибо, сейчас исправлю.
Строго не судите, 1й скрипт в жизни написал, который работает biggrin.gif

Автор: Strannik 4.8.2015, 14:44

Скажите, а есть в юпилот возможность, чтобы скрипт запрашивал перед певрым забросом удочки ввод координат? допустим мы нажимаем старт скрипта, и выскакивает окно куда втавятся координаты после нажатия Ctrl+A. тогда если переделать приаязки кликов мыши не к абсолютным координатам а к краям окна, то можно сделать бот универсальный для любой локации, остается лишь достать удочку и указать место заброса.

Автор: cirus 4.8.2015, 15:07

http://uopilot.tati.pro/index.php?title=Prompt

Автор: DarkMaster 4.8.2015, 15:20

Цитата
Скажите, а есть в юпилот возможность, чтобы скрипт запрашивал перед певрым забросом удочки ввод координат? допустим мы нажимаем старт скрипта, и выскакивает окно куда втавятся координаты после нажатия Ctrl+A. тогда если переделать приаязки кликов мыши не к абсолютным координатам а к краям окна, то можно сделать бот универсальный для любой локации, остается лишь достать удочку и указать место заброса.

Можно чуть схитрить. Можно присвоить переменной рабочего окна wokwindow, скажем, -1 и ждать пока изменится значение этой переменной. Пользователь же нажмет ctrl+a в нужную точку и ее можно будет использовать непосредственно в скрипте.

Автор: Strannik 4.8.2015, 16:16

Цитата(cirus @ 4.8.2015, 16:07) *

http://uopilot.tati.pro/index.php?title=Prompt


интересная команда, спасибо.

эх, буду наверное завтра начинать писать нормальный красивый код для использования любым пользователем. А то в моем много оставшейся от черновой версии ненужных коментов и строк которые по факту не используются а пропускаются переходами.

Цитата(DarkMaster @ 4.8.2015, 16:20) *

Можно чуть схитрить. Можно присвоить переменной рабочего окна wokwindow, скажем, -1 и ждать пока изменится значение этой переменной. Пользователь же нажмет ctrl+a в нужную точку и ее можно будет использовать непосредственно в скрипте.


Кстати можно вначале сделать проверку на переменную wokwindow и если она как раз скажем -1 изначально то соответственно запросить prompt и указать точку заброса, там и окно подвяжется и точка заброса определится. Единственное надо продумать удобный способ в случае необходимости эту точку поменять не перезапуская пилот.

P.S. на данный момент за 2 часа работы бота я нафармил денег больше чем за 2 вечера игры) Надеюсь не забанят, хотя игра так себе, интересен скорее сам процесс написания бота, нежели игра.

Автор: DarkMaster 4.8.2015, 17:05

Цитата

Кстати можно вначале сделать проверку на переменную wokwindow и если она как раз скажем -1 изначально то соответственно запросить prompt и указать точку заброса

Я для такого запроса использовал вывод в лог. Тут есть пример:
http://forum.uokit.com/index.php?showtopic=26742

Автор: Strannik 5.8.2015, 15:52

Цитата(DarkMaster @ 4.8.2015, 18:05) *

Я для такого запроса использовал вывод в лог. Тут есть пример:
http://forum.uokit.com/index.php?showtopic=26742

Начинаю потихоньку въезжать в тему с окнами. теперь только понял почему бот работает в абсолютных координатах...
Собственно вопрос такой. Написал небольшой код для проверки уровня еды
Код

:eda
  set workwindow 395278 //окно полосок с едой
get color #eda 28, 77  //координаты голода
    if #eda = 13032663  // цвет голода
    set workwindow 5636428 //окно с котелком
       move 36, 64
       left 36, 64
       wait random (1000)+ 1000
    set workwindow 66808 //окно кнопки употребить
       move 854, 444 abs
       left 854, 444 abs
       wait  1s
       send {Space}  
       goto eda
     else      
    end_if        
end_script

Все работает, но только пока я не закрою игру, игру если открыть хендлы обновятся...
Соответственно хендлы я нашел через сканер. Как можно найти хендлы этих окон скриптом? Допустим я открыл игру, нажал ctrl+a в любом месте дальше бот работает... Почитал тему твою, я так понимаю там окна называться как-то должны(иметь текстовое название, у меня я так понимаю только родительское окно имеет его). Сканер пишет только хендлы, никакого текста в окнах нет. http://clip2net.com/s/3lJje2p

Автор: DarkMaster 5.8.2015, 15:55

http://forum.uokit.com/index.php?showtopic=26742
попробуйте.

Автор: Strannik 5.8.2015, 16:26

Цитата(DarkMaster @ 5.8.2015, 16:55) *

http://forum.uokit.com/index.php?showtopic=26742
попробуйте.

я не совсем понял итог этого скрипта. Он написал в переменные хендлы тех двух окон что я указал вначале?
Просто у меня получается игра состоит из множества окон, мне надо будет на каждое тогда Ctrl+A юзать?. Или я совсем не допонял....

Автор: DarkMaster 5.8.2015, 17:12

Итог - вам дан скрипт, который возвращает хендл того самого окошка без названия.

Автор: Strannik 5.8.2015, 19:13

Цитата(DarkMaster @ 5.8.2015, 17:12) *

Итог - вам дан скрипт, который возвращает хендл того самого окошка без названия.

Просто судя по скрипту, вы хендлы задаете сразу, а потом идет проверка действительно ли 2е окно дочернее?

У меня в игре все кнопки это отдельные окна. и в некоторых открываются меню. Всего я насчитал порядка 5ти нужных мне кнопок, но проблема в том что 2 из них нажимаются в всплывающем меню, которое если у пользователя запрашивать показать его c помощью Ctrl+A, при переходе на окно пилота - будет закрываться.

как раз для этого небольшого куска, который я приложил выше. этот способ и не подойдет т.к. там есть это злополучное меню с едой.
небольшой кусок для наглядности

Код

:eda
  set workwindow 395278 //окно полосок с едой
get color #eda 28, 77  //координаты голода
    if #eda = 13032663  // цвет голода
    set workwindow 5636428 //окно с котелком (меню всплывающее)
       move 36, 64
       left 36, 64
       wait random (1000)+ 1000
    set workwindow 66808 //окно кнопки употребить (внутри всплывающего меню)
       move 854, 444 abs
       left 854, 444 abs
       wait  1s
       send {Space}  
       goto eda
     else      
    end_if        
end_script



есть мысли как это обойти? Вот скрины с действиями в них очень наглядно показано чего я добиваюсь.
http://clip2net.com/s/3lJZfjW
далее http://c2n.me/3lJZQyd

Может так сделать? навести мышь билзко к котелку в окне с бегунками здоровья, далее считать абсолютные координаты мыши? (если так можно) далее прибавить к этим координатам координаты чтобы сместиться гарантировано на нужную кнопку, потом считать хендл окна под курсором... и т.д. получается мы работаем в абсолютных координатах, но не привязаны к положению окна.

Автор: Strannik 5.8.2015, 19:30

get mouse_pos <переменнаяX> <переменнаяY> [abs] нашел) завтра опробую.

Автор: cirus 6.8.2015, 2:05

Цитата
есть мысли как это обойти?

http://uopilot.tati.pro/index.php?title=WindowFromCursor
Или можно искать кнопки с помощью Findimage и делать клик по найденным координатам.
Цитата
Скажите, а есть в юпилот возможность, чтобы скрипт запрашивал перед певрым забросом удочки ввод координат?

Для координат можно использовать такой вариант:
Код
init_arr %a (1) prompt()
log %a [1 1]
log %a [1 2]
stop_script

Автор: DarkMaster 6.8.2015, 5:50

Цитата
Для координат можно использовать такой вариант:

Насколько я понимаю, то имеется ввиду произвольная точка. Поэтому ctrl+a и дальше используем defx и defy.

Автор: Strannik 6.8.2015, 19:53

Спасибо за помощь, хорошо что есть форум. Использую вот этот кусок для пошагового запроса от пользователя всех кнопок перед началом работы бота, удобно получается.

Код

// запрос места ловли (сразу узнаем и хендл окна и координаты точки заброса
set workwindow 0
showwindow #handlePilot
log Укажите место ловли (Ctrl+A)
while workwindow = 0
      wait 100
      showwindow #handlePilot
end_while
set #zabrosHANDLE workwindow
get mouse_pos #zabrosX #zabrosY
// и т.д. пошагово

По идее в итоге должно получится что пользователь задаст все кнопки а потом скрипт будет проверять заданы они или нет и работать постоянно. Отальные параметры дело техники. на след неделе попробую закончить рабочую версию.

Автор: DarkMaster 6.8.2015, 21:54

Цитата
get mouse_pos #zabrosX #zabrosY

Можно убрать и использовать defx и defy зарезервированные переменные. Они содержат в себе координаты, которые забирались по ctrl+a. Т.е. имхо более корректно будет заменить на:
Код
set #zabrosX defX
set #zabrosY defY

Автор: Strannik 10.8.2015, 15:22

Цитата(DarkMaster @ 6.8.2015, 21:54) *

Можно убрать и использовать defx и defy зарезервированные переменные. Они содержат в себе координаты, которые забирались по ctrl+a. Т.е. имхо более корректно будет заменить на:
Код
set #zabrosX defX
set #zabrosY defY


Спасибо за пример, принял к исправлению. Почти закончил неплохой вариант скрипта, осталось концовку подправить. Хочу вообще уйти от абсолютных координат, а для этого надоа обойти проблему: когда рыба выловлена у меня выскакивает окно. по сути его надо обнаружить, закрыть и начать скрипт снова. Как определить выскочило окно или еще нет. раньше я распознавал цвет в точке где выскакивает это окно, но тогда использовал абсолютные координаты. Как еще можно это сделать? может чтото типа showwindow?

Автор: DarkMaster 10.8.2015, 17:22

Цитата
Как еще можно это сделать?

findimage
http://uopilot.tati.pro/index.php?title=Findimage

Автор: Strannik 10.8.2015, 23:35

Цитата(DarkMaster @ 10.8.2015, 17:22) *

findimage
http://uopilot.tati.pro/index.php?title=Findimage

Обошел немного другим способом. Просто проверил на месте заброса какое окно под мышкой, соответственно если не окно где рыба ловится, значит это как раз то окно которое выскакивает, а оно в отличае от других имеет свое текстовое название. с помощью findwindow () сделал.
Практически все готово к выпуску версии 2.0 так сказать, для любого пользователся. Есть один момент. Хочу начало работы немного упростить. Для работы бота надо чтобы в юпилот загрузил пользователь 4 скрипта. Их нельзя как то все вместе сразу загрузить с присвоенными им номерами? или надо вручную по отдельности каждый?.

Автор: DarkMaster 10.8.2015, 23:59

https://forum.uokit.com/index.php?showtopic=20548
там есть про запуск пилота с ключами. Так же есть команда load_script.
От себя хотелось бы порекомендовать по возможности не использовать кучу вкладок, если их работа пересекается либо используются старт/стопы скриптов.

Автор: Strannik 11.8.2015, 11:12

Цитата(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

Готова версия 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)

Далее так же планирую привязать их к окну пилота, чтобы при запуске пилота сразу подгружались эти скрипты.

Автор: cirus 12.8.2015, 2:16

Код
get color #palka 18, 7       // цвет полосы лески
        if #palka = 4488494          // цвет без нагрузки

get color тут по сути не нужен, можно заменить на:
Код
if 18, 7 4488494

В начало скриптов лучше сразу добавить нужную задержку между строк.
Код
set linedelay 1  //установить задержку в 1 мсек.

Автор: Strannik 12.8.2015, 20:20

Цитата(cirus @ 12.8.2015, 2:16) *

Код
get color #palka 18, 7       // цвет полосы лески
        if #palka = 4488494          // цвет без нагрузки

get color тут по сути не нужен, можно заменить на:
Код
if 18, 7 4488494

В начало скриптов лучше сразу добавить нужную задержку между строк.
Код
set linedelay 1  //установить задержку в 1 мсек.


Спасибо. Обязательно учту. Понял как привязывать окна к родительскому. Буду оптимизировать скрипт... видимо этот процесс бесконечный)

Автор: Strannik 12.8.2015, 21:07

Версия 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, 10:47

ребят подскажите как лучше выдергивать цифры из текста в окне. например в окне есть текст состоящий из 2х строк:
Рыб в садке: 27 / 300
Общий вес: 176,397 кг

Надо 27 выдернуть.

Наверняка у ког-то быстрые наработки есть.

Автор: DarkMaster 13.8.2015, 10:51

Текст картинка или можно выделить мышкой?

Автор: Strannik 13.8.2015, 11:12

Цитата(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



вроде норм работает)

Автор: DarkMaster 13.8.2015, 11:30

такой вариант я вижу первый раз smile.gif

Автор: cirus 13.8.2015, 12:09

Можно всё упростить:

Код
set $kolvo Рыб в садке: 27 / 300
init_arr %a (1) $kolvo
log Вы наловили уже %a [1 4] рыбы!
stop_script

Автор: Strannik 13.8.2015, 12:29

Цитата(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, 12:47

Блин, дерево окон тоже как и хендлы обновляется после перезапуска клиента. Получется способ который я применил не подходит( (а он был так хорош). Придется видимо возвращатся к кликам мышкой, и запросам от пользователя...

Автор: DarkMaster 13.8.2015, 16:01

можно проходится по дереву окон и искать какой-то общий признак. Например, если в заголовке окна есть "/", значит - это наше окно. Так же можно под поиск использовать регекспы, что очень сильно облегчит создание шаблона с которым надо сравнивать окна.

Автор: Strannik 13.8.2015, 16:08

Цитата(DarkMaster @ 13.8.2015, 16:01) *

использовать регекспы

что за регекспы?

Автор: Strannik 13.8.2015, 16:59

придумал такой вариант. с помощью готового скрипта нахожу положение в дереве и хендл нужного окна на данные момент.

Код

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 условия вводить. и автоматизировать... задачка.

Автор: DarkMaster 13.8.2015, 17:23

ищи не по размеру, а по тексту. Есть же какой-то шаблон, например, 1-3 цифры, потом "/", еще сколько-то цифр, пробел и слово "тапок". По такому шаблону можно достаточно уверенно определить окно.
Регекспы: http://www.shtogrin.com/library/web/pcre/doc/pcre/

Автор: Strannik 13.8.2015, 18:55

Цитата(DarkMaster @ 13.8.2015, 17:23) *

ищи не по размеру, а по тексту. Есть же какой-то шаблон, например, 1-3 цифры, потом "/", еще сколько-то цифр, пробел и слово "тапок". По такому шаблону можно достаточно уверенно определить окно.
Регекспы: http://www.shtogrin.com/library/web/pcre/doc/pcre/

там окно с названием только родительское, остальные являются только кнопками без названий окна.

Автор: DarkMaster 13.8.2015, 22:04

тогда ничего не понял.

Цитата
set $kolvo getwindowtext (#kolvo) // в этой переменной нужный нам текст :

Это же выдергивает именно название окна. И в нем вроде как раз нужное содержится. Почему не сделать перебор по названиям? Ну пустые другие - пропустить.

Автор: Strannik 13.8.2015, 23:33

Клиент игры там состоит из кучи окон, одни есть с названиями, такие как количество рыбы и т.д, другие являются просто кнопками без названий, у них есть только хендлы ну и размеры, и они постоянно меняются в дереве окон при перезагрузке клиента. Причем с названиями всего окна 3, а без названий гораздо больше. Мне для работы бота соответственно нужно определить хендлы порядка 10ти таких окон без названий. Вот пример http://c2n.me/3m6Od0E на скрине видно что текста окна нет. Есть максимум класс окна.

Автор: DarkMaster 14.8.2015, 10:04

речь шла про конкретное окно с цифрами, для него данный метод подходит.
По поводу остальных увидеть бы дерево окон. В виндов сканере есть кнопочка соответствующая.

Автор: Strannik 14.8.2015, 11:00

Вот дерево окон
http://clip2net.com/s/3m7tnaY

Автор: DarkMaster 14.8.2015, 11:03

а в полностью раскрытом виде ветку можно?

Автор: Strannik 14.8.2015, 12:40

Цитата(DarkMaster @ 14.8.2015, 11:03) *

а в полностью раскрытом виде ветку можно?

http://clip2net.com/s/3m7OwTs
http://clip2net.com/s/3m7PQdl
http://clip2net.com/s/3m7Qxhw

могу в текстовике там сохранить через сканнер


текстовик все окна клиена с дочерними

Код


+[66406] Рыболовная база Озеро {WindowsForms10.Window.8.app.0.378734a}
  •[66410] {WindowsForms10.Window.8.app.0.378734a}
  •[66412] {WindowsForms10.Window.8.app.0.378734a}
  +[66414] {WindowsForms10.Window.8.app.0.378734a}
   •[66416] {WindowsForms10.Window.8.app.0.378734a}
   •[66418] {WindowsForms10.Window.8.app.0.378734a}
   •[66420] {WindowsForms10.Window.8.app.0.378734a}
   •[66422] {WindowsForms10.Window.8.app.0.378734a}
   •[66424] {WindowsForms10.STATIC.app.0.378734a}
   •[66426] {WindowsForms10.STATIC.app.0.378734a}
   •[66428] {WindowsForms10.STATIC.app.0.378734a}
   +[66914] {WindowsForms10.Window.8.app.0.378734a}
    +[66916] {WindowsForms10.SysListView32.app.0.378734a}
     •[66918] {SysHeader32}
    •[132458] {WindowsForms10.STATIC.app.0.378734a}
   •[66430] {WindowsForms10.Window.8.app.0.378734a}
   •[66432] {WindowsForms10.Window.8.app.0.378734a}
   •[66434] {WindowsForms10.Window.8.app.0.378734a}
   •[66436] {WindowsForms10.STATIC.app.0.378734a}
   •[66438] {WindowsForms10.STATIC.app.0.378734a}
   •[66440] {WindowsForms10.STATIC.app.0.378734a}
   •[66442] {WindowsForms10.Window.8.app.0.378734a}
   •[66444] {WindowsForms10.STATIC.app.0.378734a}
   •[66446] {WindowsForms10.Window.8.app.0.378734a}
   •[66448] {WindowsForms10.STATIC.app.0.378734a}
   •[66450] {WindowsForms10.Window.8.app.0.378734a}
   •[66452] {WindowsForms10.Window.8.app.0.378734a}
   •[66454] {WindowsForms10.STATIC.app.0.378734a}
   •[66456] {WindowsForms10.Window.8.app.0.378734a}
   •[66458] {WindowsForms10.STATIC.app.0.378734a}
   •[66460] {WindowsForms10.Window.8.app.0.378734a}
   •[66462] {WindowsForms10.STATIC.app.0.378734a}
   •[66464] {WindowsForms10.Window.8.app.0.378734a}
   •[66466] {WindowsForms10.Window.8.app.0.378734a}
   •[66468] {WindowsForms10.Window.8.app.0.378734a}
   •[66470] {WindowsForms10.Window.8.app.0.378734a}
   •[66472] {WindowsForms10.Window.8.app.0.378734a}
   •[66474] {WindowsForms10.Window.8.app.0.378734a}
   •[66476] {WindowsForms10.Window.8.app.0.378734a}
   •[66478] {WindowsForms10.Window.8.app.0.378734a}
   •[66480] {WindowsForms10.Window.8.app.0.378734a}
   •[66482] {WindowsForms10.Window.8.app.0.378734a}
   •[66484] {WindowsForms10.Window.8.app.0.378734a}
  •[66486] {WindowsForms10.Window.8.app.0.378734a}
  •[66488] {WindowsForms10.STATIC.app.0.378734a}
  •[66490] {WindowsForms10.Window.8.app.0.378734a}
  •[66492] {WindowsForms10.Window.8.app.0.378734a}
  •[66494] {WindowsForms10.Window.8.app.0.378734a}
  +[66496] {WindowsForms10.Window.8.app.0.378734a}
   •[66498] {WindowsForms10.STATIC.app.0.378734a}
   •[66500] 4 510 545 руб. {WindowsForms10.STATIC.app.0.378734a}
   •[66502] Время: {WindowsForms10.STATIC.app.0.378734a}
   •[66504] 02:40 СР {WindowsForms10.STATIC.app.0.378734a}
   •[66506] Деньги: {WindowsForms10.STATIC.app.0.378734a}
  +[66938] {WindowsForms10.Window.8.app.0.378734a}
   •[66940] Пополнить счет {WindowsForms10.STATIC.app.0.378734a}
   •[66942] время МСК: 10:49 {WindowsForms10.STATIC.app.0.378734a}
   •[66944] {WindowsForms10.STATIC.app.0.378734a}
   •[66946] Форум Русской Рыбалки {WindowsForms10.STATIC.app.0.378734a}
   •[66948] Оплачено 33 дн. {WindowsForms10.STATIC.app.0.378734a}
   •[66950] Желаем вам приятной игры и отличного клева! Ответы на любые вопросы вы можете найти на нашем форуме. {WindowsForms10.STATIC.app.0.378734a}
   •[66952] Добрый день strrrannik11 {WindowsForms10.STATIC.app.0.378734a}
   •[66954] Второй {WindowsForms10.STATIC.app.0.378734a}
  +[66508] {WindowsForms10.Window.8.app.0.378734a}
   +[66510] {WindowsForms10.Window.8.app.0.378734a}
    •[66512] {WindowsForms10.Window.8.app.0.378734a}
    •[66514] Label1 {WindowsForms10.STATIC.app.0.378734a}
    •[66516] {WindowsForms10.STATIC.app.0.378734a}
    •[66518] {WindowsForms10.STATIC.app.0.378734a}
   +[66930] {WindowsForms10.Window.8.app.0.378734a}
    •[66932] Продлить на день {WindowsForms10.STATIC.app.0.378734a}
    •[66934] Через час вас отправят на озеро. {WindowsForms10.STATIC.app.0.378734a}
    •[66936] Закончилась путевка {WindowsForms10.STATIC.app.0.378734a}
   •[132494] михась65 вышел {WindowsForms10.STATIC.app.0.378734a}
   +[66520] {WindowsForms10.Window.8.app.0.378734a}
    •[66522] {WindowsForms10.Window.8.app.0.378734a}
    •[66524] {WindowsForms10.Window.8.app.0.378734a}
    •[66526] {WindowsForms10.Window.8.app.0.378734a}
    •[66528] {WindowsForms10.Window.8.app.0.378734a}
    •[66530] {WindowsForms10.Window.8.app.0.378734a}
    •[66532] {WindowsForms10.Window.8.app.0.378734a}
    •[66534] {WindowsForms10.Window.8.app.0.378734a}
    •[66536] {WindowsForms10.Window.8.app.0.378734a}
    •[66538] {WindowsForms10.Window.8.app.0.378734a}
    •[66540] {WindowsForms10.Window.8.app.0.378734a}
    •[66542] {WindowsForms10.Window.8.app.0.378734a}
    •[66544] {WindowsForms10.Window.8.app.0.378734a}
  +[66546] {WindowsForms10.Window.8.app.0.378734a}
   •[66548] {WindowsForms10.STATIC.app.0.378734a}
   •[66550] {WindowsForms10.STATIC.app.0.378734a}
   •[66552] {WindowsForms10.STATIC.app.0.378734a}
   •[66554] {WindowsForms10.Window.8.app.0.378734a}
   •[66556] {WindowsForms10.Window.8.app.0.378734a}
   •[66558] {WindowsForms10.STATIC.app.0.378734a}
   •[66560] Осталось путевки: не ограничено??Стоимость дня: 0 руб.??Рыбаков на базе: 28 {WindowsForms10.STATIC.app.0.378734a}
   •[66562] {WindowsForms10.Window.8.app.0.378734a}
   •[66564] {WindowsForms10.STATIC.app.0.378734a}
   •[66566] {WindowsForms10.STATIC.app.0.378734a}
   •[66568] Продлить путевку {WindowsForms10.STATIC.app.0.378734a}
   •[66570] Озеро. Рыболовная база {WindowsForms10.STATIC.app.0.378734a}
   •[66572] {WindowsForms10.STATIC.app.0.378734a}



Автор: DarkMaster 14.8.2015, 19:32

Мусора жесть. В общем есть такая идея. Есть у нас некотрое дочернее окно которое необходимо найти. Можно попробовать к сочетанию координат добавить еще условие, что родительское окно имеет, например, 5 дочерних, если это не так, то наша ветка другая.

Можно еще через findimage в паре с windowfrompoint подергать хэндлы, но имхо это уже не так хорошо. Не люблю я таскать рисунки, да и при финдимидже уже не очень понятной становится необходимость хендлов. По хендлам работа - это шикарно имхо.

Автор: Strannik 17.8.2015, 8:55

Цитата(DarkMaster @ 14.8.2015, 19:32) *

Мусора жесть. В общем есть такая идея. Есть у нас некотрое дочернее окно которое необходимо найти. Можно попробовать к сочетанию координат добавить еще условие, что родительское окно имеет, например, 5 дочерних, если это не так, то наша ветка другая.

Можно еще через findimage в паре с windowfrompoint подергать хэндлы, но имхо это уже не так хорошо. Не люблю я таскать рисунки, да и при финдимидже уже не очень понятной становится необходимость хендлов. По хендлам работа - это шикарно имхо.

Ну я буду выходить на хендлы по любому, т.к. на них надо выйти только вначале скрипта, дальше все закрутится и этот пункт просто будет пропускаться если хендлы нам известны. Рассматриваю пока 3 варианта.
1) попробовать вариант выше с размерами и количеством, но как оказалось есть и по 2 окна с одинаковыми размерами, немного но есть. (поэтому для них придется как минимум отдельный способ выдергивания подбирать)
2) искать хенлы через windowfromcursor зная координаты всех окон, можно считать координату родительского окна и далее пройтись по всем окнам. (в игре нет возможности менять размеры окон, и если пользователь после запуска клиета их не передвинет то будет работать. но если сдвинет соответственно ничего не получится)
3) findimage но чтото он работает через раз... надо цикл создавать, чтобы пока не найдет не выходил, но тогда есть шанс что он так и ненайдет получается.

P.S. возможно ли считать текущий статус окна (top, restore и т.д.?) и если да, то как его можно внести в переменную, чтобы например задать условие - если такое то окно видимо то мы делаем тото, если нет то игнор.

Автор: DarkMaster 17.8.2015, 10:23

Цитата
P.S. возможно ли считать текущий статус окна (top, restore и т.д.?) и если да, то как его можно внести в переменную, чтобы например задать условие - если такое то окно видимо то мы делаем тото, если нет то игнор.

Была где-то утилитка Zeleax'a. Надо искать. Когда-то очень пригодилась.
Цитата
3) findimage но чтото он работает через раз... надо цикл создавать, чтобы пока не найдет не выходил, но тогда есть шанс что он так и ненайдет получается.

С каким процентом точности идет поиск? Кнопки подсвечиваются при наведении?

Автор: DarkMaster 17.8.2015, 10:47

А через windowScanner окно именно скрытое? Просто оно может быть перекрыто, а статус иметь видимого.

Автор: cirus 17.8.2015, 13:34

Цитата
Была где-то утилитка Zeleax'a. Надо искать. Когда-то очень пригодилась.

https://forum.uokit.com/index.php?showtopic=21386

Автор: DarkMaster 17.8.2015, 16:54

Попробуй. В качестве параметра не принимает пока ничего, работает с рабочим окном.
Dll'ку закинуть рядом с exe пилота в папку Plugins.

Код
set #a WindowStatus.minimized (fvvfds )
log минимизировано: #a
set #a WindowStatus.maximized (hdf)
log максимизировано: #a
set #a WindowStatus.visible (hdf)
log видимое: #a
set #a WindowStatus.enabled (hdf)
log доступно: #a
set #a WindowStatus.top (hdf)
log на переднем плане: #a
set #a WindowStatus.topParent (hdf)
log врехнее родительское: #a


Совсем забыл. Все функции возвращают:
-1 - хендл кривой.
0 - ложь.
1 - истина.


Прикрепленные файлы
Прикрепленный файл  WindowStatus.zip ( 9,97 килобайт ) Кол-во скачиваний: 2070

Автор: Strannik 18.8.2015, 12:31

Спасибо за советы, никак не добраться до компа было. Сегодня постараюсь отписать что получилось.

Автор: Strannik 18.8.2015, 12:57

Цитата(DarkMaster @ 17.8.2015, 10:23) *


С каким процентом точности идет поиск? Кнопки подсвечиваются при наведении?

А через windowScanner окно именно скрытое? Просто оно может быть перекрыто, а статус иметь видимого.


Процент по умолчанию, кнопки подсвечиваются, взял картинку меньше (не попадая на подсвеченные края) , стал искать лучше.

Окно невидимое по сканеру, а когда выскакиевает у него появляется статус видимого.

Еще когда в папку закинул Dll пилот выдал такое
14:00:09 : Error loading plugin: WindowStatus.dll. Load failed.

Автор: DarkMaster 18.8.2015, 13:22

Цитата
14:00:09 : Error loading plugin: WindowStatus.dll. Load failed.

А вот это уже странно. Версия пилота какая?

Автор: cirus 18.8.2015, 13:34

Перед этим выскакивает что запуск не возможен, т. к. отсутствует файл MSVCR120D.dll. Хотя файл есть. И все visial C++ установлены.

Автор: DarkMaster 18.8.2015, 13:49

Возможно установлена нижняя версия редистов.
Попробуй эту версию.

И эту затестить на запуск. Тут использованы либы для работы с XP.


Прикрепленные файлы
Прикрепленный файл  WindowStatus.zip ( 10,87 килобайт ) Кол-во скачиваний: 1737
Прикрепленный файл  WindowStatus_120_xp.zip ( 10,83 килобайт ) Кол-во скачиваний: 1725

Автор: cirus 18.8.2015, 14:01

Цитата
Возможно установлена нижняя версия редистов.

visial установлены все 2005-2015.
Цитата
Попробуй эту версию.

Тоже самое пишет что нет файла.

Автор: DarkMaster 18.8.2015, 14:03

а которая xp?

Автор: cirus 18.8.2015, 14:58

Цитата
а которая xp?

Тоже самое выдает. И на втором компе также. На обоих win 7 64.

Автор: Strannik 18.8.2015, 17:21

Сделал все через windowfromcursor получился неплохой бот. Главное чтобы не перекрыто окно игры было пилотом или еще чем либо.

По сути все работает. надо теперь расширять места рыбалки. И сделать запрос места рыбалки от пользователся.

Автор: DarkMaster 18.8.2015, 17:36

Цитата
visial установлены все 2005-2015.

Все?) А имя дллочки то какое? Сборки то debug biggrin.gif
Цитата
Сделал все через windowfromcursor получился неплохой бот. Главное чтобы не перекрыто окно игры было пилотом или еще чем либо.

По сути все работает.

Все равно допилю дллку smile.gif Возможно пригодится. Есть теория, что может получится выдрать значение видно ли на экране определенный хендл и координаты, где его видно.

Автор: Strannik 19.8.2015, 9:55

Цитата(DarkMaster @ 18.8.2015, 17:36) *

Все?) А имя дллочки то какое? Сборки то debug biggrin.gif

Все равно допилю дллку smile.gif Возможно пригодится. Есть теория, что может получится выдрать значение видно ли на экране определенный хендл и координаты, где его видно.

Отлично, а я потом попробую на своем скрипте это применить, для меня это учень актуально т.к. в моем случае я таким способом увижу самый важный результат - рыба выловлена или нет. А пока мне приходится совсем захватывать мышь у пользователся на всю работу скрипта (т.к. она отслеживает появилось это окно под курсором или нет.)

Кстати дайте набросок такого типа:
есть переменные
#a
#b
#c
мы спращиваем пользователя: что будем использовать #a #b или #c? и далее его ответ вставляем в переменную #d и скрипт продолжает работать. Типа всплывающее окно с выбором из списка
#d

Автор: cirus 19.8.2015, 11:23

код
Код
set #a 10
set #b 20
set #c 30
set %a [1] #a
set %a [2] #b
set %a [3] #c
set #z prompt (#a #b #c)
set #d %a [#z]
log #d
stop_script

Автор: Strannik 19.8.2015, 13:39

сделал в боте возможность просмотра результата продажи рыбы. И решил для удобства сделать чтобы в логе суммировалось сколько уже денег заработано. Т.к. в окне где изначально выскакивает много текста о продаже надо было выдернуть одну цифру, а она еще вдобавок и с разделителями подается (например 111 234 154 руб.), долго соображал как сделать. В итоге получился такой вот интересный фрагмент:

выдергиваем цифры из текстовой переменной.

Код

//Блок информации сколько всего заработано денег за время работы скрипта
init_arr %a (1) $sellinfo  
// ищем положение слова "сумме:" в массиве, причем оно повторяется и поэтому мы ищем с конца, нам необходимо последнее.
set #i 999
set $summa сумме:  // левое от числа слово
set linedelay 0
:проверка
set $проверка  %a [1 #i]
if_not     $summa = $проверка
      set #i #i - 1
      goto проверка
end_if  
// теперь ищем положение слова руб. оно вообще там часто повторяется, но т.к. нам известно предыдущее слово, мы ищем вперед от него.
set #r #i
set $руб руб. // правое от числа слово
:проверка2
set $проверка  %a [1 #r]
if_not     $руб = $проверка
      set #r #r + 1
      goto проверка2
end_if
//теперь составляем массив из всех цифр которые есть между этими словами
set  #r #r -1
while_not  #i = #r
     set  #i #i + 1

set  $summ $summ  %a [1 #i]
end_while
log $summ
init_arr %b (1) $summ  
set $summa  %b [1]
// теперь суммируем найденное число к предыдущему, и у нас ведется суммирование в течении всего действия скрипта.
set  #summa  #summa + $summa
log  Всего заработаноденег: #summa руб.
send {Space}
set  $summa //обнуляем текстовую переменную
set $summ //обнуляем текстовую переменную
set linedelay 1
else
log Всего заработаноденег: #summa руб.
end_if


Автор: cirus 19.8.2015, 14:41

Цитата
Т.к. в окне где изначально выскакивает много текста о продаже надо было выдернуть одну цифру, а она еще вдобавок и с разделителями подается (например 111 234 154 руб.)

Если в строке только одно нужное число то можно так:
string_digits(str) - Возвращает строку str, выбрасывая из неё все буквенные символы.

Автор: Strannik 19.8.2015, 14:45

Забанили) Видать нестоит меню обходить) продавал рыбу неуходя на базу с места ловли.

Автор: DarkMaster 19.8.2015, 18:32

Перманент или на время? Продолжение банкета будет? smile.gif

Автор: Strannik 21.8.2015, 10:11

Цитата(DarkMaster @ 19.8.2015, 18:32) *

Перманент или на время? Продолжение банкета будет? smile.gif

Забанили на время, но я же сразу новый акк создал) так что норм. Исправил код чтобы меньше палиться, и не обходить окна которые нельзя обойти обычным способом играя без скриптов.

Автор: саныч 161 14.10.2015, 12:16

У меня ошибка когда рыбка клюнула http://prntscr.com/8r53wy

Автор: cirus 14.10.2015, 13:38

Попробуйте заменить #LeskaW.4 и #udaW.4 на #LeskaW.0 и #udaW.0

Автор: саныч 161 14.10.2015, 14:00

Цитата(cirus @ 14.10.2015, 13:38) *

Попробуйте заменить #LeskaW.4 и #udaW.4 на #LeskaW.0 и #udaW.0

ошибка перестала высвечиваться ,но рыба не тянется,и почему-то он не кушает http://prntscr.com/8r5vyl и так бесконечно пока сам не покушаю!

Автор: cirus 14.10.2015, 14:28

Автору скрипта напишите в личку, может ответит. Или попробуйте первые версии скрипта.

Автор: саныч 161 14.10.2015, 14:33

Цитата(cirus @ 14.10.2015, 14:28) *

Автору скрипта напишите в личку, может ответит. Или попробуйте первые версии скрипта.

ладно,спасибо,написал!
пробывал без результатно!

Автор: DarkMaster 14.10.2015, 14:39

у вас не запущен скрипт в 4 вкладке. Скрипт ссылается на переменную в 4 вкладке, а т.к. скрипт не запущен(либо переменная не существует), то происходит данная ошибка.

Автор: саныч 161 14.10.2015, 15:02

Цитата(DarkMaster @ 14.10.2015, 14:39) *

у вас не запущен скрипт в 4 вкладке. Скрипт ссылается на переменную в 4 вкладке, а т.к. скрипт не запущен(либо переменная не существует), то происходит данная ошибка.

хм...по сути 3 вкладки же!

Цитата(DarkMaster @ 14.10.2015, 14:39) *

у вас не запущен скрипт в 4 вкладке. Скрипт ссылается на переменную в 4 вкладке, а т.к. скрипт не запущен(либо переменная не существует), то происходит данная ошибка.

что открыть нужно в 4 вкладке??

Автор: DarkMaster 14.10.2015, 15:07

вообще он пытается оттуда считать рабочее окно. У меня есть подозрение, что вы запускаете не тот скрипт. Точнее устаревшую версию, т.к. в новой уже красиво сделан поиск окон. Чтобы не было вылета достаточно привязать 4 вкладку и поставить ее на паузу.

чуть обманул. В 4 вкладке должна быть переменная #udaW в которой содержится хендл окна. В простейшем случае это:
set #udaW workwindow
это запомнит в переменную хендл рабочего окна.

Автор: саныч 161 14.10.2015, 15:10

Цитата(DarkMaster @ 14.10.2015, 15:07) *

вообще он пытается оттуда считать рабочее окно. У меня есть подозрение, что вы запускаете не тот скрипт. Точнее устаревшую версию, т.к. в новой уже красиво сделан поиск окон. Чтобы не было вылета достаточно привязать 4 вкладку и поставить ее на паузу.

чуть обманул. В 4 вкладке должна быть переменная #udaW в которой содержится хендл окна. В простейшем случае это:
set #udaW workwindow
это запомнит в переменную хендл рабочего окна.

запускаю версию скрипта 2.0 от автора данного скрипта!
в 1 вкладке основной код,во второй -леска,в-третей палка,а в 4 нужно "set #udaW workwindow" это поставить?

Автор: cirus 14.10.2015, 15:28

Цитата
Точнее устаревшую версию, т.к. в новой уже красиво сделан поиск окон.

Если я правильно помню, то поиск не работал, т. к. положения окон после перезапуска менялось.

Автор: саныч 161 14.10.2015, 15:31

Цитата(cirus @ 14.10.2015, 15:28) *

Если я правильно помню, то поиск не работал, т. к. положения окон после перезапуска менялось.

пробывал версию 1 ,все работает,но как только рыба клюнула он зажимает H и полоса лески полностью доходит до конца и рыба срывается!

Автор: DarkMaster 14.10.2015, 16:31

а что должен делать?

Автор: саныч 161 14.10.2015, 19:30

Цитата(DarkMaster @ 14.10.2015, 16:31) *

а что должен делать?

Спасибо,уже исправил!
а должен он делать так что бы шкала не доходила до конца,в этом смысле вылова рыбы в игре!

Автор: саныч 161 15.10.2015, 9:22

А как идёт проверка поклёвки,по кончику удочки или по месту заброса???

Автор: cirus 15.10.2015, 11:34

Цитата
А как идёт проверка поклёвки,по кончику удочки или по месту заброса???

Если это оно, то видимо по удочке.
:klev // цикл клева
get color #uda #fiderX, #fiderY// надо всегда проверять место заброса
if #uda = 255 // цвет удочки

Автор: саныч 161 15.10.2015, 23:38

Цитата(cirus @ 15.10.2015, 11:34) *

Если это оно, то видимо по удочке.
:klev // цикл клева
get color #uda #fiderX, #fiderY// надо всегда проверять место заброса
if #uda = 255 // цвет удочки

Спасибо это я видел ,ну суть в том что срабатывает в 1 точке заброса,значит наверное не по удочке!

Автор: саныч 161 21.10.2015, 18:50

помогите сделать бота на спининг и как бы под исправить этого бота что бы можно ловить было везде!

Автор: DarkMaster 22.10.2015, 0:55

Пишите, спрашивайте - поможем.

Автор: саныч 161 22.10.2015, 15:58

Цитата(DarkMaster @ 22.10.2015, 0:55) *

Пишите, спрашивайте - поможем.


Если это оно, то видимо по удочке.
:klev // цикл клева
get color #uda #fiderX, #fiderY// надо всегда проверять место заброса
if #uda = 255 // цвет удочки

вот #uda= 255 цвет кончика удочки
а вот тут я не пойму что тут за координаты ,т.е это получается от точки заброса отнимаю 32 по оси х и 44 по оси у,верно?
set #fiderX #carpX - 32 //дельта места заброса и конца фидера на карпа
set #fiderY #carpY - 44

Автор: DarkMaster 23.10.2015, 2:04

Здесь просчитывается смещение координат относительно фидера. Т.е. на указанном расстоянии находится нужный в дальнейшем объект. Если в 2 словах, то да, вы поняли правильно.

Автор: саныч 161 23.10.2015, 9:58

[quote name='DarkMaster' date='23.10.2015, 2:04' post='216559']
Здесь просчитывается смещение координат относительно фидера. Т.е. на указанном расстоянии находится нужный в дальнейшем объект. Если в 2 словах, то да, вы поняли правильно.
[/quote
спасибо уже разобрался, бот наловил за ночь на 7 мил сома))
Спасибо тебе огромное!!

Автор: саныч 161 23.10.2015, 11:08

repeat 10
set workwindow #LeskaW.0
send_down g
if 434, 257 255
send_up g
goto ulov
end_if
end_repeat
goto eda

хотел сделать бот на спининг,но получилось всего 1 протяжка,после этого пишет"send_down - exceeded the number of keystrokes"
вот так

Автор: cirus 23.10.2015, 12:06

Цитата
после этого пишет"send_down - exceeded the number of keystrokes"

Прежде чем снова зажимать клавишу, надо её сначала отжать. У вас получается она отжимается только если был найден нужный цвет. Если не найден, то она остаётся зажатой.

Автор: саныч 161 23.10.2015, 15:31

Цитата(cirus @ 23.10.2015, 12:06) *

Прежде чем снова зажимать клавишу, надо её сначала отжать. У вас получается она отжимается только если был найден нужный цвет. Если не найден, то она остаётся зажатой.

ой ой,как же я мог спутать команды!

Автор: саныч 161 23.10.2015, 17:19

Цитата(cirus @ 23.10.2015, 12:06) *

Прежде чем снова зажимать клавишу, надо её сначала отжать. У вас получается она отжимается только если был найден нужный цвет. Если не найден, то она остаётся зажатой.


хотя send_down это зажать кнопку

Автор: DarkMaster 23.10.2015, 17:27

ну так а отжать то где? зажим идет каждый раз, а отжимает только в условии. Это не есть правильно.

Автор: саныч 161 23.10.2015, 17:34

Цитата(DarkMaster @ 23.10.2015, 17:27) *

ну так а отжать то где? зажим идет каждый раз, а отжимает только в условии. Это не есть правильно.

ну так мне нужно что бы он зажал кнопку G,пока либо не клюнет либо не до тянет до определнёго места,отжим получается должен быть после end_repeat&?

Автор: DarkMaster 23.10.2015, 18:02

я бы сделал флаг того, что кнопка уже зажата и не нажимал ее при этом. Сделайте дополнительный иф под зажатие

Автор: саныч 161 23.10.2015, 18:14

Цитата(DarkMaster @ 23.10.2015, 18:02) *

я бы сделал флаг того, что кнопка уже зажата и не нажимал ее при этом. Сделайте дополнительный иф под зажатие

Подскажите как это сделать хоть примерно

Автор: DarkMaster 23.10.2015, 18:18

Код
if #flag = 0
  set #flag 1
  сенды
end_if

При отжатии соответственно флаг обнулять.

Автор: саныч 161 23.10.2015, 18:23

Цитата(DarkMaster @ 23.10.2015, 18:18) *

Код
if #flag = 0
  set #flag 1
  сенды
end_if

При отжатии соответственно флаг обнулять.


Спасибо большое сейчас попробую

Автор: cirus 24.10.2015, 2:16

Цитата
ну так мне нужно что бы он зажал кнопку G,пока либо не клюнет либо не до тянет до определнёго места

Проще if заменить на while.
Код
send_down g    //зажали клавишу
while_not 434, 257 255    //пока не найден нужный цвет
   wait 50
end_while
send_up g   //отжали клавишу

Автор: KILLERxxx 4.10.2018, 0:39

Всем привет, а есть бот на прокачку наживки в русской рыбалке? Что бы н копал у меня всю ночь.

Автор: FREEON 4.10.2018, 1:06

Цитата(KILLERxxx @ 4.10.2018, 0:39) *

Всем привет, а есть бот на прокачку наживки в русской рыбалке? Что бы н копал у меня всю ночь.

А чо там делать нужно? Сбрось скрины поэтапно, что там тискать нужно когда копаеш...Помогу написать не только что бы копал, но и окопы рыл и в банки сразу закатывал smile.gif

Автор: Morbit 6.10.2018, 16:19

а на РФ4 есть бот ? Тех же карасиков в Комарино ловить?

Автор: babbage 21.4.2019, 17:08

Всем привет
А есть скрипт для спининговой ловли?

Автор: KillFors 26.12.2020, 19:15

Цитата(Strannik @ 4.8.2015, 13:37) *

Версия 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]


При запуске скрипта он просто сворачивает все окна что я делаю не так

Автор: DarkMaster 27.12.2020, 16:20

Цитата
// включение и настройка бота
// необходимо достать удочку и забросить в место ловли
// затем запускаем бот и следуем указаниям
// раздел проверки нужны ли начальные параметры

я бы начал с этого.
Вообще какой из скриптов используете? Там их два. В лог что-нибудь пишет?

Автор: KillFors 30.12.2020, 16:52

Цитата(DarkMaster @ 27.12.2020, 16:20) *

я бы начал с этого.
Вообще какой из скриптов используете? Там их два. В лог что-нибудь пишет?

Все данные действия были проделаны.
В логе пишет:
удочка заброшена
поклёвка
выводим рыбу
забрасываем удочку

А на самом деле ничего не происходит изредка забрасывает удочку ивсё

Автор: DarkMaster 31.12.2020, 11:46

Цитата
Вообще какой из скриптов используете? Там их два.

Нуменрация вкладок со скриптами в пилоте соблюдена?

Автор: KillFors 15.1.2021, 14:57

Цитата(DarkMaster @ 31.12.2020, 11:46) *

Нуменрация вкладок со скриптами в пилоте соблюдена?

да соблюдена

Автор: DarkMaster 15.1.2021, 16:32

Какой из скриптов привделенных выше вы используете?

Автор: KillFors 17.1.2021, 9:12

Цитата(DarkMaster @ 15.1.2021, 16:32) *

Какой из скриптов привделенных выше вы используете?

КАРП 2.0

КАРП 2.0(ставлю в 0 скрпт)
1 скрипт в 1
2 скрипт в 2

Автор: DarkMaster 17.1.2021, 13:37

КАРП 2.0 должен быть в 4 вкладке... Здоровья автору)
либо исправьте номер вкладки в скрипте 1
set workwindow #LeskaW.4
и номер вкладки в скрипте 2
set workwindow #udaW.4
на 0 вместо 4

Автор: KillFors 19.1.2021, 13:01

Цитата(DarkMaster @ 17.1.2021, 13:37) *

КАРП 2.0 должен быть в 4 вкладке... Здоровья автору)
либо исправьте номер вкладки в скрипте 1
set workwindow #LeskaW.4
и номер вкладки в скрипте 2
set workwindow #udaW.4
на 0 вместо 4

4 поменял на 0
Стал правильно производить заброс.
Правильно видит поклёвку.
Но не вываживает просто достаёт подсак постоянно и все

Автор: DarkMaster 19.1.2021, 13:54

проверьте соответсвуют ли координаты вашему разрешению:


set #carpX 562
set #carpY 329
set #fiderX #carpX - 32 //дельта места заброса и конца фидера на карпа
set #fiderY #carpY - 44

Автор: KillFors 19.1.2021, 21:01

Цитата(DarkMaster @ 19.1.2021, 13:54) *

проверьте соответсвуют ли координаты вашему разрешению:
set #carpX 562
set #carpY 329
set #fiderX #carpX - 32 //дельта места заброса и конца фидера на карпа
set #fiderY #carpY - 44

Извиняюсь, но конкретно не понял координаты чего нужно поменять для того что бы началось вываживание рыбы.

Строчки:

set #carpX 562
set #carpY 329
set #fiderX #carpX - 32 //дельта места заброса и конца фидера на карпа
set #fiderY #carpY - 44

Я нашел в скрипте.

Автор: DarkMaster 20.1.2021, 13:01

Я игру в глаза не видел, как и скрипт никогда не использовал. Исходя из имен переменных и коммента - это координаты карпа и возможное их отклонение.

Автор: KillFors 20.1.2021, 13:06

Цитата(DarkMaster @ 20.1.2021, 13:01) *

Я игру в глаза не видел, как и скрипт никогда не использовал. Исходя из имен переменных и коммента - это координаты карпа и возможное их отклонение.

Я так понимаю это точка места заброса, заброс происходит правильно.
Не происходит вываживание рыбы.(то есть это скрипт 1-2 вываживание происходит по нажатию клавиш G/H
по очередности.)

Автор: DarkMaster 20.1.2021, 13:24

Цитата
Я так понимаю это точка места заброса, заброс происходит правильно.

Это точка считывания успешности поклевки.

Напишите, пожалуйста, очередность действий которые должны происходить в игре и ту очередность, которая происходит в скрипте.

Автор: KillFors 20.1.2021, 14:19

Цитата(DarkMaster @ 20.1.2021, 13:24) *

Это точка считывания успешности поклевки.

Напишите, пожалуйста, очередность действий которые должны происходить в игре и ту очередность, которая происходит в скрипте.

происходит автоматический заброс удилища в нужную точку(это все правильно )
ждет поклевки(правильно)
произошла поклевка(правильно, скрипт все это понимает)

в логе пишет что произошла поклевка
начинаем вываживание рыбы.(и вот тут начинается) рыбу он не вываживает а просто достаёт подсачек.

Ощущение что нестартуют вот эти скрипты
log Клюнуло, ВЫВАЖИВАЕМ!
end_if
//вываживаем
start_script 1
start_script 2

А подсачек постоянно достаётся как и должно быть во время поклёвки
send f //сачек
set #a 1
end_if

Выше Вы писали что в скриптах 1-2 поменять 4 на 0. эти действия были произведены

Автор: DarkMaster 20.1.2021, 15:10

в 1 и 2 скрипт вставить встроки:
log script 1 started
и
log script 2 started
соответвственно номеров скриптов.

скорее всего не соответствуют введенные точка/цвет

Цитата
get color #leska 21, 7 // цвет полосы лески
if #leska = 4488494 // цвет без нагрузки

и
Цитата
get color #palka 18, 7 // цвет полосы лески
if #palka = 4488494 // цвет без нагрузки



так же вставьте строки:
log script 1 if #leska = 4488494
в первый скрипт перед if'ом.
и
log script 2 if #palka = 4488494
во второй скрипт перед ифом.

результаты лога сюда

Автор: KillFors 21.1.2021, 11:57

Цитата(DarkMaster @ 20.1.2021, 15:10) *

в 1 и 2 скрипт вставить встроки:
log script 1 started
и
log script 2 started
соответвственно номеров скриптов.

скорее всего не соответствуют введенные точка/цвет

и
так же вставьте строки:
log script 1 if #leska = 4488494
в первый скрипт перед if'ом.
и
log script 2 if #palka = 4488494
во второй скрипт перед ифом.

результаты лога сюда


После проделанных манипуляций всё заработало.

скорее всего не соответствуют введенные точка/цвет(ничего не менял)

Огромное спасибо.

Автор: DarkMaster 21.1.2021, 14:49

=)

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)