182 lines
5.3 KiB
Lua
182 lines
5.3 KiB
Lua
local ListOfGMs = {};
|
|
|
|
function GMChatFrame_IsGM(playerName)
|
|
return ListOfGMs[strlower(playerName)];
|
|
end
|
|
|
|
function GMChatFrame_OnLoad(self)
|
|
local name = self:GetName();
|
|
for index, value in pairs(CHAT_FRAME_TEXTURES) do
|
|
local object = _G[name..value];
|
|
local objectType = object:GetObjectType();
|
|
if ( objectType == "Button" ) then
|
|
object:GetNormalTexture():SetVertexColor(0, 0, 0);
|
|
object:GetHighlightTexture():SetVertexColor(0, 0, 0);
|
|
object:GetPushedTexture():SetVertexColor(0, 0, 0);
|
|
elseif ( objectType == "Texture" ) then
|
|
_G[name..value]:SetVertexColor(0,0,0);
|
|
else
|
|
--error("Unhandled object type");
|
|
end
|
|
object:SetAlpha(0.4);
|
|
end
|
|
|
|
self:RegisterEvent("CHAT_MSG_WHISPER");
|
|
self:RegisterEvent("CHAT_MSG_WHISPER_INFORM");
|
|
self:RegisterEvent("UPDATE_CHAT_COLOR");
|
|
self:RegisterEvent("UPDATE_CHAT_WINDOWS");
|
|
self.flashTimer = 0;
|
|
self.lastGM = {};
|
|
|
|
GMChatOpenLog:Enable();
|
|
|
|
self:SetClampRectInsets(-35, 0, 30, 0);
|
|
|
|
self:SetFont(DEFAULT_CHAT_FRAME:GetFont());
|
|
end
|
|
|
|
function GMChatFrame_OnEvent(self, event, ...)
|
|
local arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 = ...;
|
|
if ( event == "CHAT_MSG_WHISPER" and arg6 == "GM" ) then
|
|
local info = ChatTypeInfo["WHISPER"];
|
|
|
|
local pflag = "|TInterface\\ChatFrame\\UI-ChatIcon-Blizz.blp:0:2:0:-3|t ";
|
|
|
|
-- Search for icon links and replace them with texture links.
|
|
local term;
|
|
for tag in string.gmatch(arg1, "%b{}") do
|
|
term = strlower(string.gsub(tag, "[{}]", ""));
|
|
if ( ICON_TAG_LIST[term] and ICON_LIST[ICON_TAG_LIST[term]] ) then
|
|
arg1 = string.gsub(arg1, tag, ICON_LIST[ICON_TAG_LIST[term]] .. "0|t");
|
|
end
|
|
end
|
|
|
|
local body = format(CHAT_WHISPER_GET, pflag.."|HplayerGM:"..arg2..":"..arg11.."|h".."["..arg2.."]".."|h")..arg1;
|
|
|
|
ListOfGMs[strlower(arg2)] = true;
|
|
self:AddMessage(body, info.r, info.g, info.b, info.id);
|
|
|
|
if ( self.lastGMForCVar ~= arg2 and GMChatFrame:IsShown() ) then
|
|
SetCVar("lastTalkedToGM", arg2);
|
|
end
|
|
self.lastGMForCVar = arg2;
|
|
|
|
if ( not GMChatFrame:IsShown() ) then
|
|
GMChatStatusFrame:Show();
|
|
GMChatStatusFrame_Pulse();
|
|
table.insert(self.lastGM,arg2);
|
|
PlaySound("GM_ChatWarning");
|
|
|
|
DEFAULT_CHAT_FRAME:AddMessage(pflag.."|HGMChat|h["..GM_CHAT_STATUS_READY_DESCRIPTION.."]|h", info.r, info.g, info.b, info.id);
|
|
DEFAULT_CHAT_FRAME:SetHyperlinksEnabled(true);
|
|
DEFAULT_CHAT_FRAME.overrideHyperlinksEnabled = true;
|
|
SetButtonPulse(HelpMicroButton, 3600, 1.0);
|
|
SetButtonPulse(GMChatOpenLog, 3600, 1.0);
|
|
else
|
|
ChatEdit_SetLastTellTarget(arg2);
|
|
end
|
|
elseif ( event == "CHAT_MSG_WHISPER_INFORM" and GMChatFrame_IsGM(arg2) ) then
|
|
local info = ChatTypeInfo["WHISPER_INFORM"];
|
|
|
|
local pflag = "|TInterface\\ChatFrame\\UI-ChatIcon-Blizz.blp:0:2:0:-3|t ";
|
|
|
|
-- Search for icon links and replace them with texture links.
|
|
local term;
|
|
for tag in string.gmatch(arg1, "%b{}") do
|
|
term = strlower(string.gsub(tag, "[{}]", ""));
|
|
if ( ICON_TAG_LIST[term] and ICON_LIST[ICON_TAG_LIST[term]] ) then
|
|
arg1 = string.gsub(arg1, tag, ICON_LIST[ICON_TAG_LIST[term]] .. "0|t");
|
|
end
|
|
end
|
|
|
|
local body = format(CHAT_WHISPER_INFORM_GET, pflag.."|HplayerGM:"..arg2..":"..arg11.."|h".."["..arg2.."]".."|h")..arg1;
|
|
|
|
self:AddMessage(body, info.r, info.g, info.b, info.id);
|
|
elseif ( event == "UPDATE_CHAT_COLOR" ) then
|
|
local arg1, arg2, arg3, arg4 = ...
|
|
local info = ChatTypeInfo[strupper(arg1)];
|
|
if ( info ) then
|
|
info.r = arg2;
|
|
info.g = arg3;
|
|
info.b = arg4;
|
|
self:UpdateColorByID(info.id, info.r, info.g, info.b);
|
|
|
|
if ( strupper(arg1) == "WHISPER" ) then
|
|
info = ChatTypeInfo["REPLY"];
|
|
if ( info ) then
|
|
info.r = arg2;
|
|
info.g = arg3;
|
|
info.b = arg4;
|
|
self:UpdateColorByID(info.id, info.r, info.g, info.b);
|
|
end
|
|
end
|
|
end
|
|
elseif ( event == "UPDATE_CHAT_WINDOWS" ) then
|
|
local _, fontSize= FCF_GetChatWindowInfo(1);
|
|
if ( fontSize > 0 ) then
|
|
local fontFile, unused, fontFlags = DEFAULT_CHAT_FRAME:GetFont();
|
|
self:SetFont(fontFile, fontSize, fontFlags);
|
|
end
|
|
end
|
|
end
|
|
|
|
function GMChatFrame_OnShow(self)
|
|
GMChatStatusFrame:Hide();
|
|
GMChatOpenLog:Disable();
|
|
for _,gmName in ipairs(self.lastGM) do
|
|
ChatEdit_SetLastTellTarget(gmName);
|
|
end
|
|
table.wipe(self.lastGM);
|
|
if ( self.lastGMForCVar ) then
|
|
SetCVar("lastTalkedToGM", self.lastGMForCVar);
|
|
end
|
|
|
|
SetButtonPulse(HelpMicroButton, 0, 1); --Stop the buttons from pulsing.
|
|
SetButtonPulse(GMChatOpenLog, 0, 1);
|
|
|
|
self:SetScript("OnUpdate", GMChatFrame_OnUpdate);
|
|
end
|
|
|
|
function GMChatFrame_OnHide(self)
|
|
GMChatOpenLog:Enable();
|
|
SetCVar("lastTalkedToGM", "");
|
|
end
|
|
|
|
function GMChatFrame_OnUpdate(self, elapsed)
|
|
if ( DEFAULT_CHAT_FRAME.isUninteractable ) then
|
|
DEFAULT_CHAT_FRAME:SetHyperlinksEnabled(false);
|
|
end
|
|
DEFAULT_CHAT_FRAME.overrideHyperlinksEnabled = false;
|
|
|
|
self:SetScript("OnUpdate", nil);
|
|
end
|
|
|
|
function GMChatFrame_Show()
|
|
GMChatFrame:Show();
|
|
end
|
|
|
|
function GMChatFrame_Close()
|
|
GMChatFrame:Hide();
|
|
end
|
|
|
|
function GMChatStatusFrame_OnClick()
|
|
GMChatFrame_Show();
|
|
end
|
|
|
|
local function GMChatStatusFrame_PulseFunc(self, elapsed)
|
|
return abs(sin(elapsed*180*450--[[<--Number of times to pulse here]]));
|
|
end
|
|
|
|
local GMChatStatusFrame_PulseTable = {
|
|
totalTime = 900,
|
|
updateFunc = "SetAlpha",
|
|
getPosFunc = GMChatStatusFrame_PulseFunc,
|
|
}
|
|
|
|
function GMChatStatusFrame_Pulse()
|
|
local pulse = GMChatStatusFramePulse;
|
|
pulse:Show();
|
|
pulse:SetAlpha(0);
|
|
SetUpAnimation(pulse, GMChatStatusFrame_PulseTable, pulse.Hide);
|
|
end
|