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);