Author Topic: Бот для Fantastic Fishing  (Read 94289 times)

0 Members and 2 Guests are viewing this topic.

BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #45 on: January 30, 2015, 12:34:25 PM »
Vint, позвольте вопрос? Строка 34, обнуление переменной $c, ведь после этого программа выходит из цикла по строке 59 и начинает работу сначала, а нам этого не надо, нам надо чтоб она продолжала крутить цикл. Удалил строку 34 и бот заработал как положено. Это ошибка или я чего-то снова не допонял?
Еще вопросик, картинки готовим в формате .bmp в 24 битном, а если сделать скрин с помощью кликермана и посмотреть свойства файла, то там будет - глубина цвета 32... Это как так? Кликер делает скрины не в том фомате с которым работает сам?
« Last Edit: January 30, 2015, 01:49:08 PM by BubukaBomb »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #46 on: January 30, 2015, 03:17:42 PM »
Vint, позвольте вопрос? Строка 34, обнуление переменной $c, ведь после этого программа выходит из цикла по строке 59 и начинает работу сначала, а нам этого не надо, нам надо чтоб она продолжала крутить цикл. Удалил строку 34 и бот заработал как положено. Это ошибка или я чего-то снова не допонял?
Еще вопросик, картинки готовим в формате .bmp в 24 битном, а если сделать скрин с помощью кликермана и посмотреть свойства файла, то там будет - глубина цвета 32... Это как так? Кликер делает скрины не в том фомате с которым работает сам?
Ну так было в оригинале.
Оригинальный скрипт при поиске "1kl.bmp"...."33kl.bmp" вызывал VYLOV() и тоже не повторял, шёл дальше на поиск "sadok.bmp". Повторял он только если не найдено ничего.
стр. 85 GOTO (c)

Кликерм сохраняет с альфа каналом 32 бита. Ищется всё прекрасно. При создании в 24 бита без альфы тоже всё нормально.
Он альфа канал не задействует, прозрачность в функциях по другому задаётся.


BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #47 on: January 30, 2015, 03:31:51 PM »
Ок, спасибо)

BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #48 on: January 31, 2015, 04:16:54 PM »
Допилил бота, выношу на Ваш суд  :D
Бот умеет ловить на 3 удочки,  определяет момент начала клева, активирует соответствующую удочку, корректно определяет момент подсечки, подсекает и вываживает рыбу. Рыбачит до полного садка, затем идет на базу, продает всю рыбу из садка и возвращается на локацию, где вновь начинает ловить. И так до "посинения" пока его не остановят или не сломаются снасти (садок) или не кончится наживка. За этим необходимо следить вручную. Можно, конечно, это все автоматизировать, но увеличится нагрузка на процессор, да и проверку снастей делаем редко, посему будет вручную. Благодарю всех, кто помогал и подсказывал, без Вас бы не обошелся  :).
Чуть позже, распишу как его настроить и использовать.

Code: (clickermann) [Select]
#ps2_keyboard
$x1 = 840
$y1 = 470
$x2 = 1280
$y2 = 505
 
// подпрограмма вываживания рыбы
SUB(VYLOV)
 WAITMS (300)
 $a = 1
 WHILE ($a = 1)
  GETSCREEN     (540, 280, 590, 330)
  COLORMODE  (6, 540, 280, 590, 330)
 
  IF_PICTURE_IN (540, 280, 590, 330, "kurs.bmp", -1, 70) 
   $a = 0
  ELSE
   GETSCREEN ($x11, $y1, $x21, $y2)
   COLORMODE (6, $x11, $y1, $x21, $y2)
   
    IF_PICTURE_IN ($x11, $y1, $x21, $y2, $e, -1, 70)
     WAITMS (300)
    ELSE
     $a = 0           
    END_IF   
  END_IF
 END_CYC

// подсечка
 WAIT (RND(0.3, 0.5))
 KEYPRESS (#SPACE)
 WAIT (RND(0.3, 0.5))
// вываживание
 $a = 1
 WHILE($a = 1)
  GETSCREEN     (540, 280, 590, 330)
  COLORMODE  (6, 540, 280, 590, 330)
 
  IF_PICTURE_IN (540, 280, 590, 330, "kurs.bmp", -1, 70)     
   KEYDOWN (#H)
   WAITMS  (175)
   KEYUP   (#H)
   WAITMS  (5)
   KEYDOWN (#G)
   WAITMS  (175)
   KEYUP   (#G)
   WAITMS  (5)
  ELSE
   WAITMS   (300)
   KEYPRESS (#T)
   $a = 0
  END_IF
 END_CYC
  WAIT (1) 
END_SUB
 
// основное тело программы
WAIT (2)

KEYPRESS (#1) // заброс удочки 1
LCLICK (RND(838,846), RND(412,420))
WAIT (2)

KEYPRESS (#2) // заброс удочки 2
LCLICK   (RND(1080,1120), RND(380,400))
WAIT     (2)

KEYPRESS (#3) // заброс удочки 3
LCLICK (RND(1242,1250), RND(351,359))
WAIT (2)

MOVE (550, 290) // перемещение курсора
 
$c = 1
WHILE($c = 1)
 GETSCREEN ($x1, $y1, $x2, $y2)
 COLORMODE (6, $x1, $y1, $x2, $y2)
 
 IF_PICTURE_IN ($x1, $y1, $x2, $y2, "1kl.bmp", -1, 70)
  KEYPRESS (#1)
  $x11 = 840     
  $x21 = 875     
  $e = "11kl.bmp"
  VYLOV()
 ELSE
  IF_PICTURE_IN ($x1, $y1, $x2, $y2, "11kl.bmp", -1, 70)
   KEYPRESS (#1)
   $x11 = 840       
   $x21 = 875       
   $e = "11kl.bmp"
   VYLOV()
  ELSE
   IF_PICTURE_IN ($x1, $y1, $x2, $y2, "2kl.bmp", -1, 70)
    KEYPRESS (#2)
    $x11 = 1090           
    $x21 = 1130           
    $e = "22kl.bmp"
    VYLOV()
   ELSE
    IF_PICTURE_IN ($x1, $y1, $x2, $y2, "22kl.bmp", -1, 70)
     KEYPRESS (#2)
     $x11 = 1090             
     $x21 = 1130             
     $e = "22kl.bmp"
     VYLOV()
    ELSE
     IF_PICTURE_IN ($x1, $y1, $x2, $y2, "3kl.bmp", -1, 70)
      KEYPRESS (#3)
      $x11 = 1245                 
      $x21 = 1280                 
      $e = "33kl.bmp"
      VYLOV()
     ELSE
      IF_PICTURE_IN ($x1, $y1, $x2, $y2, "33kl.bmp", -1, 70)
       KEYPRESS (#3)
       $x11 = 1245                   
       $x21 = 1280                   
       $e = "33kl.bmp"
       VYLOV()
      ELSE
      END_IF
     END_IF
    END_IF
   END_IF
  END_IF
 END_IF
 
 IF($c = 1)
  GETSCREEN (355, 550, 460, 580) // проверка садка
  COLORMODE (6, 355, 550, 460, 580)
 
  IF_PICTURE_IN (355, 550, 460, 580, "sadok.bmp", -1, 90)
   WAIT (0.5)
  ELSE
   $c = 0
  LCLICK (RND(1285,1305), RND(35,55)) // возврат на базу
  WAIT   (RND(3,5))
  LCLICK (RND(370,450), RND(558,573)) // открытие садка
  WAIT   (RND(3,5))
  LCLICK (RND(1030,1120), RND(453,468)) // продажа рыбы
  WAIT   (RND(3,5))
  LCLICK (RND(690,780), RND(402,417)) // подтверждение продажи
  WAIT   (RND(3,5))
  LCLICK (RND(805,895), RND(402,417)) // рыба продана
  WAIT   (RND(3,5))
  LCLICK (RND(370,450), RND(582,597)) // переход на локальную карту
  WAIT   (RND(3,5))
  LCLICK (RND(755,775), RND(245,265)) // переход на локацию
  WAIT   (RND(3,5))
  END_IF
 END_IF
END_CYC

BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #49 on: January 31, 2015, 10:43:03 PM »
Итак, приступим к настройке бота под твои, конкретно твои нужды, мой юный паддаван , гм...рыболов.
Делать мы это будем пошагово и неторопясь  :).  Во первых строках своего письма, спешу сообщить тебе, мой друг, о первой строке моего бота...если у тебя нет PS/2 клавиатуры, то смело удаляй первую строку - она тебе не нужна  :)

1. Запускаем "Fantast Fish" и "Кликерман" в кликере жмем кнопку "Менеджер окон", выбираем из списка нашу рыбалку и смотрим на параметры окна. Вводим необходимые нам циферки в поля "X", "Y" - координаты левого верхнего левого окна программы, "Ширина", "Высота" - это, как ты уже догадался, ширина и высота окна программы. Я рекомендую располагать окно в правых 3/4 экрана. К примеру, мое разрешение 1366х768 и задаю я такие параметры окна: 350, 0, 1000, 750. Эти цифирки необходимо записать (запомнить, выколоть на спине и т.д.) потому что в боте идет четкая привязка к координатной сетке и нужно будет вводить их каждый раз, когда ты запускаешь рыбалку и бота. Функция определения "hwnd" окна (и еже с ней) у меня не срабатывали, если что..., как сказал Oraven: "...вот такое у тебя, брат, окно..". Теперь нам нужно поймать хотя бы одну рыбку и положить ее в садок (пригодится позже, я объясню ниже).

2. Теперь нам необходимо определить точки, в которые мы будем забрасывать удочки. С помощью форума определяемся, где и что будем ловить, с помощью эхолота находим 3 точки, в которые забрасываем удочки и после того как решились, вносим координаты в мозг бота, удочка №1 - строка 61, удочка №2 - строка 65, удочка №3 - строка 69. Чтобы нас не поймали на использовании бота, координаты вносим так: точка заброса +- 4 пикселя, ибо невозможно руками попадать точно в одну и ту же координату на протяжении многих и многих часов. К примеру, моя удочка №1 забрасывается в координату 842, 416.

3. Пункт, как говорится №3. Важный пункт, не пропусти его, бо тут мы будем прикручивать индикатор по которому определяется, а схавала ли рыба наживку и не пора ли, ее вытягивать и до каких пор тянуть эту самую рыбу, пока она не окажется в садке.
Тебе необходимо найти такую точку на активной карте (т.е. там, где ты еще можешь забросить удочку и где индикатор удочки будет иметь вид "поплавка"), где индикатор подсечки (типа "треугольник") будет находится в месте, где фон вокруг него будет пассивным. Я, нашел такое место в тени от деревьев, ты, конечно, можешь найти другое место, но никто не гарантирует, что потом программа найдет твой индикатор подсечки. Координату забиваем в строку 72. Тута, я рандом координат не делал, ибо лень  :) потом сделаю  ::), а может и не сделаю, но если есть желание, сделай сам.

Итак, мой френд, ты уже внес три координаты для заброса удочек и можешь попробовать запустить бота, он конечно же работать не будет, но забросить все 3 твои удочки, просто обязан, а также должен переместить курсор в выбранную тобою точку. Если сего не происходит, то начинай с самого начала, пока не добьешься заброса в нужные тебе 3 точки. Не забывай останавливать бота по команде "Alt+S'. Если все у тебя получилось, то возьми с полки пирожок и идем дальше. Не забудь сохранить изменения в боте, они нам еще пригодятся  :).

4. В этом пункте , мы будем задавать область для поиска индикаторов поклевки.
Запускаем бота ('Alt+A'), эабрасываем удочки и останавливаем бота. ИтоГо, на экране мы видим закинутые удочки и внизу 3 квадратика индикаторов поклевки (вот эти квадратики нам и нужны). переходим в режим "Редактор", затем "Включение лупы" и наводим курсор на левый верхний угол индикатора поклевки удочки №1, записываем координаты, наводим курсор на правый нижний угол  индикатора поклевки удочки №3, записываем координаты. Теперь от координат левого верхнего угла по 'X" и 'Y' отнимаем по 20 и это будут переменные $x1 и $y1, вносим их в строки 2 и 3. Повторяем для правого нижнего угла, только не отнимаем, а прибавляем и вносим координаты в строки 4 и 5. Введение переменных, обусловлено их многократным использованием, аж целых 6 раз  в одном прогоне программы :o (хотя это не так и важно, программер, я так себе  8))
5. В котором мы найдем координаты кнопки "Садок".
Кнопка "Садок" должна быть зеленой, то есть, ты еще не наловил полный садок рыбы. Определяем координаты для поиска изображения кнопки "Садок", левый верхний - 20, правый нижний + 20 и вносим получившиеся координаты в строчки 129, 130, 132. Расписывать действия не буду, ибо ты уже опытный и это уже умеешь, если же нет, то громко скажи " ОЙ, ВСЕ!" и начинай ловить руками  :P  (шутка юмора такая, ога), короч тренируйся, пока не получится.

6. Пункт, рассказывает тебе, дружище, как уйти на базу, продать выловленную рыбу и вернуться на локацию для продолжения рыбалки.
Наводим курсор на "домик" - переход на базу, определяем границы рандома и вносим их в строку 136.
Жмем мышкой на "домик" и переходим на базу.
На базе, наводим курсор на кнопку "Садок" (ну да, снова "Садок" ну а фигли, не я такой, игра так сделана) определяем координаты (не забываем про границы рандома) и вносим в строку 138, жмем кнопку "Садок" и выплывает окно садка в котором мы находим кнопку "Продать все", (вот тут-то нам и пригодилась рыба, которую мы поймали вручную, в самом начале), определяем ее координаты, в смысле кнопки,  (границы рандома), вносим в строку 140 и жимкаем эту кнопку.
Появляется окно, в котором нас спрашивают, а точно продать (название окна - "Продать все?")?, вновь определяем координаты (границы рандома) кнопки "Продать" и вносим в строку 142.
Появляется окно, в котором нас уведомили, что мы продали рыбу на какую-то огромную сумму, оно называется "Продажа рыбы". В этом окне, нам нужно найти кнопку "Закрыть" и внести ее координаты (границы рандома) в строку 142. Закрываем окно с уведомлением.
Далее, ищем кнопку "Карта" (ну дык, слева посмотри) определяем координаты (границы рандома), вносим в строку 146, жмем эту кнопку и выходим в локальную карту.
На локальной карте, выбираем кнопку локации в которой мы начинали/продолжали ловить рыбу, определяем ее координаты (границы рандома), жмем кнопку и переходим в локу, где будем рыбачить. Ну а дальше, бот сам забросит удочки, проверит садок и при необходимости уйдет на базу, продаст рыбу, вернется на локу и продолжит  8).

7.Воооот, теперича друже, мы с тобой переходим в редактирование подпрограммы подсечки и вываживания. Оно не так страшно, как ты думаешь,. Ну блин, подпрограмма, слово то какое-то матершинное. Это как звание "подполковник", т.е. находящийся под "полковником"
Не боись, осилим. Подпрограмма, это программа, которая выполняется внутри программы (сам то понял что сказал?). ;D

Так, заканчиваем, завтра продолжу  8)

 




Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #50 on: February 01, 2015, 12:06:12 AM »
Ну нифига себе автоматизация. А научить бота самого все это находить? А то получается полуфабрикат.
Все эти чудо шаги пройдет только истинный рыболов, в смысле - человек у которого терпение безгранично. И то, только если будет постоянно напоминать себе известную фразу: "лучше день потерять зато потом за час долететь".


BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #51 on: February 01, 2015, 12:38:43 PM »
На самом деле, там все просто и эти шаги, если играешь руками, делаешь каждый раз. Нужно внести всего-то 7 координат (хотя, нет вру - 14 точек). Морозиться с автоматическим определением координат как-то не очень хочется  :)  да и бот разрастется, как добрый кабанчик  :o А так один раз забил точки и все.
« Last Edit: February 01, 2015, 01:19:00 PM by BubukaBomb »

BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #52 on: February 01, 2015, 06:34:10 PM »
Продолжаем настраивать бота.
7. Воооот, теперича друже, мы с тобой переходим в редактирование подпрограммы подсечки и вываживания. Оно не так страшно, как ты думаешь,. Ну блин, подпрограмма, слово то какое-то матершинное. Это как звание "подполковник", т.е. находящийся под "полковником"
Не боись, осилим. Подпрограмма, это программа, которая выполняется внутри программы (сам то понял что сказал?). ;D
В строки 12, 13 и 15 вносим координаты области, в которой будем искать индикатор определения момента подсечки (это из пункта №3). Т.е. если рыба хапнет крючек, то изображение поплавка сменится на изображение курсора (типа треугольничек такой, повернутый влево на 45 градусов).
Далее в строки 36, 37 и 39 снова пишем те же самые координаты. Не забудь расширить область поиска на 10-20 пикселей.
Ну вот собственно и все с подпрограммой  8)
8. Возвращаемся к нашим баранам, ой, к основной программе  :)
В строки 81 (левый верх), 82 (правый низ) и 88 (левый верх), 89 (правый низ) вписываем область поиска индикатора удочки №1 (квадратик слева от первой удочки). Заметь, что вписываем только координаты по "Х", ибо координаты по "Y" мы уже описывали в строках 3 и 5, а они, как ты уже понял, не меняются.
Точно также вписываем координаты "X" для удочки №2, строки 95, 96 и 102, 103.
Ищем квадратик для удочки №3 и вписываем координаты в строки 109, 110 и 116, 117.

На этом самый муторный этап настройки бота заканчивается и его можно смело запустить в работу  ;D
Запустил? И ничего не работает? А кто сказал что будет легко???
Ты же еще не сделал картинки, по которым бот будет работать. Итак, начинаем креативить :P
Нам понадобится 8 шт скриншотов:
  • "kurs.bmp" - скрин курсора из пункта №3
  • "1kl.bmp" - индикатор удочки №1 когда рыба клюет, но удочка не активна
  • "11kl.bmp" - индикатор удочки №1 когда рыба клюет, удочка активна
  • "2kl.bmp" - индикатор удочки №2 когда рыба клюет, но удочка не активна
  • "11kl.bmp" - индикатор удочки №2 когда рыба клюет, удочка активна
  • "3kl.bmp" - индикатор удочки №3 когда рыба клюет, но удочка не активна
  • "33kl.bmp" - индикатор удочки №3 когда рыба клюет, удочка активна
  • "33kl.bmp" - скриншот неполного (зеленого) садка

Для облегчения твоей нелегкой доли, в деле изготовления картинок, вот тебе маленькая программка для делания скринов:

Code: (clickermann) [Select]
$x1 = 550
$y1 = 290
$x2 = 580
$y2 = 320
$z = "kurs.bmp"

WAIT (2)
KEYPRESS (#1)
LCLICK ($x1, $y1)
WAIT (2)

GETSCREEN ($x1-10, $y1-10, $x2+10, $y2+10) // делаем снимок в буфер кликера
COLORMODE (6, $x1-10, $y1-10, $x2+10, $y2+10)
SCREENSHOTEX ($x1-10, $y1-10, $x2+10, $y2+10, "Image_", 0) // сохраняем снимок
HALT // стоп

Где $x1, $y1, $x2, $y2 координаты области скрина.

Убираем из первого слота удочку, вписываем в строки 1, 2, 3, 4 координаты курсора из пункта №3 (строка 72 основной программы бота), жмем 'Alt+A' и получаем скрин в папке "screens" кликермана. Грузим полученный скрин в графический редактор, вырезаем изображение курсора размером ~ 20х20 пикселей и сохраняем файл под именем "kurs.bmp" в папке с кликерманом.

В программе изготовления скринов комментим строки 7, 8, 9 и разбираемся со скрином садка (он будет побольше чем 20х20 пикселей).

Так же делаем скрины индикаторов удочек (6 шт).

Все изготовленные файлы складываем в рабочую папку кликермана и вуаля...у нас все готово для автоматической рыбалки!  8)

Запускаем рыбалку, запускаем кликенмана, жмем 'Alt+A' и идем пить пиво, пока бот ловит рыбу   :D

На этом, мой поток сознания заканчивается, до скорых встреч, мой юный паддаван! Ни хвоста, ни чешуи тебе :)


BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #53 on: February 01, 2015, 06:49:23 PM »
Дык вопросы в личке задают, а тут расписал один раз и все  8)

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

Добавил небольшое видео:
https://drive.google.com/file/d/0B2p1e64YGUkkZHBnMkZaWWg1YkE/view?usp=sharing
« Last Edit: February 02, 2015, 03:37:39 PM by BubukaBomb »

BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #54 on: February 02, 2015, 04:28:29 PM »
Пытался прикрутить подпрограмму плавного движения мышки от Oravena, ничего не вышло, бот просто прыгает в заданную точку (строка 104). Причем, код сначала проверил - все сработало, а вот в окне рыбалки прыгает а не плавно ведет  :'(
Это особенность окна или я туплю?

Code: (clickermann) [Select]
#ps2_keyboard
$x1 = 840
$y1 = 470
$x2 = 1280
$y2 = 505

// подпрограмма обязательно выше вызова
SUB(mouse_move,$MOVE_END_X,$MOVE_END_Y)
 $MOVE_SPEED = 30  // множитель скорости
     
 $MOVE_Start_X = $_xmouse
 $MOVE_Start_Y = $_ymouse
 $MOVE_X = $MOVE_Start_X
 $MOVE_Y = $MOVE_Start_Y
     
 $dist = DIST($MOVE_END_X,$MOVE_END_Y,$MOVE_Start_X,$MOVE_Start_Y)
     
 $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)
     
  IF($MOVE_SPEEDVAR < 1)
   $MOVE_SPEEDVAR = 1
  END_IF
     
  $MOVE_step=($dist-1)/$MOVE_SPEEDVAR
  $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
  $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step
     
  FOR($MOVE_i, $MOVE_i<INT($MOVE_step))
   $MOVE_X = $MOVE_X + $MOVE_X_step
   $MOVE_Y = $MOVE_Y + $MOVE_Y_step
   MOVE(ROUND($MOVE_X,0), ROUND($MOVE_Y,0))
   WAITMS(1)
  END_CYC
     
 MOVE($MOVE_END_X, $MOVE_END_Y) //Передвинуть окончательно в заданную точку
END_SUB
 
// подпрограмма вываживания рыбы
SUB(VYLOV)
 WAITMS (300)
 $a = 1
 WHILE ($a = 1)
  GETSCREEN     (540, 280, 590, 330)
  COLORMODE  (6, 540, 280, 590, 330)
 
  IF_PICTURE_IN (540, 280, 590, 330, "kurs.bmp", -1, 70) 
   $a = 0
  ELSE
   GETSCREEN ($x11, $y1, $x21, $y2)
   COLORMODE (6, $x11, $y1, $x21, $y2)
   
    IF_PICTURE_IN ($x11, $y1, $x21, $y2, $e, -1, 70)
     WAITMS (300)
    ELSE
     $a = 0           
    END_IF   
  END_IF
 END_CYC

// подсечка
 WAIT (RND(0.3, 0.5))
 KEYPRESS (#SPACE)
 WAIT (RND(0.3, 0.5))
// вываживание
 $a = 1
 WHILE($a = 1)
  GETSCREEN     (540, 280, 590, 330)
  COLORMODE  (6, 540, 280, 590, 330)
 
  IF_PICTURE_IN (540, 280, 590, 330, "kurs.bmp", -1, 70)     
   KEYDOWN (#H)
   WAITMS  (150)
   KEYUP   (#H)
   WAITMS  (5)
   KEYDOWN (#G)
   WAITMS  (175)
   KEYUP   (#G)
   WAITMS  (5)
  ELSE
   WAITMS   (300)
   KEYPRESS (#T)
   $a = 0
  END_IF
 END_CYC
  WAIT (1) 
END_SUB
 
// основное тело программы
WAIT (2)

KEYPRESS (#1) // заброс удочки 1
LCLICK (RND(838,846), RND(412,420))
WAIT    (2)

KEYPRESS (#2) // заброс удочки 2
LCLICK   (RND(1080,1120), RND(380,400))
WAIT     (2)

KEYPRESS (#3) // заброс удочки 3
LCLICK (RND(1242,1250), RND(351,359))
WAIT    (2)

//MOVE (550, 290) // перемещение курсора
mouse_move(550,290) // двигаем мышь сюда
WAITMS(500)
 
$c = 1
WHILE($c = 1)
 GETSCREEN ($x1, $y1, $x2, $y2)
 COLORMODE (6, $x1, $y1, $x2, $y2)
 
 IF_PICTURE_IN ($x1, $y1, $x2, $y2, "1kl.bmp", -1, 70)
  KEYPRESS (#1)
  $x11 = 840     
  $x21 = 875     
  $e = "11kl.bmp"
  VYLOV()
 ELSE
  IF_PICTURE_IN ($x1, $y1, $x2, $y2, "11kl.bmp", -1, 70)
   KEYPRESS (#1)
   $x11 = 840       
   $x21 = 875       
   $e = "11kl.bmp"
   VYLOV()
  ELSE
   IF_PICTURE_IN ($x1, $y1, $x2, $y2, "2kl.bmp", -1, 70)
    KEYPRESS (#2)
    $x11 = 1080           
    $x21 = 1140           
    $e = "22kl.bmp"
    VYLOV()
   ELSE
    IF_PICTURE_IN ($x1, $y1, $x2, $y2, "22kl.bmp", -1, 70)
     KEYPRESS (#2)
     $x11 = 1080             
     $x21 = 1140             
     $e = "22kl.bmp"
     VYLOV()
    ELSE
     IF_PICTURE_IN ($x1, $y1, $x2, $y2, "3kl.bmp", -1, 70)
      KEYPRESS (#3)
      $x11 = 1245                 
      $x21 = 1280                 
      $e = "33kl.bmp"
      VYLOV()
     ELSE
      IF_PICTURE_IN ($x1, $y1, $x2, $y2, "33kl.bmp", -1, 70)
       KEYPRESS (#3)
       $x11 = 1245                   
       $x21 = 1280                   
       $e = "33kl.bmp"
       VYLOV()
      ELSE
       END_IF
     END_IF
    END_IF
   END_IF
  END_IF
 END_IF
 
 IF($c = 1)
  GETSCREEN (355, 550, 460, 580) // проверка садка
  COLORMODE (6, 355, 550, 460, 580)
 
  IF_PICTURE_IN (355, 550, 460, 580, "sadok.bmp", -1, 90)
   WAIT (0.5)
  ELSE
   $c = 0
  LCLICK (RND(1285,1305), RND(35,55)) // возврат на базу
  WAIT   (RND(3,5))
  LCLICK (RND(370,450), RND(558,573)) // открытие садка
  WAIT   (RND(3,5))
  LCLICK (RND(1030,1120), RND(453,468)) // продажа рыбы
  WAIT   (RND(3,5))
  LCLICK (RND(690,780), RND(402,417)) // подтверждение продажи
  WAIT   (RND(3,5))
  LCLICK (RND(805,895), RND(402,417)) // рыба продана
  WAIT   (RND(3,5))
  LCLICK (RND(370,450), RND(582,597)) // переход на локальную карту
  WAIT   (RND(3,5))
  LCLICK (RND(755,775), RND(245,265)) // переход на локацию
  WAIT   (RND(3,5))
  END_IF
 END_IF
END_CYC

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #55 on: February 02, 2015, 04:53:12 PM »
Пытался прикрутить подпрограмму плавного движения мышки от Oravena, ничего не вышло, бот просто прыгает в заданную точку (строка 104).
Ты про этот? http://crapware.aidf.org/forum/index.php?topic=8.msg2276#msg2276
Потерял обнуление  переменной цикла
Code: (clickermann) [Select]
FOR($MOVE_i=0, ......для версии 4.11


BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #56 on: February 02, 2015, 05:03:56 PM »
Спасибо буду пробовать дальше

BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #57 on: February 02, 2015, 07:33:56 PM »
Пытался прикрутить подпрограмму плавного движения мышки от Oravena, ничего не вышло, бот просто прыгает в заданную точку (строка 104).
Ты про этот? http://crapware.aidf.org/forum/index.php?topic=8.msg2276#msg2276
Потерял обнуление  переменной цикла
Code: (clickermann) [Select]
FOR($MOVE_i=0, ......для версии 4.11

Ввел обнуление переменной, все равно не арбайтен(

BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #58 on: February 03, 2015, 08:15:02 PM »
С помощью более опытных и понимающих товарищей, разобрался с плавным перемещением мыши прикрутил таки к боту. Также, поправил кое-где задержки, чтоб было больше похоже на человека  ;D
Также чуток изменил подпрограмму вываживания рыбы, для снижения нагрузок на удилище и катушку при вытягивании. Теперь можно смело тянуть рыбу в 30-35% от мощности снастей (хотя, рекомендуется не более 20%).

Code: (clickermann) [Select]
#name "FanFish"
#ps2_keyboard
$x1 = 840
$y1 = 470
$x2 = 1280
$y2 = 505

// подпрограмма плавного движения мыши
SUB(MOUSE_MOVE, $MOVE_END_X, $MOVE_END_Y)
 $MOVE_SPEED = 25  // множитель скорости, вносим вручную
     
 $MOVE_Start_X = $_xmouse
 $MOVE_Start_Y = $_ymouse
 $MOVE_X = $MOVE_Start_X
 $MOVE_Y = $MOVE_Start_Y     
 $dist = DIST($MOVE_END_X, $MOVE_END_Y, $MOVE_Start_X, $MOVE_Start_Y)     
 $MOVE_SPEEDVAR = INT((SQRT($dist))/$MOVE_SPEED)     
 IF ($MOVE_SPEEDVAR < 1)
  $MOVE_SPEEDVAR = 1
 END_IF     
 $MOVE_step = ($dist-1)/$MOVE_SPEEDVAR
 $MOVE_X_step = ($MOVE_END_X-$MOVE_Start_X)/$MOVE_step
 $MOVE_Y_step = ($MOVE_END_Y-$MOVE_Start_Y)/$MOVE_step     
 FOR ($MOVE_i=0, $MOVE_i<INT($MOVE_step))
  $MOVE_X = $MOVE_X + $MOVE_X_step
  $MOVE_Y = $MOVE_Y + $MOVE_Y_step
  MOVE   (ROUND($MOVE_X, 0), ROUND($MOVE_Y, 0))
  WAITMS (1)
 END_CYC     
 MOVE ($MOVE_END_X, $MOVE_END_Y)
 $LC1 = $MOVE_END_X
 $LC2 = $MOVE_END_Y
END_SUB
 
// подпрограмма подсечки и вываживания рыбы
SUB(VYLOV)
 WAITMS (300)
//  ожидание монента подсечки и проверка, а не бросила ли рыба наживку
 $a = 1
 WHILE ($a = 1)
  GETSCREEN  (530, 270, 600, 340)
  COLORMODE  (6, 530, 270, 600, 340)
 
  IF_PICTURE_IN (530, 270, 600, 340, "kurs.bmp", -1, 70) 
   $a = 0
  ELSE
   GETSCREEN ($x11, $y1, $x21, $y2)
   COLORMODE (6, $x11, $y1, $x21, $y2)
   
    IF_PICTURE_IN ($x11, $y1, $x21, $y2, $e, -1, 70)
     WAITMS (300)
    ELSE
     $a = 0           
    END_IF   
  END_IF
 END_CYC

// подсечка
 WAIT     (RND(0.3, 0.5))
 KEYPRESS (#SPACE)
 WAIT     (RND(0.3, 0.5))
// вываживание
 $b = 1
 WHILE ($b = 1)
  GETSCREEN  (530, 270, 600, 340)
  COLORMODE  (6, 530, 270, 600, 340)
 
  IF_PICTURE_IN (530, 270, 600, 340, "kurs.bmp", -1, 70)     
   KEYDOWN (#H)
   WAITMS  (150)
   KEYUP   (#H)
   WAITMS  (5)
   KEYDOWN (#G)
   WAITMS  (140)
   KEYUP   (#G)
   WAITMS  (200)   
  ELSE
   WAITMS   (300)
   KEYPRESS (#T)
   $b = 0
  END_IF
 END_CYC
 WAIT (1)  
END_SUB
 
// основное тело программы
WAIT (2)
 
// заброс удочки 1
KEYPRESS   (#1)
MOUSE_MOVE (RND(838, 846), RND(412, 420))
WAIT       (RND(0.3, 1))
LCLICK    ($LC1, $LC2)
WAIT       (2)
 
// заброс удочки 2
KEYPRESS   (#2)
MOUSE_MOVE (RND(1096, 1104), RND(386, 394))
WAIT       (RND(0.3, 1))
LCLICK     ($LC1, $LC2)
WAIT       (2)
 
// заброс удочки 3
KEYPRESS   (#3)
MOUSE_MOVE (RND(1242, 1250), RND(351, 359))
WAIT       (RND(0.3, 1))
LCLICK    ($LC1, $LC2)
WAIT       (2)

// сдвигаем курсор
MOUSE_MOVE (RND(545, 555), RND(285, 295)) 
WAITMS     (500)

// ожидание поклевки и вылов рыбы
$c = 1
WHILE ($c = 1)
 GETSCREEN ($x1, $y1, $x2, $y2)
 COLORMODE (6, $x1, $y1, $x2, $y2)
 
 IF_PICTURE_IN ($x1, $y1, $x2, $y2, "1kl.bmp", -1, 70)
  KEYPRESS (#1)
  $x11 = 840     
  $x21 = 875     
  $e = "11kl.bmp"
  VYLOV()
 ELSE
  IF_PICTURE_IN ($x1, $y1, $x2, $y2, "11kl.bmp", -1, 70)
   KEYPRESS (#1)
   $x11 = 840       
   $x21 = 875       
   $e = "11kl.bmp"
   VYLOV()
  ELSE
   IF_PICTURE_IN ($x1, $y1, $x2, $y2, "2kl.bmp", -1, 70)
    KEYPRESS (#2)
    $x11 = 1080           
    $x21 = 1140           
    $e = "22kl.bmp"
    VYLOV()
   ELSE
    IF_PICTURE_IN ($x1, $y1, $x2, $y2, "22kl.bmp", -1, 70)
     KEYPRESS (#2)
     $x11 = 1080             
     $x21 = 1140             
     $e = "22kl.bmp"
     VYLOV()
    ELSE
     IF_PICTURE_IN ($x1, $y1, $x2, $y2, "3kl.bmp", -1, 70)
      KEYPRESS (#3)
      $x11 = 1245                 
      $x21 = 1280                 
      $e = "33kl.bmp"
      VYLOV()
     ELSE
      IF_PICTURE_IN ($x1, $y1, $x2, $y2, "33kl.bmp", -1, 70)
       KEYPRESS (#3)
       $x11 = 1245                   
       $x21 = 1280                   
       $e = "33kl.bmp"
       VYLOV()
      ELSE
      END_IF
     END_IF
    END_IF
   END_IF
  END_IF
 END_IF
 
// проверка садка 
 IF ($c = 1)
  GETSCREEN (355, 550, 460, 580)
  COLORMODE (6, 355, 550, 460, 580)
 
  IF_PICTURE_IN (355, 550, 460, 580, "sadok.bmp", -1, 80)
   WAIT (0.5)
  ELSE
   $c = 0
   WAIT (RND(2, 4))
   
   MOUSE_MOVE (RND(1285,1305), RND(35,55)) // возврат на базу
   WAIT       (RND(0.3, 1))
   LCLICK     ($LC1, $LC2)
   WAIT       (RND(3,5))
   
   MOUSE_MOVE (RND(370,450), RND(558,573)) // открытие садка
   WAIT       (RND(0.3, 1))
   LCLICK     ($LC1, $LC2)
   WAIT       (RND(3,5))
   
   MOUSE_MOVE (RND(1030,1120), RND(453,468)) // продажа рыбы
   WAIT       (RND(0.3, 1))
   LCLICK     ($LC1, $LC2)
   WAIT       (RND(3,5))
   
   MOUSE_MOVE (RND(690,780), RND(402,417)) // подтверждение продажи
   WAIT       (RND(0.3, 1))
   LCLICK     ($LC1, $LC2)
   WAIT       (RND(3,5))
   
   MOUSE_MOVE (RND(805,895), RND(402,417)) // рыба продана
   WAIT       (RND(0.3, 1))
   LCLICK     ($LC1, $LC2)
   WAIT       (RND(3,5))
   
   MOUSE_MOVE (RND(370,450), RND(582,597)) // переход на локальную карту
   WAIT       (RND(0.3, 1))
   LCLICK     ($LC1, $LC2)
   WAIT       (RND(3,5))
   
   MOUSE_MOVE (RND(755,775), RND(245,265)) // возврат на локацию
   WAIT       (RND(0.3, 1))
   LCLICK     ($LC1, $LC2)
   WAIT       (RND(3,5))
  END_IF
 END_IF
END_CYC
« Last Edit: February 04, 2015, 11:43:32 AM by BubukaBomb »

максим32

  • Зашел в гости
  • *
  • Posts: 1
    • View Profile
Re: Бот для Fantastic Fishing
« Reply #59 on: March 14, 2015, 04:47:54 PM »
Привет BubukaBomb, сегодня сделал все как ты написал, все получилось, но после того как бот закидывает 3 удочки, он сразу же идет на базу и продает всю рыбу. Т.е не ждет пока рыба клюнет. что может быть не так? Координаты все твои, весь код твой, лока перешеек, короче все как и у тебя, может в скайп позвонишь мне посмотришь, в долгу не останусь? скайп makar25619, спасибо