You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
4.7 KiB

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