66 lines
2.4 KiB
Lua
66 lines
2.4 KiB
Lua
local mod = Chatter:NewModule("ChatLink", "AceHook-3.0")
|
|
local L = LibStub("AceLocale-3.0"):GetLocale("Chatter")
|
|
mod.modName = L["Chat Link"]
|
|
|
|
local gsub = _G.string.gsub
|
|
local find = _G.string.find
|
|
local GetChannelName = _G.GetChannelName
|
|
local EnumerateServerChannels = _G.EnumerateServerChannels
|
|
local select = _G.select
|
|
|
|
local serverChannels = {}
|
|
local function excludeChannels(...)
|
|
for i = 1, select("#", ...) do
|
|
local name = select(i, ...)
|
|
serverChannels[name] = true
|
|
end
|
|
end
|
|
|
|
function mod:Decorate(frame)
|
|
if not self:IsHooked(frame,"AddMessage") then
|
|
self:RawHook(frame, "AddMessage", true)
|
|
end
|
|
end
|
|
|
|
function mod:OnEnable()
|
|
excludeChannels(EnumerateServerChannels())
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
local cf = _G["ChatFrame" .. i]
|
|
if cf ~= COMBATLOG then
|
|
self:RawHook(cf, "AddMessage", true)
|
|
end
|
|
end
|
|
for index,name in ipairs(self.TempChatFrames) do
|
|
local cf = _G[name]
|
|
if cf then
|
|
self:RawHook(cf, "AddMessage", true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function mod:OnDisable()
|
|
end
|
|
|
|
function mod:ParseLinks(text)
|
|
if not text then return nil end
|
|
text = gsub(text, "{CLINK:item:(%x+):([%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-):([^}]-)}", "|c%1|Hitem:%2|h[%3]|h|r")
|
|
text = gsub(text, "{CLINK:talent:(%x+):([%d-]-:[%d-]-):([^}]-)}", "|c%1|Htalent:%2|h[%3]|h|r")
|
|
text = gsub(text, "{CLINK:glyph:(%x+):([%d-]-:[%d-]-):([^}]-)}", "|c%1|Hglyph:%2|h[%3]|h|r")
|
|
text = gsub(text, "{CLINK:enchant:(%x+):([%d-]-):([^}]-)}", "|c%1|Henchant:%2|h[%3]|h|r")
|
|
text = gsub(text, "{CLINK:spell:(%x+):([%d-]-):([^}]-)}", "|c%1|Hspell:%2|h[%3]|h|r")
|
|
text = gsub(text, "{CLINK:quest:(%x+):([%d-]-):([%d-]-):([^}]-)}", "|c%1|Hquest:%2:%3|h[%4]|h|r")
|
|
text = gsub(text, "{CLINK:(%x+):([%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-:[%d-]-):([^}]-)}", "|c%1|Hitem:%2|h[%3]|h|r")
|
|
text = gsub(text, "{CLINK:trade:(%x+):(%-?%d-:%-?%d-:.*:.*):([^}]-)}", "|c%1|Htrade:%2|h[%3]|h|r")
|
|
-- {CLINK:achievement:ffffff00:780:00000000001ED5C3:1:12:16:8:4294967295:4294967295:4294967295:4294967295:Explore Redridge Mountains}
|
|
text = gsub(text, "{CLINK:achievement:(%x+):(%-?%d-:%-?%x-:%-?%d-:%-?%d-:%-?%d-:%-?%d-:%-?%d-:%-?%d-:%-?%d-:%-?%d-):([^}]-)}", "|c%1|Hachievement:%2|h[%3]|h|r")
|
|
return text
|
|
end
|
|
|
|
function mod:AddMessage(frame, text, ...)
|
|
return self.hooks[frame].AddMessage(frame, mod:ParseLinks(text), ...)
|
|
end
|
|
|
|
function mod:Info()
|
|
return L["Lets you link items, enchants, spells, talents, achievements and quests in custom channels."]
|
|
end
|