Доки, ресурсы и полезная информация
В форуме 36 тем
-
- 12 подписчиков
- 57 ответов
- 689,3 млн просмотров
API (для версии 15.0) Общее описание и установка Создание пользовательских дополнений Описание полей ресурсов виджетов Пример универсального слота для отображения предметов или заклинаний Lua API - функции и события, предоставляемые клиентом игры (категории, енумы, эвенты, виджеты) Список изменений в Lua API Инструкции Введение в разработку аддонов Как научиться программировать на Lua за 15 минут (на английском) Lua за 60 минут Инструкция для разработчика аддонов Как сделать свой аддон (старая тема) Как правильно описывать текстуры Создание графическ…
Последний ответ от Lafayette, -
- 1 ответ
- 87 просмотров
Обновление 15.0.00.41 от 01.02.2024 Новое API widget:GetPickChildrenOnly(), widget:SetPickChildrenOnly( state ) - получение состояния \ изменение свойства PickChildrenOnly control3D:IsAddedAsWidget3D( widget ) - проверяет что widget добавлен как widget3D в данный control3D object.GetBuffBySysName( objId, sysName ) - ищет у объекта бафф с указанным sysName и возвращает его objId (int). Если не найден - вернет nil, если несколько - вернет первый найденный (порядок не определен), если объект не найден или не может холдить бафы - упадет в ошибку. userMods.RegisterEscSequence( state ), userMods.NotifyEscSequence( state, rank ) - обработка ESC посл…
Последний ответ от LEM, -
- 3 ответа
- 622 просмотра
1. Подготовка аудио-файлов Чтобы добавить свои звуки в аддоны нам потребуется установить FMOD Designer. Скачивайте из вложения инсталлятор fmoddesigner44464win-installer.exe. Единственное НО, Аллоды используют версию 4.44.54, я не нашел её в интернете и использовал чуть новее 4.44.64. Но, кажется, всё работает. Запускаем FMOD Designer, нажимаем File -> New Project... Создаем где-нибудь папку. ВАЖНО ЧТОБЫ НА ПУТИ НЕ БЫЛО РУССКИХ СИМВОЛОВ. Внизу в поле "Имя файла" пишем название проекта. ОНО ДОЛЖНО БЫТЬ УНИКАЛЬНЫМ и не совпадать с именами проектов внутри клиента и других аддонов. Никаких Interface, Sounds, Spells и т п. Проще всего назвать также как и ваш аддон.…
Последний ответ от Slashuur, -
- 1 ответ
- 559 просмотров
1. FMODProject В аддонах со звуками в файлах UIRelatedSounds мы ранее ссылались на FMODProject.xdb внутри клиента игры, например так: <?xml version="1.0" encoding="UTF-8" ?> <UIRelatedSounds> <Items> <Item> <name>InspirationUse</name> <resource> <project href="/SFX/Interface/Interface.(FMODProject).xdb" /> <name>Interface/MiniGame/BlackSmithing/inspiration_used</name> </resource> </Item> </Items> </UIRelatedSounds> Теперь, похоже, мы не сможем обратиться к файлу "/SFX/Interface/Interface.(FMODProject).xdb". Клиентские XDB файлы будут н…
Последний ответ от Slashuur, -
- 1 ответ
- 1,5 тыс просмотра
SimpleChatLog.lua It's a mix of ScriptAdvancedToString.luaChat.luaScriptChatLogExt.luaLog.lua libraries. chat(1-4 [message,notice,warning,error - message type],...[to Log on Chat]) or SimpleChat(1-4 [message,notice,warning,error - message type],...[to Log on Chat]) -- uses userMods.SendSelfChatMessage( message, messageLevel ) CustomChat(message, color, fontSize) -- just a Chat under different name LogInfo(... [to Log in mods.txt])
Последний ответ от самолет/Eksperyment, -
- 2 подписчиков
- 9 ответов
- 5,2 тыс просмотров
Уважаемые авторы аддонов! Пожалуйста, ознакомьтесь с изменениями, которые разработчики сделают в игре с обновлением 14.1, и подготовьте заранее обновления своих аддонов, чтобы зарелизить их как только - так сразу. Обновление 14.1 планируется в скором времени. Расшифровка переменных NAME это Fade Move Resize Rotation RotationWithChildren TextScale Новые API widget:Play[NAME]EffectSequence( sequenceParams ) Запускает на виджете цепочку эффектов типа NAME На виджете может существовать лишь одна цепочка \ эффект типа NAME Если на виджете уже есть активная цепочка эффектов NAME или эффект NAME то они будут прерваны Поля: …
Последний ответ от Lafayette, -
- 0 ответов
- 980 просмотров
ScriptGarbageCollectorExt.lua Использование common.RegisterEventHandler(function(event) if event.addonName == common.GetAddonName() then -- chat('SCRIPT_GARBAGE_COLLECTED', event.count) end end, 'SCRIPT_GARBAGE_COLLECTED')
Последний ответ от LEM, -
- 0 ответов
- 919 просмотров
Не совсем ясно баг это или фича. Для виджетов, прикрепленных к MainScreenControl3D, событие EVENT_EFFECT_FINISHED приходит всем аддонам. Вроде бы ничего страшного. Так и есть, но бывают определенные трудности из-за этого. Для примера возьмем вот такой код: common.RegisterEventHandler(function(event) if event.effectType == ET_FADE then -- специально для примера виджет берется из event.wtOwner event.wtOwner:PlayFadeEffect(1, 0, 150, EA_SYMMETRIC_FLASH) end end, 'EVENT_EFFECT_FINISHED') widget:PlayFadeEffect(1, 0, 150, EA_SYMMETRIC_FLASH) Ну что здесь такого? Простая реализация бесконечного моргания виджета. Есть две проблемы: А …
Последний ответ от LEM, -
- 1 подписчик
- 0 ответов
- 1,4 тыс просмотров
Имя класса WARLOCK Цвет заливки иконки ["WARLOCK"] = { r = 125/255; g = 101/255; b = 219/255; a = 1 }, Иконка двух размеров 20х20 делал для себя и 32х32 из клиента птс. WarlockIcon20.zip WarlockIcon32.zip
Последний ответ от logg, -
- 1 ответ
- 1,4 тыс просмотров
ScriptLogExt.lua Использование print(...) warning(...) LogInfo(...) LogWarning(...) LogError(...) LogMemory() common.LogInfo(...) common.LogWarning(...) common.LogError(...) common.LogMemory() Приятный бонус Библиотека совместима с функцией advtostring(). Достаточно подключить файл ScriptAdvancedToString.lua
Последний ответ от LEM, -
- 2 подписчиков
- 5 ответов
- 2,2 тыс просмотров
По моим наблюдениям Все вызовы api работают довольно медленно, а некоторые оооочень медленно. Например, очень медленный object.GetBuffInfo(), у кого тормозят аддоны в БГ/Рейдах/Арена Смерти/РЧД может из-за избытка таких вызовов. А значит нам нужно минимизировать кол-во таких вызовов. Приёмы для этого 1) Фильтры условий - перебираем/обрабатываем/храним не все, а лишь нужное в текущий момент Например, я минимизирую кол-во вызовов object.GetBuffInfo(), те убираю чтение этого бафа со всех, кроме таргет/пет/я, если нужны не все бафы, то фильтровать обработку только по нужным. 2) В ивентах только запоминать факт изменения чего либо, а обработку изменен…
Последний ответ от OLDodin, -
- 1 ответ
- 1,5 тыс просмотра
ScriptPackageExt.lua Использование require(modname) -- allods/data/Mods/Addons/ package.path = package.path..'../data/Mods/Addons/?;' package.path = package.path..'../data/Mods/Addons/?.lua;' package.path = package.path..'../data/Mods/Addons/?.luac;' local addonName = common.GetAddonName() -- allods/data/Mods/Addons/ADDON_NAME/ package.path = package.path..'../data/Mods/Addons/'..addonName..'/?;' package.path = package.path..'../data/Mods/Addons/'..addonName..'/?.lua;' package.path = package.path..'../data/Mods/Addons/'..addonName..'/?.luac;' -- allods/data/Mods/Addons/ADDON_NAME/Scripts/ package.path = package.path..'../data/Mods/Addons/'..addonName..'/Script…
Последний ответ от LEM, -
- 0 ответов
- 1,1 тыс просмотров
Этот хак дает возможность объявлять глобальные переменные в коде без использования Global(name, initialValue) local mt = getmetatable(_G) or {} mt.__newindex = rawset setmetatable(_G, mt)
Последний ответ от LEM, -
- 0 ответов
- 1,3 тыс просмотра
pretty-bytes Конвертирует байты в понятную человеку строку: 1337 → 1.34 kB Полезно для отображения размеров файлов для человека. Внимание, здесь используется десятичная метрика (килобайт и т.д.). Почитать об этом подробнее можно тут или тут. Установка Да просто скопируй этот файл в нужную папку. Использование require 'pretty-bytes' prettyBytes(1337) -- => '1.34 kB' prettyBytes(100) -- => '100 B' Лицензия MIT © Sindre Sorhus Я просто взял это здесь и переделал под Lua. pretty-bytes.lua
Последний ответ от LEM, -
- 0 ответов
- 1,7 тыс просмотра
https://alloder.pro/files/file/321-resursy-sistemnyh-vidzhetov-v-vide-xdb-fajlov/
Последний ответ от LEM, -
- 0 ответов
- 2,3 тыс просмотров
Чтобы открывать в игре, надо прописать в input.cfg в Personal строку, что-то вроде bind toggle_damage_done 'CTRL' + 'INSERT' Нажатие открывает окошко. В окошке - параметры всех приходящих со времени старта аддона ивентов EVENT_UNIT_DAMAGE_RECEIVED, выстроенные в дерево по категориям source, target, spellId, buffId, abilityId. Левый клик в строку разворачивает свиток, правый - открывает свиток в отдельном окне. Каждый свиток опять же выстроен деревом по тем же признакам, минус выбранный, и так до упора. Все цифры уронов даны в виде минимум, максимум, среднее арифметическое, сумма всего, количество ударов. Нулевые уроны не регистрируются, насколько помню. Аддон позво…
Последний ответ от ramirez, -
LibBarChart
от Ollaf- 2 подписчиков
- 4 ответа
- 2,3 тыс просмотра
LibBarChart Просмотр файла LibBarChart - библиотека, позволяющая разработчикам аддонов рисовать диаграммы на экране. Рекомендуется использовать для наглядного представления информации в аддоне. Библиотека полностью берет на себя работу с интерфейсом игры. От разработчика требуются только параметры настройки, данные, по которым надо построить диаграмму и своевременное обновление информации на экране. Сама библиотека находится в папке BarChart. Документацию к библиотеке можно найти в папке doc. Простейшие примеры использования библиотеки можно найти в папке Sample. Исследуя аддоны, заметил, что слишком мало информации преподноситс…
Последний ответ от Ollaf, -
- 0 ответов
- 1,7 тыс просмотров
Собственно, сабж. Все текстурки (tga и bin) и ресурсы xdb, которые использовал в окошках InspectWidgets и InspectAPI. Elements.zip
Последний ответ от ramirez, -
LibGS Просмотр файла (Для разработчиков аддонов) LibGS (LibGearScore) - библиотека инспектирования персонажей игроков. Рекомендуется использовать в аддонах, которые показывают гирскор, руны, и прочие характеристики экипировки персонажей игроков. Библиотека берет на себя всё общение с API игрового клиента (avatar.StartInspect, avatar.EndInspect, EVENT_INSPECT_STARTED, EVENT_INSPECT_FINISHED), скрывая от аддона особенности их работы, самостоятельно решая возможные конфликты между аддонами, и выдает в аддон результат инспектирования в удобном виде. Прошу разработчиков принять участие в тестировании Если кто-то ув…
Последний ответ от LEM, -
- 3 подписчиков
- 8 ответов
- 4,3 тыс просмотра
ScriptChatLogExt.lua Добавляет возможность отправлять свой текст в чат. Использование chat('#f15a5a', 1, '#f0c419', 'Hello!', '#4eba6f', nil, '#2d95bf', function()end, '#955ba5', {}, '#475556', stateMainForm, '#default') ChatLog(...) ChatLog:Push(...) ChatLog:PushValuedText(valuedText) Параметры ChatLog.capacity = 100 ChatLog.separator = ' ' ChatLog.format = userMods.ToWString('<html color="0xffccc5b7" fontsize="14"><r name="time"/> [<r name="addonName"/>]: <r name="text"/></html>') ChatLog.timeFormat = userMods.ToWString('<html><r name="h"/>:<r name="m"/>:<r name="s"/>.<r name="ms"/>&l…
Последний ответ от Slashuur, -
- 13 подписчиков
- 21 ответ
- 14,6 тыс просмотров
Есть несколько типичных моментов по починке старых аддонов. Если вы самостоятельно пофиксили работу того или иного аддона - прикрепите архив к посту в теме поддержки аддона, либо скиньте мне в личку, а я уже обновлю дистрибутив аддона в нашем файловом архиве. Сообща можно и горы свернуть, поэтому фиксим и выкладываем, выкладываем и фиксим Фиксы для 5.0.2 (с луа версии 5.0 до луа версии 5.1) Какие аддоны фиксить? Да, грубо говоря, все, что обновлены раньше 23 июля (за может быть парой исключений).
Последний ответ от webbar, -
- 1 подписчик
- 1 ответ
- 2,1 тыс просмотр
More and more players from the European server are now downloading addons. But there are a lot of addons that are not translated for English, French, German or Turkish clients. Localizing an addon is not hard. This is the code I use ( Global("localization", "eng_eu") -- +----------------------------------+ -- |AO game Localization detection | -- |New conceptual detection by Ciuine| -- |Aesthetically improved by Ramirez | -- +----------------------------------+ local function GetGameLocalization() local id = options.GetOptionsByCustomType( "interface_option_localization" )[ 0 ] if id then local values = options.GetOptionInfo( id ).values …
Последний ответ от cristimirt, -
- 1 подписчик
- 6 ответов
- 3 тыс просмотров
AdvLogInfo.zip В файлике два скрипта. Один имплементирует глобальную функцию advtostring(), другой - LogInfo() и еще немного полезностей. Эта LogInfo() с помощью advtostring() умеет смотреть внутрь табличек, не боится рекурсии, вытягивает из данных их тип и контент, если возможно, снабжает тайм-тегом, ну и все такое. Расширяемо. Еще там прикручена возможность запускать скрипты из строки ввода чата. Типа: /script tinyfps LogInfo( _G )
Последний ответ от LEM, -
- 2 подписчиков
- 4 ответа
- 7,6 тыс просмотров
Содержание: UIAddon WidgetButton WidgetForm WidgetPanel Пояснения: <Name/ > - название параметра. {true|false} - допустимые значения. <Name>MyAddon</Name> - пример. UIAddon <Name /> - название аддона, {латинские буквы и цифры}. <Name>MyAddon</Name> <localizedNameFileRef href="" /> - локализованное название аддона, ссылка на текстовый файл. <localizedNameFileRef href="localizedName.txt" /> <localizedDescFileRef href="" /> - локализованное описание аддона, ссылка на текстовый файл. <localizedDescFileRef href="localizedDesc.txt" /> <AutoStart /> - па…
Последний ответ от Dragagon, -
- 0 ответов
- 7,9 тыс просмотра
Аддоноведение. Вступление. Собственно, вот текст базового FAQ, как мне видится (R.). Q: Что такое аддон? A: Аддоны - это такие штуки, которые призваны добавлять в интерфейс Аллодов Онлайн дополнительные возможности, и тем самым делать игру доступнее и интереснее. Собственно, Аддон - это единица расширения интерфейса Аллодов Онлайн. Благодаря открытому API создание аддонов доступно всем желающим. Q: Что необходимо знать, чтоб начать делать аддоны? A: Для успешной работы над аддонами необходимо: Обладать пониманием языков разметки вообще, и XML в частности; Обладать пониманием основ программирования; Иметь представление о том, что…
Последний ответ от ramirez,