82 lines
3.0 KiB
Lua
82 lines
3.0 KiB
Lua
local _G = ShaguTweaks.GetGlobalEnv()
|
|
local T = ShaguTweaks.T
|
|
local rgbhex = ShaguTweaks.rgbhex
|
|
|
|
local module = ShaguTweaks:register({
|
|
title = T["Chat History"],
|
|
description = T["Save chat history of all non-combatlog windows and restore it on login."],
|
|
expansions = { ["vanilla"] = true, ["tbc"] = false },
|
|
category = T["Chat"],
|
|
maintainer = "@shagu (GitHub)",
|
|
enabled = true,
|
|
})
|
|
|
|
module.enable = function(self)
|
|
local realm = GetRealmName()
|
|
local player = UnitName("player")
|
|
|
|
local history
|
|
local function SaveChatHistory(id, msg, r, g, b)
|
|
-- create cache tables if not existing
|
|
ShaguTweaks_cache = ShaguTweaks_cache or {}
|
|
ShaguTweaks_cache["chathistory"] = ShaguTweaks_cache["chathistory"] or {}
|
|
ShaguTweaks_cache["chathistory"][realm] = ShaguTweaks_cache["chathistory"][realm] or {}
|
|
ShaguTweaks_cache["chathistory"][realm][player] = ShaguTweaks_cache["chathistory"][realm][player] or {}
|
|
ShaguTweaks_cache["chathistory"][realm][player][id] = ShaguTweaks_cache["chathistory"][realm][player][id] or {}
|
|
|
|
if r and g and b then
|
|
local color = rgbhex(r*.5+.2, g*.5+.2, b*.5+.2)
|
|
msg = string.gsub(msg, "^", color)
|
|
msg = string.gsub(msg, "|r", "|r" .. color)
|
|
end
|
|
|
|
history = ShaguTweaks_cache["chathistory"][realm][player][id]
|
|
table.insert(history, 1, msg)
|
|
if history[30] then table.remove(history, 30) end
|
|
end
|
|
|
|
local function GetChatHistory(id)
|
|
-- create cache tables if not existing
|
|
ShaguTweaks_cache = ShaguTweaks_cache or {}
|
|
ShaguTweaks_cache["chathistory"] = ShaguTweaks_cache["chathistory"] or {}
|
|
ShaguTweaks_cache["chathistory"][realm] = ShaguTweaks_cache["chathistory"][realm] or {}
|
|
ShaguTweaks_cache["chathistory"][realm][player] = ShaguTweaks_cache["chathistory"][realm][player] or {}
|
|
ShaguTweaks_cache["chathistory"][realm][player][id] = ShaguTweaks_cache["chathistory"][realm][player][id] or {}
|
|
|
|
return ShaguTweaks_cache["chathistory"][realm][player][id]
|
|
end
|
|
|
|
local function AddMessage(frame, text, a1, a2, a3, a4, a5)
|
|
if not text then return end
|
|
|
|
-- save chat history
|
|
SaveChatHistory(frame:GetID(), text, a1, a2, a3)
|
|
frame:ShaguTweaksChatHistoryAddMessage(text, a1, a2, a3, a4, a5)
|
|
end
|
|
|
|
for i=1,NUM_CHAT_WINDOWS do
|
|
-- detect combat log message groups
|
|
local combat = 0
|
|
for _, msg in pairs(_G["ChatFrame"..i].messageTypeList) do
|
|
if strfind(msg, "SPELL", 1) or strfind(msg, "COMBAT", 1) then
|
|
combat = combat + 1
|
|
end
|
|
end
|
|
|
|
-- apply hooks and restore history on non-combat log frames
|
|
if combat <= 5 and not _G["ChatFrame"..i].ShaguTweaksChatHistoryAddMessage then
|
|
-- write history to chat
|
|
local history = GetChatHistory(i)
|
|
for j=30,0,-1 do
|
|
if history[j] then
|
|
_G["ChatFrame"..i]:AddMessage(history[j], .7,.7,.7)
|
|
end
|
|
end
|
|
|
|
-- add chat history hooks
|
|
_G["ChatFrame"..i].ShaguTweaksChatHistoryAddMessage = _G["ChatFrame"..i].AddMessage
|
|
_G["ChatFrame"..i].AddMessage = AddMessage
|
|
end
|
|
end
|
|
end
|