Редактор интерфейсов пользовательских дополнений (аддонов) для игры "Аллоды Онлайн"
Делайте бэкапы своих аддонов! Программное обеспечение предоставляется по принципу "AS IS". Ни в каком случае авторы или правообладатели не несут ответственности по каким-либо искам, за ущерб или по иным требованиям, в том числе, при действии контракта, деликте или иной ситуации, возникшим из-за использования программного обеспечения или иных действий с программным обеспечением.
При первом открытии аддона в логе снизу выведется список ошибок, если они есть. Эти ошибки нужно устранить вручную. Обычно это ссылки на несуществующие файлы или нарушение разметки XML. Эти файлы редактор не смог обработать и мог удалить ссылки на такие файлы, либо мог прочитать не все свойства правильно из этих файлов. Сохранять аддон через редактор в таком случае категорически не рекомендуется. Сначала устраните ошибки, затем откройте аддон заново и убедитесь, что лог пустой.
Виджеты основанные на прототипах выделены жирным цветом. Сам прототип и его свойства можно найти в окне свойств виджета, см. (Header) -> Prototype.
Зеленым цветом выделены виджеты, которые указаны внутри прототипа, а не в самом виджете, см. (Header) -> Prototype -> Children.
Курсивом и в квадратных скобках выделены виджеты, которые найдены не в свойстве Children, а в любых других (например, скроллбары, слайдеры указываются в отдельных свойствах).
Если виджет не имеет имени, вместо его названия будет написан тип виджета
В окне свойств можно редактировать почти любые свойства любого типа вложенные на любую глубину, кроме:
ВНИМАНИЕ! Редактор не поддерживает именованные поля, которые можно связать с любым свойством в прототипе и затем задать их значения в хеадере наследника. Если вы пользуетесь такими переменными, то редактор не сможет загрузить и сохранить эту информацию.
Файлы xdb следующих типов не будут затронуты при сохранении: UITextureElement, UISingleTexture, UITexture, DecalTemplate, FMODProject, VisObjectTemplate, UISingleTexture. Вы можете указывать ссылки на файлы этого типа, видеть какие-то свойства, но при сохранении файлы эти файлы не будут перезаписаны. Такое поведение объясняется тем, что эти файлы не должны редактироваться вручную, а должны создаваться через специальные программы.
Из менее известного не поддерживается styleSheets у класса UIAddon, это массив WidgetCss но вряд ли вы знали о его существовании. Пример игрового WidgetCss от старой версии игры можно найти здесь.
Почти все свойства виджетов могут быть пустыми, т.е. не заданы вообще. Точно также, как в xdb-файле вы можете что-то не написать, оставив свойство не заданным. Тогда используется значение из прототипа (или если и там не задано, то в прототипе прототипа и т д.), а если такое не найдено, то значение по умолчанию.
Также редактор не поддерживает отмену действий :)
Все ссылки (href) в редакторе указываются не относительно конкретного файла виджета, а относительно директории аддона, учитывайте это. При сохранении ссылки снова конвертируются в локальные для каждого файла.
В любом поле со ссылкой можно нажать на кнопку "..." и выбрать нужный файл.
Также можно напрямую вставить в текстовое поле полный путь до файла, либо путь относительно директории аддона и нажать Enter. Этим же способом можно вставить ссылку на внутриигровой ресурс, она должна начинаться с символа "/", например, "/Interface/...". Но редактор не может открыть внутриигровые xdb-файлы, поэтому никак не сможет нормально отобразить внутриигровые виджеты, текстурные слои и т.п.
Чтобы удалить ссылку нужно выделить всё в текстовом поле, нажать Del и Enter.
Не забывайте, что если два виджета в дереве виджетов загружаются из одного и того же файла, то это один и тот же объект. Меняя свойства одного такого виджета, вы меняете свойства другого. Особо внимательными стоит быть с редактированием прототипов.
Имеется одна "фича". Если вы удалите где-то ссылку на любой xdb-файл, то он вместе с текущими значениями свойств всё равно останется в памяти, так как эта же ссылка может быть указана где-то еще. Двже если вы удалите все ссылки, то файл не удалится из памяти пока вы не откроете другой (или этот же заново) проект или не перезапустите редактор. Т.е. если снова указать ссылку на этот файл, то он не загрузится заново из файла с неизменёнными свойствами, а будет получен из памяти с изменёнными (если вы их меняли, конечно).
С зажатой ПКМ можно перемещать камеру. Колёсиком зумить. Нажатие колёсика сбрасывает камеру в начальное состояние.
На данный момент поддерживаются далеко не все свойства и отрисовка виджетов может быть не совсем корректной. Не работает даже самый обычный clipContent. Что работает:
- Позиционирование виджетов: работает всё кроме WIDGET_SIZING_INTERNAL, в этом случае размер виджета считается как 45x15. Прототипы учитываются
- Текстуры виджетов: работает отрисовка только WidgetLayerSimpleTexture и WidgetLayerTiledTexture. Не до конца доделана отрисовка WidgetLayerAnimatedTexture, не работает scaling и отрисовка нескольких текстур, если массив frames содержит более одного элемента. Для обычных виджетов отрисовываются только BackLayer и FrontLayer, для кнопок только LayerHighlight и все State. Никакие маски не работают. Из BlendEffect поддерживается только BLEND_EFFECT_ALPHABLND и BLEND_EFFECT_ADD, BLEND_EFFECT_HIGHLIGHT отрисовывается как BLEND_EFFECT_ADD, всё остальное отрисовывается как BLEND_EFFECT_ALPHABLND. Прототипы самих виджетов учитываются при отрисовке, протипы текстурных слоёв и т.п. - нет.
Слои WidgetLayerTiledTexture могут отображаться не так, как в игре. Редактор никак не использует поля MiddleX и MiddleY в Layout, а просто считает за середины всё что осталось после вычета боковых или верхних-нижних частей. Плюс может тайлить любые мелкие текстуры бесконечное число раз, в игре это не так.
Комментарии разработчика игры UIAddon о тайловых тексутрах:
Вот набор правил которым очень желательно следовать при работе с ними (работать будет и при нарушении этих правил, но хорошо оптимизирована только эта ветка кода)
- Если у текстуры LeftX и RightX (TopY и BottomY) нули, то размер виджета с этой текстурой по X (Y) никогда не должен быть 0
- Если MiddleX (MiddleY) нуль то RightX (BottomY) должны быть ноль
- MiddleX и MiddleY должны быть либо 0 либо 2^N (N>=5)
- Если по обеим осям стоит тип SCALED и при этом ненулевые только Middle то изобретен ужасающий костыль - эмуляция simple текстуры через tiled. Это бездарная растрата ресурсов
- Аналогично пункту 4 - если оба Middle нулевые
Чтобы любой аддон запускался и работал корректно, кодировки файлов должны быть следующими:
- Файлы XDB - UTF-8 (стандартный без спецификаций BOM)
- Файлы TXT - UTF-16 LE (Unicode Little Endian)
- Файлы LUA - ANSI (Windows-1251 для русской версии игры)
Всегда проверяйте это, когда сохраняете или создаёте файлы вручную. В любом текстовом редакторе кодировка обычно показана в нижнем правом углу окна.
"Аллоды Онлайн" является зарегистрированным товарным знаком и принадлежит правообладателям. В редакторе в качестве примеров и шаблонов в ознакомительных целях могут использоваться текстуры и/или их элементы принадлежащие ASTRUM LLC.
Использованные библиотеки: