You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
5.3 KiB
180 lines
5.3 KiB
local SLE, T, E, L, V, P, G = unpack(select(2, ...))
|
|
local CH, LO = E.Chat, E.Layout
|
|
local C = SLE.Chat
|
|
|
|
--GLOBALS:unpack, select, hooksecurefunc, strsplit, gsub, format, string, _G, NUM_CHAT_WINDOWS, LeftChatPanel, RightChatPanel, LeftChatToggleButton, RightChatToggleButton, IsMouseButtonDown, IsInGuild, GetNumGuildMembers, GetGuildRosterInfo, GetChatWindowSavedPosition
|
|
|
|
local _G = _G
|
|
local format = format
|
|
local IsMouseButtonDown = IsMouseButtonDown
|
|
|
|
local sub = string.sub
|
|
local leader = [[|TInterface\GroupFrame\UI-Group-LeaderIcon:12:12|t]]
|
|
local NUM_CHAT_WINDOWS = NUM_CHAT_WINDOWS
|
|
local IsMouseButtonDown = IsMouseButtonDown
|
|
local GetChatWindowSavedPosition = GetChatWindowSavedPosition
|
|
local specialChatIcons
|
|
C.GuildMaster = ''
|
|
C.GMName = ''
|
|
C.GMRealm = ''
|
|
C.PlayerRealm = gsub(E.myrealm,'[%s%-]','')
|
|
C.PlayerName = E.myname..'-'..C.PlayerRealm
|
|
C.CreatedFrames = 0
|
|
|
|
local function Style(self, frame)
|
|
C.CreatedFrames = frame:GetID()
|
|
-- print("style")
|
|
local name = frame:GetName()
|
|
local tab = _G[name..'Tab']
|
|
tab.isTemporary = frame.isTemporary
|
|
|
|
-- Prevent text from jumping from left to right when tab is clicked.
|
|
hooksecurefunc(tab, 'SetWidth', function(self)
|
|
self.Text:ClearAllPoints()
|
|
self.Text:SetPoint('CENTER', self, 'CENTER', 0, 0)
|
|
end)
|
|
end
|
|
|
|
local function GetChatIcon(sender)
|
|
if not specialChatIcons then
|
|
SLE:GetRegion()
|
|
specialChatIcons = SLE.SpecialChatIcons[SLE.region]
|
|
end
|
|
local senderName, senderRealm, icon
|
|
if sender then
|
|
senderName, senderRealm = strsplit('-', sender)
|
|
else
|
|
senderName = E.myname
|
|
end
|
|
senderRealm = senderRealm or C.PlayerRealm
|
|
senderRealm = gsub(senderRealm, ' ', '')
|
|
|
|
if specialChatIcons and specialChatIcons[senderRealm] and specialChatIcons[senderRealm][senderName] then
|
|
icon = specialChatIcons[senderRealm][senderName]
|
|
end
|
|
if IsInGuild() and E.db.sle.chat.guildmaster then
|
|
if senderName == C.GMName and senderRealm == C.GMRealm then icon = icon and (leader..icon) or leader end
|
|
end
|
|
|
|
return icon
|
|
end
|
|
|
|
function C:GMCheck()
|
|
if GetNumGuildMembers() == 0 and IsInGuild() then E:Delay(2, C.GMCheck) return end
|
|
if not IsInGuild() then C.GuildMaster = ""; C.GMName = ''; C.GMRealm = ''; return end
|
|
for i = 1, GetNumGuildMembers() do
|
|
local name, _, rank = GetGuildRosterInfo(i)
|
|
if rank == 0 then C.GuildMaster = name break end
|
|
end
|
|
|
|
if C.GuildMaster then C.GMName, C.GMRealm = strsplit('-', C.GuildMaster) end
|
|
C.GMRealm = C.GMRealm or C.PlayerRealm
|
|
C.GMRealm = gsub(C.GMRealm, ' ', '')
|
|
end
|
|
|
|
local function Roster(event, update)
|
|
if update then C:GMCheck() end
|
|
end
|
|
|
|
function C:GMIconUpdate()
|
|
if E.private.chat.enable ~= true then return end
|
|
if E.db.sle.chat.guildmaster then
|
|
self:RegisterEvent('GUILD_ROSTER_UPDATE', Roster)
|
|
C:GMCheck()
|
|
else
|
|
self:UnregisterEvent('GUILD_ROSTER_UPDATE')
|
|
C.GuildMaster, C.GMName, C.GMRealm = '', '', ''
|
|
end
|
|
end
|
|
|
|
function C:Combat(event)
|
|
--To get rid of "script ran too long" in links
|
|
if E.db.sle.chat.combathide == 'NONE' or not E.db.sle.chat.combathide then return end
|
|
if event == 'PLAYER_REGEN_DISABLED' then
|
|
if E.db.sle.chat.combathide == 'BOTH' or E.db.sle.chat.combathide == 'RIGHT' then
|
|
RightChatPanel:Hide()
|
|
RightChatToggleButton:Hide()
|
|
end
|
|
if E.db.sle.chat.combathide == 'BOTH' or E.db.sle.chat.combathide == 'LEFT' then
|
|
LeftChatPanel:Hide()
|
|
LeftChatToggleButton:Hide()
|
|
end
|
|
elseif event == 'PLAYER_REGEN_ENABLED' then
|
|
if not RightChatPanel:IsShown() then
|
|
RightChatPanel:Show()
|
|
RightChatToggleButton:Show()
|
|
end
|
|
if not LeftChatPanel:IsShown() then
|
|
LeftChatPanel:Show()
|
|
LeftChatToggleButton:Show()
|
|
end
|
|
end
|
|
end
|
|
|
|
local function ChatTextures()
|
|
if not E.db['general'] or not E.private['general'] then return end --Prevent rare nil value errors
|
|
if not E.db.sle.chat or not E.db.sle.chat.textureAlpha or not E.db.sle.chat.textureAlpha.enable then return end --our option enable check
|
|
|
|
if LeftChatPanel and LeftChatPanel.tex and RightChatPanel and RightChatPanel.tex then
|
|
local a = E.db.sle.chat.textureAlpha.alpha or 0.5
|
|
LeftChatPanel.tex:SetAlpha(a)
|
|
RightChatPanel.tex:SetAlpha(a)
|
|
end
|
|
end
|
|
|
|
function C:JustifyChat(i)
|
|
local frame = _G['ChatFrame'..i]
|
|
frame:SetJustifyH(E.db.sle.chat.justify['frame'..i] or 'LEFT')
|
|
end
|
|
|
|
function C:IdentifyChatFrames()
|
|
for i = 1, 18 do
|
|
local frame = _G['ChatFrame'..i]
|
|
if frame then
|
|
frame:AddMessage(format(L["This is %sFrame %s|r"], E['media'].hexvaluecolor, i), 1.0, 1.0, 0)
|
|
end
|
|
end
|
|
end
|
|
|
|
function C:Initialize()
|
|
if not SLE.initialized or not E.private.chat.enable then return end
|
|
|
|
function C:ForUpdateAll()
|
|
C:GMIconUpdate()
|
|
C:CreateInvKeys()
|
|
C:SpamFilter()
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
C:JustifyChat(i)
|
|
end
|
|
end
|
|
|
|
-- hooksecurefunc(CH, "StyleChat", Style)
|
|
hooksecurefunc(E, 'UpdateMedia', ChatTextures)
|
|
|
|
if E.db.sle.chat.guildmaster then
|
|
self:RegisterEvent('GUILD_ROSTER_UPDATE', Roster)
|
|
C:GMCheck()
|
|
end
|
|
|
|
-- The Damage meter spam handle
|
|
C:InitLinks()
|
|
|
|
--Combat Hide
|
|
self:RegisterEvent('PLAYER_REGEN_ENABLED', 'Combat')
|
|
self:RegisterEvent('PLAYER_REGEN_DISABLED', 'Combat')
|
|
|
|
--Launching stuff so hooks can work
|
|
-- LO:ToggleChatPanels()
|
|
local setupDelay = E.global.sle.advanced.chat.setupDelay
|
|
E:Delay(setupDelay, function() CH:SetupChat() end) --This seems to actually fix some issues with detecting right panel chat frame
|
|
-- Justify
|
|
for i = 1, NUM_CHAT_WINDOWS do
|
|
C:JustifyChat(i)
|
|
end
|
|
|
|
C:InitTabs()
|
|
end
|
|
|
|
CH:AddPluginIcons(GetChatIcon)
|
|
|
|
SLE:RegisterModule(C:GetName())
|
|
|