WoWInterface SVN Egacle

[/] [trunk/] [Egacle/] [Egacle.lua] - Rev 15

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

Compare with Previous | Blame