wow скрипты как писать
Click-wow.ru
Наверняка многие игроки не раз сталкивались с необходимостью выполнять множество однообразных действий в игре. Давайте подумаем, что можно с этим сделать.
На самом деле разработчики это предусмотрели и добавили в игровой движок возможность избавиться от такого рода работы, для этого нужно использовать скрипты для wow. Проблема в том, что не все игроки знают об этом, в данной статье мне хотелось бы рассказать о наиболее популярных скриптах для wow.
Список скриптов для wow
Первым таким подарком от разработчиков является скрипт, который поможет обменять абсолютно любое количество баджей в один клик. Итак приступим.
Создайте макрос (команда /macro ) и впишите туда следующее (без кавычек):
» /script local function buy (n,q) for i=1,100 do if n==GetMerchantItemInfo(i) then BuyMerchantItem(i,q) end end end buy («Emblem of Heroism»,140) «
В последних скобочках мы вписываем название вашей эмблемки и количество без ошибок, язык эмблемки зависит от того, какой у вас клиент.
2) Сломался рекаунт? Он больше не отображает правильную информацию про ДПС и ХПс? Рекаунт одним словом работает не правильно? Скрипт для ремонта рекаунта ниже.
По схеме описанной выше сделайте новый макрос. Напоминаю, что макросы из общего списка макросов (тавтология во как) можно вытаскивать на панельки, это очень удобно. Пишем без кавычек.
3) Скрипт на добавление игроков в гильдию. Не нужно им злоупотреблять.
» /script n=GetNumWhoResults(); i=1; while(i «
4) Существует необходимость линкануть предмет в макрос?
5) Скрипт на выход из группы
6) Полная перезагрузка интерфейса без релога
7) Скрипт для отдаления камеры от персонажа или его ездового (летающего) животного.
» /console cameraDistanceMaxFactor 3.4 «
Оговорюсь, но его нужно использовать вновь после релога или входа в игру.
8) Скрипт для отмены дуэли вов:
9) На пиратках часто бывает так, после того, как вы стали призраком, подбегаете к телу а реснуться нельзя, этот скрипт должен помочь.
11) Не редко может помочь хилу на арене. Берем напарника в таргет.
» /target «имя» (без кавычек)
12) Выбор цели цели.
Так же макросы могут помочь и в управлении петами ваших персонажей.
13) Наиболее популярные команды для петов.
а) Ваш пет атакует ваш таргет.
б) Пет просто бегает за вами.
в) Ваш пет застынет на месте и не будет ничего делать
г) Бывают ситуации, когда панель управления питомцем пропадает, в частности я сталкивался с этим во время игры за своего варлока и ДК. Исправить это можно скриптом ниже.
14) А этот скрипт автоматически изучает все недостающие спеллы у тренера.
/ run LoadAddOn»Blizzard_TrainerUI» f=ClassTrainerTrainButton f.e = 0 if f:GetScript»OnUpdate» then f:SetScript(«OnUpdate», nil)else f:SetScript(«OnUpdate», function(f,e) f.e=f.e+e if f.e>.01 then f.e=0 f:Click() end end)end
15) Довольно-таки забавный макрос, часто им пользовался. Если у вас есть множество маунтов и хочется внести в игру разнообразие вписываем в начале макроса команду, а затем перечисляем маунтов (заклинаний, вещей). Теперь вы тоже знаете макрос на вызов случайного маунта.
16) Макрос Спешиваться.
17) Кастует спелл, указанный в макросе. Например:
/target SolBadGuy
/castsequence reset=5 Молитва духа, Молитва стойкости, Молитва защита от темной магии.
19) Возвращаем себе первоначальный облик. Неважно кто вы дру, шп, вар или еще кто-нибудь.
Пишем AddOn к World of Warcraft
На хабре как-то писали о создании ботов к WoW, а вот статей о написании аддонов я не нашел и решил описать этот процесс на примере одной поделки, которую я писал когда-то давно, когда я был еще студентом и моего времени хватало на игру в World of Warcraft и создание аддонов к нему. С деньгами тогда было туго и играл я не на официальном сервере, а на одном из бесплатных, имеющем кучу недоделок, багов, фич и аномалий.
После того, как за случайное использование одной из них я был забанен, появилась идея создать аддон, указывающий в игре на все отличия данного шарда от официального сервера, с предупреждениями о наказаниях за их использование.
Я выложил аддон на Google Code и форум серевера и он стал достаточно популярным (как для пиратского сервера). Кому интересно, как делаются аддоны — велкам под кат.
Введение
Итак, начнём с определения. Аддон в WoW — это набор некоторых файлов, которые позволяют пользователю изменить интерфейс клиентской части игры, но никак не влияют на серверную игровую механику. Аддоны были в WoW изначально, что выгодно отличает эту ММОРПГ от некоторых других, кричащих о своём превосходстве, но не имеющих возможности создания официальных аддонов и по сей день. Аддонов есть тысячи, если не десятки тысяч. Почему так много? А потому, что стилей игры и игровых задач ровно столько же. И конечно же, разработчики молодцы, что с самого начала дали способ каждому создать что-то своё, а не навязывать единый интерфейс, требуя считать его удобным.
Инструментарий
Никаких специальных инструментов для создания аддонов не нужно. Все они представляют собой текстовые файлы, так что берите свой любимый текстовый редактор — и вперёд! Если он имеет подсветку синтаксиса языка Lua (именно на нём создаются аддоны) — вообще прекрасно. Этим требованиям отвечает, например, Notepad++.
А еще, энтузиасты создали на базе движка Free Visual Studio Shell специальную open-source IDE, которая называется AddOn Studio.
Пару концептуальных моментов
Из чего состоит аддон
1. TOC-файл (table of conteset). Это оглавление нашего аддона. Объясняет оболочке WoW кто мы такие, как называемся, кто автор, из чего состоим и пару других вещей. Вот, например, toc-файл моего аддона:
2. XML-файлы, описывающие изменения в интерфейсе, которые мы хотим внести (фреймы, кнопки, привязку событий в интерфейсе к определенным функциям в коде). Вот xml-файл моего аддона:
Создание простого бота для онлайн-игры world of warcraft
Думаю, тема ботов не оставляет равнодушным ни одного игрока в онлайн-игры. Кого-то они раздражают, кто-то ими интересуется, а кто-то их использует. Существует и некоторое количество людей, довольно маленькое относительно остальных трех групп — это люди, которые этих ботов разрабатывают.
Я предлагаю присоединиться к этой небольшой касте людей и посмотреть изнутри процесс разработки бота.
Предыстория
Как-то раз в выходные я зашел за своего персонажа в world of warcraft. Делать было в игре нечего — все рейдовые боссы уже убиты, друзей для похода на арену нет, остается только выполнение квестов и неспешная добыча золота. Квесты я не очень люблю и свое свободное время в игре провожу обычно возле аукциона — с помощью специальных аддонов скупаю что подешевле и потом продаю подороже, выигрывая на разнице в цене.
Соответственно в голову пришла мысль автоматизировать эти рутинные действия — прийти на аукцион, запустить аддон, покликать в нем на кнопки, дойти до почтового ящика, забрать вещи с почты, вернуться на аукцион и снова запустить аддон, и далее по кругу.
В качестве инструмента для реализации был выбран Auto It, но потом оказалось что задача не такая тривиальная, как выглядит на первый взгляд, и пришлось подключать дополнительные инструменты. Сразу скажу, что никакие «грязные» методы вроде чтения памяти процесса или перехвата траффика я не использовал, только autoit для имитации кликов мышки и клавиатуры и чтения цветов пикселей с экрана.
Предупреждение
Все описанные действия вы производите на свой страх и риск, правилами игры это запрещено и может привести к перманентному бану аккаунта.
Передвижение
Собственно, наверное самая интересная тема при разработке бота — это реализация его перемещения по миру. Сначала я думал что проблем с этим не возникнет — путь у нас простой: аукцион это здание, в котором на такой площадке стоят NPC, с которыми необходимо поговорить чтобы начать торговлю, а почтовый ящик стоит прямо на выходе из аукциона, немного слева. Персонаж поэтому все время ходит как бы буквой «Г», туда и обратно
Я думал что просто засеку сколько времени нужно жать «вперед», сколько «вправо» или «влево» чтобы прийти в нужную точку и просто это захардкожу. Но реальность показала что это сделать нереально: если так делать то возникает проблема с пингом: персонаж иногда пробегал лишнего, иногда слишком сильно поворачивался, способ был совершенно нерабочим.
Но отчаиваться я не стал и начал думать что делать дальше. Казалось бы следующее решение — каким то образом определять где в данный момент находится персонаж, и в зависимости от этого расчитывать куда ему дальше двигаться. Только каким образом получить данные о позиции и угле поворота персонажа без чтения памяти процесса игры? Анализировать целиком картинку или какие то отдельные ее части довольно сложно, скриншот выхода из аукциона:
После недолгих раздумий было придумано решение проблемы: надо писать аддон для WoW, который будет получать данные о текущем положении персонажа (координаты и поворот персонажа) и давать команды, куда надо двигать персонажа. Внешне это должно выглядеть как цветной «семафор» который будет отображать необходимое действие: двигаться вперед, вправо или влево, или поворачиваться. Когда персонаж приходит в необходимую точку семафор должен символизировать что персонаж пришел на место и необходимо выполнять следующее действие. Так как у меня персонаж перемещается между двумя точками, то и семафоворов я решил делать 2: один будет командовать по дороге к аукционеру, а второй — по дороге к почте. С алгоритмом вроде разобрались, далее будут примеры кода (xml — шаблоны аддонов, lua — собственно исходники аддона, и autoit), местами кривоватые и грязноватые, но думаю простительно: на этих языках писал первый раз, и еще до конца не разобрался.
Для реализации семафоров пришлось изучить процесс разработки аддонов для WoW, он очень хорошо описан в WoWwiki
Самая первая версия семафора, она показывала только повернут ли я лицом к аукционеру в данный момент, и подсвечивала зеленым соответствующие блоки:
Создание несложного бота для WoW, программирование маршрутов
Введение
Предупреждение
Я отлично понимаю, что использование ботов запрещено лицензионным соглашением Blizzard. Это может привести к перманентному бану аккаунта. Я бы расстроился, узнав, что кто-то, воспользовавшись материалами данного поста, стал наживаться, ухудшая экономику игры и вызывая неодобрение других игроков. И да, я понимаю, то, что делаю я, нечестно.
Цель поста — рассказать о моем опыте и описать сложности, с которыми я столкнулся, узнать у вас, что можно было сделать лучше.
Предыстория
Коллекционирование
Люди, далекие от индустрии игр, могут без ущерба пропустить этот раздел. В игре WoW есть такой аспект — коллекционирование. Как и в нумизматике/филателии, чем больше у вас, например, верховых животных, тем вам приятнее. Точно так же важен процесс получения. Какие-то драконы требуют для получения выполнения десятка задач («ачивок»), какие-то — войти в лучшие 2% игроков в мире по навыку управления персонажем (сражения на арене), что-то можно просто купить за игровую валюту, что-то — за реальные деньги в магазине. Подробности можно почитать в другом источнике, речь не об этом. Так вот, некоторые из коллекционируемых предметов падают в подземелье с шансом около 0,5%. Если шанс выпадения дается игроку лишь раз в день (иногда в неделю), вам потребуется время, соизмеримое с годом, для забегов. И все ради того мгновения получения заветного выстраданного предмета. Чем больше вы потратили времени и сил на «фарм» предмета, тем приятнее вам его в итоге получить. По моему опыту радость очень мимолетна.
Зависимость шанса выпадения от количества попыток
Небольшое отступление. Какова вероятность того, что за шесть бросков игральной кости выпадет «6»? Очевидно, что . То есть, наше событие является противоположным событием к невыпадению «6» за все шесть попыток.
Используя второй замечательный предел, нетрудно показать, что .
А вероятность получения коня с шансом «дропа» в 1% за 100 попыток примерно равна 63%.
Некоторые игроки, сделав триста попыток считают, что вот-вот повезет — ведь вероятность облома за такое большое число попыток мала. Их ждет разочарование, ведь за следующие 100 им повезет снова лишь на 63%. А старые труды не дают ничего.
Задача
Карта подземелья и маршрут:
Задача максимум. Запустил и ушел на пол часа. Процесс полностью автоматический.
Задача минимум. Запустить и сидеть рядом, читать или играть на гитаре, поглядывая на монитор. При необходимости изредка помогать персонажу выбраться из непредвиденной ситуации.
Важно иметь возможность при желании описать маршрут другого подземелья, не залезая в код.
Подход
Движение и позиционирование
Это отрывок из списка команд робота по перемещению. Указаны координаты x, y и угол поворота в пространстве в радианах.
Клавиши и команды
По пути надо нажимать кнопки и кликать мышкой, открывать двери, где-то нужно ждать. Не хотелось бы выписывать это все вручную. Да и искать среди команд с координатами (в примере выше), куда же что вписать, не очень приятно. Поэтому единовременные нажатия на кнопки и клики мы будем писать параллельно с записью координат.
Отдельно упомяну про «pitch» (наклон). Если персонаж смотрит в горизонт, он равен нулю. Если под ноги, наклон отрицателен. А в небо — положителен. Измеряется в радианах. Его пришлось добавить, как только персонажу захотелось летать.
Модули
Addon для WoW на Lua
Аддон для WoW это скрипт на языке Lua. Язык полноценный, гибкий, эффективный. Делать с системой ничего нельзя. Делать с игрой можно все, но только в рамках того API, которое предоставляет вам игра. Так как Blizzard не хочет, а точнее, запрещает игрокам и предпринимателям писать ботов, то и API кроме упомянутых выше координат почти ничего полезного и не предоставляет. Разумеется, полезного для наших нужд. Неплохой гайд по написанию аддонов сразу с описанием Lua можно найти здесь. Ну а я опишу свой вариант.
Манифест и GUI
Подробности и источник. В папке World of Warcraft\Interface\AddOns\ создаете папку HelloWorld. В нее кладете HelloWorld.toc с содержимым
Если бы я хотел понарисовать формочек и кнопочек (а для этого обычно и нужны аддоны), последней строчкой я бы вписал еще HelloWorld.xml с описанием этих кнопочек. В дизайне и написании такого GUI-аддона хорошо помогает AddOn Studio. Мощный инструмент на базе MS Visual Studio.
Но так как я минималист, рисовать мы в этот раз не будем. Кроме того, это даст мне возможность показать, что создавать формы можно динамически из самого скрипта без использования дизайнера. Рассмотрим же HelloWorld.lua. Редактировал я его в Notepad++. Чтобы игра подключила изменения в HelloWorld.toc, надо перезапустить ее целиком. А вот изменения в HelloWorld.lua можно подхватить, написав в консоли команду /reload. Поэтому процесс программирования и отладки не такой болезненный.
Слеш-команды
Кстати, об отладке. Советую сразу добавить обработчик слеш-команд:
Для этого определим переменную вида SLASH_ИМЯn. Где ИМЯ уникально для всех аддонов, а n либо пусто, либо порядковое число с 1. И добавим функцию с именем ИМЯ в некий объект. Может показаться странным для программиста на C++, что мы эту функцию-обработчик нигде явно не регистрируем. Да и со строковой переменной связываем чисто по имени переменной. Но вот такая она, мощь и магия Lua.
Теперь команда в WoW-консоли /helloworld выполнит требуемые вам действия: позволит вывести отладочную информацию, а для простейших аддонов, собственно, произведет все то, ради чего вы их писали.
Ну и тут же я показал WoW API, которое достает требуемую информацию.
Обработчик событий
Система работы с GUI в аддоне похожа на работу Windows со своими сообщениями и их обработкой.
Мы создаем фрейм типа «Frame» и подключаемся на действия «OnEvent» и «OnUpdate» командами
Обработчик OnUpdate будет вызываться после каждого кадра — то, что нам нужно для обновления координат. А OnEvent будет вызываться при других желаемых событиях. Из него будем дергать соответствующие функции:
Что еще удобнее в Lua, это то, что вот такой конструкцией можно вызвать уникальные обработчики вида
Здесь PLAYER_LOGIN — это событие, которое рассылается во все фреймы при входе в мир и перезапуске пользовательского интерфейса. Другие события: PLAYER_LEAVE_COMBAT, QUEST_FINISHED, PLAYER_EQUIPMENT_CHANGED, PLAYER_DEAD, — и еще очень много. С полным списком можно ознакомиться тут. Зарегистрируем то событие, которое мы хотим обрабатывать, командой
Передача информации
Так как в аддоне нельзя ничего делать с системой, информацию из WoW другой части бота мы будем передавать при помощи изменения цвета пикселей. Как это делал rednaxi в своем посте. Но только мы будем передавать цветом не один бит информации, а будем сериализовать данные и передавать их больше.
Рисование
Так как для рисования тоже нужны фреймы, создадим их
Думаю, тут все понятно и без комментариев. Подробности по каждому методу ищите сами.
Сериализация
У нас есть две координаты и два угла. Все — числа с плавающей запятой. Компоненты цветов пикселей в аддоне тоже числа с плавающей запятой, но от 0.0 до 1.0. Кроме того, известно, что сохранится компонента цвета в одном байте. Поначалу я каждую координату сохранял в одну компоненту цвета. В итоге точность позиционирования в локации составляла 1/255 от размера карты. Получалось как в GPS: вроде координаты есть, но вести машину на автомате (управление компьютером без человека) по дороге по навигатору не выйдет. Так что пришлось давать два байта. Как повыгоднее сохранить одно дробное число в два байта? Я сделал так
Функция modf возвращает целую и дробную часть числа через запятую. Здесь используется параллельное присваивание — еще одна полезная фишечка Lua.
При таком подходе я использую полную мощность каждого из двух байтов, в которые сохраняется координата. Ну а азимут и наклон не так требовательны к точности, лишь бы укладывались в отрезок 0.0-1.0. Получается вот так:
Теперь при перемещении по миру в левом верхнем углу два квадратика 10 на 10 будут хаотично менять свой цвет.
Заключение первой части
Тема: Макросы/скрипты для WoW
Опции темы
Отображение
Отмена очереди заклинаний (Добавлено в 4.1)
Начиная с катаклизма, в wow внедрена система, которая компенсирует задержку между применением заклинаний. Предположим, GCD 1,5 сек. Если заспамить заклинание за 0,1-0,5 сек до его отката, то оно будет произноситься автоматически после завершения первого. Следующий макрос отменяет автоприменение при спаме, либо высокой задержке.
Перезагрузка интерфейса. Из игры не выходит. Во время перезагрузки вы находитесь в игровом мире!
Включает режим «Отошел от клавиатуры» — все люди, вам написавшие, будут уведомлены об этом соответствующей фразой. Например: /afk Ушел курить.
У макроса снизу принцип работы тот же, только включает режим «Не беспокоить».
Если у вас пропала панелька умений для питомцев, то этот скрипт для вас. Охотникам этот скрипт не подходит, только Чернокнижники и Рыцари Смерти (актуально для FUN реалма):
Макрос на автоматическое изучение профессий/обучение у тренера.
Для отмены /reload, перезайти или повторно ввести макрос:
Макрос на подтверждение сбора добычи/покупки (Нажатие кнопки «Да»). Тут аддон для автоматического принятия лута.
Использование предметов и аксессуаров.
Рисунок
Макросы на воскрешение.
Достает дух из тела, если кнопка «Покинуть тело» не активна (Выручает в 99% случаев).
Берет в цель юнит с точно указанным именем. Если имя написано неверно или юнит далеко от вас, то ваша цель не изменится.
Макрос на смену комплекта экипировки.
Манипуляции с панелями заклинаний
Существует две команды, которые позволяют изменять страницы панелей заклинаний: /changeactionbar и /swapactionbar. /changeactionbar использует в качестве значения одно число и всегда переключается на страницу с этим номером. Примером использования может быть аспекты охотника. Например:
Другое
Включает звуковые + текстовые сообщения об ошибках.
Макрос для удаления вещей белого качества.
Макрос для удаления вещей зеленого качества. Принцип такой же, что и у макроса выше.
Макрос на удаление определенных вещей. Удаляет из сумок определенный предмет.
Макрос для покупки реагентов и прочего. Как работает?! Подходим к нужному вендору, открываем страницу, где находится нужная покупка и активируем макрос. В кавычках вводить можно любой итем: Первобытный дух, Фолиант ясного разума и т.д., затем сразу же количество, в нашем случае это 10.
Отключение слежения за персонажем на которого направлено ваше потоковое заклинание:
На простом примере. Используем Исповедь, а затем Кара во время произнесения потокового заклинания. Макрос не позволяет произносить Кара, пока полностью не закончится каст Исповедь.
Выключаются все аддоны + перегружает UI (Пользовательский Интерфейс):
Перезагружает полностью все аддоны.
Макрос позволяет выйти с команды 2х2\3х3\5х5,если не получается выйти привычным способом. В основном такая проблема возникает при смене ника.
Отмена квестов из журнала.
По 1 квесту, начиная сверху:
Для охоты на рарников. Если в таргете появится нужный рарник, оповестит в пм любого игрока или даже Вас самих, саундтреком и красным текстом по середине экрана. (Можно вводить названия рарника вручную, текст сообщения пм, либо вообще его убрать.) Если в таргете нет рарника, которого ищете макросом, оповещать не будет.
*click*
Инструкция F.A.Q.
## Title: Script
## Interface: 60000
Более-менее разобравшиеся в кодах lua задаются вопросом, откуда брать код самой текстуры (например, чтобы скрыть какой-то объект в игре).
Ответ: используем макрос /fstack.
Важно : можно вставить в любой имеющийся аддон, например, Bartender4. В самом конце, между имеющимся кодом и тем, что собираемся добавить, должна быть пустая разделяющая строка.
Автоматическая отправка письма в чат. (работало на WoD, сейчас не знаю)
Каналы
Далее, просто добавляем коды в первоначально созданный аддон.
Удаление циферок со стандартных фреймов (лечение/урон):
P.S Немного побольше о функции макроса /click и /fstack
Команда /fstack открывает доступ к наименованиям панелей API интерфейса. В сочетании с /click можно добиться возможностей, о которых до этого момента могли только задумываться или искали особый аддон.
Это работает не так, как функции /run или /script, хотя в целом они практически взаимозаменяемы.
Например, чтобы отменить какой-то квест, нужно ввести /script SetAbandonQuest(); AbandonQuest(); — в этом случае отменится выбранный квест. Во втором варианте это выглядит так: /click QuestLogFrameAbandonButton /click StaticPopup1Button1. Итог будет одинаковым. Но вариант с квестами слишком заурядный и бесполезный, ведь можно нажать 3 кнопки самостоятельно и убрать кв без особых усилий. Есть фишки покруче, например в связке с другими макросами или даже скиллами на панелях. Допустим, у Вас есть макрос, но он полностью не вписывается в ограничение 255 символов (согласен, можно поставить аддон на макросы), мы сделаем еще один макрос, который дополнит предыдущий и прожмется вместе с ним, используя команду в нем /click. В зависимости от установленных аддонов строка может отличаться. Если стоит Bartender4, то выглядеть будет примерно так: /click BT4Button1, что нажмет клавишу 1. Можно использовать в рыбалке для очистки хлама, при закидывании удочки. Но не стоит этим ограничиваться, это один из самый простых способов использования возможностей данной команды.
В итоге, выставив Первый макрос на клавишу 1, второй на 2 и третий 3 мы нажимаем только одну кнопку 1, попутно открывая коробки и моллюсков, а также удаляя ненужные вещи (да-да, луциана даже вендору лень продавать).