Создание простого бота для онлайн игры world of warcraft

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

Предыстория

Однажды на выходных я зашел за своего персонажа в world of warcraft. Делать в игре было нечего — все рейдовые боссы уже убиты, друзей для выхода на арену нет, остается только выполнение квестов и неспешная добыча золота. Квесты мне не очень нравятся, а свободное время в игре я обычно провожу возле аукциона — с помощью специальных аддонов я покупаю дешевле, а потом продаю дороже, выигрывая на разнице в цене.

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

СКАЧАТЬ БОТОВ 1.12.2 | БОТЫ #1 | ShwepSS

В качестве инструмента реализации я выбрал Auto It, но потом оказалось, что задача не такая тривиальная, как кажется на первый взгляд, и мне пришлось подключить дополнительные инструменты. Сразу скажу, что я не использовал никаких «грязных» методов вроде чтения памяти процессов или перехвата трафика, только autoit для имитации кликов мыши и клавиатуры и считывания цветов пикселей с экрана.

Внимание

Все описанные действия вы выполняете на свой страх и риск, правилами игры это запрещено и может привести к перманентному бану аккаунта.

Перемещение

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

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

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

Замена и настройка стандартных ботов на крутых под себя через скрипты Dota 2 DotaPlay

Немного подумав, придумали решение проблемы: нужно написать аддон для WoW, который будет получать данные о текущем положении персонажа (координаты и поворот персонажа) и отдавать команды, куда перемещать персонажа. Внешне это должно выглядеть как цветной «семафор», который будет показывать желаемое действие: двигаться вперед, вправо или влево, или повернуть. Когда персонаж прибывает в нужную точку, семафор должен символизировать, что персонаж прибыл в это место и должен выполнить следующее действие. Так как мой персонаж перемещается между двумя точками, я решил сделать два семафора: один будет командовать на пути к аукционисту, а другой — на пути к почте. С алгоритмом я думаю разобрались, далее идут примеры кода (xml — шаблоны аддонов, lua — сам исходный код, и autoit), местами закрученные и корявые, но думаю простите меня: на этих языках я писал впервые, и до конца не разобрался.

Читайте также:  Резня варкрафт 3 гайды

Чтобы реализовать семафоры, мне пришлось изучить процесс разработки аддонов для WoW, он очень хорошо описан в WoWwiki

В самой первой версии семафора он только показывал, стою ли я лицом к аукционисту в данный момент, и выделял соответствующие блоки зеленым цветом:

В качестве основы для своего аддона я взял hello world! аддон, описанный в wowiki.
Изначально он не имел никаких графических элементов, поэтому пришлось добавить в него вывод прямоугольников, а также добавить обработчик . В результате мой HelloWorld.xml выглядит примерно так:

Semafor_Onload(); CheckPosition();

Соответственно в HelloWorld.lua необходимо написать соответствующие обработчики. Чтобы узнать, на какой угол в данный момент повернут персонаж, используйте функцию GetPlayerFacing, которая возвращает угол относительно севера в радианах. Экспериментально было установлено, что когда персонаж смотрит прямо на аукциониста, его угол равен 5.42 радиана. Но довольно сложно повернуть персонажа точно на такой угол, поэтому мы допускаем небольшой разброс (5.35 — 5.5 радиан).

function Semafor_Onload() print(«Hi!»); end function CheckPosition() local facing = GetPlayerFacing(); — проверяем, куда смотрит персонаж, и рисуем, в какую сторону он должен повернуться, чтобы посмотреть на аукциониста if(facing = 5.35) then PlayerAucViewTrue:SetTexture(0,1,0); — установка цвета текстуры, цвет в RGB. 1,0,0 — красный, 0,1,0 — зеленый PlayerAucViewLeft:SetTexture(1,0,0); PlayerAucViewRight:SetTexture(1,0,0); elseif ((facing > 5.50))then PlayerAucViewTrue:SetTexture(1,0,0); PlayerAucViewLeft:SetTexture(1,0,0); PlayerAucViewRight:SetTexture(0,1,0); elseif (facing < 5.35) then PlayerAucViewTrue:SetTexture(1,0,0); PlayerAucViewLeft:SetTexture(0,1,0); PlayerAucViewRight:SetTexture(1,0,0); end end

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

Global $WinName = «World of Warcraft» Global $state = «stop» Opt(«PixelCoordMode», 2) ;Отсчет пиксельных координат от левого верхнего угла окна клиента Opt(«MouseCoordMode», 2) ; Отсчет координат мыши от левого верхнего угла клиентского окна HotKeySet(«», «GoRotate») HotKeySet(«», «_Exit») WinActivate($WinName) WinWaitActive($WinName) While 1 sleep(10) Running(); бесконечный вызов этой функции, которая выполняет необходимое действие WEnd Func _Exit() Exit EndFunc Func GoRotate() $state = «rotating» EndFunc Func Running() Switch $state Case «rotating» Rotating() EndSwitch EndFunc Func Rotating() While $state = «rotating» ; определяем угол поворота, нужно ли поворачивать; координаты точек, где берем цвет, берем вручную со скриншота семафором $angleOkColor = PixelGetColor(32,24) $angleLeftColor = PixelGetColor(29,36) $angleRightColor = PixelGetColor(40,32) if $angleOkColor = 65280 Then $state = «starttrading» ;если все в порядке, то мы на месте — начинаем торговать ElseIf $pxAngleLeftColor = 65280 Then; поворот налево Send(«»); нажимаем кнопку «влево» и засыпаем, пока не сработает сигнал семафора; левый поворот плавный, иногда он поворачивает слишком сильно из-за этого While PixelGetColor(29,36) = 65280 sleep(2) Wend Send(«») ElseIf $pxAngleRightColor = 65280 Then ; правый поворот не плавный, повернуть точнее Send(«»); sleep(20); EndIf EndFunc

Вот и все, сохраняем аддон, запускаем WoW, запускаем скрипт AutoIt и смотрим на персонажа, который сам поворачивает свое лицо в нужную сторону. Но помимо поворотов, нужно также реализовать перемещение персонажа вперед-назад и вправо-влево, чтобы он мог подойти к аукционисту из почтового ящика. Нам повезло, что на пути персонажа нет препятствий, иначе задача была бы сложнее.

И таким образом мы просто добавляем в наш xml дополнительные кадры для еще 5 кнопок semaphore: position Ok!, Движение вперед, движение назад, движение вправо и движение влево, а в lua-файл добавляем код, который будет показывать, куда нам нужно двигаться в данный момент. Ориентировочные координаты, где нам нужно находиться, мы знаем. Казалось бы, все просто, но не тут-то было — как мы видели на карте, и уже выяснили при совершении поворотов, движение происходит под углом к северу. Т.е. При перемещении мы постоянно меняем обе координаты персонажа. Считать при этом, куда идти дальше не очень удобно, поэтому воспользуйтесь известными формулами для поворота системы координат на заданный угол (в нашем случае — 5.42 радиана)

Читайте также:  Запределье warcraft что это

Теперь при движении к/от аукциониста и вправо — влево мы будем менять только одну координату. Дополните наш lua-файл соответствующим кодом, и он будет выглядеть следующим образом:

function Semafor_Onload() print(«Hi! Все готово!»); end function CheckPosition() local facing = GetPlayerFacing(); SetMapToCurrentZone(); local posX, posY = GetPlayerMapPosition(«player»); — переходим в систему координат относительно аукциона (поворачиваем координаты на угол 5.42 радиан) newPosX = posX*math.cos(5.42) + posY*math.sin(5.42); newPosY = -posX*math.sin(5.42) + posY*math.cos(5.42); newPosX = -newPosX; — не люблю отрицательные числа 🙂 — проверяем, куда смотрит персонаж, и рисуем направление, в котором он должен повернуться, чтобы посмотреть на аукциониста if(facing = 5.35) then PlayerAucViewTrue:SetTexture(0,1,0); PlayerAucViewLeft:SetTexture(1,0,0); PlayerAucViewRight:SetTexture(1,0,0); elseif ((facing > 5.50 и лицом к лицу < 6.5))then PlayerAucViewTrue:SetTexture(1,0,0); PlayerAucViewLeft:SetTexture(1,0,0); PlayerAucViewRight:SetTexture(0,1,0); elseif (facing < 5.35) then PlayerAucViewTrue:SetTexture(1,0,0); PlayerAucViewLeft:SetTexture(0,1,0); PlayerAucViewRight:SetTexture(1,0,0); end — проверим позицию персонажа и определим куда бежать чтобы попасть к аукционеру if (newPosX =0.8875) then PlayerGoForvard:SetTexture(1,0,0); PlayerGoBack:SetTexture(1,0,0); PlayerGoLeft:SetTexture(1,0,0); PlayerGoRight:SetTexture(1,0,0); PlayerOnAuc:SetTexture(0,1,0); elseif (newPosY > 0.889) then PlayerGoForvard:SetTexture(1,0,0); PlayerGoBack:SetTexture(1,0,0); PlayerGoLeft:SetTexture(0,1,0); PlayerGoRight:SetTexture(1,0,0); PlayerOnAuc:SetTexture(1,0,0); elseif (newPosY < 0.8875) then PlayerGoForvard:SetTexture(1,0,0); PlayerGoBack:SetTexture(1,0,0); PlayerGoLeft:SetTexture(1,0,0); PlayerGoRight:SetTexture(0,1,0); PlayerOnAuc:SetTexture(1,0,0); elseif (newPosX >0.207) then PlayerGoForvard:SetTexture(0,1,0); PlayerGoBack:SetTexture(1,0,0); PlayerGoLeft:SetTexture(1,0,0); PlayerGoRight:SetTexture(1,0,0); PlayerOnAuc:SetTexture(1,0,0); end

Вот и все, теперь у нас есть что-то вроде этого семафора:

Осталось дописать по аналогии AutoIt скрипт, чтобы при загорании сигналов семафора он посылал соответствующие кнопки в игре. Единственное, с чем я столкнулся, это то, что он не позволяет мне правильно посылать буквенные кнопки (A/D), поэтому мне пришлось привязать strafe к F6/F7.

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

Если тема будет интересна для общества Хабра, то в следующих частях статьи я расскажу о том, как я реализовал взаимодействие с аукционером и как получал почту из почтового ящика.

Сегодня в 12 часов поставил бота кататься по аукциону, за время его работы (около 9 часов) потребовалось 3 раза вмешаться в его работу — один раз застрял в выступающих элементах стены, потом я немного переписал алгоритм, чтобы бежать в сторону почты, и 2 раза промахнулся мимо почтового ящика — нужно исправить, еще не дошел.
Прибыль за день:

Неплохо, при условии, что я вообще не участвовал в процессе 🙂

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

Как использовать ботов в WoW

Я использую ботов уже более 3 лет. На начальных этапах запреты были определенно. Первый раз меня забанили за использование глайдера.

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

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

Каких ботов использовать?

Все боты можно найти в каталоге читов на нашем сайте.

MrFishIt — Лучший бот для рыбалки.
SGather — лучший бот для добычи руды и трав.
Pirox FishBot — очень хороший бот для рыбалки.

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

1. Используйте бота в разное время. Не думайте «Я использую бота 4 часа каждый день» или «Я использую бота каждый день в 7 утра». Всегда меняйте время и продолжительность.

2. Если вы используете стандартный профиль бота, вы должны следить за ним каждые 30-45 минут. Не оставляйте без присмотра стандартные профили.

Читайте также:  Как пройти рейды в варкрафт

3. PVP боты — очень плохая идея. Мне требуется около 5 секунд, чтобы определить бота на BG.

4. Никогда не говорите в игре об использовании бота, даже в привате. Любой ГМ имеет право прочитать ваш журнал сообщений. Если вас заподозрят в использовании бота, проверят ваши сообщения и найдут что-то вроде «Эй, чувак, я только что скачал и установил бота, хе-хе», ваш аккаунт будет мгновенно забанен.

5. Если вы используете бота для повышения уровня, то никогда не лутайте с мобов! Такой вид фермерства будет вызывать меньше подозрений у других игроков.

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

7. Примечание к пункту #6. Никогда не выменивайте более 5 стаков у одного персонажа. Если я вижу таких игроков, то сразу подозреваю, что они используют бота и смотрю в арсенале, что это такой «перк».

Кстати, я видел много идиотов, которые при использовании бота очень недовольны тем, что их место занято другими ботами и кидают на них репорт. Никогда не отправляйте отчет другому боту, так как это только привлечет к вам внимание ГМов. Если вы встретили такого, просто измените время использования (это первый пункт).

8. Не настраивайте своего бота, то есть не выводите только 2 заклинания на панель действий. Вы не можете сказать что-то вроде «Я дошел до 80, имея только две силы». Используйте все доступные способности в настройках бота. Есть большая разница между ботом и нубом. Больше заклинаний для бота — меньше шансов быть замеченным.

В конце концов, мы хотим казаться нубом, но не ботом ^_^.

9. Время от времени выходите из игры. Однако, в разное время и за разные промежутки времени.

10. Я люблю использовать чистых персонажей, без друзей. Это значит, что любое личное сообщение будет проверкой использования бота.

11. Разнообразьте свои однообразные действия. Например, каждый день ходить на БГ или в случайные рейды. Поверьте, это очень помогает снять подозрения.

12. Если вы боитесь, что вас забанят, сделайте следующую умную вещь! Скачайте программу (Скачать с Turbobit | Скачать с Depositfiles) и установите ее на свой компьютер. Позволяет защититься от вирусов, читерства и т.д. Но нам нужна функция скрытия ip-адреса.

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

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

Эти простые подсказки очень помогут вам в вашем нелегком труде. Удачи в использовании.

Источник: wow-игра.ru

World Editor Урок 23 — Создание ботов искусственного интеллекта by godleonid

Вот 23 урок по World Leaderboard — Создание AI ботов от godleonid. В этом руководстве автор объясняет, как создавать ботов на карте AI (ИИ). В основном он рассказывает об аниме картах, но в целом он дает вам базовые знания. Так что это обязательно к просмотру!

  • Редактор миров Урок 9 — Создание способности Цукуёми by godleonid
  • World Editor Урок 11 — Создаем 3 способности Камуи by godleonid
  • World Editor Урок 14 — Создание техники Мадары Мокутона by godleonid
  • World Editor Урок 15 — Создание Сусано на третьей стадии by godleonid
  • Урок 16 редактора мира — Создание Итачи Аматерасу от godleonid
  • World Editor Урок 18 — Создание способности «Огненный дракон» by godleonid

Помогите сайту — оставьте комментарий!

Только зарегистрированные пользователи могут добавлять комментарии.
[ Зарегистрируйтесь | Войдите ]

Источник: skachat-warcraft-3.ru