--[[---------------------------------------------------------------------------- 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)