Новости ВоВ в Google+ Новости ВоВ в Facebook Новости ВоВ Вконтакте Новости WoWRaider.Ru через RSS Видео World of Warcraft Новости WowRaider.Ru в Твиттере Поддержите проект WowRaider.Ru

Как написать аддон для ВоВ. Сохранение настроек и Умолчания. Слэш команды.

Разработка аддонов для World of WarcraftДанная статья является продолжением цикла статей об аддонах. Предыдущая часть: Как написать аддон для ВоВ. API. XML. События.

Сохранение настроек


Многие аддоны должны уметь сохранять свои настройки между вашими входами в игровой мир. Реализовать эту возможность в вашем аддоне крайне легко. Это делается с помощью специальной директивы из файла toc.

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

## SavedVariables: var1, var2, ..., varn

Сохраняет переменные, указанные в списке на уровне учетной записи. Т.е. для всех персонажей. Переменные хранятся в файле: WTF\Account\НАЗВАНИЕ_УЧЕТНОЙ_ЗАПИСИ\SavedVariables\НазваниеАддона.lua

## SavedVariablesPerCharacter: var1, var2, ..., varn

Сохраняет переменные, указанные в списке на уровне персонажа. Т.е. у каждого будет своё значение. Переменные хранятся в файле: WTF\Account\НАЗВАНИЕ_УЧЕТНОЙ_ЗАПИСИ\ИГРОВОЙ_МИР\ИМЯ_ПЕРСОНАЖА\НазваниеАддона.lu

Сохранять можно только строковые, логические, числовые переменные и таблицы.

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

Сохранение значения переменных в файл происходит при:

  • Закрытии игрового клиента
  • Выхода из игрового мира
  • Выполнении команды /reload ui

При загрузке и выгрузке переменных используются только глобальные переменные. Т.е. если вы хотите оперировать переменными локально, то вам нужно загрузить их из глобальной таблицы _G при событии VARIABLES_LOADED, и выгрузить их обратно перед сохранением на диск по событию PLAYER_LOGOUT. (прим. если вы только начинаете, то не забивайте себе этим голову. Просто помните, что сохраняемые переменные не нужно объявлять как local, и вообще объявлять не нужно).

Значения по умолчанию


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

В файле toc укажем переменную, которая должна сохранятся на диске:

... ## SavedVariables: myVariable ...

Напишем обработчик события в файле lua:

function myaddon_VarsLoaded() if( not myVariable) then myVariable = "Default value" end end

В файле XML поставим обработчик на событие VARIABLES_LOADED. Установку обработчика стоит делать в обработчике события виджета onLoad.

... <onLoad> self:RegisterEvent("VARIABLES_LOADED"); </onLoad> <onEvent> if( event == "VARIABLES_LOADED" ) then myaddon_VarsLoaded() end </onEvent> ...

Здесь, после загрузки нашего фрейма вызовется обработчик onLoad, который зарегистрирует событие VARIABLES_LOADED. А обработчик события onEvent вызовет нашу функцию myaddon_VarsLoaded(), которая проверит и, при необходимости, инициализирует нашу переменную.

Слэш команды


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

  1. Выбрать идентификатор для ваших команд. Например MYADDON.
  2. Обычно принято выбирать идентификатор так: если у вас используется одна команда (в разных вариациях), то идентификатор MYADDON, если несколько, то MYADDON_COMMANDNAME.

  3. Затем вам нужно выбрать команды, которые вы хотите использовать. Неплохо учесть стандартные консольные команды, чтобы не пересекаться. Например: '/myaddon'
  4. Присвоить выбранные команды глобальным переменным SLASH_MYADDON1, SLASH_MYADDON2
  5. SLASH_MYADDON1, SLASH_MYADDON2 = '/myaddon', '/ma'

  6. Написать функцию-обработчик команды и главное, зарегистрировать его в переменной SlashCmdList:
  7. function myaddon_SlashHandler(msg, editbox) print("Got slash command with parameter: "..msg) end SlashCmdList["MYADDON"] = myaddon_SlashHandler

    Эта не совсем интуитивно понятная конструкция сделает так, что все команды из переменных вида SLASH_MYADDON* будут передаваться в функцию-обработчик myaddon_SlashHandler. В качестве параметра передаётся текст после команды и ссылка (врать не буду, не знаю на что).

    Т.е. в нашем случае, при вводе команды "/myaddon test call" функция myaddon_SlashHandler(msg, editbox) получит значение msg, равное "test call", которое она и напечатает в чат.

Продолжение: Как написать аддон для ВоВ. Пишем автоинвайтер.

Самые оперативные новости: RSS, , Вконтакте, Facebook, Google+