-
Постов
3 118 -
Зарегистрирован
-
Посещение
Тип контента
Загрузки
Форумы
Статьи и объявления
Гардероб
Маунты
Сообщения Allods Team
Трекер ошибок
Магазин
Галерея
Сообщения, опубликованные icreator
-
-
-
-
Quote:
Заходим в папку Allods Online\data\Mods\Addons, в которой находятся все папки установленных аддонов.
И упаковываем папку со своим новеньким аддоном в ZIP-архив.
Получится ZIP, внутри которого одна-единственная папка, названная именем вашего аддона. А уже в ней, находится AddonDesc.(UIAddon).xdb и все остальные файлы/папки аддона.
так мы все и делаем и получится архив который надо будет распаовываь сразу в папку Addons
а ваши все архивы на сайте запакованы так что их надо распаковывать в Mods -
-
-
-
мимоходом замечание для разрабов - у нних настройка быстрых клавиш тоже некомпактно сохраняется:
Code:table_begin action_panel
table_begin data
int_keys_begin data
table_begin 0
int_keys_begin 0
1 = 1
2 = 59301
int_keys_end 0
table_end 0
table_begin 1
int_keys_begin 1
1 = 1
2 = 1355284495
int_keys_end 1
table_end 1
а надо бы сделать:
Code:table_begin action_panel
table_begin data
int_keys_begin data
0 = L"1:59301"
1 = L"1:1355284495"
...
-
ну в общем я запаковала данные в AddonManager:
Code:---- запаковывает базу знаний в конфигурацию
function toConfig( DB )
local config = {}
for k, _ in pairs( DB ) do
config [ k ] = (DB [ k ] .state and 1 or 0) .. (DB [ k ] .comment or "")
end
userMods.SetAvatarConfigSection( common.GetAddonName(), config )
end
---- распаковывает конфигурацию в базу знаний
function fromConfig()
local config = userMods.GetAvatarConfigSection( common.GetAddonName() ) or {} --- если секция не найдена то
--- инициализируем как таблицу
local DB = {}
for k, v in pairs( config ) do
DB [ k ] = { comment = string.sub (v, 2) or "--" } --- сразу создаст таблицу в таблице
DB [ k ] = { state = (string.sub (v, 0, 1) + 0) == 1 }
end
return DB
end
----------------
addon.Init = function( self )
....
--- self.config = userMods.GetGlobalConfigSection( common.GetAddonName() ) or {}
self.config = fromConfig()
end
addon.SaveConfig = function( self )
...
--- userMods.SetGlobalConfigSection( common.GetAddonName(), self.config )
toConfig ( self.config )
end
результат теперь такой:
Code:table_begin ScriptUserMods_AddonManagertable_begin data
Alchemy = l"1"
ArmorCraft = l"1"
AstralMap = l"1"
BattleEnd = l"1"
BonusStatSelector = l"0"
BuffInfo = l"1"
явно компактней. и я сделала сохранение в секции аватара - так как разным персонажам нужны разные аддоны - кому защита, кому хил, кому агр, а кому магические
-
кстати идея про AddonManager
там данные сохраняются не компактно:
Quote:table_begin ScriptUserMods_AddonManager
table_begin data
table_begin Alchemy
state = true
table_end Alchemy
table_begin ArmorCraft
state = true
table_end ArmorCraft
table_begin AstralMap
state = true
table_end AstralMap
table_begin BattleEnd
state = true
table_end BattleEnd
...
а можно было бы так:
Code:table_begin ScriptUserMods_AddonManager
table_begin data
Alchemy = L"1"
ArmorCraft = L"1"
AstralMap = L"0карта астрала"
BattleEnd = L"1это конец"
то есть в одной строке запаковать 2 значения: state и comment
-
в общем мне пришлось запаковать свою базу знаний в компактную таблицу для сохранения в конфигурации:
Code:choice.DBtoConfig = function( self )
local config = {}
local i = 0
for k, v in pairs( self.DB ) do
config [ i ] = v .. k
i = i + 1
end
userMods.SetAvatarConfigSection( common.GetAddonName(), config )
end
choice.DBfromConfig = function( self )
self.DB = {} --- обнулим текущие знания
local config = userMods.GetAvatarConfigSection( common.GetAddonName() ) or {} --- если секция не найдена то
--- инициализируем как таблицу
for _, v in pairs( config ) do
self.DB [ string.sub (v, 2) ] = string.sub (v, 0, 1) + 0
end
end
после чего они стали сохраняться в таком виде:
Code:table_begin ScriptUserMods_LootEDSchoice
table_begin data
0 = l"2Закрытый подарок"
1 = l"2Пластырь"
2 = l"2Закрытый малый подарок"
table_end data
remote_version = -1
table_end ScriptUserMods_LootEDSchoice
-
короче нельзя такие иметь таблицы:
Code:табл ["Знак Рвения"] = valно можно:
Code:табл ["Знак_Рвения"] = valтабл ["\"Знак_Рвения"] = val
табл ["1092"] = val
-
кстати дурдом - там для каждого персонажа сохраняется отдельно настройки клавиатуры
Code:table_begin key_bindingstable_begin data
table_begin data
table_begin mission_actions
table_begin action_01
table_begin 0
key = L"NUM_4"
table_end 0
table_end action_01
надо про это разрабам сказать - а то слишком много инфо копируется зря
ну хорошо - а почему когда я делаю загрузку этих 2-х строк у меня в таблице choice.DB оказывается всего 1 строка? - каждый раз на 1 строку меньше ((
понятно! у меня там не строковая переменная а имя индекса да еще с пробелами
может поэтому не получается...
должно быть что-то вроде L"
Code:row1 = L"Закрытый малый подарок"row2 = 2
а в AddonManager конфиге вообще так:
Code:table_begin data
table_begin UserAddon/AucEDSman
state = true
table_end UserAddon/AucEDSman
...
да короче нельзя в качестве индекса у таблицы делать строку с пробелами ((
и никакие ухищрения не помогают - надо запаковывать свои данные так чтобы они были без пробелов
-
кстати в user.cfg есть:
Code:table_begin ScriptUserMods_LootEDSchoice
table_begin data
Закрытый малый подарок = 2
Пластырь = 2
table_end data
remote_version = -1
table_end ScriptUserMods_LootEDSchoice
а после того как я еще раз заходу персонажем уже остается
Code:table_begin ScriptUserMods_LootEDSchoicetable_begin data
Пластырь = 2
table_end data
remote_version = -1
table_end ScriptUserMods_LootEDSchoice
затем вообще пусто ((
-
так почему у меня данные сохраняются если я выхожу через Настройки/Завершить, потом опять вхожу этим же персонажем.
а если закрываю окно АО и потом запускаю поновой игру то ничего не сохраняется ((
Code:choice._R [ "EVENT_UNKNOWN_SLASH_COMMAND" ] = function( event )
local cmd = FromWS(event.text)
if cmd == "/lc study" then
choice.stage = "STUDY"
elseif cmd == "/lc load" then
choice.DB = userMods.GetAvatarConfigSection( common.GetAddonName() ) or {}
elseif cmd == "/lc save" then
userMods.SetAvatarConfigSection( common.GetAddonName(), choice.DB )
end
end
choice._R [ "EVENT_AVATAR_CREATED" ] = function( )
--- инициация переменных тут
--- иначе будет нил если в глобал переменной сразу присвоить
choice:initVal()
end
choice.initVal = function( self )
---LogInfo("initVal")
self.DB = userMods.GetAvatarConfigSection( common.GetAddonName() ) or {} --- если секция не найдена то
--- инициализируем как таблицу
self.myID = avatar.GetId()
end
choice.Init = function( self )
--- на случай перезагрузки аддона иницируем переменные
if avatar.IsExist() then self:initVal() end
--- включим слежку за событиями
self:Reg()
end
--------------------------------------------------------------------------------
choice:Init()
--------------------------------------------------------------------------------
может путаница с self: choice:
-
чем отличается
userMods.GetAvatarConfigSection( common.GetAddonName() )
от
GetGlobalConfigSection
если мой персонаж вышел из игры то эти настройки тоже пропадают?
-
как я сделала WidgetEditLine
взяла окантовку стандартную от MainPanel:
Code:<BackLayer href="MainFrame.(WidgetLayerTiledTexture).xdb#xpointer(/WidgetLayerTiledTexture)" />и создала панель WidgetPanel с этой окантовкой и расположением как у WidgetEditLine :
Code:<?xml version="1.0" encoding="UTF-8" ?><WidgetPanel>
<Name></Name>
<Priority>0</Priority>
<Children />
<BackLayer href="MainFrame.(WidgetLayerTiledTexture).xdb#xpointer(/WidgetLayerTiledTexture)" />
<Placement>
<X>
<Align>WIDGET_ALIGN_LOW</Align>
<Pos>78</Pos>
<Size>100</Size>
</X>
<Y>
<Pos>35</Pos>
<Size>45</Size>
</Y>
</Placement>
</WidgetPanel>
затем эту панель поставила под WidgetEditLine:
Code:<Item href="Input1.(WidgetEditLine).xdb#xpointer(/WidgetEditLine)" /><Item href="Input1Panel.(WidgetPanel).xdb#xpointer(/WidgetPanel)" />
а текстуры взяла стандартные.
полный пример использования в AucEDSman
-
в общем я сделала массив глобальным и просто к нему из подпрограммы по индексам обращаюсь:
Code:MyCompare = function (IndexA, IndexB )
local tA = addon.widgets.elems [IndexA]
local tB = addon.widgets.elems [IndexB]
return ( FromWS(tA.name) .. FromWS(tA.comment) ) < (FromWS(tB.name) .. FromWS(tB.comment) )
end
-
LootEDSchoice
Просмотреть файл
RUS:
Внимание! Аддон устарел, и больше не поддерживается! Новый аддон тут:
http://ui9.ru/forum/lootmanager/about
Делает выбор (Нужно/Можно/Не нужно) за вас при розыгрыше лута (аддон обучается). Снижает нагрузку на процессор.
Инструкция по использованию здесь:
http://ui9.ru/forum/lootedschoice/topic/1055/t1055-LootEDSchoice-обсуждение-и-пр
ENG:
Attention! The addon is outdated and no longer supported! The new addon is here:
http://ui9.ru/forum/lootmanager/about
Automatically selects Need/Greed/Pass for you in the loot rolls. The addon have a training ability.
Usage manual is here (in English):
http://ui9.ru/forum/lootedschoice/topic/1055/t1055-LootEDSchoice-Discussion#c11890
Последняя проверенная версия работы аддона: 2.0.03.17
-
Автор
-
Добавлен07.12.2018
-
Категория
-
-
предлагаю файлы с часто используемыми функциями объединить в одном ScriptLIB.lua и положить его в папку \Addons
а в AddonDesc.(UIAddon).xdb
писать:
Code:<Item href="../ScriptLIB.lua" /> -
если вам хочется знать какие функции и поля имеет тот или иной объект, можете использовать такую функцию:
Code:---выдает все поля и значения а так же функции объекта
function researchObj(tab,obj)
tab = tab .. " "
---ограничим рекурсию
if string.len (tab) > 50 then
LogInfo (" рекурсия ограничена!")
return
end
local metaTable = getmetatable (obj)
if metaTable then
---- покажем функции объекта
for k,v in pairs( metaTable ) do
LogInfo ( tab, k,":=",v)
end
end
if type(obj) == "table" then
---- покажем поля (переменные) таблицы
if GetTableSize( obj ) == 0
then LogInfo ( tab, "{}")
return
end
for k,v in pairs(obj) do
LogInfo ( tab, k,":=",v, "{", type (v), "}")
if type (v) == "table" and k ~= "__index" and k ~= "_G" then
--- "__index" - он такую же точно таблицу вложенную имеет что приводит к зацикливанию
researchObj(tab,v)
end
end
else
LogInfo ( tab, "_:=",obj, "{", type (obj), "}")
end
end
*исправлено: if type (v) == "table" and k ~= "__index" and k ~= "_G" then
так например если хотите исследовать виджет EditLine то после его инициализации пишем например так:
Code:function Init()
wtMainPanel = mainForm:GetChildChecked( "MainPanel" , false )
wtInput1 = wtMainPanel:GetChildChecked( "Input1" , false )
researchObj("wtEdit:",wtInput1)
end
все! всю инфо об объекте смотрим в файле C:\Program Files\Games\Allods Online\Personal\Logs\mods.txt
Info: addon AucEDSman: wtEdit: GetCursorPos:=function: 207769C8
Info: addon AucEDSman: wtEdit: GetBackgroundColor:=function: 25BC0278
Info: addon AucEDSman: wtEdit: Enable:=function: 2EEE5148
Info: addon AucEDSman: wtEdit: SetText:=function: 196A7B80
Info: addon AucEDSman: wtEdit: SetFocus:=function: 1CD944D8
Info: addon AucEDSman: wtEdit: SetBackgroundTexture:=function: 24D080A0
Info: addon AucEDSman: wtEdit: IsFocused:=function: 1771E2B8
...
далее можно исследовать каждую функцию - сколько у нее параметров и какие по сообщениям об ошибке в том же ЛОГфайле
Code:wtInput1:GetCursorPos()а
Code:researchObj("_G",_G)выдаст список всех функций, которые можно вызывать (API, LUA)
-
спасибки!! только я творю дальше.. и теперь надо все твои изменения и мои как-то слить вместе....
по WidgetEditLine - на самом деле там есть недочет - если фон, который рисует окошко ввода, в сам виджет вставлять через
<BackLayer href="" />
то спозиционировать красиво неполучается
поэтому я отдельную панель под него подложила
-
не а - дело не в том - она в параметрах 1 и 2 предает значение индекса ! а как значение элемента выцепить?
то есть у меня многомерный массив - ну или набор записей с несколькими полями - как к этим полям обратиться?
Code:table = { name, comment }
t [1] = table1
t [2] = table2
t [1] .name > t [2] .name
...
-
где-то я в описании видела - что можно из ЛР вещи смотреть... разделы там подразделы... цену в КРИ надо бы оттуда взять - кто знает функцию АПИ? или это мне показалось...
-
я его чуток переработала - добавила обработку почты и еще... вроде там обновила версию
и вставила функцию что выдает память аддона для аддон манагер
и еще скажу что этот Аддон Манагер по-моему гениально написан! короче я много чего так там и не поняла (((
Публикация новых аддонов (Инструкция)
в Вопросы и ответы
Опубликовано
4. полученный Mods.zip переименовала в свой