rott/kf_sources/HideMut/Classes/Hide_IngameChat.uc
2026-07-14 20:27:09 +07:00

221 lines
5.5 KiB
Ucode

class Hide_IngameChat extends FloatingWindow;
var automated GUISectionBackground sB_Main;
var automated moEditBox eb_Send;
var automated GUIScrollTextBox lb_Chat;
var() int OldCMC;
var() editinline array<byte> CloseKey;
var const color TextColors[3];
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
local int i;
local PlayerController PC;
local ExtendedConsole MyConsole;
super.InitComponent(MyController,MyOwner);
PC = PlayerOwner();
sb_Main.ManageComponent(lb_Chat);
eb_Send.MyEditBox.OnKeyEvent = InternalOnKeyEvent;
lb_Chat.MyScrollText.bNeverFocus=true;
MyConsole = ExtendedConsole(PC.Player.Console);
if (MyConsole == none)
return;
// delegate
MyConsole.OnChat = HandleChat;
for (i = 0; i < MyConsole.ChatMessages.Length; i++)
{
if (!MyConsole.bTeamChatOnly || PC.PlayerReplicationInfo == none ||
PC.PlayerReplicationInfo.Team == none || MyConsole.ChatMessages[i].Team == PC.PlayerReplicationInfo.Team.TeamIndex)
HandleChat(MyConsole.ChatMessages[i].Message, MyConsole.ChatMessages[i].Team);
}
}
event Opened(GUIComponent Sender)
{
local int i;
local string KeyName;
local array<string> KeyNames;
local PlayerController PC;
super.Opened(Sender);
PC = PlayerOwner();
CloseKey.Remove(0, CloseKey.Length);
KeyName = PC.ConsoleCommand("BINDINGTOKEY InGameChat");
Split(KeyName, ",", KeyNames);
for (i = 0; i < KeyNames.Length; i++)
CloseKey[CloseKey.Length] = byte(PC.ConsoleCommand("KEYNUMBER"@KeyNames[i]));
OldCMC = PC.myHud.ConsoleMessageCount;
PC.myHUD.ConsoleMessageCount = 0;
// Advance the cursor position to the end of the text
lb_Chat.MyScrollText.End();
FocusFirst(none);
}
function Closed(GUIComponent Sender, bool bCancelled)
{
super.Closed(Sender, bCancelled);
PlayerOwner().MyHud.ConsoleMessageCount = OldCMC;
}
function HandleChat(string Msg, int TeamIndex)
{
local int i;
local string str;
// normalize the text before any modification
// Msg = class'o_Utility'.static.StripColorStatic(Msg);
// add word filtering
if (class'Settings'.static.bIsWordBanned(Msg))
return;
// convert cyrilic into barbaric
Msg = class'o_CyrillicEncodeUtilities'.static.EnCodeStringHide(Msg);
i = InStr(Msg, ":");
if (TeamIndex < 2 && i != -1)
str = nMakeColorCode(TextColors[TeamIndex]) $ Left(Msg, i) $ nMakeColorCode(TextColors[2]) $ ":" $ Mid(Msg, i+1);
else
str = nMakeColorCode(TextColors[2]) $ Msg;
lb_chat.AddText(str);
}
function string nMakeColorCode(color c)
{
return class'GameInfo'.static.MakeColorCode(c);
}
function bool InternalOnKeyEvent(out byte Key, out byte State, float delta)
{
local string cmd;
local int i;
if (state == 1)
{
for (i = 0; i < CloseKey.Length; i++)
{
if (Key == CloseKey[i])
{
Controller.CloseMenu(false);
return true;
}
}
}
if (state == 3)
{
if (Key == 0x0D)
{
cmd = eb_Send.GetText();
if (cmd == "")
return true;
if (Left(cmd, 1) == "/")
cmd = Mid(cmd,1);
else if (Left(cmd,1) == ".")
cmd = "teamsay" @ Mid(cmd, 1);
else
cmd = "say" @ cmd;
PlayerOwner().ConsoleCommand(cmd);
eb_Send.SetText("");
return true;
}
}
return eb_Send.MyEditBox.InternalOnKeyEvent(key, state, delta);
}
function InternalOnCreateComponent(GUIComponent NewComp, GUIComponent Sender)
{
if (NewComp != eb_Send)
NewComp.bNeverFocus = true;
super.InternalOnCreateComponent(NewComp, Sender);
}
defaultproperties
{
Begin Object Class=AltSectionBackground Name=sbMain
bFillClient=True
LeftPadding=0.000000
RightPadding=0.000000
TopPadding=0.000000
BottomPadding=0.000000
WinHeight=1.000000
bBoundToParent=True
bScaleToParent=True
bNeverFocus=True
OnPreDraw=sbMain.InternalPreDraw
End Object
sb_Main=AltSectionBackground'HideMut.Hide_IngameChat.sbMain'
Begin Object Class=moEditBox Name=ebSend
CaptionWidth=0.100000
Caption="Say: "
OnCreateComponent=ebSend.InternalOnCreateComponent
Hint="Prefix a message with a dot (.) to send a team message or a slash (/) to send a command."
WinTop=0.943855
WinLeft=0.099584
WinWidth=0.818909
WinHeight=0.035416
TabOrder=0
bBoundToParent=True
bScaleToParent=True
End Object
eb_Send=moEditBox'HideMut.Hide_IngameChat.ebSend'
Begin Object Class=GUIScrollTextBox Name=lbChat
bNoTeletype=True
CharDelay=0.002500
EOLDelay=0.000000
OnCreateComponent=lbChat.InternalOnCreateComponent
FontScale=FNS_Small
WinTop=0.441667
WinHeight=0.558333
bBoundToParent=True
bScaleToParent=True
bNeverFocus=True
End Object
lb_Chat=GUIScrollTextBox'HideMut.Hide_IngameChat.lbChat'
TextColors(0)=(B=50,G=50,R=200,A=255)
TextColors(1)=(B=200,G=100,R=50,A=255)
TextColors(2)=(B=255,G=255,R=255)
WindowName="Fancy Chat"
bResizeWidthAllowed=False
bResizeHeightAllowed=False
DefaultLeft=0.110313
DefaultTop=0.057916
DefaultWidth=0.779688
DefaultHeight=0.847083
bPersistent=True
bAllowedAsLast=True
WinTop=0.057916
WinLeft=0.110313
WinWidth=0.779688
WinHeight=0.847083
}