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

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