Перейти к содержанию

Дайджест за январь-март

Обновления гайдов и аддонов

Март Февраль Январь

Мониторинг серверов и редактор аддонов

Представляем вам две легенды. То, о чем можно было только мечтать, стало реальностью.

Мониторинг серверов Редактор аддонов

Бот статистики для Telegram

Удобная аналитика в телефоне.

Подробнее

Подсказки из игры на вашем сайте

Теперь вы можете отображать сведения о внутриигровых элементах простым наведением курсора мыши.

Подробнее

Апдейтер аддонов

Представляем вам программу для автообновления аддонов и делимся подробностями.

Подробнее Скачать

AOUIEditor - редактор интерфейсов аддонов


Slashuur

Рекомендуемые сообщения

AOUIEditor - редактор интерфейсов аддонов

Просмотр файла

Решает самое больное место в разработке аддонов - создание его графического интерфейса. Исходный код редактора открыт и доступен на github. Он разработан на C# в Microsoft Visual Studio 2022. Призываем помочь с развитием программы.

Использование

Делайте бэкапы своих аддонов! 

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

Дерево виджетов

Виджеты основанные на прототипах выделены жирным цветом. Сам прототип и его свойства можно найти в окне свойств виджета, см. (Header) -> Prototype.

Зеленым цветом выделены виджеты, которые указаны внутри прототипа, а не в самом виджете, см. (Header) -> Prototype -> Children.

Курсивом и в квадратных скобках выделены виджеты, которые найдены не в свойстве Children, а в любых других (например, скроллбары, слайдеры указываются в отдельных свойствах).

Если виджет не имеет имени, вместо его названия будет написан тип виджета.

Окно свойств

В окне свойств можно редактировать почти любые свойства любого типа вложенные на любую глубину, кроме:

ВНИМАНИЕ! Редактор не поддерживает именованные поля, которые можно связать с любым свойством в прототипе и затем задать их значения в хеадере наследника. Если вы пользуетесь такими переменными, то редактор не сможет загрузить и сохранить эту информацию.

Файлы xdb следующих типов не будут затронуты при сохранении: UITextureElement, UISingleTexture, UITexture, DecalTemplate, FMODProject, VisObjectTemplate, UISingleTexture. Вы можете указывать ссылки на файлы этого типа, видеть какие-то свойства, но при сохранении файлы эти файлы не будут перезаписаны. Такое поведение объясняется тем, что эти файлы не должны редактироваться вручную, а должны создаваться через специальные программы.

Из менее известного не поддерживается styleSheets у класса UIAddon, это массив WidgetCss но вряд ли вы знали о его существовании. Пример игрового WidgetCss от старой версии игры можно найти здесь.

Почти все свойства виджетов могут быть пустыми, т.е. не заданы вообще. Точно также, как в xdb-файле вы можете что-то не написать, оставив свойство не заданным. Тогда используется значение из прототипа (или если и там не задано, то в прототипе прототипа и т д.), а если такое не найдено, то значение по умолчанию.

Также редактор не поддерживает отмену действий 🙂

Ссылки href

Все ссылки (href) в редакторе указываются не относительно конкретного файла виджета, а относительно директории аддона, учитывайте это. При сохранении ссылки снова конвертируются в локальные для каждого файла.

В любом поле со ссылкой можно нажать на кнопку "..." и выбрать нужный файл.

Также можно напрямую вставить в текстовое поле полный путь до файла, либо путь относительно директории аддона и нажать Enter. Этим же способом можно вставить ссылку на внутриигровой ресурс, она должна начинаться с символа "/", например, "/Interface/...". Но редактор не может открыть внутриигровые xdb-файлы, поэтому никак не сможет нормально отобразить внутриигровые виджеты, текстурные слои и т.п.

Чтобы удалить ссылку нужно выделить всё в текстовом поле, нажать Del и Enter.

Не забывайте, что если два виджета в дереве виджетов загружаются из одного и того же файла, то это один и тот же объект. Меняя свойства одного такого виджета, вы меняете свойства другого. Особо внимательными стоит быть с редактированием прототипов.

Имеется одна "фича". Если вы удалите где-то ссылку на любой xdb-файл, то он вместе с текущими значениями свойств всё равно останется в памяти, так как эта же ссылка может быть указана где-то еще. Двже если вы удалите все ссылки, то файл не удалится из памяти пока вы не откроете другой (или этот же заново) проект или не перезапустите редактор. Т.е. если снова указать ссылку на этот файл, то он не загрузится заново из файла с неизменёнными свойствами, а будет получен из памяти с изменёнными (если вы их меняли, конечно).

Окно графического редактора

С зажатой ПКМ можно перемещать камеру. Колёсиком зумить. Нажатие колёсика сбрасывает камеру в начальное состояние.

На данный момент поддерживаются далеко не все свойства и отрисовка виджетов может быть не совсем корректной. Не работает даже самый обычный clipContent. Что работает:

  1. Позиционирование виджетов: работает всё кроме WIDGET_SIZING_INTERNAL, в этом случае размер виджета считается как 45x15. Прототипы учитываются
  2. Текстуры виджетов: работает отрисовка только 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 о тайловых текстурах:

Вот набор правил которым очень желательно следовать при работе с ними (работать будет и при нарушении этих правил, но хорошо оптимизирована только эта ветка кода)

  1. Если у текстуры LeftX и RightX (TopY и BottomY) нули, то размер виджета с этой текстурой по X (Y) никогда не должен быть 0
  2. Если MiddleX (MiddleY) нуль то RightX (BottomY) должны быть ноль
  3. MiddleX и MiddleY должны быть либо 0 либо 2^N (N>=5)
  4. Не стоит делать tlled текстуру у которой ненулевые только Middle и при этом тип SCALED - это эмулирует simple текстуру через tiled
  5. Не стоит делать tiled текстуру у которой оба Middle нулевые - это эмулирует simple текстуру через tiled

Общее

Чтобы любой аддон запускался и работал корректно, кодировки файлов должны быть следующими:

  1. Файлы XDB - UTF-8 (стандартный без спецификаций BOM)
  2. Файлы TXT - UTF-16 LE (Unicode Little Endian)
  3. Файлы LUA - ANSI (Windows-1251 для русской версии игры)

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

Примечания

"Аллоды Онлайн" является зарегистрированным товарным знаком и принадлежит правообладателям. В редакторе в качестве примеров и шаблонов в ознакомительных целях могут использоваться текстуры и/или их элементы принадлежащие ASTRUM LLC.

Использованные библиотеки:


 

Ссылка на комментарий
Поделиться на другие сайты

  • 3 года спустя...

Hi,

i was trying to follow your video and create the same sample addon. First of all, your programm is amazing! I was able to create all the windows and buttons with a slider and so on. But when it comes to adding it to the lua script for the game im struggling a bit.

I was copying everything you tiped in your ScriptMain.lua but i got an error and i cant fix it since everything seems to be fine. I added my mods.txt file and my ScriptMain.lua here.

 

And is it possible to add a single button with your program? Like the ones that usually show/hide the main windows like in AoUMeter/UniverseMeter or BuildManager, Statmanager and so on.

Or can i just use the ButtonRegular2? Or is it only working inside a n Main Panel?

I hope, you can help me here.

 

Greets!

ScriptMain.lua

mods.txt

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...
В 23.03.2023 в 16:54, Slashuur сказал:

AOUIEditor - редактор интерфейсов аддонов

Короче немного поизвращался с исходниками.

Спойлер

Всё началось с того что редактор падает если выбран файл не AddonDesc.(UIAddon).xdb!!! Понимаю что не нужно так делать!!! Но получилось так что не тот файл открыл...
************** Текст исключения **************
System.NullReferenceException: Object reference not set to an instance of an object.
   at AOUIEditor.MainForm.OpenProject() in C:\Users\ichal\source\repos\AOUIEditor\Forms\MainForm.cs:line 437
   at AOUIEditor.MainForm.openToolStripButton_Click(Object sender, EventArgs e) in C:\Users\ichal\source\repos\AOUIEditor\Forms\MainForm.cs:line 123
   at System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
   at System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
   at System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
   at System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
   at System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ToolStrip.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, WM msg, IntPtr wparam, IntPtr lparam)
************** Загруженные сборки *************
 Это побудило убрать эту проблему.
Ну а дальше уже немножко затянуло. ))))
Теперь редактор защищён от этого!!!
"Не удалось открыть файл '{filename}' как UIAddon. " +
                        "Возможно, это не AddonDesc.(UIAddon).xdb или файл повреждён."
Теперь он только AddonDesc.(UIAddon).xdb видит.
Добавлены более информативные сообщения об ошибках!!!
Так же если проблема с текстурой и описание к этому!!!
Немножко поиграл с отрисовкой виджетов, "Clip Content". И так по мелочи.

Добавлена кнопка "Вкл./Выкл." при включении в логе показывать только ошибки. А то искать в куче предупреждений как то не то... И кнопка "Экспорт". Для сохранения всего что в AddonDesc.(UIAddon).xdb в виде дерева.

Спойлер

2026-11-14_121310.png.c172dbd43e7119bbf35ab9085c667c47.png2026-11-14_121247.png.712829bafed2dc8196c7653f245fe674.png

"Вкл./Выкл." При включении в логе отображаются только ошибки.

2026-11-14_121659.thumb.png.723b7d0399c6d8eb3a8dd80b0f048d58.png

Так же в логе теперь можно выделить все,  копировать и открыть файл или папку файла выделив ссылку в чате. Ну и очистить лог.

2026-11-14_121201.png.24ce0abfeeee0abdf50460d2ed481acd.png

Для открытия файлов используется "OutputForm.ini". Можно Использовать свои прораммы.
[Open]
xdb = C:\Windows\notepad.exe
lua = C:\Windows\notepad.exe
txt = C:\Windows\notepad.exe
xml = C:\Windows\notepad.exe
bin =

Редактор работает только с xdb. Но кто знает что будет завтра... )))

"Экспорт"

GuildAndRepInfo 3
AddonDesc.(UIAddon).xdb
├─── widgets/mainForm.xdb
│    └─── line/line.xdb
│         └─── text.xdb
│              ├─── textures/text_back.(WidgetLayerTiledTexture).xdb
│              │    └─── text_back.(UISingleTexture).xdb
│              │         ├─── text_back.(UITexture).xdb
│              │         │    ├─── text_back.(UITexture).bin
│              │         │    └─── text_back.tga
│              │         └─── text_back.tga
│              └─── texts/GRepFormat.txt
├─── scripts/Locales.lua
├─── scripts/LibDnD.lua
├─── scripts/GuildAndRepInfo.lua
├─── name.txt
└─── desc.txt


В дереве виджетов тоже можно сохранить ветку!

Так же 

2026-11-14_121118.png.10962e80171d54e1c114788ee7eb99b2.png

Так.

GuildAndRepInfo 3
AddonDesc.(UIAddon).xdb
mainForm
    line
        text
Или так.

mainForm.xdb
└─── line/line.xdb
     └─── text.xdb
          ├─── textures/text_back.(WidgetLayerTiledTexture).xdb
          │    └─── text_back.(UISingleTexture).xdb
          │         ├─── text_back.(UITexture).xdb
          │         │    ├─── text_back.(UITexture).bin
          │         │    └─── text_back.tga
          │         └─── text_back.tga
          └─── texts/GRepFormat.txt

Общее!

Спойлер

1. Обработка ошибок XML. Понятные сообщения для кодировки, незакрытых тегов, несовпадения тегов и т.д. Раньше было просто "не удалось прочитать".

2. xpointer при сохранении. Раньше терялся. Теперь сохраняется везде, включая ingame-ссылки типа /Mods/....

3. Кастомные поля UIAddon (author, addon_name, addon_date, addon_link, userAddonInfo и его поля). Раньше терялись при сохранении. Теперь сохраняются.

4. Кнока "Экспорт".
Дерево виджетов в WidgetTree.txt. Новая функция — экспорт полного дерева связей href из аддона. + если файлы в аддоне с номерами, то покажет рядом из файла. Если есть имя,  то имя. Если имени нет, то тип файла (Если возможно...).

5. Добавлено контекстное меню в OutputForm. "Копировать", "Выделить всё", "Открыть выделенный путь", "Открыть папку файла", "Очистить лог".
Можно открыть файл выделив ссылку на него.
5.1. Для работы с логом есть теперь файл конфига "OutputForm.ini" для своих программ открытия. В основном там xdb,  но может понадобиться в будущем...
[Open]
xdb = C:\Windows\notepad.exe
lua = C:\Windows\notepad.exe
txt = C:\Windows\notepad.exe
xml = C:\Windows\notepad.exe
bin =

6. Добавлено контекстное меню в дереве виджетов.
В дереве виджетов правой кнопкой по любому узлу — например, Templates в аддоне. Меню:
"Экспорт ветки (виджеты)" — сохранит Templates.txt с поддеревом Item (без файлов слоёв).
"Экспорт связей отсюда" — сохранит Templates.txt с полным деревом связей href, начиная с файла Templates.(WidgetPanel).xdb.`

7. Диагностика MiddleX/MiddleY. Понятное сообщение с указанием, на какой размер хватает данных (для не корректных .bin). Возможно игре все равно на это или просто игнорирует.

8. Защита Crop при realWidth > width. Раньше падало ArgumentOutOfRangeException.
+ Защита от открытия не AddonDesc.(UIAddon).xdb!
************** Текст исключения **************
System.NullReferenceException: Object reference not set to an instance of an object.

9. Кнопка "Вкл./Выкл."
Фильтр «только ошибки» в логе отключая предупреждения. Кнопка на тулбаре.

10. Разделители на тулбаре (чтобы не промахиваться). Увеличил расстояние между кнопками.

11. Добавил при нажатии сохранить возможность отмены! Так сказать предохранитель от проблем!

12. Убрал появление <Color>0xffffffff</Color>.
При сохранении в файле появлялось <Color>0xffffffff</Color> хотя там не было!

13. Убрал появление:
    <Layout>
        <LeftX>0</LeftX>
        <MiddleX>0</MiddleX>
        <RightX>0</RightX>
        <TopY>0</TopY>
        <MiddleY>0</MiddleY>
        <BottomY>0</BottomY>
    </Layout>
При сохранении в файле появлялось хотя там не было!

14. Чисто для сравнения файлов добавлено при сохранении сохраняет то что было ...
Например если было
<?xml version="1.0" encoding="UTF-8" ?> или <?xml version="1.0" encoding="UTF-8"?> или <?xml version="1.0" encoding="utf-8" ?> или <?xml version="1.0" encoding="utf-8"?>
то и сохранит именно с тем что было в файле. Мешало понять где что изменено!

Теперь вроде сохраняет все не теряя ничего!!! Но лучше всегда самому сохранить перед использованием!!! Тем более что отмены действий так и нет....

И так по мелочи...
Версию так что бы не путать написал 0.0.2.2. Но ни на что не претендую!!!
Глянь если будет время.. Если что не так можно все всегда исправить... В архиве папка с программой и папка только с измененными или добавленными файлами, что бы видеть изменения..

net6.0-windows_15 ноя 2026 04-29.rar

Ссылка на комментарий
Поделиться на другие сайты

ВНИМАНИЕ!
Обязательна информация из \Personal\Logs\mods.txt для диагностики ошибки.
Иначе вам не помочь.
В игре включите в Меню → Интерфейс → Общие настройки → Запись ошибок пользовательских дополнений. Затем запустите аддон в игре.

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...

Важная информация

Пользуясь сайтом, вы принимаете Условия использования