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.
107 lines
3.8 KiB
107 lines
3.8 KiB
local SI, L = unpack((select(2, ...)))
|
|
local Module = SI:NewModule('Calling', 'AceEvent-3.0')
|
|
|
|
-- Lua functions
|
|
local floor, ipairs, pairs, time, tonumber, wipe = floor, ipairs, pairs, time, tonumber, wipe
|
|
|
|
-- WoW API / Variables
|
|
local C_CovenantCallings_AreCallingsUnlocked = C_CovenantCallings.AreCallingsUnlocked
|
|
local C_CovenantCallings_RequestCallings = C_CovenantCallings.RequestCallings
|
|
local C_QuestLog_GetTitleForQuestID = C_QuestLog.GetTitleForQuestID
|
|
local C_QuestLog_IsOnQuest = C_QuestLog.IsOnQuest
|
|
local C_TaskQuest_GetQuestTimeLeftMinutes = C_TaskQuest.GetQuestTimeLeftMinutes
|
|
local GetNumQuestLogRewards = GetNumQuestLogRewards
|
|
local GetQuestLogRewardInfo = GetQuestLogRewardInfo
|
|
local GetQuestObjectiveInfo = GetQuestObjectiveInfo
|
|
local GetQuestProgressBarPercent = GetQuestProgressBarPercent
|
|
|
|
function Module:PostRefresh()
|
|
if self.initialized then
|
|
if not SI.logout then
|
|
C_CovenantCallings_RequestCallings()
|
|
end
|
|
return
|
|
end
|
|
|
|
self:RegisterEvent("COVENANT_CALLINGS_UPDATED")
|
|
|
|
self.initialized = true
|
|
end
|
|
|
|
function Module:COVENANT_CALLINGS_UPDATED(_, callings)
|
|
local t = SI.db.Toons[SI.thisToon]
|
|
if not t.Calling then t.Calling = {} end
|
|
|
|
if SI.playerLevel < 60 or not C_CovenantCallings_AreCallingsUnlocked() then
|
|
t.Calling.unlocked = nil
|
|
return
|
|
end
|
|
t.Calling.unlocked = true
|
|
|
|
-- set all slot completed and set expiredTime
|
|
local nextReset = SI:GetNextDailyResetTime()
|
|
if not nextReset then return end -- near reset or failing to get
|
|
|
|
for i = 1, 3 do
|
|
if not t.Calling[i] then t.Calling[i] = {} end
|
|
t.Calling[i].isCompleted = true
|
|
t.Calling[i].expiredTime = nextReset + (i - 1) * 24 * 60 * 60
|
|
end
|
|
|
|
for _, data in ipairs(callings) do
|
|
local timeLeft = C_TaskQuest_GetQuestTimeLeftMinutes(data.questID)
|
|
local day = tonumber(floor((timeLeft or 0) / 1440) + 1) -- [1, 2, 3]
|
|
if not timeLeft or not day or not t.Calling[day] then
|
|
C_CovenantCallings_RequestCallings()
|
|
return
|
|
end
|
|
|
|
local isOnQuest = C_QuestLog_IsOnQuest(data.questID)
|
|
local title = C_QuestLog_GetTitleForQuestID(data.questID)
|
|
|
|
t.Calling[day].isCompleted = false
|
|
t.Calling[day].isOnQuest = isOnQuest
|
|
t.Calling[day].questID = data.questID
|
|
t.Calling[day].title = title
|
|
|
|
if isOnQuest then
|
|
local text, objectiveType, isFinished, questDone, questNeed = GetQuestObjectiveInfo(data.questID, 1, false)
|
|
if objectiveType == 'progressbar' then
|
|
questDone = GetQuestProgressBarPercent(data.questID)
|
|
questNeed = 100
|
|
end
|
|
t.Calling[day].text = text
|
|
t.Calling[day].objectiveType = objectiveType
|
|
t.Calling[day].isFinished = isFinished
|
|
t.Calling[day].questDone = questDone
|
|
t.Calling[day].questNeed = questNeed
|
|
|
|
local numQuestRewards = GetNumQuestLogRewards(data.questID)
|
|
if numQuestRewards > 0 then
|
|
local itemName, _, _, quality = GetQuestLogRewardInfo(1, data.questID)
|
|
if itemName then
|
|
t.Calling[day].questReward = t.Calling[day].questReward and wipe(t.Calling[day].questReward) or {}
|
|
t.Calling[day].questReward.itemName = itemName
|
|
t.Calling[day].questReward.quality = quality
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Module:OnDailyReset()
|
|
local now = time()
|
|
for _, ti in pairs(SI.db.Toons) do
|
|
if ti.Calling and ti.Calling.unlocked then
|
|
while ti.Calling[1] and ti.Calling[1].expiredTime < now do
|
|
ti.Calling[1] = ti.Calling[2]
|
|
ti.Calling[2] = ti.Calling[3]
|
|
ti.Calling[3] = {
|
|
isCompleted = false,
|
|
isOnQuest = false,
|
|
expiredTime = ti.Calling[2].expiredTime + 24 * 60 * 60,
|
|
}
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|