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.

166 lines
4.9 KiB

local Addon = LibStub('AceAddon-3.0'):GetAddon('WoWthing_Collector')
local Module = Addon:NewModule('Lockouts')
Module.db = {}
local C_QuestLog_IsQuestFlaggedCompleted = C_QuestLog.IsQuestFlaggedCompleted
function Module:OnEnable()
self:RegisterBucketEvent(
{
'LFG_UPDATE_RANDOM_INFO',
'LOOT_CLOSED',
'SHOW_LOOT_TOAST',
'UPDATE_INSTANCE_INFO',
},
1,
'UpdateLockouts'
)
self:BuildEJData()
end
function Module:OnEnteringWorld()
self:UpdateLockouts()
end
function Module:BuildEJData()
self.instanceNameToId = {}
for tier = 1, EJ_GetNumTiers() do
EJ_SelectTier(tier)
for i = 1, 2 do
local isRaid = i == 1
local index = 1
local instanceId, name = EJ_GetInstanceByIndex(index, isRaid)
while instanceId do
self.instanceNameToId[name] = instanceId
index = index + 1
instanceId, name = EJ_GetInstanceByIndex(index, isRaid)
end
end
end
end
function Module:UpdateLockouts()
local now = time()
Addon.charData.scanTimes["lockouts"] = now
local dailyReset = now + C_DateAndTime.GetSecondsUntilDailyReset()
local weeklyReset = now + C_DateAndTime.GetSecondsUntilWeeklyReset()
local lockouts = {}
local instanceDone = {}
-- Instances
for i = 1, GetNumSavedInstances() do
local instanceName, _, instanceReset, instanceDifficulty, locked, _, _,
_, _, _, maxBosses, defeatedBosses = GetSavedInstanceInfo(i)
if instanceReset > 0 then
instanceReset = now + instanceReset
end
-- Get saved boss names
local bosses, j = {}, 1
local name, _, dead = GetSavedInstanceEncounterInfo(i, j)
while name do
bosses[#bosses + 1] = table.concat({
dead and 1 or 0,
name,
}, ':')
j = j + 1
name, _, dead = GetSavedInstanceEncounterInfo(i, j)
end
table.insert(lockouts, {
id = self.instanceNameToId[instanceName],
name = instanceName,
resetTime = instanceReset,
bosses = bosses,
difficulty = instanceDifficulty,
defeatedBosses = defeatedBosses,
locked = locked,
maxBosses = maxBosses,
})
end
-- World bosses
--for i = 1, GetNumSavedWorldBosses() do
-- local instanceName, worldBossID, instanceReset = GetSavedWorldBossInfo(i)
-- charData.lockouts[#charData.lockouts+1] = {
-- name = instanceName,
-- resetTime = now + instanceReset,
-- difficulty = 0,
-- defeatedBosses = 1,
-- maxBosses = 1,
-- }
--end
-- LFG lockouts are weird
for _, instance in pairs(self.db.instances) do
local availableAll, availablePlayer = IsLFGDungeonJoinable(instance.dungeonId)
if availableAll then
local instanceName, _ = GetLFGDungeonInfo(instance.dungeonId)
local locked, _ = GetLFGDungeonRewards(instance.dungeonId)
if instance.progressKey then
table.insert(instanceDone, {
key = instance.progressKey,
locked = locked,
name = instanceName,
resetTime = instance.weekly and weeklyReset or dailyReset,
})
else
if locked then
table.insert(lockouts, {
id = 200000 + instance.dungeonId,
name = instanceName,
resetTime = dailyReset,
bosses = {
"1:"..instanceName,
},
difficulty = 1,
defeatedBosses = 1,
locked = true,
maxBosses = 1,
})
end
end
end
end
-- Other world bosses
for questID, questData in pairs(self.db.worldBosses) do
local groupId, groupName, bossName, isDaily = unpack(questData)
if C_QuestLog_IsQuestFlaggedCompleted(questID) then
local resetTime
if isDaily == true then
resetTime = dailyReset
else
resetTime = weeklyReset
end
table.insert(lockouts, {
id = groupId,
name = groupName,
resetTime = resetTime,
bosses = {
"1:"..bossName,
},
difficulty = 0,
defeatedBosses = 1,
locked = true,
maxBosses = 1,
weeklyQuest = true,
})
end
end
Addon.charData.instanceDone = instanceDone
Addon.charData.lockouts = lockouts
end