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

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

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

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

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

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

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

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

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

Подробнее

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

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

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

LEM

Разработчик аддонов
  • Постов

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

  • Посещение

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

  1. 1 час назад, Adalbun сказал:

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

    Какие не показываются?

  2. 2 часа назад, Adalbun сказал:

    Syntax error during pre-compilation
      [string "Mods/Addons/CooldownInfo/cooldown.txt"]:142: '}' expected (to close '{' at line 134) near '['
    Can't execute script for addon: Mods/Addons/CooldownInfo/AddonDesc.(UIAddon).xdb
    [20:33:34]Info: addon CooldownInfo(1532892803): [20:33:34.669] error loading 'cooldown_player'
    [20:33:34]Info: addon CooldownInfo(1532892803): [20:33:34.670] error loading 'cooldown_monster'

    вбил в файлик свои откаты, вроде сделал как по гайду, но не работает и вот такую ошибку выдает

    В файле синтаксические ошибки. Можно файлик глянуть?

  3. 58 минут назад, limonichik сказал:

    Здравствуйте, на время жизни червоточины инжа, тож не сделать подобное?

    Привет. Если на червоточине есть баф со временем жизни, то можно. На всех механизмах инженера такие бафы есть, но вот про червоточину не уверен.

  4. 20 минут назад, Крым сказал:

    Потому, что кто-то написал для узкого круга лиц.

    Кто-то для кого-то это все понятно. А как ты узнал о существовании такого аддона?

    Ну и для закрепления

    17 часов назад, LEM сказал:

    Привет. Это не сделать.

    Я не могу сделать такой аддон.

  5. WhipOfTheDamnedMonitor

    Просмотр файла

    WhipOfTheDamnedMonitor.gif.cb02a3784c848337745d7eb5b9dab8de.gif

    Показывает прогресс применения умения "Плеть обречённого".

    По клику можно взять в таргет кастующего.

    /wdm dnd - включает демо режим, чтобы можно было переместить куда нужно

     


    • Добавил
      LEM
    • Добавлено
      11.08.2022
    • Категория

     

  6. 7 часов назад, narisovan11 сказал:

    Привет, как убрать откаты умений которые не нужны?

    Привет. Необходимо вписать все необходимые умения в файл \data\Mods\Addons\CooldownInfo\cooldown.txt и выключить режим "Показывать все откаты умений".

  7. Могу. В этом коде создается прокси объект и к нему прикрепляется функция финализатор (в Lua 5.1 метаметод __gc срабатывает только для userdata, в Lua 5.2 завезли __gc и для таблиц). Этот прокси объект помещается в глобальное окружение (_G это таблица со всеми глобальными переменными). Когда оно разрушается (это происходит при выключении аддона), срабатывает финализатор для прокси объекта.

     

  8. 4 часа назад, Shavadre сказал:

    У меня проблема в том, что я скрываю кнопку сортировки в инвентаре пользователя. При отключении аддона (через галочку в Меню->Дополнения) аддон просто отключается, я так понимаю, что просто Lua-машина с запущенным аддоном выключается. И я не успеваю показать скрытые кнопки, т.е. вернуть все как было до включения аддона. Есть тут какой-то механизм, который запускается ПЕРЕД остановкой аддона? Аналог деструктора или финализатора...

    Попробуй это

    local function finalizer()
      local wtButtons = stateMainForm:GetChildChecked('ContextBag', false):GetChildChecked('Buttons', true)
      if not wtButtons:IsValid() then return end
      wtButtons:PlayFadeEffect(1, 0, 5000, EA_SYMMETRIC_FLASH)
    end
    
    rawset(_G, '_finalizerProxy', newproxy(true))
    getmetatable(_finalizerProxy).__gc = finalizer
    • Спасибо 1
  9. Небольшое дополнение к моему посту.

    Первый вариант с pairs должен быть медленнее ipairs, также нет гарантии, что элементы будут пройдены по-порядку от 0 до n.

    Второй вариант со смещением таблицы медленнее GetTableSize, но если надо делать что-то еще с такой таблицей, то почему бы и нет. Если порядок не критичен, можно вставлять нулевой элемент в конец.

    Третий вариант с GetTableSize дает дополнительный цикл с обходом массива, который всего лишь начинается с 0, а не 1, как принято в Lua.

    4. Идея, которая почему-то сразу в голову не пришла

    -- сломается, если передать таблицу, которая начинается с 1
    for i, obj in ipairs(params.spawned), params.spawned, -1 do
      -- ну и код дальше
    
    -- не сломается, но выглядит так себе
    for i, obj in ipairs(params.spawned), params.spawned, params.spawned[0] ~= nil and -1 or 0 do
      -- ну и код дальше

    Если кому-то еще интересно, то ipairs возвращает функцию итератор, саму таблицу и индекс, после которого начнется итерация по массиву.

    Чтобы не повторять этот код постоянно, можно поправить ipairs

    local inext = ipairs(table)
    
    function ipairs(t)
      return inext, t, t[0] ~= nil and -1 or 0
    end

     

     

  10. 1 час назад, landony сказал:

    Спамит в лог на GetTableSize
    Error while running the chunk
      [string "Mods/Addons/MyBuffTracker_(fix 13.0.00.24)/Ma..."]:472: attempt to call global 'GetTableSize' (a nil value)
      func: GetTableSize, global, line: -1, defined: C, line: -1, [C]
        func: ?, ?, line: 472, defined: Lua, line: 469, [string "Mods/Addons/MyBuffTracker_(fix 13.0.00.24)/Ma..."]
      func: __index, metamethod, line: -1, defined: C, line: -1, [C]
        func: ?, ?, line: 456, defined: Lua, line: 453, [string "Mods/Addons/MyBuffTracker_(fix 13.0.00.24)/Ma..."]
    Attempt to read from undeclared global variable: GetTableSize

    Заменил код так (без GetTableSize)
     

    -- Функция fix 13.0.00.24
    function UnitSpawnedNew( params )

        -- for fix 05.02.2022
        for i, obj in ipairs(params.spawned) do
            if obj then            
                OnEventUnitSpawned( {unitId = obj} )
            end
        end

    end


    ---------------------------------------------------------------------------------------------------
    -- Функция fix 13.0.00.24
    function UnitDespawnedNew( params )

        -- for fix 05.02.2022
        for i, obj  in ipairs(params.despawned) do
            if obj then            
                OnEventUnitDespawned( {unitId =obj} )
            end
        end
    end

    Похоже на обработку события

    EVENT_UNITS_CHANGED

    Событие посылается раз в кадр, если за этот кадр в зоне действия аватара появляется или исчезает юнит.

    -- поля:
    spawned: table of ObjectId - индексированная с 0 таблица идентификаторов появившихся юнитов
    despawned: table of ObjectId - индексированная с 0 таблица идентификаторов исчезнувших юнитов

    Я это к чему. ipairs начнет перебор с 1 индекса, а значит значения с 0 индексом будут пропущены, а это может потом неприятно удивить.

    Как пофиксить? Ну самые простые способы:

    1.

    -- меняем ipairs на pairs
    for i, obj in pairs(params.spawned) do
      -- ну и код дальше

    2.

    -- если есть значение с 0 индексом, вставляем nil, ну чтобы значения в таблице начинались с 1 индекса
    if params.spawned[0] ~= nil then table.insert(params.spawned, 0, nil) end
    
    for i, obj in ipairs(params.spawned) do
      -- ну и код дальше

    3.

    function GetTableSize( t )
    	if not t then
    		return 0
    	end
    	local count = 0
    	for k, v in pairs(t) do
    		count = count + 1
    	end
    	return count
    end

     

    Если кто придумает способы лучше, буду рад посмотреть.

    P.S. Жаль такой код срабатывает для пустых таблиц.

    for i = 0, #t do

     

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

  12. Error: addon QuestMapProgress(0): Widgets::LuaGetChildChecked: can't find a child: MapTextPanel, details: int __cdecl Widgets::LuaGetChildChecked(struct lua_State *)
      func: GetChildChecked, method, line: -1, defined: C, line: -1, [C]
        func: ?, ?, line: 12, defined: main, line: 0, [string "Mods/Addons/QuestMapProgress/Scripts/mainscri..."]
    Error while running the chunk
      [string "Mods/Addons/QuestMapProgress/Scripts/mainscri..."]:191: attempt to call method 'GetNamedChildren' (a nil value)
      func: GetNamedChildren, method, line: -1, defined: C, line: -1, [C]
        func: CurrentMap, global, line: 191, defined: Lua, line: 190, [string "Mods/Addons/QuestMapProgress/Scripts/mainscri..."]
          func: ?, ?, line: 217, defined: Lua, line: 202, [string "Mods/Addons/QuestMapProgress/Scripts/mainscri..."]
    • Теперь на карте можно посмотреть прогресс квестов на всех зонах, не заходя в них.

     

  13. PhantasmalKillerCD

    Просмотр файла

    12.0_01_57.png.62b16558a3efa6b7534dc80e10bde46d.png

    Самопальный таймер для отслеживания перезарядки вех "Трёхгранный клинок" и "Смертоносная тень".

    Команды:

    /pkcd - активирует/деактивирует перемещение
    /pkcd size 42 - размер
    /pkcd fade 1 - прозрачность (от 0 до 1)
    /pkcd reset - сбрасывает настройки

    После прочтения фикса возникает мысль про дебаф на цели с временем перезарядки, но ничего подобного.
    В скрытых бафах ничего похожего нет. Быть может он есть, просто не на клиенте.

    Ничего не напоминает?
    Для господства лучника и некроманта хотя бы был скрытый баф, от которого можно было отталкиваться.
    В текущем же исполнении нет даже этого.

    Спасибо хоть описание скорректировали.


    • Добавил
      LEM
    • Добавлено
      24.09.2021
    • Категория

     

  14. 1 час назад, OLDodin сказал:

    Похоже куда-то спрятали виджет для панели и его теперь не находит. Я чтот не нахожу его теперь (но тут я не спец)

    Его нельзя найти в stateMainForm, но есть и другой способ:

    local widgetTypes = {
      [ENUM_ADDON_TYPE_NONE] = 'ENUM_ADDON_TYPE_NONE',            -- нет типа, тип не известен
      [ENUM_ADDON_TYPE_USER] = 'ENUM_ADDON_TYPE_USER',            -- пользовательский аддон
      [ENUM_ADDON_TYPE_PROTECTED] = 'ENUM_ADDON_TYPE_PROTECTED',  -- аддон разработчика (обычный интерфейсный аддон)
    }
    
    local wtContextActionbar = common.GetAddonMainForm('ContextActionbar')
    
    print(wtContextActionbar:GetName())
    print(widgetTypes[wtContextActionbar:GetAddonType()])
    print(wtContextActionbar:GetNamedChildren())

    В логах такой вот печальный результат:

    [22:51:45]Info: addon Test(0): [22:51:45.492]: ContextActionbar
    [22:51:45]Info: addon Test(0): [22:51:45.493]: ENUM_ADDON_TYPE_PROTECTED
    [22:51:45]Error: addon Test(0): Widgets::LuaGetNamedChildren: can't get protected widget's children, details: int __cdecl Widgets::LuaGetNamedChildren(struct lua_State *)
      func: GetNamedChildren, method, line: -1, defined: C, line: -1, [C]
        func: Init, local, line: 866, defined: Lua, line: 846, [string "Mods/Addons/Test/Scripts/ScriptMai..."]
          func: ?, ?, line: 1134, defined: main, line: 0, [string "Mods/Addons/Test/Scripts/ScriptMai..."]
    [22:51:45]Info: addon Test(0): [22:51:45.494]: {}

    Главную форму ContextActionbar "запротектили". Всё.

    • Плюсую 1
×
×
  • Создать...

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

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