Изменения, связанные с модификациями (версия 6.0)
Интерфейс и макросы

Назад Вперед

Пишет Taepsilum 15/07/2014 18:02 MSD:

Обновление, которое мы планируем выпустить незадолго до выхода дополнения Warlords of Draenor, в значительной степени изменит принцип работы модификаций пользовательского интерфейса. В настоящее время мы намерены ввести поддержку модификаций интерфейса в новой версии клиента для бета-тестирования (точная дата выхода пока неизвестна), что позволит создателям модификаций опробовать новые функции.

Чтобы избежать лишней путаницы, мы просим вас указывать в своих отзывах, к какому именно элементу игры они имеют отношение.

== Сохранение горячих клавиш/макросов/параметров пользовательского интерфейса ==

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

Основное изменение заключается в том, что теперь не производится сравнение горячих клавиш/макросов/параметров интерфейса, информация о которых хранится на сервере и в самом клиенте игры, чтобы определить, какие именно необходимо загрузить. Вместо этого будут использоваться локально размещенные переменные консоли (CVars), которые будут определять, должны ли использоваться файлы с сервера или файлы, хранящиеся непосредственно на компьютере. По умолчанию клиент игры использует файлы, хранящиеся на сервере. Если вы хотите изменить эти параметры, вам нужно будет перенастроить переменные консоли для использования локальных файлов.

    “synchronizeConfig” [0/1] — по умолчанию использует значение 1, в этом случае параметры интерфейса (то есть переменные консоли) для персонажей и для учетной записи будут сохраняться на сервере.
    “synchronizeBindings” [0/1] — по умолчанию использует значение 1, в этом случае параметры горячих клавиш для персонажей и для учетной записи будут сохраняться на сервере.
    “synchronizeMacros” [0/1] — по умолчанию использует значение 1, в этом случае параметры макросов для персонажей и для учетной записи будут сохраняться на сервере.
    “synchronizeSettings” [0/1] — по умолчанию использует значение 1, в этом случае информация о персонажах и об учетной записи будет сохраняться на сервере (изменение этого значения равносильно изменению значения всех трех предыдущих функций).


== Общение с помощью модификаций ==

Общение с помощью модификаций теперь доступно благодаря пользовательским каналам чата.

    SendAddonMessage(), где тип команды — CHANNEL, а цель — название требуемого канала.


== Ключи-значения ==

Чтобы позволить игрокам создавать более универсальные шаблоны, которые проще было бы настраивать под свои нужды (например, чтобы не приходилось переназначать событие OnLoad и вызывать первоначальную функцию), мы позволим изменять типы ключей и значений с помощью соответствующих полей keyType и type. По умолчанию в обоих случаях используется «строка», при этом вам будут доступны следующие варианты: строка, число, логическое значение, глобальная (когда данные поступают из глобальной таблицы).

При создании шаблонов с использованием этой функции мы собираемся предоставлять подробное описание раздела «Ключи-значения», в котором будут указаны все доступные варианты. Таким образом, вам не придется самостоятельно копаться в коде игры.

Пример:
<Frame name="RoleButtonTemplate" virtual="true">
<!-- Available options
<KeyValues>
<KeyValue key="role" value="tank"/>
<KeyValue key="tooltip" value="TALENT_SPEC_TANK_TOOLTIP" type="global"/>
<KeyValue key="roleID" value="1" type="number"/>
</KeyValues>
-->
<OnLoad>
self.Texture:SetTexture(GetTextureForRole(self.role));
</OnLoad>

<OnClick>
DoSomethingWithRole(self.role);
DoSomethingWithRoleID(self.roleID);
</OnClick>

<OnEnter>
GameTooltip:SetText(self.tooltip);
GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
GameTooltip:Show();
</OnEnter>

<OnLeave function="GameTooltip_Hide"/>
</Frame>

<Frame name="TankButton" inherits="RoleButtonTemplate">
<KeyValues>
<KeyValue key="role" value="tank"/>
<KeyValue key="tooltip" value="TALENT_SPEC_TANK_TOOLTIP" type="global"/>
<KeyValue key="roleID" value="1" type="number"/>
</KeyValues>
</Frame>

<Frame name="HealerButton" inherits="RoleButtonTemplate">
<KeyValues>
<KeyValue key="role" value="healer"/>
<KeyValue key="tooltip" value="TALENT_SPEC_HEALER_TOOLTIP" type="global"/>
<KeyValue key="roleID" value="2" type="number"/>
</KeyValues>
</Frame>


== Атлас ==

Атласы — особые текстуры с описаниями, накладываемые на стандартные текстуры и использующие нормализованные координаты.

    useAtlasSize — использует отдельный пиксель дополнительной текстуры в качестве внутриигрового образца четырехугольника.


Пример:
XML
<Texture atlas="_Garr_InfoBox-Top" horizTile="true" useAtlasSize="true">
<Anchors>
<Anchor point="TOPLEFT" y="7"/>
<Anchor point="TOPRIGHT" y="7"/>
</Anchors>
<!--This uses the top-left quarter of this atlas entry, not the top-left quarter of the whole texture-->
<TexCoords left="0" right="0.5" top="0.0" bottom="0.5"/>
</Texture>

Lua
    filename, width, height, left, right, top, bottom, tilesHoriz, tilesVert = GetAtlasInfo("name")
    someTexture:SetAtlas("_Garr_InfoBox-Top");
    atlas = someTexture:GetAtlas()


== Новая система таймеров ==

В игру будет добавлена новая система таймеров. Ее документацию вы найдете в файле C_TimerAugment.lua.

Функции:

    C_Timer.After(duration, callback) — позволяет совершить обратный запрос спустя определенное время (в секундах).
    timer = C_Timer.NewTimer(duration, callback) — позволяет совершить обратный запрос спустя определенное время (в секундах). Данная функция более затратна, чем C_Timer.After, поэтому использовать ее стоит лишь в том случае, если вам необходимо иметь возможность прервать ее действие.
    timer:Cancel() — прекращает работу таймера.
    ticker = C_Timer.NewTicker(duration, callback, iterations) — позволяет совершать обратные запросы с определенной периодичностью (в секундах); количество обратных запросов можно установить самостоятельно.
    ticker:Cancel() — прекращает действие счетчика.


== Система анимации ==

Для системы анимации были подготовлены некоторые изменения и исправления.

    Анимация прозрачности объекта (Alpha animation) имеет функции fromAlpha и toAlpha. Это вариант изменения положения.
    Анимация масштабирования объекта (Scale animataion) имеет функции fromScale и toScale.
    Функция childKey аналогична targetKey с автоматически подставленной $parent.$parent.
    Функция AnimGroups теперь имеет параметр setToFinalAlpha, позволяющий присвоить конечные параметры прозрачности всем участкам анимации.

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