local SLE, T, E, L, V, P, G = unpack(ElvUI_SLE) local Q = SLE.Quests local IsResting = IsResting local C_Item_GetItemInfo = C_Item.GetItemInfo local _G = _G local HeaderMenuMinimizeButton = _G.ObjectiveTrackerFrame.Header.MinimizeButton local QuestHeaderMinimizeButton = _G.QuestObjectiveTracker.Header.MinimizeButton local statedriver = { FULL = function(frame) ObjectiveTrackerFrame:SetCollapsed(false) if E.private.skins.blizzard.enable and E.private.skins.blizzard.objectiveTracker then HeaderMenuMinimizeButton.tex:SetTexture([[Interface\AddOns\ElvUI\Core\Media\Textures\MinusButton]]) end -- if _G.QuestObjectiveTracker.Header.module.collapsed then -- ObjectiveTracker_MinimizeModuleButton_OnClick(QuestHeaderMinimizeButton) -- end frame:Show() end, COLLAPSED = function(frame) ObjectiveTrackerFrame:SetCollapsed(true) if E.private.skins.blizzard.enable and E.private.skins.blizzard.objectiveTracker then HeaderMenuMinimizeButton.tex:SetTexture([[Interface\AddOns\ElvUI\Core\Media\Textures\PlusButton]]) end frame:Show() end, COLLAPSED_QUESTS = function(frame) -- if not _G.QuestObjectiveTracker.Header.module.collapsed then -- ObjectiveTracker_MinimizeModuleButton_OnClick(QuestHeaderMinimizeButton) -- end frame:Show() end, HIDE = function(frame) frame:Hide() end, } function Q:ChangeState(event) if not Q.db or not Q.db.visibility or not Q.db.visibility.enable then return end if InCombatLockdown() and event ~= 'PLAYER_REGEN_DISABLED' then return end local inCombat = event == 'PLAYER_REGEN_DISABLED' and true or false if inCombat and Q.db.visibility.combat ~= 'NONE' then statedriver[Q.db.visibility.combat](Q.frame) elseif C_Garrison.IsPlayerInGarrison(2) then statedriver[Q.db.visibility.garrison](Q.frame) elseif C_Garrison.IsPlayerInGarrison(3) then --here be order halls statedriver[Q.db.visibility.orderhall](Q.frame) elseif IsResting() then statedriver[Q.db.visibility.rested](Q.frame) else local instance, instanceType = IsInInstance() if instance then if instanceType == 'pvp' then statedriver[Q.db.visibility.bg](Q.frame) elseif instanceType == 'arena' then statedriver[Q.db.visibility.arena](Q.frame) elseif instanceType == 'party' then statedriver[Q.db.visibility.dungeon](Q.frame) elseif instanceType == 'scenario' then statedriver[Q.db.visibility.scenario](Q.frame) elseif instanceType == 'raid' then statedriver[Q.db.visibility.raid](Q.frame) end else statedriver['FULL'](Q.frame) end end if WorldQuestTrackerAddon and SLE._Compatibility['WorldQuestTracker'] then -- and WorldQuestTrackerAddon then local y = 0 for i = 1, #ObjectiveTrackerFrame.MODULES do local module = ObjectiveTrackerFrame.MODULES[i] if (module.Header:IsShown()) then y = y + module.contentsHeight end end if (ObjectiveTrackerFrame.collapsed) then WorldQuestTrackerAddon.TrackerHeight = 20 else WorldQuestTrackerAddon.TrackerHeight = y end WorldQuestTrackerAddon.RefreshTrackerAnchor() end end function Q:SelectQuestReward(index) local frame = QuestInfoFrame.rewardsFrame local button = QuestInfo_GetRewardButton(frame, index) if (button.type == 'choice') then QuestInfoItemHighlight:ClearAllPoints() QuestInfoItemHighlight:SetOutside(button.Icon) if E.private.skins.blizzard.enable ~= true or E.private.skins.blizzard.quest ~= true then QuestInfoItemHighlight:SetPoint('TOPLEFT', button, 'TOPLEFT', -8, 7) else button.Name:SetTextColor(1, 1, 0) end QuestInfoItemHighlight:Show() -- Set Choice _G.QuestInfoFrame.itemChoice = button:GetID() end end function Q:QUEST_COMPLETE() if not Q.db.autoReward then return end local choice, highest = 1, 0 local num = GetNumQuestChoices() if num <= 0 then return end -- no choices for index = 1, num do local link = GetQuestItemLink('choice', index) if link then local price = select(11, C_Item_GetItemInfo(link)) if price and price > highest then highest = price choice = index end end end Q:SelectQuestReward(choice) end function Q:Initialize() if not SLE.initialized then return end Q.db = E.db.sle.quests Q.frame = ObjectiveTrackerFrame Q:RegisterEvent('LOADING_SCREEN_DISABLED', 'ChangeState') Q:RegisterEvent('PLAYER_UPDATE_RESTING', 'ChangeState') Q:RegisterEvent('ZONE_CHANGED_NEW_AREA', 'ChangeState') Q:RegisterEvent('PLAYER_REGEN_ENABLED', 'ChangeState') Q:RegisterEvent('PLAYER_REGEN_DISABLED', 'ChangeState') Q:RegisterEvent('QUEST_COMPLETE') function Q:ForUpdateAll() Q.db = E.db.sle.quests Q:ChangeState() end end SLE:RegisterModule(Q:GetName())