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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

icreator

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

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

  • Посещение

Сообщения, опубликованные icreator

  1. итак как я в это сделала:

    1. создала новую папку Mods/Addons у себя (а не в папке игры)

    2. скопировала в эту папку Addons свой аддон, который хранился в папке игры (C:\Program Files\Games\Allods Online\data\Mods\Addons). Получилось: мояПапка\Mods\Addons\LootEDSchoice

    NTY5n6TpwKifBAo.jpg
  2. Quote:

    Заходим в папку Allods Online\data\Mods\Addons, в которой находятся все папки установленных аддонов.

    И упаковываем папку со своим новеньким аддоном в ZIP-архив.

    Получится ZIP, внутри которого одна-единственная папка, названная именем вашего аддона. А уже в ней, находится AddonDesc.(UIAddon).xdb и все остальные файлы/папки аддона.

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

    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"

    ...

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

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

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

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

    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

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

    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

    ...

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

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

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

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

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

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

    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:

  10. как я сделала 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

  11. в общем я сделала массив глобальным и просто к нему из подпрограммы по индексам обращаюсь:

    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

  12. 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


     

  13. если вам хочется знать какие функции и поля имеет тот или иной объект, можете использовать такую функцию:

    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)

  14. спасибки!! только я творю дальше.. и теперь надо все твои изменения и мои как-то слить вместе....

    по WidgetEditLine - на самом деле там есть недочет - если фон, который рисует окошко ввода, в сам виджет вставлять через

    <BackLayer href="" />

    то спозиционировать красиво неполучается

    поэтому я отдельную панель под него подложила

  15. не а - дело не в том - она в параметрах 1 и 2 предает значение индекса ! а как значение элемента выцепить?

    то есть у меня многомерный массив - ну или набор записей с несколькими полями - как к этим полям обратиться?

    Code:

    table = { name, comment }

    t [1]  = table1

    t [2]  = table2

    t [1] .name > t [2] .name

    ...

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

    и вставила функцию что выдает память аддона для аддон манагер

    и еще скажу что этот Аддон Манагер по-моему гениально написан! короче я много чего так там и не поняла (((

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

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

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