Сегодня 14 июня 2021 года 19 часов 49 минут
Всем доброго дня!
Знакомство с автокликером описано в предыдущей статье:
14.06.2021. Автокликеры и онлайн игры. Автоматизируем сбор титанита в игре Хроники Хаоса.
Появилась идея автоматизировать процесс ловли в игре Трофейная рыбалка 2, так как для открытия новых лок необходимо ловить крайне редких рыб и на их вылов уходят месяцы.
В лове рыбы как в игре, так и в реале, один из важных моментов - определение поклевки. Мне думалось, что можно привязаться к какому либо событию, типа звука (в игре поклевка дублируется звуком). В Clikermann такой возможности нет.
На форуме
Автокликер Clickermann :: Форум
нашел похожий скрипт. Но он работает некорректно.
Момент поклевки определяется командами
GETSCREEN
IF_PICTURE_IN (629,418,694,478, "ввв.bmp", -1, 100) //определение пикселя кивка донки в зоне поклевки
На том же форуме нашел как работать с командой
Для начала сделаем обычный скриншот при помощи кликера.
GETSCREEN // Clickermann помещает в свой графический буфер скриншот ва экрана
SCREENSHOTFIX(0,0, $_xmax,$_ymax, "screen.bmp") //сохраняем скриншот
HALT // Останавливает скрипт
Заходим в рыбалку, забрасываем уду, ждем поклевку (нас интересуют топящие) и делаем скриншот.
Нас интересует область в красном прямоугольнике. Открываем при помощи Paint копируем указанную область в новый лист, вставляем, обрезаем и сохраняем в bmp формате 24-х разрядном (pripyat_pop.bmp).
Пробуем отловить момент поклевки.
$check = 0
WHILE($check = 0) // цикл ожидания
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "pripyat_pop.bmp", -1, 100)
LOGWRITE ("картинка найдена")
HALT
$check = 1
ELSE
WAITMS(50)
END_IF
END_CYC
Ничего не происходит.
На форуме предлагают использовать режим цветокоррекции
COLORMODE(0-8)
значения могут быть от 0 до 8. Ноль по умолчанию.
Попробуем разные режимы. Листаем галерею
берем скриншот мода 5 и копируем нужную область.
Картинку не находит. Был момент, когда нашел, но это больше не повторялось. Похоже фон меняется в зависимости от времени суток игрового времени. Попробуем зайти другим путем. Возьмем мод 8 и зададим область поиска - координаты верхнего левого угла области поклевки и правого нижнего.
Для достижения лучшего результата необходимо сделать несколько контрольных областей (Уже-шире, выше-ниже ) на нескольких скринах поклевки и проверить их.
$check = 0
WHILE($check = 0) // цикл ожидания
GETSCREEN(557,678,651,751)
COLORMODE(8)
IF_PICTURE_IN (557,678,651,751, "pripyat_pop.bmp", -1, 100)
LOGWRITE ("Картинка найдена")
HALT
LDOWN(1022,558)
WAIT(80)
$check = 1
ELSE
WAITMS(50)
END_IF
END_CYC
Свершилось Чудо!
16 июня 2021 года 5 часов 45 минут. Солнечно.
Осталось разместить рабочий листинг кода для одной уды:
$check = 0
WHILE($check = 0) // цикл ожидания
GETSCREEN(557,678,651,751)
COLORMODE(8)
IF_PICTURE_IN (557,678,651,751, "pripyat_pop.bmp", -1, 100)
//LOGWRITE ("Картинка найдена")
KEYPRESS(#1)
Wait(1)
//зажимаем правую кнопку мыши - тащим, RND - чтобы не было постоянных кликов четко в одну точку
RDOWN(RND(1010,1030),RND(540,565))
WAIT(1)
//поднимаем удочку вверх
MOVE(RND(1010,1025),RND(300,315))
Wait(1)
//зажимаем пробел, чтобы было меньше срывов
KEYDOWN(#space)
//ждем вытаскивания
WAIT(10)
//отжимаем пробел
KEYUP(#space)
WAIT(1)
//отжимаем правую кнопку мыши
RUP(RND(1010,1025),RND(300,315))
//ждем окна продажи
WAIT(10)
//продать рыбу
LCLICK(RND(925,930),RND(715,723))
wait(2)
//Заброс
LCLICK(RND(1068,1078),RND(480,500))
WAIT(5)
ELSE
WAITMS(50)
END_IF
END_CYC