Files
Questie-X/Modules/QuestieEventHandler.lua
T

554 lines
24 KiB
Lua

---@class QuestieEventHandler
local QuestieEventHandler = QuestieLoader:CreateModule("QuestieEventHandler")
local _EventHandler = QuestieEventHandler.private
-------------------------
--Import modules.
-------------------------
---@type QuestieQuest
local QuestieQuest = QuestieLoader:ImportModule("QuestieQuest")
---@type QuestieJourney
local QuestieJourney = QuestieLoader:ImportModule("QuestieJourney")
---@type QuestieComms
local QuestieComms = QuestieLoader:ImportModule("QuestieComms")
---@type QuestieProfessions
local QuestieProfessions = QuestieLoader:ImportModule("QuestieProfessions")
---@type QuestieTracker
local QuestieTracker = QuestieLoader:ImportModule("QuestieTracker")
---@type TrackerBaseFrame
local TrackerBaseFrame = QuestieLoader:ImportModule("TrackerBaseFrame")
---@type TrackerQuestFrame
local TrackerQuestFrame = QuestieLoader:ImportModule("TrackerQuestFrame")
---@type TrackerUtils
local TrackerUtils = QuestieLoader:ImportModule("TrackerUtils")
---@type QuestieReputation
local QuestieReputation = QuestieLoader:ImportModule("QuestieReputation")
---@type QuestieNameplate
local QuestieNameplate = QuestieLoader:ImportModule("QuestieNameplate")
---@type QuestieMap
local QuestieMap = QuestieLoader:ImportModule("QuestieMap")
---@type QuestiePlayer
local QuestiePlayer = QuestieLoader:ImportModule("QuestiePlayer")
---@type QuestieAuto
local QuestieAuto = QuestieLoader:ImportModule("QuestieAuto")
---@type QuestieAnnounce
local QuestieAnnounce = QuestieLoader:ImportModule("QuestieAnnounce")
---@type QuestieCombatQueue
local QuestieCombatQueue = QuestieLoader:ImportModule("QuestieCombatQueue")
---@type QuestieInit
local QuestieInit = QuestieLoader:ImportModule("QuestieInit")
---@type MinimapIcon
local MinimapIcon = QuestieLoader:ImportModule("MinimapIcon")
---@type QuestgiverFrame
local QuestgiverFrame = QuestieLoader:ImportModule("QuestgiverFrame")
---@type QuestieDebugOffer
local QuestieDebugOffer = QuestieLoader:ImportModule("QuestieDebugOffer")
---@type AvailableQuests
local AvailableQuests = QuestieLoader:ImportModule("AvailableQuests")
--- COMPATIBILITY ---
local C_Timer = QuestieCompat.C_Timer
local UnitInParty = QuestieCompat.UnitInParty
local questAcceptedMessage = string.gsub(ERR_QUEST_ACCEPTED_S, "(%%s)", "(.+)")
local questCompletedMessage = string.gsub(ERR_QUEST_COMPLETE_S, "(%%s)", "(.+)")
--* Calculated in _EventHandler:PlayerLogin()
---en/br/es/fr/gb/it/mx: "You are now %s with %s." (e.g. "You are now Honored with Stormwind."), all other languages are very alike
local FACTION_STANDING_CHANGED_PATTERN
function QuestieEventHandler:RegisterEarlyEvents()
Questie:RegisterEvent("PLAYER_LOGIN", _EventHandler.PlayerLogin)
end
function QuestieEventHandler:RegisterLateEvents()
Questie:RegisterEvent("PLAYER_LEVEL_UP", _EventHandler.PlayerLevelUp)
Questie:RegisterEvent("PLAYER_REGEN_DISABLED", _EventHandler.PlayerRegenDisabled)
Questie:RegisterEvent("PLAYER_REGEN_ENABLED", _EventHandler.PlayerRegenEnabled)
-- Miscellaneous Events
Questie:RegisterEvent("MAP_EXPLORATION_UPDATED", _EventHandler.MapExplorationUpdated)
Questie:RegisterEvent("MODIFIER_STATE_CHANGED", function(...)
_EventHandler.ModifierStateChanged(...)
end)
Questie:RegisterEvent("PLAYER_ALIVE", function(...)
QuestieTracker:UpdateDurabilityFrame()
QuestieTracker:UpdateVoiceOverFrame()
end)
-- Events to update a players professions and reputations
Questie:RegisterBucketEvent("CHAT_MSG_SKILL", 2, _EventHandler.ChatMsgSkill)
Questie:RegisterBucketEvent("CHAT_MSG_COMBAT_FACTION_CHANGE", 2, _EventHandler.ChatMsgCompatFactionChange)
Questie:RegisterEvent("CHAT_MSG_SYSTEM", _EventHandler.ChatMsgSystem)
-- Spell objectives
Questie:RegisterEvent("NEW_RECIPE_LEARNED", function() -- Needed for some spells that don't necessarily appear in the spellbook, but are definitely spells
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] NEW_RECIPE_LEARNED")
AvailableQuests.CalculateAndDrawAll()
end)
-- UI Quest Events
Questie:RegisterEvent("UI_INFO_MESSAGE", _EventHandler.UiInfoMessage)
Questie:RegisterEvent("QUEST_FINISHED", QuestieAuto.QUEST_FINISHED)
Questie:RegisterEvent("QUEST_ACCEPTED", QuestieAuto.QUEST_ACCEPTED)
Questie:RegisterEvent("QUEST_DETAIL", function(...) -- When the quest is presented!
QuestieAuto.QUEST_DETAIL(...)
if Questie.IsSoD then QuestieDebugOffer.QuestDialog(...) end;
end)
Questie:RegisterEvent("QUEST_PROGRESS", QuestieAuto.QUEST_PROGRESS)
Questie:RegisterEvent("GOSSIP_SHOW", function(...)
QuestieAuto.GOSSIP_SHOW(...)
QuestgiverFrame.GossipMark(...)
end)
Questie:RegisterEvent("QUEST_GREETING", function(...)
QuestieAuto.QUEST_GREETING(...)
QuestgiverFrame.GreetingMark(...)
end)
Questie:RegisterEvent("QUEST_ACCEPT_CONFIRM", QuestieAuto.QUEST_ACCEPT_CONFIRM) -- If an escort quest is taken by people close by
Questie:RegisterEvent("GOSSIP_CLOSED", QuestieAuto.GOSSIP_CLOSED) -- Called twice when the stopping to talk to an NPC
Questie:RegisterEvent("QUEST_COMPLETE", function(...) -- When complete window shows
QuestieAuto.QUEST_COMPLETE(...)
if Questie.IsSoD then QuestieDebugOffer.QuestDialog(...) end;
end)
-- UI Achievement Events
if Questie.IsWotlk or QuestieCompat.Is335 then
-- Earned Achievement update
Questie:RegisterEvent("ACHIEVEMENT_EARNED", function(index, achieveId, alreadyEarned)
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] ACHIEVEMENT_EARNED")
QuestieTracker:UntrackAchieveId(achieveId)
QuestieTracker:UpdateAchieveTrackerCache(achieveId)
if (not AchievementFrame) then
AchievementFrame_LoadUI()
end
AchievementFrameAchievements_ForceUpdate()
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end)
-- Track/Untrack Achievement updates
Questie:RegisterEvent("TRACKED_ACHIEVEMENT_LIST_CHANGED", function(index, achieveId, added)
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] TRACKED_ACHIEVEMENT_LIST_CHANGED")
QuestieTracker:UpdateAchieveTrackerCache(achieveId)
end)
-- Timed based Achievement updates
-- TODO: Fired when a timed event for an achievement begins or ends. The achievement does not have to be actively tracked for this to trigger.
Questie:RegisterEvent("TRACKED_ACHIEVEMENT_UPDATE", function(self, achieveId)
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] TRACKED_ACHIEVEMENT_UPDATE")
QuestieCombatQueue:Queue(function()
if QuestieCompat.Is335 then
QuestieTracker:UpdateAchieveTrackerCache(achieveId)
end
QuestieTracker:Update()
end)
end)
--[[ TODO: This fires FAR too often. Until Blizzard figures out a way to allow us to trigger achievement updates this needs to remain disabled for now.
Questie:RegisterEvent("CRITERIA_UPDATE", function()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] CRITERIA_UPDATE")
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end)
--]]
-- Money based Achievement updates
Questie:RegisterEvent("CHAT_MSG_MONEY", function()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] CHAT_MSG_MONEY")
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end)
-- Emote based Achievement updates
Questie:RegisterEvent("CHAT_MSG_TEXT_EMOTE", function()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] CHAT_MSG_TEXT_EMOTE")
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end)
-- Player equipment changed based Achievement updates
Questie:RegisterEvent("PLAYER_EQUIPMENT_CHANGED", function()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] PLAYER_EQUIPMENT_CHANGED")
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end)
end
-- Questie Debug Offer
if Questie.IsSoD then
Questie:RegisterEvent("LOOT_OPENED", QuestieDebugOffer.LootWindow)
end
-- Questie Comms Events
-- Party join event for QuestieComms, Use bucket to hinder this from spamming (Ex someone using a raid invite addon etc)
Questie:RegisterBucketEvent("GROUP_ROSTER_UPDATE", 1, _EventHandler.GroupRosterUpdate)
Questie:RegisterEvent("GROUP_JOINED", _EventHandler.GroupJoined)
Questie:RegisterEvent("GROUP_LEFT", _EventHandler.GroupLeft)
-- Nameplate / Target Frame Objective Events
Questie:RegisterEvent("NAME_PLATE_UNIT_ADDED", QuestieNameplate.NameplateCreated)
Questie:RegisterEvent("NAME_PLATE_UNIT_REMOVED", QuestieNameplate.NameplateDestroyed)
Questie:RegisterEvent("PLAYER_TARGET_CHANGED", function(...)
QuestieNameplate.DrawTargetFrame()
--if Questie.IsSoD then QuestieDebugOffer.NPCTarget() end;
end)
-- quest announce
Questie:RegisterEvent("CHAT_MSG_LOOT", function(_, text, notPlayerName, _, _, playerName)
if QuestieCompat.Is335 then
playerName = QuestieCompat.ChatMessageLoot(text)
end
QuestieTracker.QuestItemLooted(_, text)
QuestieAnnounce.ItemLooted(_, text, notPlayerName, _, _, playerName)
end)
-- since icon updates are disabled in instances, we need to reset on P_E_W
Questie:RegisterEvent("PLAYER_ENTERING_WORLD", function()
if Questie.started then
QuestieMap:InitializeQueue()
local isInInstance, instanceType = IsInInstance()
local skipInstance = isInInstance and (instanceType == "raid" or instanceType == "pvp" or instanceType == "arena")
-- Only run map updates when not in a raid or battleground
if not skipInstance then
QuestieQuest:SmoothReset()
end
end
end)
end
function _EventHandler:PlayerLogin()
-- Check config exists
if not Questie.db or not QuestieConfig then
-- Did you move Questie.db = LibStub("AceDB-3.0"):New("QuestieConfig",.......) out of Questie:OnInitialize() ?
Questie:Error("Config DB from saved variables is not loaded and initialized. Please report this issue on Questie github or discord.")
error("Config DB from saved variables is not loaded and initialized. Please report this issue on Questie github or discord.")
return
end
do
-- All this information was researched here: https://www.townlong-yak.com/framexml/live/GlobalStrings.lua
local locale = GetLocale()
local FACTION_STANDING_CHANGED_LOCAL = FACTION_STANDING_CHANGED or "You are now %s with %s."
local replaceCount -- Just init it with an impossible value
local replaceString = ".+"
--! Has to got from least likely to work to most, otherwise you will get false positives
local replaceTypes = {
ruRU = "%(%%%d$s%)", --ruRU "|3-6(%2$s) |3-6(%1$s)." ("Ваша репутация с %2$s теперь %1$s.
zhTW = "%%s%(%%s%)", --zhTW "你在%2$s中的聲望達到了%1$s。"")
deDE = "%%%d$s", --deDE "Die Fraktion '%2$s' ist Euch gegenüber jetzt '%1$s' eingestellt." or "Die Fraktion %2$s ist Euch gegenüber jetzt '%1$s' eingestellt."
zhCNkoKR = "%%%d$s", --zhCN(zhTW?)/koKR "你在%2$s中的声望达到了%1$s。" / "%2$s에 대해 %1$s 평판이 되었습니다."
enPlus = "%%s", -- European languages except (deDE)
}
if locale == "zhCN" or locale == "koKR" then --CN/KR "你在%2$s中的声望达到了%1$s。" / "%2$s에 대해 %1$s 평판이 되었습니다."
FACTION_STANDING_CHANGED_PATTERN, replaceCount = string.gsub(FACTION_STANDING_CHANGED_LOCAL, replaceTypes.zhCNkoKR, replaceString)
elseif locale == "deDE" then --DE "Die Fraktion '%2$s' ist Euch gegenüber jetzt '%1$s' eingestellt." or "Die Fraktion %2$s ist Euch gegenüber jetzt '%1$s' eingestellt."
FACTION_STANDING_CHANGED_PATTERN, replaceCount = string.gsub(FACTION_STANDING_CHANGED_LOCAL, replaceTypes.deDE, replaceString) -- Germans are always special
elseif locale == "zhTW" then --TW "你的聲望已達到%s(%s)。", should we remove the parentheses?
FACTION_STANDING_CHANGED_PATTERN, replaceCount = string.gsub(FACTION_STANDING_CHANGED_LOCAL, replaceTypes.zhTW, replaceString)
elseif locale == "ruRU" then --RU "|3-6(%2$s) |3-6(%1$s).", should we remove the parentheses?
FACTION_STANDING_CHANGED_PATTERN, replaceCount = string.gsub(FACTION_STANDING_CHANGED_LOCAL, replaceTypes.ruRU, replaceString)
else
FACTION_STANDING_CHANGED_PATTERN, replaceCount = string.gsub(FACTION_STANDING_CHANGED_LOCAL, replaceTypes.enPlus, replaceString)
end
--? A fallback to try everything if the replaceCount is still -1 or 0
if replaceCount and replaceCount < 1 then
for _, replaceType in pairs(replaceTypes) do
FACTION_STANDING_CHANGED_PATTERN, replaceCount = string.gsub(FACTION_STANDING_CHANGED_LOCAL, replaceType, replaceString)
if replaceCount > 0 then
break
end
end
end
--? Nothing worked :(
if replaceCount and replaceCount < 1 then --- Error: Default to match EVERYTHING, because it's better that it works
FACTION_STANDING_CHANGED_PATTERN = ".+"
Questie:Error("Something went wrong with the FACTION_STANDING_CHANGED_PATTERN!")
Questie:Error("FACTION_STANDING_CHANGED is set to " .. tostring(FACTION_STANDING_CHANGED) .. ", please report this on GitHub!")
end
end
-- Start real Questie init
QuestieInit:Init()
end
--- Fires when a System Message (yellow text) is output to the main chat window
---@param message string The message value from the CHAT_MSG_SYSTEM event
function _EventHandler:ChatMsgSystem(message)
if not message then return end
-- When a new quest is accepted or completed quest is turned in, update the LibDataBroker text with the appropriate message
if string.find(message, questCompletedMessage) == 1 or string.find(message, questAcceptedMessage) == 1 then
MinimapIcon:UpdateText(message)
elseif string.find(message, FACTION_STANDING_CHANGED_PATTERN) then -- When you discover a new faction or increase standing eg. Neutral -> Friendly
QuestieReputation:Update()
end
end
--- Fires when a UI Info Message (yellow text) appears near the top of the screen
---@param errorType number The error type value from the UI_INFO_MESSAGE event
---@param message string The message value from the UI_INFO_MESSAGE event
function _EventHandler:UiInfoMessage(errorType, message)
local messages = {
["ERR_QUEST_OBJECTIVE_COMPLETE_S"] = true,
["ERR_QUEST_UNKNOWN_COMPLETE"] = true,
["ERR_QUEST_ADD_KILL_SII"] = true,
["ERR_QUEST_ADD_FOUND_SII"] = true,
["ERR_QUEST_ADD_ITEM_SII"] = true,
["ERR_QUEST_ADD_PLAYER_KILL_SII "] = true,
["ERR_QUEST_FAILED_S"] = true,
}
if messages[GetGameMessageInfo(errorType)] then
MinimapIcon:UpdateText(message)
end
end
--- Fires on MAP_EXPLORATION_UPDATED.
function _EventHandler:MapExplorationUpdated()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] MAP_EXPLORATION_UPDATED")
if Questie.db.profile.hideUnexploredMapIcons then
QuestieMap.utils:MapExplorationUpdate()
end
-- Exploratory based Achievement updates
if Questie.IsWotlk then
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end
end
--- Fires when the player levels up
---@param level number
function _EventHandler:PlayerLevelUp(level)
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] PLAYER_LEVEL_UP", level)
QuestiePlayer:SetPlayerLevel(level)
-- deferred update (possible desync fix?)
C_Timer.After(3, function()
QuestiePlayer:SetPlayerLevel(level)
AvailableQuests.CalculateAndDrawAll()
end)
QuestieJourney:PlayerLevelUp(level)
end
--- Fires when a modifier key changed
function _EventHandler:ModifierStateChanged(key, down)
if key == "LSHIFT" or key == "RSHIFT" then
-- Unless the Shift Key is down, don't run this code. We've recieved reports that our tooltips
-- are apperearing when using the Shift Modifier for other areas of the UI and other addons.
-- Since we're hooking into Blizzards GameTooltip, it's possible that certain edge cases would
-- cause our Tooltips to appear instead and since the mouse isn't over "our" frame, it's not
-- getting reset properly and getting stuck to the Mouse Cursor.
-- Questie Map Icons
if MouseIsOver(WorldMapFrame) and WorldMapFrame:IsShown() or MouseIsOver(Minimap) then
local GameTooltip = QuestieCompat.Tooltip
if GameTooltip and GameTooltip:IsShown() and GameTooltip._Rebuild then
GameTooltip:Hide()
GameTooltip:ClearLines()
GameTooltip:SetOwner(GameTooltip._owner, "ANCHOR_CURSOR")
GameTooltip:_Rebuild() -- rebuild the tooltip
GameTooltip:SetFrameStrata("TOOLTIP")
GameTooltip:Show()
end
end
-- Questie Tracker Sizer
if QuestieTracker.started then
if MouseIsOver(Questie_BaseFrame.sizer) then
if down == 1 then
if GameTooltip and GameTooltip:IsShown() and GameTooltip._SizerToolTip then
GameTooltip:Hide()
GameTooltip:ClearLines()
GameTooltip:SetOwner(GameTooltip._owner, "ANCHOR_CURSOR")
GameTooltip._SizerToolTip()
GameTooltip:SetFrameStrata("TOOLTIP")
GameTooltip:Show()
end
else
if GameTooltip:IsShown() then
GameTooltip:Hide()
GameTooltip._SizerToolTip = nil
end
end
end
end
end
if QuestieTracker.started then
-- AI_VoiceOver PlayButtons
TrackerUtils:ShowVoiceOverPlayButtons()
end
if Questie.db.profile.trackerLocked then
if QuestieTracker.started then
-- This is a safety catch for race conditions to prevent the Tracker Sizer
-- from becoming stuck to the mouse pointer when the player releases the
-- CTRL key first before releasing the Left Mouse Button.
if (key == "LCTRL" or key == "RCTRL") and down == 0 then
if IsMouseButtonDown("LeftButton") then
-- Tracker is being sized
if TrackerBaseFrame.isSizing ~= false and TrackerBaseFrame.isMoving ~= true then
TrackerBaseFrame.OnResizeStop(self, "LeftButton")
return
end
-- Tracker is being moved
if TrackerBaseFrame.isMoving ~= false and TrackerBaseFrame.isSizing ~= true then
TrackerBaseFrame.OnDragStop(self, "LeftButton")
return
end
end
end
QuestieCombatQueue:Queue(function()
TrackerBaseFrame:Update()
TrackerQuestFrame:Update()
end)
end
end
end
--- Fires when some chat messages about skills are displayed
function _EventHandler:ChatMsgSkill()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] CHAT_MSG_SKILL")
-- This needs to be done to draw new quests that just came available
local isProfUpdate, isNewProfession = QuestieProfessions:Update()
if isProfUpdate or isNewProfession then
AvailableQuests.CalculateAndDrawAll()
end
-- Skill based Achievement updates
if Questie.IsWotlk or QuestieCompat.Is335 then
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end
end
--- Fires when some chat messages about reputations are displayed
function _EventHandler:ChatMsgCompatFactionChange()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] CHAT_MSG_COMBAT_FACTION_CHANGE")
local factionChanged, newFaction = QuestieReputation:Update(false)
if factionChanged or newFaction then
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
AvailableQuests.CalculateAndDrawAll()
end
end
function _EventHandler.GroupRosterUpdate()
local currentMembers = GetNumGroupMembers()
-- Only want to do logic when number increases, not decreases.
if QuestiePlayer.numberOfGroupMembers < currentMembers then
-- Tell comms to send information to members.
--Questie:SendMessage("QC_ID_BROADCAST_FULL_QUESTLIST")
QuestiePlayer.numberOfGroupMembers = currentMembers
else
-- We do however always want the local to be the current number to allow up and down.
QuestiePlayer.numberOfGroupMembers = currentMembers
end
end
function _EventHandler:GroupJoined()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] GROUP_JOINED")
local checkTimer
--We want this to be fairly quick.
checkTimer = C_Timer.NewTicker(0.2, function()
local partyPending = UnitInParty("player")
local isInParty = UnitInParty("party1")
local isInRaid = UnitInRaid("raid1")
if partyPending then
if (isInParty or isInRaid) then
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieEventHandler] Player joined party/raid, ask for questlogs")
--Request other players log.
Questie:SendMessage("QC_ID_REQUEST_FULL_QUESTLIST")
checkTimer:Cancel()
end
else
Questie:Debug(Questie.DEBUG_DEVELOP, "[QuestieEventHandler] Player no longer in a party or pending invite. Cancel timer")
checkTimer:Cancel()
end
end)
end
function _EventHandler:GroupLeft()
--Resets both QuestieComms.remoteQuestLog and QuestieComms.data
QuestieComms:ResetAll()
end
local trackerHiddenByCombat, optionsHiddenByCombat, journeyHiddenByCombat = false, false, false
function _EventHandler:PlayerRegenDisabled()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] PLAYER_REGEN_DISABLED")
-- Let's make sure the frame exists - might be nil if player is in combat upon login
if QuestieTracker then
if Questie.db.profile.hideTrackerInCombat and Questie.db.char.isTrackerExpanded and (not trackerHiddenByCombat) then
trackerHiddenByCombat = true
QuestieTracker:Collapse()
end
if IsInInstance() and Questie.db.profile.hideTrackerInDungeons then
QuestieTracker:Collapse()
end
end
-- Let's make sure the frame exists - might be nil if player is in combat upon login
if QuestieConfigFrame then
if QuestieConfigFrame:IsShown() then
optionsHiddenByCombat = true
QuestieConfigFrame:Hide()
end
end
-- Let's make sure the frame exists - might be nil if player is in combat upon login
if QuestieJourney then
if QuestieJourney:IsShown() then
journeyHiddenByCombat = true
QuestieJourney.ToggleJourneyWindow()
end
end
end
function _EventHandler:PlayerRegenEnabled()
Questie:Debug(Questie.DEBUG_DEVELOP, "[EVENT] PLAYER_REGEN_ENABLED")
if Questie.db.profile.hideTrackerInCombat and trackerHiddenByCombat then
if (not Questie.db.profile.hideTrackerInDungeons) or (not IsInInstance()) then
trackerHiddenByCombat = false
QuestieTracker:Expand()
end
QuestieCombatQueue:Queue(function()
QuestieTracker:Update()
end)
end
if optionsHiddenByCombat then
QuestieConfigFrame:Show()
optionsHiddenByCombat = false
end
if journeyHiddenByCombat then
QuestieJourney.ToggleJourneyWindow()
journeyHiddenByCombat = false
end
end