Нет смысла писать гайд по созданию аддонов, благо гугл всегда с нами. А выдаваемые им результаты являются на редкость адекватными.
Но ко всему можно придраться, потому я возьму и придерусь. В частности к ссылкам, которые дают авторы. Но не из вредности, а скорее из необходимости обновления: так как методика написания аддонов не меняется, то сами гайды датируются 2010-2011 годами.

[accordions type=»toggle» handle=»arrows» space=»yes» ]
[accordion title=»1. Чем открыть?» icon=»momizat-icon-question» state=»close» ]Код аддонов (а также все сохраненные настройки и прочая информация) содержится в файлах с расширением .lua, которые могут быть открыты… обычным блокнотом.
Файл аддона, открытый в блокноте Windows
Но если по хорошему, то действительно неплохо бы запастись более удобым инструентом. Однако это не какой-то там навороченый специальный редактор, а в корне своем такой же блокнот, но с парой наворотов. Называется он Notepad++
Файл аддона, открытый в Notepad++
Из картинки видно, что у него есть пара весомых преимуществ перед обычным блокнотом:

  • Подсветка синтаксиса
  • Показ номера строки
  • Возможность открыть кучу вкладок

 

Первое полезно всегда, особенно, когда опечатался в слове «function» и пытаешься понять с чего вдруг все сломалось. Второе помогает объяснить кому-то где менять (или выполнить чьи-то ще инструкции).

Есть еще пара не видимых по картинке плюсов:

  • Возможность сравнения файлов
  • Быстрое комментирование/дублирование
  • Глобальный поиск
  • многое другое…

 

Мощными альтернативами будут следующие программы:
WoW Addon Studio
Специализированное средство для создания аддонов. Сам не пользовался этак года 4, но есть знакомые, которые сидят на нем и очень хвалят.

IntelliJ IDEA
Вообще эта программа предназначена для немного других целей. Но после хорошей настройки работает на ура. Лично мне понравилось автоматическое сохранение документа при переключении в другое окно.[/accordion]
[/accordions]

[accordions type=»toggle» handle=»arrows» space=»yes» ]
[accordion title=»2. Язык и API» icon=»momizat-icon-question» state=»close» ]LUA — одни из простейших языков, особенно если знать английский. И все же понятие базовых принципов может занять некоторое время.

Сама по себе документация свободно доступна, как на английском, так и на русском. Ссылки приведены для версии 5.1 ибо ее использует WoW, существуют и более новые версии.

Теперь вещи менее известные и доступные — API игры. Естественно, что в языке LUA нет функции для определения количества золота в сумке, он не для этого создавался. Но как-то же информацию получать надо? Для этого и исползуется API (application programming interface) — набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах (C) Wikipedia
Найти его можно несколькими способами:

  • Поковыряться в другом аддоне — не самый удобный метод, предполагает, что человек уже знает что он хочет найти.
  • Открыть места, где хранится созданная сообществом документация. Wowpedia и Wowprogramming к вашим услугам. Однако не для всех функция документация существует. По секрету, полной документации нет даже у Blizzard.

 

Если с первым методом все понятно, то как обойти проблемы второго? Как, например, узнать зачем нужна та или иная недокументированная функция? Для этого придется ковырять исходный код самой игры. Что тоже более чем реально.
Где взять? Либо обратиться к выложенным в сеть копиям, либо взять у самих Blizzard. Однако оба этих метода могут иметь устаревшие данные — Blizzard любят ничего не обновлять (русский пакет вообще под версию игры 4.0), а у tekkub’а отсутствуют новые функции с ПТР.
Можно экспортировать его самостоятельно. Для этого в приложении Battle.net нужно зайти в настройки и прописать дополнительные параметры командной строки, как показано на скриншоте.
Необходимые параметры

Теперь после входа в игру на экране выбора персонажей можно нажать клавишу «~» и вызвать консоль.
Консоль WoW

Сюда можно вбить 2 команды:

  • ExportInterfaceFiles code — сделает экспорт кода
  • ExportInterfaceFiles art — сделает экспорт иконок, текстур и прочей графики

 

В процессе игра может на некоторое время зависать при экспорте арта, экспорт кода занимает секунд 15-30 в худшем случае. После завершения экспорта в папке с игрой появится папка запрошенными данными. В них самих можно узнать как и где используются некоторые функции в стандартном интерфейсе.[/accordion]
[/accordions]

[accordions type=»toggle» handle=»arrows» space=»yes» ]
[accordion title=»3. Файлы.» icon=»momizat-icon-question» state=»close» ]Для того, чтобы аддон адекватно работал, нужно следовать двум простым правилам.
1) В папке аддона всегда должен быть файл *.toc, имя которого один в один соответствует имени самой папки.
2) Заполнение самого toc-файла должно быть выполнено корректно.

С именем понятно. Что такое корректное заполнение файла? TOC расшифровывается, как «Table Of Contents» или по-русски «Таблица Содержания». В этом файле содержится ключевая информация по аддону. И если клиент при считывании не найдет необходимых данных, то не определит ваш аддон.
Параметры пишутся после ##, любой другой текст интерпретируется как имя файла для подгрузки.

На вовпедии информация по этим параметрам есть, но я всеже продублирую.

Interface — номер интерфейса, для которого используется данный аддон. Аддон считается устаревшим, если это число ниже текущей версии. Патч 6.1 имеет версию 60100. Для более легкого восприятия можно поделить этот номер таким образом 6.01.00 — из такой формы более очевидна логика нумерации. Число больше ставить не имеет смысла — клиент не определит аддон. Также можно определить текущую версию интерфейса, набрав в чате «/run print(select(4, GetBuildInfo()))» — эта команда выведет в чат номер интерфейса. Обязательно к заполнению.

Title — название аддона. Оно будет отображаться в списке модификаций. Может не совпадать с именем папки. Обязательно к заполнению.
Notes — комментарии к аддону, пишется в подсказке к аддону на окне выбора модификаций.

Тут стоит заметить, что Title и Notes имеют небольшую особенность — поддержку множественных значений. Например «Notes-frFR» заданный через эту строку текст будет выводиться на французском клиенте вместо обычного «Notes». Аналогично для «Title»

Author — Имя автора аддона
Version — версия аддона. Например: 4.05. Обязательно к заполнению.
eMail — почта автора. Необязательна к заполнению. В принципе даже не видна из игры, без вызова функцией GetAddOnMetadata
URL — аналогично для почты, но здесь содержится адрес сайта аддона или его автора.
RequiredDeps — список зависимостей. Например, для вашего аддона необходимо использование функций из DBM, тогда он должен стоять в спсике зависимостей. «## RequiredDeps: DBM_Core». Теперь если DBM не загружен, то и ваш аддон не будет загружаться. Можно указывать несколько аддонов через запятую.
OptionalDeps — список необязательных зависимостей. Используется, если вы собираетесь писать функцию, которая выполняет разные действия в зависимости от того, должен ли быть загружен другой аддон. При этом если указанный в этом списке аддон установлен и включен, то сначала загрузится он, а затем ваш аддон.
DefaultState — состояние по умолчанию: включен/выключен. Пишется «Enabled» или «Disabled» соответственно.
SavedVariables — глобальная таблица сохраненных значений. Зачастую используется для хранения настроек. Территориально находится в файле в папке вашего аккаунта в подпапке SavedVariables.
SavedVariablesPerCharacter — аналогично предыдущему, но SavedVariables находится уже в папке каждого отдельного персонажа.
LoadOnDemand — является ли загружаемым по требованию. Например, опции AltasLoot. Этот раздел не загружен в память постоянно, а загружается только, если вызван напрямую. Естественно, что прописывать данный параметр нужно только, если собираетесь его использовать. В таком случае пишется «## LoadOnDemand: 1»

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

Помимо этого пользователь может указывать свои собственные параметры. Для этого нужно указать префикс «X-«. Например «## X-MyParameter: MyOwnValue».
Таким способом клиенты для обновлений аддонов отслеживают их в вашем клиента. Например Curse создает строки вида:
## X-Curse-Packaged-Version: v8.00.00
## X-Curse-Project-Name: AtlasLoot Enhanced
## X-Curse-Project-ID: atlasloot-enhanced
## X-Curse-Repository-ID: wow/atlasloot-enhanced/mainline
## X-Curse-Packaged-Version: v8.00.00
## X-Curse-Project-Name: AtlasLoot Enhanced
## X-Curse-Project-ID: atlasloot-enhanced
## X-Curse-Repository-ID: wow/atlasloot-enhanced/mainline

Для чего можно использовать эти параметры — решать уже вам :P[/accordion]
[/accordions]

В принципе это все, что может понадобится человеку, желающему начать копаться внутри аддонов. Желаю вам удачи в этом нелегком деле.

Published
Categories Аддоны

Комментарии

Нет комментариев

Добавить комментарий