121 lines
6.1 KiB
Lua
121 lines
6.1 KiB
Lua
--[[----------------------------------------------------------------------------
|
||
patches/Custom_EncounterJournal.lua.patch
|
||
─────────────────────────────────────────────────────────────────────────────
|
||
Патч-сниппеты для существующего Custom_EncounterJournal.lua. Эти куски
|
||
добавляют routing новой вкладки и hide-show поведение по требованиям:
|
||
|
||
«при выборе guide tab:
|
||
- hide instance cards
|
||
- hide Encounter Journal detail panel
|
||
- hide suggested content panel
|
||
- hide loot journal panel
|
||
- hide or disable the expansion/tier dropdown unless explicitly needed
|
||
- show PlayerGuideFrame»
|
||
------------------------------------------------------------------------------]]
|
||
|
||
-- ─── ПАТЧ #1 ───────────────────────────────────────────────────────────────
|
||
-- НАЙТИ функцию EJ_ContentTab_Select (или ту, что переключает вкладки в
|
||
-- Encounter Journal). Обычно она выглядит как switch по id вкладки.
|
||
-- ДОБАВИТЬ ветку для нашей вкладки. Пример полностью переписанной функции:
|
||
|
||
local PLAYERGUIDE_TAB_ID = 1 -- должен совпадать с id="1" в XML патче
|
||
|
||
function EJ_ContentTab_Select(id)
|
||
EncounterJournal.suggestTab:UnlockHighlight()
|
||
EncounterJournal.dungeonsTab:UnlockHighlight()
|
||
EncounterJournal.raidsTab:UnlockHighlight()
|
||
if EncounterJournal.lootJournalTab then
|
||
EncounterJournal.lootJournalTab:UnlockHighlight()
|
||
end
|
||
if EncounterJournal.guideTab then
|
||
EncounterJournal.guideTab:UnlockHighlight()
|
||
end
|
||
|
||
-- Прячем «обычные» панели EJ. Этот хелпер уже есть в Custom_EncounterJournal:
|
||
-- EncounterJournal_HideAllPanels()
|
||
-- Если его нет — выньте тело сюда (Hide instance list, encounter, loot).
|
||
EncounterJournal_HideAllPanels()
|
||
|
||
-- Прячем PlayerGuideFrame — он показывается только на guide-вкладке.
|
||
if PlayerGuideFrame then PlayerGuideFrame:Hide() end
|
||
|
||
if id == PLAYERGUIDE_TAB_ID then
|
||
-- НАША ВКЛАДКА -----------------------------------------------------
|
||
EncounterJournal.guideTab:LockHighlight()
|
||
EncounterJournal.instanceSelect:Hide()
|
||
EncounterJournal.encounter:Hide()
|
||
if EncounterJournalSuggestFrame then EncounterJournalSuggestFrame:Hide() end
|
||
if LootJournal then LootJournal:Hide() end
|
||
-- Скрыть/задисейблить дропдаун расширений, как просят требования:
|
||
if EJTierDropDown then EJTierDropDown:Hide() end
|
||
|
||
if PlayerGuideFrame then PlayerGuideFrame:Show() end
|
||
return
|
||
end
|
||
|
||
-- ── Остальные вкладки — оригинальная логика ──
|
||
if EJTierDropDown then EJTierDropDown:Show() end
|
||
|
||
if id == 2 then -- SuggestTab (было 1)
|
||
EncounterJournal.suggestTab:LockHighlight()
|
||
EncounterJournal_ListInstances() -- или ваш Suggest-Show
|
||
elseif id == 3 then -- DungeonTab
|
||
EncounterJournal.dungeonsTab:LockHighlight()
|
||
EJ_HideNonInstancePanels()
|
||
EncounterJournal_ListInstances()
|
||
elseif id == 4 then -- RaidTab
|
||
EncounterJournal.raidsTab:LockHighlight()
|
||
EJ_HideNonInstancePanels()
|
||
EncounterJournal_ListInstances()
|
||
elseif id == 5 then -- LootJournalTab
|
||
if EncounterJournal.lootJournalTab then
|
||
EncounterJournal.lootJournalTab:LockHighlight()
|
||
end
|
||
if LootJournal_Show then LootJournal_Show() end
|
||
end
|
||
end
|
||
|
||
|
||
-- ─── ПАТЧ #2 ───────────────────────────────────────────────────────────────
|
||
-- В EJ_ContentTab_OnClick добавить вызов нашего Select для tab id=1
|
||
-- (если у вас один централизованный _OnClick — он уже передаёт id и
|
||
-- ничего дополнительно делать не нужно):
|
||
|
||
function EJ_ContentTab_OnClick(self)
|
||
EJ_ContentTab_Select(self:GetID())
|
||
PlaySound("igCharacterInfoTab")
|
||
end
|
||
|
||
|
||
-- ─── ПАТЧ #3 ───────────────────────────────────────────────────────────────
|
||
-- Защита: при открытии EJ через EncounterJournal_OpenJournal — переключиться
|
||
-- НА dungeon/raid таб, а не оставлять guide-таб выбранным.
|
||
-- Найдите вашу EncounterJournal_OpenJournal и убедитесь, что в начале:
|
||
|
||
local _orig_EncounterJournal_OpenJournal = EncounterJournal_OpenJournal
|
||
function EncounterJournal_OpenJournal(instanceID, encounterID, ...)
|
||
-- При прямом открытии конкретного instance — переключиться на Dungeon/Raid
|
||
if instanceID then
|
||
EJ_ContentTab_Select(3) -- Dungeon по умолчанию; ваша логика может выбрать Raid
|
||
end
|
||
return _orig_EncounterJournal_OpenJournal(instanceID, encounterID, ...)
|
||
end
|
||
|
||
|
||
-- ─── ПАТЧ #4 ───────────────────────────────────────────────────────────────
|
||
-- Init: статика для разработки (можно убрать перед релизом). Если AIO
|
||
-- ещё не успел прислать payload — покажем dev-payload через 1с после
|
||
-- первого открытия EJ.
|
||
|
||
local _devInjected = false
|
||
EncounterJournal:HookScript("OnShow", function()
|
||
if not _devInjected and not C_PlayerGuide.HasData() then
|
||
_devInjected = true
|
||
C_Timer.After(1.0, function()
|
||
if not C_PlayerGuide.HasData() then
|
||
C_PlayerGuide._InjectDevPayload()
|
||
end
|
||
end)
|
||
end
|
||
end)
|