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

Дайджесты за январь-февраль

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

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

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

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

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

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

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

Подробнее

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

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

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

сохранение настрое к аддоне


icreator

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

чем отличается

userMods.GetAvatarConfigSection( common.GetAddonName() )

от

GetGlobalConfigSection

если мой персонаж вышел из игры то эти настройки тоже пропадают?

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

Ничего нигде не пропадает.

Get/SetGlobalConfigSection - общие настройки для ВСЕХ персонажей, на всех серверах.

Эта секция в конфиге всего одна.

Рекомендую именно СЮДА сохранять все настройки аддонов, кроме тех редких случаев, когда приходится пользоваться вторым вариантом:

Get/SetAvatarConfigSection - персональный настройки конкретного персонажа, которым играют в данный момент.

Таких секций в конфиге может быть очень много - по одной на каждого персонажа на каждом сервере (у меня их 30-40 штук, наверное).

По возможности, рекомендую НЕ пользоваться этой секцией. НЕцелесообразно сохранять сюда общие настройки аддонов - несчастным пользователям придётся мучиться, настраивать аддон под каждого своего существующего персонажа, и в будущем, под каждого нового. Но за то, этот способ годится для персональных настроек персонажей, как в твоём LootEDSchoice.

В одном аддоне, можно одновременно пользоваться обоими способами - в Global-секцию сохранять общие настройки аддона, а в Avatar-секцию только те настройки, которые нужны только персонально этому аватару.

P.S. Обе эти функции, хранят данные в файле:

Allods Online\Personal\user.cfg

можешь посмотреть, какой там бардак :)

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

И очень рекомендую, всегда стараться, чтобы сохраняемые данные были КАК МОЖНО КОМПАКТНЕЕ. Потому, что, от некоторых аддонов, этот файл настроек, пухнет как на дрожжах. И каждый вызов функции Set*ConfigSection(), создаёт лаг в игре, и перезапись ВСЕГО этого файла целиком.

Есть ПЛОХИЕ аддоны, немеренно и бесконечно плодящие секции и создающие толстые таблицы. Таких аддонов всего несколько, и они способны <зачёркнуто>устроить апокалипсис</зачёркнуто> настрочить МЕГАБАЙТЫ (даже, гигабайты, и более) данных. Из-за этих аддонов, иногда приходится чистить этот файл, когда он на 99% состоит из их мусора.

Пример ХОРОШЕГО аддона, сохраняющего свои настройки компактно - GuildGui1b. Его Global-секция выглядит вот так:

Code:
 table_begin ScriptUserMods_GuildGui1b

  table_begin data

   Language = l"rus"

   ListAll = true

   PageSize = 30

   SortBy = l"ACT"

   SortOrder = l"ZA"

   w540x = 216

   w540y = 92

   w541x = 30

   w541y = 0

  table_end data

  remote_version = -1

 table_end ScriptUserMods_GuildGui1b

И всё! Здесь все его настройки.

Language, ListAll, PageSize, SortBy, SortOrder - это настройки самого аддона,

w540x, w540y, w541x, w541y - это сохранила библиотека LibDnD (координаты двух окон).

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

так почему у меня данные сохраняются если я выхожу через Настройки/Завершить, потом опять вхожу этим же персонажем.

а если закрываю окно АО и потом запускаю поновой игру то ничего не сохраняется ((

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:

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

кстати в 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

затем вообще пусто ((

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

Всё правильно, это одна из avatar-секций твоего аддона. С двумя предметами.

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

кстати дурдом - там для каждого персонажа сохраняется отдельно настройки клавиатуры

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

...

да короче нельзя в качестве индекса у таблицы делать строку с пробелами ((

и никакие ухищрения не помогают - надо запаковывать свои данные так чтобы они были без пробелов

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

короче нельзя такие иметь таблицы:

Code:
табл ["Знак Рвения"]  = val

но можно:

Code:
табл ["Знак_Рвения"]  = val

табл ["\"Знак_Рвения"]  = val

табл ["1092"]  = val

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

в общем мне пришлось запаковать свою базу знаний в компактную таблицу для сохранения в конфигурации:

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

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

кстати идея про 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

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

ну в общем я запаковала данные в 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"

явно компактней. и я сделала сохранение в секции аватара - так как разным персонажам нужны разные аддоны - кому защита, кому хил, кому агр, а кому магические

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

мимоходом замечание для разрабов - у нних настройка быстрых клавиш тоже некомпактно сохраняется:

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"

...

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

Откровенно говоря, подобный подход мне не очень нравится. По-моему, выигрыша ни в скорости, ни в надежности, ни в удобстве не получается.

Предположим, нужно работать с 10 значениями разных типов. Сперва их придется склеить в строку, вставляя между подстроками разделитель. Затем эту строку разбирать, выуживая значения. Важен порядок записи/чтения. Хотя можно, запаковывать пару "имя_переменной-значение". Понадобятся функции pack/unpack.

Несколько сумбурно, н-да. В общем, нужна оценка компетентного программиста, коим я ни разу не являюсь :)

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

кстати про сохранение...

с квест трекером имхо надо чтото делать он, похоже, записывает положение *каждого* рандомного моба в конфиг, как цель заданий ))

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

поидее есть(?) стандартный распаковщик командных строк

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

Угу, если так, то это не очень хорошо.

Имхо, он должен сохранять координат только для тех квестов, для которых не указано место выполнения (Межевые камни, и др. квесты, для которых нет маркеров на карте). Таких квестов не много, поэтому, БД будет небольшой и компактной.

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

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

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

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

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

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

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

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

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

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