Доки, ресурсы и полезная информация
В форуме 49 тем
-
- 3 подписчиков
- 8 ответов
- 5,6 тыс просмотров
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, -
- 2 подписчиков
- 140 ответов
- 182,7 млн просмотра
Всем доброго времени суток! У меня возникло желание заняться разработкой аддонов, но столкнулся вот с какой проблемой. В документации по написанию аддонов (от Нивал) не нашел ничего касательно создания GUI. Поковырял другие аддончики, но опять куча вопросов. Если с самим LUA и API клиента вроде бы все понятно, но вот касательно создания GUI. 1. Все файлы *.xdb это по сути XML файлы. И в связи с этим возникает вопрос по их составлению. (неизвестен перечень разделов и ключей) 2. Существует ли какая то типизация контролов? (кнопки, списки, комбобоксы...) Либо все контролы однотипны?
Последний ответ от logg, -
- 0 ответов
- 1,2 тыс просмотров
ScriptGarbageCollectorExt.lua Использование common.RegisterEventHandler(function(event) if event.addonName == common.GetAddonName() then -- chat('SCRIPT_GARBAGE_COLLECTED', event.count) end end, 'SCRIPT_GARBAGE_COLLECTED')
Последний ответ от LEM, -
- 1 ответ
- 1,8 тыс просмотра
ScriptLogExt.lua Использование print(...) warning(...) LogInfo(...) LogWarning(...) LogError(...) LogMemory() common.LogInfo(...) common.LogWarning(...) common.LogError(...) common.LogMemory() Приятный бонус Библиотека совместима с функцией advtostring(). Достаточно подключить файл ScriptAdvancedToString.lua
Последний ответ от LEM, -
- 1 ответ
- 1,8 тыс просмотров
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, -
- 2 подписчиков
- 5 ответов
- 3 тыс просмотров
По моим наблюдениям Все вызовы api работают довольно медленно, а некоторые оооочень медленно. Например, очень медленный object.GetBuffInfo(), у кого тормозят аддоны в БГ/Рейдах/Арена Смерти/РЧД может из-за избытка таких вызовов. А значит нам нужно минимизировать кол-во таких вызовов. Приёмы для этого 1) Фильтры условий - перебираем/обрабатываем/храним не все, а лишь нужное в текущий момент Например, я минимизирую кол-во вызовов object.GetBuffInfo(), те убираю чтение этого бафа со всех, кроме таргет/пет/я, если нужны не все бафы, то фильтровать обработку только по нужным. 2) В ивентах только запоминать факт изменения чего либо, а обработку изменен…
Последний ответ от OLDodin, -
- 0 ответов
- 1,2 тыс просмотра
Не совсем ясно баг это или фича. Для виджетов, прикрепленных к 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,7 тыс просмотра
Имя класса WARLOCK Цвет заливки иконки ["WARLOCK"] = { r = 125/255; g = 101/255; b = 219/255; a = 1 }, Иконка двух размеров 20х20 делал для себя и 32х32 из клиента птс. WarlockIcon20.zip WarlockIcon32.zip
Последний ответ от logg, -
- 1 подписчик
- 6 ответов
- 4,2 тыс просмотр
AdvLogInfo.zip В файлике два скрипта. Один имплементирует глобальную функцию advtostring(), другой - LogInfo() и еще немного полезностей. Эта LogInfo() с помощью advtostring() умеет смотреть внутрь табличек, не боится рекурсии, вытягивает из данных их тип и контент, если возможно, снабжает тайм-тегом, ну и все такое. Расширяемо. Еще там прикручена возможность запускать скрипты из строки ввода чата. Типа: /script tinyfps LogInfo( _G )
Последний ответ от LEM, -
- 13 подписчиков
- 21 ответ
- 16,2 тыс просмотра
Есть несколько типичных моментов по починке старых аддонов. Если вы самостоятельно пофиксили работу того или иного аддона - прикрепите архив к посту в теме поддержки аддона, либо скиньте мне в личку, а я уже обновлю дистрибутив аддона в нашем файловом архиве. Сообща можно и горы свернуть, поэтому фиксим и выкладываем, выкладываем и фиксим Фиксы для 5.0.2 (с луа версии 5.0 до луа версии 5.1) Какие аддоны фиксить? Да, грубо говоря, все, что обновлены раньше 23 июля (за может быть парой исключений).
Последний ответ от webbar, -
- 0 ответов
- 1,3 тыс просмотров
Этот хак дает возможность объявлять глобальные переменные в коде без использования Global(name, initialValue) local mt = getmetatable(_G) or {} mt.__newindex = rawset setmetatable(_G, mt)
Последний ответ от LEM, -
- 0 ответов
- 1,6 тыс просмотров
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, -
LibBarChart
от Ollaf- 2 подписчиков
- 4 ответа
- 2,8 тыс просмотров
LibBarChart Просмотр файла LibBarChart - библиотека, позволяющая разработчикам аддонов рисовать диаграммы на экране. Рекомендуется использовать для наглядного представления информации в аддоне. Библиотека полностью берет на себя работу с интерфейсом игры. От разработчика требуются только параметры настройки, данные, по которым надо построить диаграмму и своевременное обновление информации на экране. Сама библиотека находится в папке BarChart. Документацию к библиотеке можно найти в папке doc. Простейшие примеры использования библиотеки можно найти в папке Sample. Исследуя аддоны, заметил, что слишком мало информации преподноситс…
Последний ответ от Ollaf, -
- 0 ответов
- 2 тыс просмотр
https://alloder.pro/files/file/321-resursy-sistemnyh-vidzhetov-v-vide-xdb-fajlov/
Последний ответ от LEM, -
- 0 ответов
- 2,7 тыс просмотров
Чтобы открывать в игре, надо прописать в input.cfg в Personal строку, что-то вроде bind toggle_damage_done 'CTRL' + 'INSERT' Нажатие открывает окошко. В окошке - параметры всех приходящих со времени старта аддона ивентов EVENT_UNIT_DAMAGE_RECEIVED, выстроенные в дерево по категориям source, target, spellId, buffId, abilityId. Левый клик в строку разворачивает свиток, правый - открывает свиток в отдельном окне. Каждый свиток опять же выстроен деревом по тем же признакам, минус выбранный, и так до упора. Все цифры уронов даны в виде минимум, максимум, среднее арифметическое, сумма всего, количество ударов. Нулевые уроны не регистрируются, насколько помню. Аддон позво…
Последний ответ от ramirez, -
- 0 ответов
- 2,1 тыс просмотров
Собственно, сабж. Все текстурки (tga и bin) и ресурсы xdb, которые использовал в окошках InspectWidgets и InspectAPI. Elements.zip
Последний ответ от ramirez, -
- 1 подписчик
- 1 ответ
- 2,5 тыс просмотров
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 подписчик
- 43 ответа
- 22,6 тыс просмотров
HOW-TO: Многоязычный аддон (АО 1.1.02+) Updated: 2011-02-17 (Пример локализации SampleLocalization_2011-02-17.zip исправлен для версии АО 2.0.03) (This post will be translated to English later) Вместо вступления Ещё одна глава пока ненаписанного учебника по созданию аддонов... Так вот. Как нам всем известно, в АО не существует никакого встроенного, "прозрачного" механизма для поддержки локализаций в аддонах. А как хотелось бы!.. Именно сейчас настал тот момент, когда нужно действовать. Как мы уже не раз доказывали всему АО-сообществу, когда разработчики АО не идут навстречу к разработчикам аддонов, разработчики аддонов, как настоящие спартанцы, всё равно добивают…
Последний ответ от Setras, -
- 1 подписчик
- 2 ответа
- 2,4 тыс просмотра
Разрабы предоставили нам UserMods.* с несколькими функциями. Разберемся, как это работает. Вот пример: local userMuds = {} local debugCowmon = {} function debugCowmon.ToWs(astr) return "WSTR_"..astr end function userMuds.TestFunc() return "test" end local meta = {} function meta.__index(op, key) if key == "ToWString" then return debugCowmon.ToWs end return nil end setmetatable(userMuds, meta) Вызов: LogInfo(userMuds.TestFunc()) --вызов в обход __index LogInfo(userMuds.ToWString("testAstring")) --вызов с __index LogInfo(userMuds.OpenURL("http:\\ya.ru")) --ошибка скрипта (обращние к нулю) Что тут происходит? Для начала мы создаем 2 новые переменные, предс…
Последний ответ от Mankubus, -
- 0 ответов
- 9,4 тыс просмотров
Аддоноведение. Вступление. Собственно, вот текст базового FAQ, как мне видится (R.). Q: Что такое аддон? A: Аддоны - это такие штуки, которые призваны добавлять в интерфейс Аллодов Онлайн дополнительные возможности, и тем самым делать игру доступнее и интереснее. Собственно, Аддон - это единица расширения интерфейса Аллодов Онлайн. Благодаря открытому API создание аддонов доступно всем желающим. Q: Что необходимо знать, чтоб начать делать аддоны? A: Для успешной работы над аддонами необходимо: Обладать пониманием языков разметки вообще, и XML в частности; Обладать пониманием основ программирования; Иметь представление о том, что…
Последний ответ от ramirez, -
- 3 ответа
- 2,2 тыс просмотров
Вот работающий пример WidgetDnD. Работает с любым выравниванием виджета. WidgetDnD.zip
Последний ответ от icreator, -
- 1 подписчик
- 1 ответ
- 1,7 тыс просмотров
Написал на скорую руку прогу для преобразования 4байтового значения команды Lua 5.0 в значение оператора и операндов для него (A,B,C,Bx, sBx) и обратно. Утилита скорее "для себя", так что при измении sBx/Bx, например, меняются значения только A, B и C. Если хотите узнать, каким будет Bx при изменении sBx, выполните обратное преобразование. Ну, или потом доделаю. Скрин, собсно: Бинарь и исходники в аттаче. luaop_bin_w32.rar luaop_src.rar
Последний ответ от logg, -
- 1 ответ
- 1,9 тыс просмотра
Вот работающий пример pickMask в кнопке, если кому еще интересно. PickMask.zip
Последний ответ от icreator, -
- 60 ответов
- 13,4 тыс просмотров
Привествую комрады.... Я думаю сделать билбиотеку классов. Это упростит разработку и повысит читабильность кода. Суть в том чтобы создать набор классов для работы с компонентами, удобную и понятную обертку над Ниваловским АПИ, а так же обизательно реализовать там систему проверок и логирования ошибок, что значительно упростит дебаг. Эту библиотеку каждый сможет скачать и использовать. Планирую обновлять тему и при вашем содействии расширять функционал данной библиотеки. Что сделано: 1. WidgetsContainerClass - это класс для управления виджетами. Включает в себя - создание, виджетов 2мя способами и общие для всех виджетов фукции управления. Описание: 1.1 CreateWidg…
