Автоматизация рыбной ловли для World of Warcraft

Познакомился с World of Warcraft очень давно и люблю его весь, но одна вещь больше всего не давала мне покоя — рыбная ловля. Это нудное повторяющееся действие, где ты просто нажимаешь на кнопку рыбной ловли и тыкаешь на поплавок раз в 5-15 секунд. Мой навык разработки рос, а ситуация с рыбной ловле так и не улучшалась с каждым годом что я играл, поэтому я решил убить двух зайцев сразу — начать осваивать python и всё же сделать бота для себя.

Я уже видел ботов, которые умеют ловить рыбу, работающие в свернутом режиме не перехватывая управления над компьютером. Также я знаю насколько беспощадны близард по вопросам банов читеров. Изменение данных в оперативной памяти легко определяется встроенным античитом. Ну и последнее — на мак я не нашёл ни одного бота.

Поэтому я решил закрыть все эти вопросы разом и сделать бота, который будет перехватывать управление мыши, кидать поплавок, и тыкать на него на экране когда нужно. Как я полагал python располагает широким выбором инструментов для автоматизации таких штук, и не ошибся.

Их слишком много! Химеры не влезают в экран в Warcraft 3

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

Сперва мы должны получить саму картинку с поплавком. Ищем и находим библиотеку pyscreenshot с гайдом как делать скриншоты, немножечко редактируем:

import pyscreenshot as ImageGrab screen_size = None screen_start_point = None screen_end_point = None # Сперва мы проверяем размер экрана и берём начальную и конечную точку для будущих скриншотов def check_screen_size(): print «Checking screen size» img = ImageGrab.grab() # img.save(‘temp.png’) global screen_size global screen_start_point global screen_end_point # я так и не смог найти упоминания о коэффициенте в методе grab с параметром bbox, но на моем макбуке коэффициент составляет 2. то есть при создании скриншота с координатами x1=100, y1=100, x2=200, y2=200), размер картинки будет 200х200 (sic!), поэтому делим на 2 coefficient = 2 screen_size = (img.size[0] / coefficient, img.size[1] / coefficient) # берем примерно девятую часть экрана примерно посередине. screen_start_point = (screen_size[0] * 0.35, screen_size[1] * 0.35) screen_end_point = (screen_size[0] * 0.65, screen_size[1] * 0.65) print («Screen size is » + str(screen_size)) def make_screenshot(): print ‘Capturing screen’ screenshot = ImageGrab.grab(bbox=(screen_start_point[0], screen_start_point[1], screen_end_point[0], screen_end_point[1])) # сохраняем скриншот, чтобы потом скормить его в OpenCV screenshot_name = ‘var/fishing_session_’ + str(int(time.time())) + ‘.png’ screenshot.save(screenshot_name) return screenshot_name def main(): check_screensize() make_screenshot()

Получаем примерно следующую картинку:

Далее — найти поплавок. Для этого у нас должен быть сам шаблон поплавка, который мы ищем. После сотни попыток я всё таки подобрал те, которые OpenCV определяет лучше всего. Вот они:

ТОЛЬКО ДЕРЕВЬЯ: 16 игроков на вся карта — это Лес (Forest Nothing) в Warcraft 3 Reforged

Берём код из ссылки выше, добавляем цикл и наши шаблоны:

import cv2 import numpy as np from matplotlib import pyplot as plt def find_float(screenshot_name): print ‘Looking for a float’ for x in range(0, 7): # загружаем шаблон template = cv2.imread(‘var/fishing_float_’ + str(x) + ‘.png’, 0) # загружаем скриншот и изменяем его на чернобелый src_rgb = cv2.imread(screenshot_name) src_gray = cv2.cvtColor(src_rgb, cv2.COLOR_BGR2GRAY) # берем ширину и высоту шаблона w, h = template.shape[::-1] # магия OpenCV, которая и находит наш темплейт на картинке res = cv2.matchTemplate(src_gray, template, cv2.TM_CCOEFF_NORMED) # понижаем порог соответствия нашего шаблона с 0.8 до 0.6, ибо поплавок шатается и освещение в локациях иногда изменяет его цвета, но не советую ставить ниже, а то и рыба будет похожа на поплавок threshold = 0.6 # numpy фильтрует наши результаты по порогу loc = np.where( res >= threshold) # выводим результаты на картинку for pt in zip(*loc[::-1]): cv2.rectangle(src_rgb, pt, (pt[0] + w, pt[1] + h), (0,0,255), 2) # и если результаты всё же есть, то возвращаем координаты и сохраняем картинку if loc[0].any(): print ‘Found float at ‘ + str(x) cv2.imwrite(‘var/fishing_session_’ + str(int(time.time())) + ‘_success.png’, src_rgb) return (loc[1][0] + w / 2) / 2, (loc[0][0] + h / 2) / 2 # опять мы ведь помним, что макбук играется с разрешениями? поэтому снова приходится делить на 2 def main(): check_screensize() img_name = make_screenshot() find_float(img_name)

Читайте также:  Виновные будут наказаны варкрафт

Итак, у нас есть координаты поплавка, двигать курсор мыши умеет autopy буквально с помощью одной строки, подставляем свои координаты:

import autopy def move_mouse(place): x,y = place[0], place[1] print(«Moving cursor to » + str(place)) autopy.mouse.smooth_move(int(screen_start_point[0]) + x , int(screen_start_point[1]) + y) def main(): check_screensize() img_name = make_screenshot() cords = find_float(img_name) move_mouse(cords)

Курсор на поплавке и теперь самое интересное — как же узнать когда нужно нажать? Ведь в самой игре поплавок подпрыгивает и издает звук будто что-то плюхается в воду. После тестов с поиском картинки я заметил, что OpenCV приходится подумать пол секунды прежде чем он возвращает результат, а поплавок прыгает даже быстрее и изменение картинки мы врядли сможем определить с помощью OpenCV, значит будем слушать звук. Для этой задачки мне пришлось поковырять разные решения и остановился вот над этим — пример использования гугл апи для распознавания голоса, оттуда мы возьмём код, который считывает звук.

import pyaudio import wave import audioop from collections import deque import time import math def listen(): print ‘Listening for loud sounds. ‘ CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 2 RATE = 18000 # битрейт звука, который мы хотим слушать THRESHOLD = 1200 # порог интенсивности звука, если интенсивность ниже, значит звук по нашим меркам слишком тихий SILENCE_LIMIT = 1 # длительность тишины, если мы не слышим ничего это время, то начинаем слушать заново # открываем стрим p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, # output=True, # на мак ос нет возможности слушать output, поэтому мне пришлось прибегнуть к использованию Soundflower, который умеет перенаправлять канал output в input, таким образом мы перехватываем звук игры будто это микрофон input=True, frames_per_buffer=CHUNK) cur_data = » rel = RATE/CHUNK slid_win = deque(maxlen=SILENCE_LIMIT * rel) # начинаем слушать и по истечении 20 секунд (столько максимум длится каждый заброс поплавка), отменяем нашу слушалку. success = False listening_start_time = time.time() while True: try: cur_data = stream.read(CHUNK) slid_win.append(math.sqrt(abs(audioop.avg(cur_data, 4)))) if(sum([x > THRESHOLD for x in slid_win]) > 0): print ‘I heart something!’ success = True break if time.time() — listening_start_time > 20: print ‘I don’t hear anything during 20 seconds!’ break except IOError: break # обязательно закрываем стрим stream.close() p.terminate() return success def main(): check_screensize() img_name = make_screenshot() cords = find_float(img_name) move_mouse(cords) listen()

Последнее, что осталось — споймать саму рыбку, когда мы услышим звук, снова используем autopy:

def snatch(): print(‘Snatching!’) autopy.mouse.click(autopy.mouse.RIGHT_BUTTON) def main(): check_screensize() img_name = make_screenshot() cords = find_float(img_name) move_mouse(cords) if listen(): snatch()

По моим тестам, что я оставлял бота рыбачить по ночам, за неделю такого абуза он сделал около 7000 бросков и словил поймал около 5000 рыб. Погрешность 30% вызвана тем, что иногда не получается отловить звук или найти поплавок из-за освещения или поворотов поплавка. Но результатом я доволен — впервые попробовал python, сделал бота и сэкономил себе кучу времени.

Читайте также:  Варкрафт набор ножей мальта отзывы

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

Буду рад любым комментариям.

Источник: habr.com

Как в WOW стать большим?

Есть несколько способов на время увеличить размер вашего персонажа в игре world of warcraft. Это позволит показать всем вокруг, какой вы большой и страшный.

Во-первых нам понадобится «Огненная вода Зимней Спячки». Это зелье довольно часто падает из мобов в локации «Зимние ключи». А ещё его можно купить на аукционе, его обычно выставляют довольно дешево.

Второй способ увеличиться — это «Пир для великанов», который создаётся кулинарами. Его также можно купить на ауке или же приготовить самому, если профа прокачана.

Если же вы играете не на пиратке, а на офе, то вам доступно ещё несколько способов увеличить свой размер:

1) Есть игрушка, которая превращает вас в таурена. Это особенно эффектно, если вы играете гномом, ведь их маунты визуально выглядят более крупными.

2) Так же вам пригодится вот эта игрушка.

Источник: www.bolshoyvopros.ru

DOTAStar.ru

Сегодня на официальных серверах battle.net обновилась версия игры.

Blizzard выпустили патч 1.24c для Warcraft.

В новой версии:
— Исправлена ошибка в кампании Альянса “Глава 6: Очищение Стратхольма”
из-за которой не загружалась карта.
— Исправлена ошибка, из-за которой функциями JASS в некоторых случаях
возвращались неправильные значения.
— Исправлена ошибка, из-за которой функция TriggerEvaluate в некоторых
случаях возвращала неправильные значения.
— Устранена утечка памяти, возникавшая при обращении к функциям GroupEnum.
— Игра больше не дает сбой при обращении к функции CreateImage на PowerPC
Macintosh.
— Обновленный редактор мира для Mac теперь работает с учетом последних
изменений в JASS.

Инструкция по установке патча:
Это неофициальный патч, а лишь архив с пропатченными файлами. Архив самораспаковывающийся. Имя файла war3x_h_patch_1.24c.exe
Для того чтобы обновить Warcraft и играть в battle.net, необходимо запустить файл и указать путь где у вас находится папка Warcraft III (например c:games — стоит по умолчанию). Можно распаковать архив в любую папку на ваше усмотрение, а затем просто скопировать файлы в ваш Warcraft заменив те которые были до этого.

Внимание! Garena пока не спешит переходить на новую версию.

Не забываем делиться хорошими новостями с друзьями:

30 комментариев на «Патч 1.24c для Warcraft»

  1. Равиль пишет:
    04 Дек 2009 в 23:45 как скачать?
  2. omaxa пишет:
    05 Дек 2009 в 13:56 Спасибо вам за этот архив с пропатченными файлами (у меня пиратка). Нашел ваш сайт через яндекс.
  3. admin пишет:
    05 Дек 2009 в 14:09 > Равиль не понял — в чем проблема? >omaxa пожалуйста ))
  4. Lobster пишет:
    05 Дек 2009 в 16:58 спасибо мужЫг, что патч архивный. спасение так сказать =)
  5. zih пишет:
    06 Дек 2009 в 7:05 Скачал, распаковал в папке warcraft, запускаю игру и все равно 124.b запускается. Объясните что нужно делать
  6. admin пишет:
    06 Дек 2009 в 9:15 если вы распаковали в папке Warcraft, то у вас файлы попали не туда куда нужно скорее всего архив при распаковывании созадает папку Warcraft III, а в ней файлы. проверьте куда они у вас попали.
  7. zih пишет:
    06 Дек 2009 в 17:11 а куда надо распаковывать.
  8. zih пишет:
    06 Дек 2009 в 17:25 Мне помойму русская версия патча нужна
  9. Hostile пишет:
    06 Дек 2009 в 20:02 Гарена уже тож перешла) спасибо!
  10. -=SerG=- пишет:
    11 Дек 2009 в 17:18 Всем спс. Может быть когда нибудь на трекерах додумаются выложить пропатченные файлы. =)
  11. sortec пишет:
    14 Дек 2009 в 1:40 У меня прога не запускается. :- ( он запрашивает программу, через которую можно было бы её открыть. подскажите плз
  12. ASON пишет:
    16 Дек 2009 в 14:55 Ув.Админ перезайлейте плиз патч на Littlebit хотяб ато я дипозита из за провайдера скачать неомгу
  13. Kit9 пишет:
    05 Янв 2010 в 0:19 Помогите пожалуйста скачал доту 6.64 с ботами пытаюсь запустить в нете и локалке пишет «Слишком большой размер файла выберите другую карту» ЧТО ДЕЛАТЬ? =) заранее спасибо.
  14. dead пишет:
    10 Янв 2010 в 11:33 какие именно папки нужно менять для нового патча!
  15. [LzD]_Sh1z01d пишет:
    13 Янв 2010 в 22:47 лутьшеб ещо куданить залили а то с депозита скорости никакой
  16. Espartox пишет:
    17 Янв 2010 в 1:19 а есть 1.24b у вас?
  17. 999 пишет:
    18 Май 2010 в 17:54 Спасибо огромное вам помогли.
  18. Артём пишет:
    22 Июн 2010 в 2:19 Не могу зайти в батл нет . плз помогите что делать?пишет что либо не та версия(а версия та!) или нужно обновить до последней версии вручную. не знаю что такое.
  19. SanbOK пишет:
    30 Июн 2010 в 15:23 А можно с Е патча перейти на Ц патч. Если да то как плиз помогите.
  20. BARTletby пишет:
    08 Июл 2010 в 4:30 ОЧЕНЬ ОЧЕНЬ БОЛЬШОЕ СПС.
  21. Катя пишет:
    03 Авг 2010 в 22:38 Прочитал с большим интересом, очень интересая история. Начинаю себя вспоминать, у меня все так же начиналось
  22. Семен пишет:
    04 Авг 2010 в 7:35 Пост неплохой, закину сайт в закладки.
  23. Ruslan=)4emIIion WWE пишет:
    04 Авг 2010 в 12:03 щас вот скачаю,скажу как всё прошло=))
  24. Ruslan=)4emIIion WWE пишет:
    04 Авг 2010 в 12:38 надеюсь будет патч работать =)))
  25. Mmogold пишет:
    11 Авг 2010 в 0:38 У каждого своё мнение и вижу что вы в этом понимаете. Интересно а свой сайт вы купили или сами создали? Очень хорошо всё описано спс. P.S. Может разместите мою ссылку у себя на блоге может и получится заработать на нём.
  26. masuda пишет:
    28 Авг 2010 в 0:39 дайте ссылку умоляю на патч 1.24с только штоб файлы а не архив .
  27. Наталья пишет:
    31 Окт 2010 в 8:37 Материал на пять с плюсом. Но есть и минус! У меня скорость интернета 56кб/сек. Страница грузилась около 40 секунд.
  28. Олежа пишет:
    07 Янв 2011 в 20:54 Сенкс *
  29. Ghost пишет:
    16 Янв 2011 в 10:44 у меня не устанавливается нифига(((
  30. Olaf пишет:
    04 Фев 2011 в 1:41 Смешной вопрос: А на 1.07 поставится?
Читайте также:  World of warcraft как попасть в темные земли

Источник: www.dotastar.ru