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

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

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

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

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

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

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

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

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

Подробнее

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

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

Подробнее

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

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

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


DiSlord

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

Удобно было смотреть билд перед применением, да. И панель отдельно тоже пригождалась.

Нет возможности починить? На него был завязан набор билдов, руками неохота восстанавливать...

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

7 часов назад, GooDByE сказал:

Хотя может и имеет смысл как раньше смотреть как билд выглядит перед применением
Что быстрее чем смотреть билд по ссылке с обычного билд менеджера

Что-то не сообразил как цитировать, а удалить второе сообщение не могу... вобщем цитата к ответу выше. )

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

2 минуты назад, Dim сказал:

Что-то не сообразил как цитировать, а удалить второе сообщение не могу... вобщем цитата к ответу выше. )

А переключить на старое Окно талантов? там старый системный аддон запускается и все остальное должно работать.

 

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

3 минуты назад, Dim сказал:

Удобно было смотреть билд перед применением, да. И панель отдельно тоже пригождалась.

Нет возможности починить? На него был завязан набор билдов, руками неохота восстанавливать...

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

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

Только один момент
Расположение перекроет таланты в новом окне

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

1 минуту назад, worm сказал:

А переключить на старое Окно талантов? там старый системный аддон запускается и все остальное должно работать.

 

Там нет возможности точечно править билд

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

-- Возвращает главную форму аддона. (FormSafe - главная форма аддона; false - не удалось получить форму аддона (вызов из пользовательского аддона и форма защищена, аддон выгружен, у аддона нет формы); nil - аддона с указанным именем не существует
    local wtMainForm = common.GetAddonMainForm( "TalentBuilder" )  
    if wtMainForm ~= false and wtMainForm ~= nil then
       
        return
    end
    
    wtMainForm = common.GetAddonMainForm( "ContextTalents" )
    if wtMainForm ~= false and wtMainForm ~= nil then
      
    end


ЕН знаю не пользовался этим

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

6 минут назад, worm сказал:

-- Возвращает главную форму аддона. (FormSafe - главная форма аддона; false - не удалось получить форму аддона (вызов из пользовательского аддона и форма защищена, аддон выгружен, у аддона нет формы); nil - аддона с указанным именем не существует
    local wtMainForm = common.GetAddonMainForm( "TalentBuilder" )  
    if wtMainForm ~= false and wtMainForm ~= nil then
       
        return
    end
    
    wtMainForm = common.GetAddonMainForm( "ContextTalents" )
    if wtMainForm ~= false and wtMainForm ~= nil then
      
    end


ЕН знаю не пользовался этим

Там идёт отличие и во вложенности

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

Ну да. ну так смотриш какой системный аддон запущен и исходя из этого встраиваешь или еще что.

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

В старом окне идёт ContextTalents/Parent
В новом окне TalentBuilder/TalentsBuilder/Controls, я решил сюда кнопку засунуть

Но если делать такую функцию это надо видимо при открытии окна талантов каждый раз заново инициализировать, а то галочку снимут и всё же сломается?

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

---------------------------------------------------------------------------------------------------
-- Функция по принятию определенных диалогов у NPC
function funTal.BuilderCheckStart( params )

    -- local initiator = params.initiator -- WString - имя игрока, активировавшего опрос


    -- Возвращает главную форму аддона. (FormSafe - главная форма аддона; false - не удалось получить форму аддона (вызов из пользовательского аддона и форма защищена, аддон выгружен, у аддона нет формы); nil - аддона с указанным именем не существует
    local wtMainForm = common.GetAddonMainForm( "TalentBuilder" )
    
    -- if wtMainForm == nil then
    if wtMainForm ~= false and wtMainForm ~= nil then
        -- LogInfo( "key=", wtMainForm )
        funTal.BtnAdd()
        
        return
    end
    
    -- LogInfo( "key=", typeQuest )
    
    
    
    -- Возвращает главную форму аддона. (FormSafe - главная форма аддона; false - не удалось получить форму аддона (вызов из пользовательского аддона и форма защищена, аддон выгружен, у аддона нет формы); nil - аддона с указанным именем не существует
    wtMainForm = common.GetAddonMainForm( "ContextTalents" )
    
    -- if wtMainForm == nil then
    if wtMainForm ~= false and wtMainForm ~= nil then
        -- LogInfo( "key=", wtMainForm )
        funTal.BtnAdd_01()
    end

end

---------------------------------------------------------------------------------------------------
-- Функция по принятию определенных диалогов у NPC
function funTal.BtnAdd( params )

    -- local initiator = params.initiator -- WString - имя игрока, активировавшего опрос


    wdt.TalentBuilder = common.GetAddonMainForm( "TalentBuilder" )
    wdt.TalentsBuilder = wdt.TalentBuilder:GetChildChecked( "TalentsBuilder", true )
    
    wdt.TalentsBuilder:AddChild( wdt.MainBtn )
    
    
    wdt.MainBtn:Show( true )
    wdt.MainBtn:SetSmartPlacementPlain( {posX=45, posY=15} )
    
    
    
    wdt.TalentsBuilder_Frame = wdt.TalentBuilder:GetChildChecked( "Frame", true )
    wdt.TalentsBuilder_MilestonePanel01 = wdt.TalentBuilder:GetChildChecked( "MilestonePanel01", true )
    wdt.TalentsBuilder_MilestonePanel02 = wdt.TalentBuilder:GetChildChecked( "MilestonePanel02", true )
    wdt.TalentsBuilder_MilestonePanel03 = wdt.TalentBuilder:GetChildChecked( "MilestonePanel03", true )
    
    wdt.TalentsBuilder_BuildPanel = wdt.TalentBuilder:GetChildChecked( "BuildPanel", true )
    wdt.TalentsBuilder_FieldTalentsHeader = wdt.TalentBuilder:GetChildChecked( "FieldTalentsHeader", true )
    wdt.TalentsBuilder_BaseTalentsHeader = wdt.TalentBuilder:GetChildChecked( "BaseTalentsHeader", true )
    
    wdt.TalentsBuilder:SetOnShowNotification( true )
    
    
    -- запускаем функцию проверки открытоли окно аукцииона
    common.RegisterEventHandler( funTal.BuilderVisible, "EVENT_WIDGET_SHOW_CHANGED" )

end


---------------------------------------------------------------------------------------------------
-- Функция по принятию определенных диалогов у NPC
function funTal.BtnAdd_01( params )

    -- local initiator = params.initiator -- WString - имя игрока, активировавшего опрос


    wdt.ContextTalents = common.GetAddonMainForm( "ContextTalents" )
    wdt.Parent = wdt.ContextTalents:GetChildChecked( "Parent", true )
    
    wdt.Parent:AddChild( wdt.MainBtn )
    wdt.MainBtn:SetSmartPlacementPlain( {posX=45, posY=15} )
    
    
    wdt.MainBtn:Show( true )

end


 

---------------------------------------------------------------------------------------------------
-- Функция по работе с Почтой
function funTal.BuilderCheckStart_01( params )

    local name = params.name or "" -- name: string - Системное имя аддона
    local state = params.state or "" -- state: int (enum AddonState) - Новое состояние аддона
    -- local nameCheck = params.questId or nil -- questId: QuestId -- идентификатор задани


    if name == "TalentBuilder" then
        if state == 3 then
            -- LogInfo( "key=", name )
            -- LogInfo( "key=", state )
            
            common.StateReloadManagedAddon( "UserAddon/TalentBuilderReForm" )
            
            -- funTal.BtnAdd()
        end
    end

    
    
    if name == "ContextTalents" then
        if state == 3 then
            -- LogInfo( "key=", name )
            -- LogInfo( "key=", state )
            
            common.StateReloadManagedAddon( "UserAddon/TalentBuilderReForm" )
            
            -- funTal.BtnAdd()
        end
    end

end

------------
    funTal.BuilderCheckStart()
    
    -- Событие, информирующее о инициализации загрузки миссии (все аддоны готовы к использованию). После этого события приходят ещё и EVENT_ADDON_LOAD_STATE_CHANGED.
    common.RegisterEventHandler( funTal.BuilderCheckStart, "EVENT_MISSION_INITIALIZED" )
    
    
    -- Уведомление об изменении состояния аддона. Список возможных состояний смотри в AddonState
    common.RegisterEventHandler( funTal.BuilderCheckStart_01, "EVENT_ADDON_LOAD_STATE_CHANGED" )

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

8 минут назад, worm сказал:

когда галочку снимают там аддоны перезагружаются

Хм, тогда можно проще, проверку через local wtMainForm = common.GetAddonMainForm( "TalentBuilder" ) сделать
Я завтра попробую

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

36 минут назад, Dim сказал:

Удобно было смотреть билд перед применением, да. И панель отдельно тоже пригождалась.

Нет возможности починить? На него был завязан набор билдов, руками неохота восстанавливать...

Быстрый фикс только для нового окна талантов
BuildManagerButton/BuildManagerButton.lua
 

stateMainForm:GetChildChecked("TalentBuilder", false):GetChildChecked("TalentsBuilder", false):GetChildChecked("Controls", false):AddChild(mainForm)

Вместо

local s = stateMainForm:GetChildChecked("ContextTalents", false):GetChildChecked("BaseWindow", true):GetPlacementPlain()
stateMainForm:GetChildChecked("ContextTalents", false):GetChildChecked("Parent", true):AddChild(mainForm)
setPlacement(mainForm, {posX = (s.sizeX - 200)/2, posY = s.sizeY - 65, sizeX = 200, sizeY = 22})

BuildManagerEx/Widgets/MainForm.(WidgetForm).xdb

Меняем чтобы окно аддона было выше нового окна талантов

<Priority>10000</Priority>

 

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

stateMainForm:
делать не стоит, надо

common.GetAddonMainForm( "TalentBuilder" )

-----

 

Так там и есть проверка через них

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

13 часов назад, worm сказал:

stateMainForm:
делать не стоит, надо

common.GetAddonMainForm( "TalentBuilder" )

-----

 

Так там и есть проверка через них

Понял, это просто старый подход
Там в целом код так себе, по-хорошему аддон бы переписать)

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

14 часов назад, worm сказал:

когда галочку снимают там аддоны перезагружаются

Мысль понял

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

Этим аддоном я не пользовался и поэтому до конца проблемы не понимаю.

Как понял Вы хотите встроить кнопку от пользовательского аддона в системный. Причем в каждую версию.

Когда игра загружается то работает один из системных аддонов на таланты

Я смотрю наличие главной формы одного из двух системных аддонов 
local newTalentWindow = common.GetAddonMainForm("TalentBuilder")
if newTalentWindow ~= false and newTalentWindow ~= nil then
и если она существует то в зависимости от аддона цепляю необходимые виджеты и работаю с ними
 

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

я  это отслеживаю через событие и их состояние EVENT_ADDON_LOAD_STATE_CHANGED 
попутно перезагружаю свой аддон так как кнопка ушла со старым. Можно конечно вытаскивать ее при изменении состяния аддонов и попутно чистить массивы, но мне показалось проще перезгружаться вместе с системными

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

2 минуты назад, worm сказал:

Этим аддоном я не пользовался и поэтому до конца проблемы не понимаю.

Как понял Вы хотите встроить кнопку от пользовательского аддона в системный. Причем в каждую версию.

Когда игра загружается то работает один из системных аддонов на таланты

Я смотрю наличие главной формы одного из двух системных аддонов 
local newTalentWindow = common.GetAddonMainForm("TalentBuilder")
if newTalentWindow ~= false and newTalentWindow ~= nil then
и если она существует то в зависимости от аддона цепляю необходимые виджеты и работаю с ними
 

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

я  это отслеживаю через событие и их состояние EVENT_ADDON_LOAD_STATE_CHANGED 
попутно перезагружаю свой аддон так как кнопка ушла со старым. Можно конечно вытаскивать ее при изменении состяния аддонов и попутно чистить массивы, но мне показалось проще перезгружаться вместе с системными

Всё верно, кнопка была встроена в системный аддон изначально в старом окне талантов
Да, я уже разобрался с логикой и понял ваши мысли
Спасибо

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

Еще 1 момент. Если кнопка  двигалась то стоит обратить внимание на сохранение позиции или переименовывать кнопку с последующими правками если они необходимы....

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

1 час назад, worm сказал:

Этим аддоном я не пользовался и поэтому до конца проблемы не понимаю.

Как понял Вы хотите встроить кнопку от пользовательского аддона в системный. Причем в каждую версию.

Когда игра загружается то работает один из системных аддонов на таланты

Я смотрю наличие главной формы одного из двух системных аддонов 
local newTalentWindow = common.GetAddonMainForm("TalentBuilder")
if newTalentWindow ~= false and newTalentWindow ~= nil then
и если она существует то в зависимости от аддона цепляю необходимые виджеты и работаю с ними
 

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

я  это отслеживаю через событие и их состояние EVENT_ADDON_LOAD_STATE_CHANGED 
попутно перезагружаю свой аддон так как кнопка ушла со старым. Можно конечно вытаскивать ее при изменении состяния аддонов и попутно чистить массивы, но мне показалось проще перезгружаться вместе с системными

Заметил что при первичной инициализации игры загружены оба системных аддона
В зависимости от настройки нового окна талантов, после полной инициализации выгружается второй системный аддон:
Если у нас новое окно талантов включено
ContextTalents выгружается
Если у нас наоборот
TalentBuilder выгружается

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

function initTalentWindow()
  local newTalentWindow = common.GetAddonMainForm("TalentBuilder")
  
  if newTalentWindow ~= false and newTalentWindow ~= nil then
      common.LogInfo("common", "newTalentWindow")
  end

  local oldTalentWindow = common.GetAddonMainForm("ContextTalents")
  
  if oldTalentWindow ~= false and oldTalentWindow ~= nil then
      common.LogInfo("common", "oldTalentWindow")
  end
end

Как бы пофиксить можно просто так

if name == "TalentBuilder" then
  if state == 3 or state == 4 then
    common.StateReloadManagedAddon("UserAddon/BuildManagerExButton")
  end
end

if name == "ContextTalents" then
    if state == 3 or state == 4 then
      common.StateReloadManagedAddon("UserAddon/BuildManagerExButton")
    end
end

Но тогда это приводит к двойной перезагрузке UserAddon/BuildManagerExButton при изменении опции нового окна талантов

Я попробовал сделать как у вас запустить инициализацию аддона через

common.RegisterEventHandler(initTalentWindow, "EVENT_MISSION_INITIALIZED")

Но оно даже не срабатывает

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

Не обращал внимания. Вроде кнопка подцепилсь у меня и ОК. Можно смотреть через настройки какая галочка стоит. Можно подцепить событие чуть позже загрузки. (Кстати оно у вас когда создался аватар или при инициализации аддона?)

Насколько помню Попользовательские аддоны должны инициализироваться после системных и событие если цеплять уже когда автар создался то большая часть системных аддонов должна инициализировать и получить часть данных.

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

2 минуты назад, worm сказал:

Не обращал внимания. Вроде кнопка подцепилсь у меня и ОК. Можно смотреть через настройки какая галочка стоит. Можно подцепить событие чуть позже загрузки. (Кстати оно у вас когда создался аватар или при инициализации аддона?)

Насколько помню Попользовательские аддоны должны инициализироваться после системных и событие если цеплять уже когда автар создался то большая часть системных аддонов должна инициализировать и получить часть данных.

Я пробовал просто внутри скрипта делать автоинициализацию
В конце запуская initBuildManagerEx()

--- Старт куска старого кода
function showBMClick()
  userMods.SendEvent( "SCRIPT_EVENT_SHOW_BM", {})
end

--- заменяет некоторые значения
function setPlacement(widget, place)
  local p = widget:GetPlacementPlain()

  for k, v in pairs(place) do
    p[k] = place[k] or v
  end

  widget:SetPlacementPlain(p)
end
--- Конец куска старого кода

function initTalentsWindow()
local newTalentsWindow = common.GetAddonMainForm("TalentBuilder")

  if newTalentsWindow ~= false and newTalentsWindow ~= nil then
    common.LogInfo("common", "newTalentsWindow")
    newTalentsWindow:GetChildChecked("TalentsBuilder", false):GetChildChecked("Controls", false):AddChild(mainForm)
  end

  local oldTalentsWindow = common.GetAddonMainForm("ContextTalents")

  if oldTalentsWindow ~= false and oldTalentsWindow ~= nil then
    common.LogInfo("common", "oldTalentsWindow")

    local oldTalentsWindow = common.GetAddonMainForm("ContextTalents")
    oldTalentsWindow:GetChildChecked("Parent", false):AddChild(mainForm)

    local s = oldTalentsWindow:GetChildChecked("BaseWindow", true):GetPlacementPlain()
    setPlacement(mainForm, {posX = (s.sizeX - 200)/2, posY = s.sizeY - 65, sizeX = 200, sizeY = 22})
  end
end

function addButtonText()
  local buildManagerExButton = mainForm:GetChildChecked("ButtonShow", false)
  buildManagerExButton:SetVal("button_label", userMods.ToWString("Билд менеджер"))
end

function reloadButtonOnTalentWindowChange(params)
  local name = params.name or ""
  local state = params.state or ""

  common.LogInfo("common", name)
  common.LogInfo("common", common.FormatNumber(state))

  if name == "TalentBuilder" then
    if state == 3 then
      common.StateReloadManagedAddon("UserAddon/BuildManagerExButton")
    end
  end

  if name == "ContextTalents" then
    if state == 3 then
      common.StateReloadManagedAddon("UserAddon/BuildManagerExButton")
    end
  end
end

function initBuildManagerEx()
  initTalentsWindow()
  addButtonText()

  common.RegisterReactionHandler(showBMClick, "bild_show_click")
  common.RegisterEventHandler(reloadButtonOnTalentWindowChange, "EVENT_ADDON_LOAD_STATE_CHANGED")
end

initBuildManagerEx()

И вот что в логах выходит

[14:32:28][UserAddon/BuildManagerExButton: 8 (build 1764431203)]Info: newTalentWindow
[14:32:28][UserAddon/BuildManagerExButton: 8 (build 1764431203)]Info: oldTalentWindow
[14:32:29][UserAddon/BuildManagerExButton: 8 (build 1764431203)]Info: ContextTalents
[14:32:29][UserAddon/BuildManagerExButton: 8 (build 1764431203)]Info: 4
[14:32:29][UserAddon/BuildManagerExButton: 8 (build 1764431203)]Info: ContextTalents
[14:32:29][UserAddon/BuildManagerExButton: 8 (build 1764431203)]Info: 1

То есть у нас если опция включена нового окна, выгружается ContextTalents
А из-за проверки в initTalentWindow срабатывает инициализация oldTalentWindow
И из-за этого у меня кнопка пытаясь привязаться к старому окну слетает

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

xzxz.lua

Попробуйте чуть попозже цеплять события и запускать функции. Думаю все дело в последовательности. Сначала должны грузится ресурсы потом системные аддоны потом пользовательские потом когда автар создается. Ну или что-то подобное в последовательностях.

Перелогинился со старым окном талантов. Кнопка на месте. Вот пример аддона тока там очень мусорно)

Может где надо преждевременный выход из функции поставить..

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

10 минут назад, worm сказал:

xzxz.lua 23.95 kB · 1 загрузка

Попробуйте чуть попозже цеплять события и запускать функции. Думаю все дело в последовательности. Сначала должны грузится ресурсы потом системные аддоны потом пользовательские потом когда автар создается. Ну или что-то подобное в последовательностях.

Перелогинился со старым окном талантов. Кнопка на месте. Вот пример аддона тока там очень мусорно)

Может где надо преждевременный выход из функции поставить..

Со старым работает, с новым нет потому что проверка в функции initTalentsWindow на oldTalentsWindow идёт второй и форма туда привязывается

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

ВНИМАНИЕ!
Обязательна информация из \Personal\Logs\mods.txt для диагностики ошибки.
Иначе вам не помочь.
В игре включите в Меню → Интерфейс → Общие настройки → Запись ошибок пользовательских дополнений. Затем запустите аддон в игре.

Присоединяйтесь к обсуждению

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

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

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

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

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

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

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

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

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

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