Команды Hostbot

Некоторые команды нужно вводить на канале бота (см. Главная), или в чате комнаты Гарена. Некоторые только в лобби игры.
Вот только основные команды, необходимые для игры. Более подробный список команд вы можете прочитать на ЭТОЙ странице.
В комментариях вы можете спросить, есть ли команда, чтобы что-то сделать. Параметр команды, который берется в <> — обязательный. B [] — опционально. Содержание приведено в виде таблицы слева — команда и параметры, справа — что делает и расшифровка параметров.

Формат времени

Для некоторых команд существует временное действие (например, бан). Время устанавливается следующим образом:

номерМОДИФИКАТОРА номерМОДИФИКАТОРА

Модификаторы:

Скопировать в буфер обмена

s — секунда m — минута h — час d — день w — неделя M — месяц.

Если установлен в 0, продолжительность не ограничена.

Для всех (в игре)

КомандаОписание

!checkme Отображает краткую информацию о себе (сервер, ник, проверка свопа, права)
!stats [nickname] Выводит статистику для игроков, чей ник содержит [ник]. На канале работает по полному нику. Если [ник] не задан — заменяет ваш ник
!votekick Запускает голосование, чтобы выгнать игрока, чей ник содержит
!да соглашается пнуть игрока
!votestart !перейти !перейти Проголосовать, чтобы начать игру. Доступно только в играх с автозапуском

Для всех на канале

детальная инструкция бимсбот вов 3.3.5а + приватные профиля бесплатно

Команда Описание

!См Подтверждает привязку аккаунта bnet к аккаунту irinabot.ru по , который был сгенерирован на сайте
!загрузить Выбор конфига для создания игры
!карта Выбирает карту для создания игры
!pub Создает игру

Администратор в игре

КомандаОписание

!проверьте Выводит информацию об игроке, чей ник содержит
!закрыть Закрывает слот
!comp Размещает слот на компьютере сложности . принимает числа 0,1,2 (0 — слабый, 1 — средний, 2 — сильный)
!бросить Выбрасывает всех отстающих игроков из игры/лобби
!конец Завершает игру
!кик Выбрасывает игрока, имя которого содержит
!отключить звук Запрещает общаться в чате с игроком
!открыть Открывает слот
!пинг Пингует всех игроков
!паб Изменяет название игры на
!sp Выгружает игроков в свободные слоты
!start [ncd/force] Запускает игру. Параметр ncd отключает проверку и подсчет ников. Принудительно отключает только проверку
!обмен Меняет местами игроков на слотах
!unhost Заканчивается игра, которая не запускается
!fakeplayer [ник] Добавляет в игру игрока ak [ник]
!прервать Отменяет начало игры

Платные команды (больше информации на этой странице)

Как сделать бота world of warcraft. Python, Open CV, Pillow, Pyautogui

КомандованиеОписание

!dkd Выключает отбрасывание игроков из-за десинхронизации. Узнайте больше на сайте
!putslot Добавляет новый слот (максимум 12/24, зависит от патча)
!editslot Редактирует конфигурацию любого слота (раса, команда, цвет). Читать далее
!экшен-интервал Ускоряет/замедляет время в игре Подробнее
!switchchat Включает/выключает все игровые/лобби чаты
!запретить [причина] Блокирует игрока на некоторое время из-за [причина]
!unban Разблокирует игрока

Источник: xgm.гуру

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

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

Предыстория

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

Читайте также:  Книга по которой снимают фильм варкрафт

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

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

Внимание

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

Переход

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

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

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

Немного подумав, придумали решение проблемы: нам нужно написать аддон для WoW, который будет получать данные о текущем положении персонажа (координаты и поворот персонажа) и отдавать команды, куда двигать персонажа. Это должно выглядеть как цветной «семафор», который будет указывать на необходимое действие: двигаться вперед, вправо или влево, или повернуть.

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

Для реализации семафоров мне пришлось изучить процесс разработки аддонов для 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 кнопок семафора: position Ok!, двигаться вперед, двигаться назад, двигаться вправо и двигаться влево, а в lua файл добавляем код, который будет показывать, куда нам нужно двигаться в данный момент. Мы знаем опорные координаты, где мы хотим быть. Казалось бы, все просто, но это был шок — как мы видели на карте, и уже выяснили при выполнении поворотов, движение происходит под углом к северу. Т.е. когда мы двигаемся, обе координаты персонажа постоянно меняются. Не очень удобно считать, куда мы идем дальше, поэтому воспользуемся известными со школы формулами для поворота системы координат на заданный угол (в нашем случае 5.42 радиана)

Читайте также:  Спец арена варкрафт 3 секреты

Теперь у нас будет только одно изменение координат при движении к/от аукциониста и справа налево. Добавим соответствующий код в наш 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.

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

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

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

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

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

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

Представляем вам 23-й урок по редактированию мира — Создание ботов с искусственным интеллектом (AI) от godleonid’a. В этом руководстве автор объясняет, как создавать ботов на карте AI (ИИ). Здесь в основном говорится об аниме-картах, но в целом базовые знания однозначно дают. Так что смотреть обязательно!

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

Оставьте комментарий, чтобы помочь сайту!

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

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