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.

69 lines
1.9 KiB

local Addon = LibStub('AceAddon-3.0'):GetAddon('WoWthing_Collector')
local Module = Addon:NewModule('TimePlayed', 'AceHook-3.0')
-- Hook the time played message so that we don't print it to chat every time
do
local originalDisplayTimePlayed = _G.ChatFrame_DisplayTimePlayed
_G.ChatFrame_DisplayTimePlayed = function(...)
if Module.requestingPlayedTime then
C_Timer.After(0.2, function()
Module.requestingPlayedTime = false
end)
return
end
return originalDisplayTimePlayed(...)
end
end
function Module:OnEnable()
-- self:RawHook('ChatFrame_DisplayTimePlayed', true)
self:RegisterEvent('PLAYER_LEVEL_UP')
self:RegisterEvent('TIME_PLAYED_MSG')
end
function Module:OnEnteringWorld()
self:RequestTimePlayed()
end
function Module:OnLogout()
self:SaveData()
end
function Module:RequestTimePlayed()
self.requestingPlayedTime = true
RequestTimePlayed()
end
function Module:SaveData()
local now = time()
if self.playedLevel ~= nil then
Addon.charData.playedLevel = self.playedLevel + (now - self.playedLevelUpdated)
end
if self.playedTotal ~= nil then
Addon.charData.playedTotal = self.playedTotal + (now - self.playedTotalUpdated)
end
end
-- Don't display the chat message if we're asking for the data
-- function Module:ChatFrame_DisplayTimePlayed(...)
-- if self.requestingPlayedTime then
-- self.requestingPlayedTime = false
-- return
-- end
-- self.hooks.ChatFrame_DisplayTimePlayed(...)
-- end
function Module:PLAYER_LEVEL_UP()
self.playedLevel, self.playedLevelUpdated = 0, time()
end
function Module:TIME_PLAYED_MSG(_, total, level)
local now = time()
self.playedLevel, self.playedLevelUpdated = level, now
self.playedTotal, self.playedTotalUpdated = total, now
self:SaveData()
end