Author Topic: [Нужна помощь] Бот для Fishing Planet  (Read 18174 times)

0 Members and 4 Guests are viewing this topic.

Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
[Нужна помощь] Бот для Fishing Planet
« on: December 25, 2015, 05:58:34 AM »
Вообщем хочу написать бота для игры но мои знания не позволяют этого сделать, поэтому пытаюсь переделать вот этого http://crapware.aidf.org/forum/index.php?topic=320.msg10056#msg10056

Code: (clickermann) [Select]
// Заброс удилища
wait(1)
  keyDown(32)
waitms(1360)  // 2060
  keyUp(32)
wait (1)               
LOGWRITE ("Забросили")
wait (10)
 
// Процесс подмотки
b:
GETSCREEN
IF_PICTURE_IN (1552, 681, 1613, 721, "nekl.bmp", -1, 50)
wait (3)
KEYDOWN(#SPACE)
wait (2)
KEYUP(#SPACE)
wait (1)
goto (b)
Else
LOGWRITE ("Клюет")
waitms (10)
 
// Подсечка
KEYDOWN (#SPACE)
WAITMS (400)
KEYDOWN (#ENTER)
wait (1)
KEYUP (#ENTER)
WAITMS (200)
KEYUP (#SPACE)
wait (1)               
LOGWRITE ("Тянем")
 
// Процесс вываживания     
$var = 1
while ($var < 4)
WAITMS (10)     
KEYDOWN (#SPACE)
WAITMS (1000)
KEYDOWN (#ENTER)
WAITMS (300)
KEYUP (#ENTER)
WAITMS (50)
KEYDOWN (#ENTER)
WAITMS (300)
KEYUP (#ENTER)
WAITMS (50)
KEYDOWN (#ENTER)
WAITMS (300)
KEYUP (#ENTER)
WAITMS (50)
KEYDOWN (#ENTER)
WAITMS (300)
KEYUP (#ENTER)
WAITMS (50)
KEYDOWN (#ENTER)
WAITMS (20)
KEYUP (#ENTER)
WAITMS (900)
KEYUP (#SPACE)
WAITMS (5)
inc ($var)
end_cyc
END_IF

Не получается сделать так что-бы он определял когда нужно переходить к циклу подсечки. Т.е. теоретически он на 13 строчке должен определить индикатор натяжения лески и если натяжения нет то он должен выполнять действия в строчках 15-17, если появился индикатор то он должен выполнить действие 24ой строчки.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #1 on: December 25, 2015, 09:24:44 AM »
50% совпадения, на практике не рабочее значение. Лучше держатся в пределах 70-100.
Если не получается - задействовать COLORMODE


Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #2 on: December 25, 2015, 02:00:44 PM »
Ссылка на игру: http://store.steampowered.com/app/380600/?l=russian
1 скрин когда вываживаем рыбу - http://i.imgur.com/LQ39sry.jpg
2 скрин когда производится проводка - http://i.imgur.com/IaVjMpM.jpg

Каковы функции я хочу реализовать: 1) Забрасывает удочку (Хотел сделать что-бы в определенный координат кидал но там курсор привязывается к центру). 2) Начинал проводку зажимая пробел на 2 секунды потом отпускал на 1 и так далее пока рыба не клюнет. 3) Когда клюнула нужно подсеч зажав Ентер на 0.5 секунд и немного подтянуть пробелом. 4) Рыба подсеклась значит нужно вываживание - зажатием пробела и зажимание на 1-2 секунды Ентер. 5) Рыба подошла на 0 метров значит мы ее поймали, теперь нужно нажать на кнопку забрать. 6) Если забился садок нажать на Т и промотать время на 05.00 утра (так тут продается рыба). 6) Начать с действия 1.

P.s. До содка не дошел т.к. не могу решить проблему с переходом с 2 пункта на 3ий.

Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #3 on: December 25, 2015, 02:47:42 PM »
Code: (clickermann) [Select]

// Заброс удилища
wait(1)
  keyDown(32)
waitms(1360)  // 2060
  keyUp(32)
wait (1)               
LOGWRITE ("Забросили")
wait (4)

b:
GETSCREEN
COLORMODE(7, 1523,438,1569,489)
IF(PXL(1531,463)=16777215)
//IF_PICTURE_IN (1560, 685, 1610, 730, "nekl3.bmp", -1, 50)
wait (3)
KEYDOWN(#SPACE)
wait (2)
KEYUP(#SPACE)
wait (1)
goto (b)
Else
LOGWRITE ("Клюет")
waitms (10)
 
// Тянем
KEYDOWN (#SPACE)
WAITMS (400)
KEYDOWN (#ENTER)
wait (1)
KEYUP (#ENTER)
WAITMS (200)
KEYUP (#SPACE)
wait (1)               
LOGWRITE ("Тянем")
 
// ?????     
$var = 1
while ($var < 4)
WAITMS (10)     
KEYDOWN (#SPACE)
WAITMS (1000)
KEYDOWN (#ENTER)
WAITMS (300)
KEYUP (#ENTER)
WAITMS (50)
KEYDOWN (#ENTER)
WAITMS (300)
KEYUP (#ENTER)
WAITMS (50)
KEYDOWN (#ENTER)
WAITMS (300)
KEYUP (#ENTER)
WAITMS (50)
KEYDOWN (#ENTER)
WAITMS (300)
KEYUP (#ENTER)
WAITMS (50)
KEYDOWN (#ENTER)
WAITMS (20)
KEYUP (#ENTER)
WAITMS (900)
KEYUP (#SPACE)
WAITMS (5)
inc ($var)
end_cyc
END_IF
END_IF


Сейчас сделал поиск по пикселю но на другой значек который находится над шкалой в виде небольшого поплавка, и начало работать но если снасть доводит до конца и не было поклевки этот значек пропадает и бот думает что клюет и начинает цыкл подсечки. Как мне сделать так что-бы он тянул до тех пор пока шкала не  поменяет свой цвет.
« Last Edit: December 25, 2015, 03:23:24 PM by Ksaliman »

Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #4 on: December 25, 2015, 03:22:47 PM »
Приобретите игру и начинайте? Загружаемый контент для данной игры -3454 pуб.
требования:
Процессор: Quad-Core 3.0 GHz
Оперативная память: 8 GB ОЗУ
Видеокарта: Graphics Card with 2 GB Video RAM:
 место на диске 7 GB
+ регистрация аккаунта и установка  на комп игрового лаунчера на 1 GB.
там наверняка и защиты установлены, слишком всё коммерческое и платное в этом проекте.
авторы пишут, что игра условно-бесплатная только на периуд разработки.
мало найдётся фанатов  писать и тестировать бота в таких условиях.
так что расчитывайте только на свой энтузиазм.
кстати название картинок в скрипте и архиве несовпадают.

Спасибо за разъяснения. Как можно сделать что-бы он проверял на наличие картинки и если она присутствует то он переходил к другому циклу. А если нету то продолжал делать цикл проводки.

Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #5 on: December 25, 2015, 05:46:32 PM »
Code: (clickermann) [Select]

// Заброс удилища
wait(1)
keyDown(32)
waitms(1360)  // 2060
keyUp(32)
LOGWRITE ("Забросили")
wait (5)

$var=0
WHILE($var < 5) // Процес подтяжки  5 -число подтяжек ограничено , нужно подобрать практически
   INC($var,1)
   GETSCREEN
   COLORMODE(7, 1523,438,1569,489)
   IF(PXL(1531,463)=16777215)
      wait (3) // можно сделать рандомным или подобрать промежутки между подтяжками.
      KEYDOWN(#SPACE)
      wait (2)
      KEYUP(#SPACE)
      wait (1)
   Else
      $var=777
   END_IF
END_CYC

IF($var = 777)
   // Если верно Тянем     
   LOGWRITE ("Клюет")
   KEYDOWN (#SPACE)
   WAITMS (400)
   KEYDOWN (#ENTER)
   wait (1)
   KEYUP (#ENTER)
   WAITMS (200)
   KEYUP (#SPACE)
   wait (1)
   LOGWRITE ("Тянем")
   
   // ?????   видимо это два способа тянуть? одного недостаточно?
   KEYDOWN (#SPACE)
   WAITMS (RND(433,1477))
   FOR($a=0,$a<20) // повторяем 20 раз
      KEYDOWN (#ENTER)
      WAITMS (RND(233,377)) //  время нажатия
      KEYUP (#ENTER)
      WAITMS (RND(37,97))  // время между нажатиями
   END_CYC
   KEYUP (#SPACE)
END_IF


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

https://www.youtube.com/watch?v=NhWMf9uj6K0
« Last Edit: December 25, 2015, 05:57:41 PM by Ksaliman »

Svarog

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #6 on: December 26, 2015, 04:10:15 PM »
Есть более продвинутый бот по этому алгоритму, но он более сложный, зато более оптимизированный. Если есть желание разбираться - могу выложить. Если нужна проводка наживки, то это уже ловля на спиннинг, немного другой алгоритм, но он тоже есть у меня) 
« Last Edit: December 26, 2015, 04:12:11 PM by Svarog »

Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #7 on: December 27, 2015, 02:16:29 AM »
Есть более продвинутый бот по этому алгоритму, но он более сложный, зато более оптимизированный. Если есть желание разбираться - могу выложить. Если нужна проводка наживки, то это уже ловля на спиннинг, немного другой алгоритм, но он тоже есть у меня)

Был-бы признателен. Интересно как там все выглядит.

Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #8 on: December 27, 2015, 09:13:20 AM »
Что-то мне много мыслей в голу лезет и не могу остановится на не доделанном. Вообщем допилил систему подсечки работает хоть и туповато но зато подсекает рыбу а не коряги, так как сделал проверку по 2 скриншотам - Когда натягивается леска бот делает подсечку и проверяет значек скорости катушки если он изменился то он переходит к циклу вываживания но тут загвоздка, как я не пытался, что я только не делал он у меня не хочет этого делать, в чем причина не пойму.

Логи:
8:41:13 Забросили
8:41:55 Клюет
8:41:55 Тянем
До этих пор работает нормально дальше не чекает картинки и делает 2 процесса не в свое время.
8:41:56 Вытащили
8:42:14 Забрали рыбу

Знающие посмотрите где мои ошибки.


Code: (clickermann) [Select]
// Заброс удилища

wait(1)
keyDown(32)
waitms(2060)  // 2060
keyUp(32)
LOGWRITE ("Забросили")
wait (5)

// Индикатор натяжание лески, подтягиваем пока не натянется леска
$var=0
WHILE($var < 20) // Колличество подтяжек
   INC($var,1)
   //GETSCREEN
   //COLORMODE(7, 1423,824,1470,854)
   //IF_PICTURE_IN (1423,824,1470,854, "pr.bmp", -1, 90) // Проверяем не дотянул-ли снасть до берега без поклевки.
   //waitms(1)
   GETSCREEN
   COLORMODE(7, 1505,689,1610,980)
   IF_PICTURE_IN (1562,686,1601,719, "nekl2.bmp", -1, 90) //Индикатор натяжание лески, подтягиваем пока не натянется леска
      KEYDOWN(#SPACE)
      wait (1)
      KEYUP(#SPACE)
      wait (2)
   Else
      // натянулась - подсекаем зажимая энтер на 0.7 секунд
      KEYDOWN(#enter)
      WAITMS(700)
      KEYUP(#enter)
      GETSCREEN
      COLORMODE(7, 1505,689,1610,980)
      IF_PICTURE_IN (1543,946,1576,982, "nekl.bmp", -1, 90) //Проверяем подсеклас-ли рыба, если да переходим к вываживанию
      Else
         LOGWRITE ("Клюет")
         LOGWRITE ("Тянем")
         $var=777
      END_IF
   END_IF
END_CYC


IF($var=777)  // Если верно Тянем
   $var=0
   WHILE($var < 10) // Колличество подтяжек
      INC($var,2)
      KEYDOWN(#space)
      WAITMS(68)
      KEYDOWN(#enter)
      WAITMS(32)
      KEYUP(#enter)
      WAITMS(32)
      KEYUP(#space)
      GETSCREEN
      COLORMODE(7, 1423,824,1470,854)
      IF_PICTURE_IN (1423,824,1470,854, "pr.bmp", -1, 90) // Проверяем не вытянулась-ли рыба
      Else
      END_IF
   END_IF
END_CYC
LOGWRITE ("Вытащили")


// Нажимаем на кнопку забрать.
$c = 0
WHILE ($c = 0)
   wait (2)
   GETSCREEN
   COLORMODE(7, 600,935,629,965)
   IF_PICTURE_IN (600,935,629,965, "zabr.bmp", -1, 90)
      $c = 1
      waitms (10)
      LCLICK(908,911)
      wait (8)
   END_IF
END_CYC
LOGWRITE ("Забрали рыбу")


Функции которые хочу реализовать:

1) Подтяжку не определенное количество раз (т.к. он бывает делает +- 2 раза прокрутки) а с проверкой пикселей, до того момента пока не дотянет до берега, какие пикселя задействовать знаю но в коде реализовать не могу.

2) Если возможно постоянную проверку на натяжение лески так-как пока работает цикл подтяжки бывает садится рыба и программа не успевает сделать скриншот в нужный промежуток времени.

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

4) Сделать не общее количество подтяжек и проверки скриншотов, а допустим он 10 раз подтянул проверил по скриншоту если не вытянул еще 10 раз и т.д. пока не дотянет до берега.

Архив с наработками: https://yadi.sk/d/owj1MXinmWpAw
« Last Edit: December 27, 2015, 09:33:34 AM by Ksaliman »

Svarog

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #9 on: December 27, 2015, 01:06:56 PM »
Вот бот для ловли на спиннинг. Проверку протяжки осуществляет по пикселю в строке №243.....как нашел пиксель - так закончил протяжку. Проверку наполнения садка определяет по изменению кнопки "Садок" - она меняет цвет - как изменилась кнопка, то идем продавать. Там много для тебя ненужного - типа проверки снастей, проверки связи с сервером, проверки всплывающих окон получения клада (достижения, выполнения личной задачи) - это можно безболезненно удалить)

P.S. А как спойлер делать? Чет я не нашел(((

PPS. Эту игрулю как-то можно без стима установить или нет?
« Last Edit: December 27, 2015, 01:24:26 PM by Svarog »

Svarog

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #10 on: December 27, 2015, 01:32:17 PM »
Функции которые хочу реализовать:

1) Подтяжку не определенное количество раз (т.к. он бывает делает +- 2 раза прокрутки) а с проверкой пикселей, до того момента пока не дотянет до берега, какие пикселя задействовать знаю но в коде реализовать не могу.

2) Если возможно постоянную проверку на натяжение лески так-как пока работает цикл подтяжки бывает садится рыба и программа не успевает сделать скриншот в нужный промежуток времени.

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

4) Сделать не общее количество подтяжек и проверки скриншотов, а допустим он 10 раз подтянул проверил по скриншоту если не вытянул еще 10 раз и т.д. пока не дотянет до берега.


п.1 Правильно, смотри какая картинка меняется после окончания протяжки и по ней делай проверку.
п.2. Программа все успеет сделать, возможно ты неправильно ей задаешь условия. Опять же смотри что точно меняется и оттуда пляши.
п.3. Смотри чем отличается полный и пустой садок - и опять же делай проверку.
п.4. См. п.1. Т.е. тянуть надо не количество раз, а до берега)))

Svarog

  • Освоившийся
  • **
  • Posts: 25
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #11 on: December 27, 2015, 01:41:20 PM »
COBCEM_3BEPb   Спасибо))) Я на эту кнопку боялся нажимать, уж больно страшный значек, еще со Сталкера в подсознании осталось)))

Ksaliman Сними видео несколько минут со всеми нужными функциями, попробую помочь. Если можно - с пояснениями, где что и когда)

Золотой

  • Оплот сообщества
  • ****
  • Posts: 312
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #12 on: December 27, 2015, 04:25:38 PM »
обработал скрипт спининга напильником, для уменьшения числа строк, проверь работоспособность.

Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #13 on: December 27, 2015, 08:44:11 PM »
COBCEM_3BEPb

Видео (Включите субтитры и анотации): https://www.youtube.com/watch?v=dGSdXh9ogYQ

Появилась ошибка http://i.imgur.com/n9H75mS.png?1
Вообщем бот работает но без 1 функции, он не делает ничего после проверки на то не дотянул-ли рыбу до берега и так-же не забирает рыбу так как там такая-же проверка. Поправил таймер на вываживание, он должен работать с минимально задержкой. Сделал проверку pr.bmp на полную цифру 0 а то она срабатывала на цифру 9.

[spoiler]
Code: (clickermann) [Select]

// Заброс удилища
wait(1)
keyDown(32)
waitms(2060)  // 2060
keyUp(32)
LOGWRITE ("Забросили")
wait (5)
 
// Индикатор натяжание лески, подтягиваем пока не натянется леска
$var=0
WHILE($var=0) // подтягиваем пока не дотянул-ли снасть до берега или не натянется леска
   KEYDOWN(#SPACE)
   wait (1)  //  время пожтяжки лески
   KEYUP(#SPACE)
   GETSCREEN
   COLORMODE(7, 1505,689,1610,980)
   IF_PICTURE_IN (1562,686,1601,719, "nekl2.bmp", -1, 90) //Индикатор натяжание лески, подтягиваем пока не натянется леска
      wait (2)  // пауза между подтяжками лески
   Else
      // натянулась - подсекаем зажимая энтер на 0.7 секунд
      KEYDOWN(#enter)
      WAITMS(700)
      KEYUP(#enter)
      BEEP(800,200) // звук при подсечке
      WAITMS(700) // пауза после подсечки
      IF_PICTURE_IN (1543,946,1576,982, "nekl.bmp", -1, 90) //Проверяем подсеклас-ли рыба, если да переходим к вываживанию
         WAITMS(10)
      Else
         LOGWRITE ("Клюет")
         LOGWRITE ("Тянем")
         $var=777// выход из цикла "натяжание лески", переходим к вываживанию
      END_IF
   END_IF
 
   GETSCREEN
   COLORMODE(7, 1423,824,1470,882)
   IF_PICTURE_IN (1423,824,1470,882, "pr.bmp", -1, 90) // Проверяем не дотянул-ли снасть до берега без поклевки. (После это проверки не переходит на цикл заброски удилища к строчке 3)
      $var=555
      waitms(10)
   END_IF
END_CYC
 
IF($var=777)  // Если верно Тянем
   $var=0
   WHILE($var=0)
      GETSCREEN
      COLORMODE(7, 1423,824,1470,882)
      IF_PICTURE_IN (1423,824,1470,882, "pr.bmp", -1, 90) // Проверяем не вытянулась-ли рыба (После этой не проверяет не вытянулась-ли рыба и не нажимает на кнопку забрать к строчке 56)
         INC($var,1)  // если вытянулась
         LOGWRITE ("Вытащили")
         $c = 0
         WHILE ($c = 0)
            GETSCREEN
            COLORMODE(7, 600,935,629,965)
            IF_PICTURE_IN (600,935,629,965, "zabr.bmp", -1, 90) // Проверка поймали мы рыбу или нет.
               $c = 1
               waitms (10)
               LCLICK(908,911)   // Нажимаем на кнопку забрать.
               wait (8)   // пауза после нажатия  забрать
            END_IF
         END_CYC
         INC($fish,1)
         LOGWRITE ("Забрали рыбы")
         HINTPOPUP("Забрали рыбы", ,$fish)         
      Else
         KEYDOWN(#space)
         WAITMS(68)
         KEYDOWN(#enter)
         WAITMS(32)
         KEYUP(#enter)
         WAITMS(32)
         KEYUP(#space)
         waitms (2)  //  пауза после подтягивания рыбы (изменил - подтягивание должно работать очень быстро до тех пор пока не вытащишь рыбу)
      END_IF
   END_IF
END_CYC
[/spoiler]

Svarog

Спасибо большой за скрипт. Буду изучать что да как. Но при первом взгляде там жесткая привязка к курсору. В моей игре курсор всегда в центре и особо не попользуешся этой функцией. Но все равно спасибо. Может что возьму на заметку.
« Last Edit: December 27, 2015, 09:00:32 PM by Ksaliman »

Ksaliman

  • Зашел в гости
  • *
  • Posts: 17
    • View Profile
Re: [Нужна помощь] Бот для Fishing Planet
« Reply #14 on: December 27, 2015, 11:13:05 PM »
Лог если делает проводку и рыба не клюнула. Доходит до 0 метров и дальше ничего

23:06:34 Забросили
23:07:38 Берег без поклевке

Если рыба клюнула во время поклевке то доходит до 0 и забирает рыбу но не забрасывает для повторной ловли.

23:05:01 Забросили
23:05:24 Клюет
23:05:24 Тянем
23:06:05 Вытащили
23:06:16 Забрали рыбу