1
0
Fork 0

Only update instance lockouts when raid info is fresh.

This commit is contained in:
Andrew Tomaka 2011-10-07 02:41:43 -04:00
parent ad62d9af11
commit d7efdbe934
1 changed files with 70 additions and 74 deletions

View File

@ -91,7 +91,6 @@ local options = {
}
function core:OnInitialize()
-- Prepare the database if necessary
db = LibStub('AceDB-3.0'):New('ChoreTrackerDB', defaults, 'Default')
local level = UnitLevel('player')
@ -203,10 +202,11 @@ function core:OnEnable()
local level = UnitLevel('player')
if level == 85 then
self:RegisterEvent('CALENDAR_UPDATE_EVENT_LIST')
self:RegisterEvent('UPDATE_INSTANCE_INFO')
self:RegisterEvent('CHAT_MSG_CURRENCY')
self:RegisterEvent('LFG_UPDATE_RANDOM_INFO')
-- Since CHAT_MSG_CURRENCY will not fire if you have max currency
self:RegisterEvent('UPDATE_INSTANCE_INFO')
self:RegisterEvent('CHAT_MSG_CURRENCY')
self:RegisterEvent('INSTANCE_ENCOUNTER_ENGAGE_UNIT')
end
@ -214,7 +214,7 @@ function core:OnEnable()
OpenCalendar()
-- Reset data if necessary
core:ResetInstances()
core:ResetRaidLockouts()
core:ResetValorPoints()
end
@ -226,12 +226,12 @@ function core:CALENDAR_UPDATE_EVENT_LIST()
core:GetNextVPReset()
end
function core:UPDATE_INSTANCE_INFO()
core:UpdateChores()
function core:UPDATE_INSTANCE_INFO()
core:UpdateRaidLockouts()
end
function core:LFG_UPDATE_RANDOM_INFO()
core:UpdateChores()
core:UpdateValorPoints()
end
function core:CHAT_MSG_CURRENCY()
@ -249,6 +249,66 @@ end
--[[ FUNCTIONS ]]--
function core:UpdateValorPoints()
local realm = GetRealmName()
local name = UnitName('player')
local _,_,_,earnedThisWeek = GetCurrencyInfo(396)
if db.global[realm][name].valorPoints == nil then
db.global[realm][name].valorPoints = {}
end
db.global[realm][name].valorPoints.points = earnedThisWeek
if vpResetTime ~= nil then
db.global[realm][name].valorPoints.resetTime = vpResetTime
end
end
function core:ResetValorPoints()
for realm,realmTable in pairs(db.global) do
for name in pairs(realmTable) do
if db.global[realm][name].valorPoints.resetTime < time() then
db.global[realm][name].valorPoints = {
points = 0,
resetTime = 0,
}
end
end
end
end
function core:UpdateRaidLockouts()
local realm = GetRealmName()
local name = UnitName('player')
local savedInstances = GetNumSavedInstances()
for i = 1, savedInstances do
local instanceName, _, instanceReset, _, _, _, _, _, _, _, _, defeatedBosses = GetSavedInstanceInfo(i)
if db.profile.instances[instanceName] ~= nil then
if instanceReset > 0 then
db.global[realm][name].lockouts[instanceName] = {}
db.global[realm][name].lockouts[instanceName].defeatedBosses = defeatedBosses
db.global[realm][name].lockouts[instanceName].resetTime = time() + instanceReset
end
end
end
end
function core:ResetRaidLockouts()
for realm,realmTable in pairs(db.global) do
for name in pairs(realmTable) do
for instance,instanceTable in pairs(db.global[realm][name].lockouts) do
if instanceTable.resetTime < time() then
db.global[realm][name].lockouts[instance] = nil
end
end
end
end
end
function core:DrawInstanceOptions()
-- Redraw our instance options everytime they are updated.
options.args.instances.args = {
@ -317,71 +377,6 @@ function core:DrawInstanceOptions()
end
end
function core:UpdateChores()
-- Reset data if necessary
core:ResetInstances()
core:ResetValorPoints()
local realm = GetRealmName()
local name = UnitName('player')
local _,_,_,earnedThisWeek = GetCurrencyInfo(396)
-- Store Valor Points if we were able to establish a reset time.
-- Try to alleviate issues with vpResetTime not getting set
-- by updating vp regardless and assuming previous time is still
-- correct.
if db.global[realm][name].valorPoints == nil then
db.global[realm][name].valorPoints = {}
end
db.global[realm][name].valorPoints.points = earnedThisWeek
if vpResetTime ~= nil then
db.global[realm][name].valorPoints.resetTime = vpResetTime
end
-- Store Saved Instances; sometimes, there can be two lockouts to the same instance
local savedInstances = GetNumSavedInstances()
for i = 1, savedInstances do
local instanceName, _, instanceReset, _, _, _, _, _, _, _, _, defeatedBosses = GetSavedInstanceInfo(i)
if db.profile.instances[instanceName] ~= nil then
if instanceReset > 0 then
db.global[realm][name].lockouts[instanceName] = {}
db.global[realm][name].lockouts[instanceName].defeatedBosses = defeatedBosses
db.global[realm][name].lockouts[instanceName].resetTime = time() + instanceReset
-- Let's not delete instances with no lockout for now. ResetInstances() should take care of this
-- and it solves an issue with two lockouts to the same instance being listed.
--else
-- db.global[realm][name].lockouts[instanceName] = nil
end
end
end
end
function core:ResetInstances()
for realm,realmTable in pairs(db.global) do
for name in pairs(realmTable) do
for instance,instanceTable in pairs(db.global[realm][name].lockouts) do
if instanceTable.resetTime < time() then
db.global[realm][name].lockouts[instance] = nil
end
end
end
end
end
function core:ResetValorPoints()
for realm,realmTable in pairs(db.global) do
for name in pairs(realmTable) do
if db.global[realm][name].valorPoints.resetTime < time() then
db.global[realm][name].valorPoints = {
valorPoints = 0,
resetTime = 0,
}
end
end
end
end
function core:GetNextVPReset()
-- We need to have access to the instance lockouts on the calendar.
local currentCalendarSetting = GetCVar('calendarShowResets')
@ -478,7 +473,8 @@ function core:DrawTooltip()
-- UpdateChores before we show the tooltip to make sure we have the most recent data
local level = UnitLevel('player')
if level == 85 then
core:UpdateChores()
-- Should not update without being 100% sure our raid info is correct
--core:UpdateChores()
end
if tooltip then