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