WoWInterface SVN _GautrReply

[/] [trunk/] [_GautrReply/] [_GautrReply.lua] - Rev 18

Compare with Previous | Blame | View Log

local loaded    = CreateFrame("FRAME", "Loaded")
local messages  = CreateFrame("FRAME", "Messages")

loaded:RegisterEvent("ADDON_LOADED")
messages:RegisterEvent("CHAT_MSG_WHISPER")
messages:RegisterEvent("CHAT_MSG_PARTY")
messages:RegisterEvent("CHAT_MSG_PARTY_LEADER")

local Player = UnitName("player")

if Defaults == nil then
        Defaults = 
        {
                Prefix  = "!",
                Debug   = false,
        }
end

local C =
{
        Player  = "player",
        W               = "whisper",
        
        Addon = {               
                Author  = GetAddOnMetadata("_GautrReply",  "author"),
                Version = GetAddOnMetadata("_GautrReply", "version"),
                Notes   = GetAddOnMetadata("_GautrReply",   "notes"),
                Title   = GetAddOnMetadata("_GautrReply",   "title"),
                Prefix  = "|cffffd700_GautrReply|r: ",
        },
}
local Commands = {
        Tnl = 
        {
                Per     = "tnl%%",
                XpPer   = "xptnl%%",
                Xp              = "xptnl",
                Bars    = "barstnl",
        },

        Cur = 
        {
                Per     = "%%",
                XpPer   = "xp%%",
                Xp              = "xp",
                Bars    = "bars",
        },

        Info = 
        {
                Help1 = "gautrhelp",
                Help2 = "grhelp",
                Help3 = "help",
                Help4 = "info",

                Pos1 = "location",
                Pos2 = "position",
                Pos3 = "pos",
                Pos4 = "coord",
        },
}



local function messagesHandler(self, event, msg, sender)
        local coordX, coordY = GetPlayerMapPosition(Player)
        
        local Math = {
                ExpCurrent      = UnitXP(Player),
                ExpMax          = UnitXPMax(Player),
                
                Percent         = (floor(UnitXP(Player) / UnitXPMax(Player) * 100)),
                Bars            = (floor(20*UnitXP(Player)/UnitXPMax(Player)+0.5)),
                
                NextLevel       = (UnitLevel(Player) + 1),
        }
        
        
        local Messages = 
        {
                        PercCur = (format("Currently at: %d%s", Math.Percent, "%")),
                        PercLeft= (format("%d%s left", (100 - Math.Percent), "%")),
                        PercTnl = (format("%d%s left to level %d", (100 - Math.Percent), "%", Math.NextLevel)),
                        
                        ExpCur  = (format("Current Experience: %d / %d", Math.ExpCurrent, Math.ExpMax)),
                        ExpLeft = (format("Experience left : %d / %d", (Math.ExpMax - Math.ExpCurrent), Math.ExpMax)),
                        ExpTnl  = (format("Experience left to level %d : %d / %d ", Math.NextLevel, (Math.ExpMax - Math.ExpCurrent), Math.ExpMax)),
                        
                        BarsCur = (format("%s %d/20", "Bars ", Math.Bars)),
                        BarsTnl = (format("%d Bars left to %d", (20 - Math.Bars), Math.NextLevel)),
                        
                        Help    = (format("%s%s%s", "Type ", Defaults.Prefix, " followed by any of the following commands 'bars, barscurrent, exp, expcurrent, position, percent, percentcurrent")),
                        
                        Position = (format("I'm in %s @ %d,%d", GetRealZoneText(), (coordX*100 ), (coordY*100)))
        }
        
        if Defaults.Debug then
                print("Event: "..event)
                print("Player: "..sender)
                print("Message: "..msg)
        else 
                if      msg:lower():match(Defaults.Prefix .. Commands.Tnl.XpPer) then
                        if sender ~= Player then 
                                wSend(Messages.PercTnl, sender)
                                wSend(Messages.ExpLeft, sender)                         
                        else 
                                print(C.Addon.Prefix .. Messages.PercTnl) 
                                print(C.Addon.Prefix .. Messages.ExpLeft)
                        end
                        
                elseif  msg:lower():match(Defaults.Prefix .. Commands.Tnl.Per) then
                        if sender ~= Player then wSend(Messages.PercTnl, sender) else print(C.Addon.Prefix .. Messages.PercTnl) end
                
                elseif  msg:lower():match(Defaults.Prefix .. Commands.Tnl.Xp) then
                        if sender ~= Player then wSend(Messages.ExpTnl, sender) else print(C.Addon.Prefix .. Messages.ExpTnl) end
                        
                elseif  msg:lower():match(Defaults.Prefix .. Commands.Tnl.Bars) then
                        if sender ~= Player then wSend(Messages.BarsTnl, sender) else print(C.Addon.Prefix .. Messages.BarsTnl) end
                                                
                elseif  msg:lower():match(Defaults.Prefix .. Commands.Cur.XpPer) then
                        if sender ~= Player then 
                                wSend(Messages.PercCur, sender)
                                wSend(Messages.ExpCur, sender)                          
                        else 
                                print(C.Addon.Prefix .. Messages.PercCur) 
                                print(C.Addon.Prefix .. Messages.ExpCur)
                        end
                        
                elseif  msg:lower():match(Defaults.Prefix .. Commands.Cur.Per) then
                        if sender ~= Player then wSend(Messages.PercCur, sender) else print(C.Addon.Prefix .. Messages.PercCur) end
                
                elseif  msg:lower():match(Defaults.Prefix .. Commands.Cur.Xp) then
                        if sender ~= Player then wSend(Messages.ExpCur, sender) else print(C.Addon.Prefix .. Messages.ExpCur) end
                        
                elseif  msg:lower():match(Defaults.Prefix .. Commands.Cur.Bars) then
                        if sender ~= Player then wSend(Messages.BarsCur, sender) else print(C.Addon.Prefix .. Messages.BarsCur) end
                        
                elseif  msg:lower():match(Defaults.Prefix .. Commands.Info.Help1) or
                                msg:lower():match(Defaults.Prefix .. Commands.Info.Help2) or
                                msg:lower():match(Defaults.Prefix .. Commands.Info.Help3) or
                                msg:lower():match(Defaults.Prefix .. Commands.Info.Help4) then
                        if sender ~= Player then wSend(Messages.Help, sender) else print(C.Addon.Prefix .. Messages.Help) end

                elseif  msg:lower():match(Defaults.Prefix .. Commands.Info.Pos1) or
                                msg:lower():match(Defaults.Prefix .. Commands.Info.Pos2) or
                                msg:lower():match(Defaults.Prefix .. Commands.Info.Pos3) or
                                msg:lower():match(Defaults.Prefix .. Commands.Info.Pos4) then
                        if sender ~= Player then wSend(Messages.Position, sender) else print(C.Addon.Prefix .. Messages.Position) end                   
                end
        end
end

SLASH_GAUTRREPLY1, SLASH_GAUTRREPLY2, SLASH_GAUTRREPLY3 = '/gautr', '/gr', '/gautrreply';

local function handler(msg, editbox)
local command, rest = msg:match("^(%S*)%s*(.-)$");
        if      command == "prefix" then
                if rest == "" then
                        print("|cffffd700" .. C.Addon.Title .. "|r: Type a symbol, the default is '|cffffd700!|r'. Currently it is "..Defaults.Prefix);
                elseif rest ~= nil then
                        Defaults.Prefix = rest
                end
        elseif  command == "debug" then
                if rest == "" then
                        local check = Defaults.Debug and "ON" or "OFF"
                        print("|cffffd700" .. C.Addon.Title .. "|r: Type '/gr debug on' to turn on, off to turn off... Its currently " .. tostring(check))
                elseif rest == "on" then 
                        Defaults.Debug = true
                        local check = Defaults.Debug and "ON" or "OFF"
                        print("|cffffd700" .. C.Addon.Title .. "|r: Debug is now " .. tostring(check))
                elseif rest == "off" then 
                        Defaults.Debug = false
                        local check = Defaults.Debug and "ON" or "OFF"
                        print("|cffffd700" .. C.Addon.Title .. "|r: Debug is now " .. tostring(check))
                end
        elseif command == "test" then
                if rest == "all" then
                        wSend("!tnl%", Player);
                        wSend("!%xptnl", Player);
                        wSend("!xptnl", Player);
                        wSend("!barstnl", Player);
                        
                        wSend("!%", Player);
                        wSend("!xp", Player);
                        wSend("!%xp", Player);
                        wSend("!bars", Player);
                        
                        wSend("!grhelp", Player);
                        wSend("!info", Player);
                        wSend("!help", Player);
                        wSend("!gautrhelp", Player);
                        
                        wSend("!location", Player);
                        wSend("!position", Player);
                        wSend("!pos", Player);
                        wSend("!coord", Player);
                end
        else
                print("|cffffd700" .. C.Addon.Title .. "|r: Type '/gr', '/gautr' or '/gautrreply' and either prefix or debug for info");
        end
end
SlashCmdList["GAUTRREPLY"] = handler;

function loaded:OnEvent(event, arg1)
        local addonName = "_GautrReply"
        Defaults.Debug = false
        if event == "ADDON_LOADED" and arg1 == addonName then
                print("|cffffd700".. arg1 .. " ".. C.Addon.Version .."|r".. " by " .. "|cffffd700" .. C.Addon.Author .. "|r");
        end
end

local filterStrings = {
        Commands.Tnl.XpPer,
        Commands.Tnl.Xp,
        Commands.Tnl.Per,
        Commands.Tnl.Bars,
        Commands.Cur.XpPer,
        Commands.Cur.Xp,
        Commands.Cur.Per,
        Commands.Cur.Bars,
        Commands.Info.Help1,
        Commands.Info.Help2,
        Commands.Info.Help3,
        Commands.Info.Help4,
        Commands.Info.Pos1,
        Commands.Info.Pos2,
        Commands.Info.Pos3,
        Commands.Info.Pos4,
}

function wSend(wMsg, wTarget)
        SendChatMessage(wMsg, C.W, nil, wTarget)
end

--[[ Modified Decount code, Credits goes to Tekkub ]]--
local function filter(self, event, msg) 
        for _,str in pairs(filterStrings) do
                if msg:lower():match(Defaults.Prefix..str) then 
                        if Defaults.Debug then 
                                print("Filtered Incoming Command: " .. "|cffffd700" ..str:upper().."|r in |cffffd700" .. event.."|r") 
                        end 
                return true end 
        end
end

--for _,event in pairs{"CHAT_MSG_WHISPER", "CHAT_MSG_PARTY", "CHAT_MSG_PARTY_LEADER"} do
for _,event in pairs{"CHAT_MSG_WHISPER"} do
        ChatFrame_AddMessageEventFilter(event, filter)
end

loaded:SetScript("OnEvent", loaded.OnEvent);
messages:SetScript("OnEvent", messagesHandler);

Compare with Previous | Blame