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

Дайджест за июль-сентябрь

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

Сентябрь Август Июль

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

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

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

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

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

Подробнее

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

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

Подробнее

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

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

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

icreator

Пользователь
  • Постов

    3 118
  • Зарегистрирован

  • Посещение

Весь контент icreator

  1. я поняла как загрузить - грузим как файл для выполнения: например так: Code: local filename = "C:/Program Files/Games/Allods Online/data/Mods/Addons/GuildCommissionaire/Scripts/list.txt" gList = {} dofile (filename) researchObj(" load:", gList) а в файле list.txt пишет это: Code: gList = {----------------------data MyPers = 1234, ["Большая Розочка"] = " уже совсем взрослая", ["dddd"] = 111, MyPers2 = 233 --------------------- } в результате у нас будут загружены данные из файла! результат работы в ЛогФайле: Code: Info: addon GuildCommissionaire: load: MyPers2:=233{number}Info: addon GuildCommissionaire: load: Большая Розочка:=уже совсем взрослая{string} Info: addon GuildCommissionaire: load: dddd:=111{number} Info: addon GuildCommissionaire: load: MyPers:=1234{number}
  2. вообще как-нибудь можно загрузить "на лету" файл? Code: io.input ( [file] )io.lines ( [filename] ) или только через AddonDesc.(UIAddon).xdb
  3. Code: will iterate over all the words from string s, printing one per line. The next example collects all pairs key=value from the given string into a table: t = {} s = "from=world, to=Lua" for k, v in string.gfind(s, "(%w+)=(%w+)") do t [k] = v end то есть они заменили string.gmatch на это string.gfind
  4. а что стандартные: string.match (s, pattern [, init]) string.gmatch (s, pattern) не работают? мне пишет: Error: addon GuildCommissionaire: Error while running the chunk Error: addon GuildCommissionaire: [string "mods/addons/guildcommissionaire/scriptgcommissionaire.lua"] attempt to call field `match' (a nil value) Error: addon GuildCommissionaire: func: match, field, line: -1, defined: C, line: -1, [c] Error: addon GuildCommissionaire: func: ?, ?, line: 31, defined: Lua, line: 25, [string "mods/addons/guildcommissionaire/scriptgcommissionaire.lua"]
  5. поидее есть(?) стандартный распаковщик командных строк
  6. 5. полученный архив проверяем: либо смотрим что там (там должны быть все пути начиная с Addons), либо распаковываем куда-нибудь: там должна появиться папка Addons и в ней папка с вашим аддоном
  7. итак как я в это сделала: 1. создала новую папку Mods/Addons у себя (а не в папке игры) 2. скопировала в эту папку Addons свой аддон, который хранился в папке игры (C:\Program Files\Games\Allods Online\data\Mods\Addons). Получилось: мояПапка\Mods\Addons\LootEDSchoice
  8. Quote: Заходим в папку Allods Online\data\Mods\Addons, в которой находятся все папки установленных аддонов. И упаковываем папку со своим новеньким аддоном в ZIP-архив. Получится ZIP, внутри которого одна-единственная папка, названная именем вашего аддона. А уже в ней, находится AddonDesc.(UIAddon).xdb и все остальные файлы/папки аддона. так мы все и делаем и получится архив который надо будет распаовываь сразу в папку Addons а ваши все архивы на сайте запакованы так что их надо распаковывать в Mods
  9. вот ЗИП который создается простым выбором из контекстного меню видно сто там нет главной папки Addons и файлы надо распаковывать именно в Addons
  10. вот ваши запакованные файлы - видно что там папка аддона вложена в общую папу Addons
  11. мимоходом замечание для разрабов - у нних настройка быстрых клавиш тоже некомпактно сохраняется: 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" ...
  12. ну в общем я запаковала данные в 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_AddonManager table_begin data Alchemy = l"1" ArmorCraft = l"1" AstralMap = l"1" BattleEnd = l"1" BonusStatSelector = l"0" BuffInfo = l"1" явно компактней. и я сделала сохранение в секции аватара - так как разным персонажам нужны разные аддоны - кому защита, кому хил, кому агр, а кому магические
  13. кстати идея про 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
  14. в общем мне пришлось запаковать свою базу знаний в компактную таблицу для сохранения в конфигурации: 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
  15. короче нельзя такие иметь таблицы: Code: табл ["Знак Рвения"] = val но можно: Code: табл ["Знак_Рвения"] = valтабл ["\"Знак_Рвения"] = val табл ["1092"] = val
  16. кстати дурдом - там для каждого персонажа сохраняется отдельно настройки клавиатуры Code: table_begin key_bindings table_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 ... да короче нельзя в качестве индекса у таблицы делать строку с пробелами (( и никакие ухищрения не помогают - надо запаковывать свои данные так чтобы они были без пробелов
  17. кстати в 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_LootEDSchoice table_begin data Пластырь = 2 table_end data remote_version = -1 table_end ScriptUserMods_LootEDSchoice затем вообще пусто ((
  18. так почему у меня данные сохраняются если я выхожу через Настройки/Завершить, потом опять вхожу этим же персонажем. а если закрываю окно АО и потом запускаю поновой игру то ничего не сохраняется (( 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:
  19. чем отличается userMods.GetAvatarConfigSection( common.GetAddonName() ) от GetGlobalConfigSection если мой персонаж вышел из игры то эти настройки тоже пропадают?
  20. как я сделала 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
  21. в общем я сделала массив глобальным и просто к нему из подпрограммы по индексам обращаюсь: 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
×
×
  • Создать...

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

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