Compare with Previous | Blame | View Log
local Egacle_default = {data = {}, lastInform=0, trackedItems = {["Mysterious Egg"]={time=590400}, ["Disgusting Jar"]={time=590400}}, version = 0.3 } local f = CreateFrame("Frame", "EgacleFrame") local ldb = LibStub:GetLibrary("LibDataBroker-1.1") local charName = GetUnitName("player",false) local charRealm = GetRealmName() local timeOfOneDay = 86400 local iconPath = "Interface\\Icons\\INV_egg_09" local timeBetweenInforms = 60*5 local timeBetweenChecks = 60 local elapsed = timeBetweenChecks f:RegisterEvent("CHAT_MSG_LOOT") f:RegisterEvent("ADDON_LOADED") f:SetScript("OnEvent", function (self, event, ...) if event=="CHAT_MSG_LOOT" then local itemname = string.match(arg1,"%[(.-)%]",1) for item in pairs(Egacle.trackedItems) do if itemname == item then --Item in trackedList bought, start new finish time for this char --Add realm if it hasn't occurred before if Egacle.data[charRealm] == nil then Egacle.data[charRealm]={} end --Add character if it hasn't occurred before if Egacle.data[charRealm][charName] == nil then Egacle.data[charRealm][charName]={} end --Start the new tracker Egacle.data[charRealm][charName][itemname]=time()+Egacle.trackedItems[item]["time"] end end elseif event == "ADDON_LOADED" and arg1 == "Egacle" then if Egacle == nil then Egacle = Egacle_default elseif Egacle.version == nil or Egacle.version < Egacle_default.version then local data = Egacle.data --Try to merge data from 0.1 format to 0.2 format for realm in pairs(Egacle.data) do for name in pairs(Egacle.data[realm]) do if tonumber(Egacle.data[realm][name]) then Egacle.data[realm][name]= {["Mysterious Egg"] = Egacle.data[realm][name]} end end end --Keep any tracked items that the player have added, but add new items, and new times for old items local trackedItems = Egacle.trackedItems Egacle = Egacle_default Egacle.data = data if trackedItems then for item in pairs(Egacle_default.trackedItems) do trackedItems[item] = Egacle_default.trackedItems[item] end Egacle.trackedItems = trackedItems end end end end) local function displayInforms() for realm in pairs(Egacle.data) do for name in pairs(Egacle.data[realm]) do for item in pairs(Egacle.data[realm][name]) do if Egacle.data[realm][name][item] <= time() then UIErrorsFrame:AddMessage("|cffff00ff"..name.." ("..realm.."): "..item.." have hatched!|r", nil, nil, nil, 53, 10) informed = true end end end end end f:SetScript("OnUpdate", function (self, elap, ...) local informed = false elapsed = elapsed + elap if elapsed > timeBetweenChecks and Egacle.lastInform + timeBetweenInforms <= time() then elapsed=0 if not tonumber(Egacle.lastInform) then Egacle.lastInform=0 end displayInforms() if informed then Egacle.lastInform=time() end end end) local ldbstream = ldb:NewDataObject("Egacle",{type = "data source",icon=iconPath, label="Egacle", text = "Egacle"}) function ldbstream:OnTooltipShow() self:AddLine("Egacle:") local text = "" local itemText = "" local realmText = "" local someoneWithItem = false local someoneOnRealmWithItem = false for item in pairs(Egacle.trackedItems) do itemText = "|cffffffff"..item.."|r\n" for realm in pairs(Egacle.data) do realmText = " |cffffffff"..realm.."|r\n" for name in pairs(Egacle.data[realm]) do if Egacle.data[realm][name][item] ~= nil then if Egacle.data[realm][name][item] < time() then realmText=realmText.." |cffffffff"..name..": |cffff0000Hatched|r\n" someoneOnRealmWithItem = true elseif Egacle.data[realm][name][item]-time() < timeOfOneDay then realmText=realmText.." |cffffffff"..name..": |cffffff00"..date("%H:%M:%S %A, %B %d, %Y",Egacle.data[realm][name][item]).."|r\n" someoneOnRealmWithItem = true else realmText=realmText.." |cffffffff"..name..": "..date("%H:%M:%S %A, %B %d, %Y",Egacle.data[realm][name][item]).."|r\n" someoneOnRealmWithItem = true end end end if someoneOnRealmWithItem then itemText = itemText..realmText someoneWithItem = true someoneOnRealmWithItem = false end end if someoneWithItem then text = text..itemText someoneWithItem = false end end local outText = text self:AddLine(outText) end function ldbstream:OnClick() displayInforms() end function ldbstream:OnEnter() GameTooltip:SetOwner(self, "ANCHOR_NONE") GameTooltip:SetPoint("TOPLEFT", self, "BOTTOMLEFT") GameTooltip:ClearLines() ldbstream.OnTooltipShow(GameTooltip) GameTooltip:Show() end function ldbstream:OnLeave() GameTooltip:Hide() end