class IRC_System extends IRC_Page; var Browser_IRC IRCPage; var IRCLink Link; var array Channels; //var string Server; //var string DefaultChannel; var string TestIRCString; var config string NickName; var config string FullName; var config string OldPlayerName; var config string UserIdent; var config array ServerHistory; var config array ChannelHistory; var localized array DefaultChannels; var bool bConnected; var bool bAway; var bool bSysInitialised; var localized string NotInAChannelText; var localized string KickedFromText; var localized string ByText; var localized string IsAwayText; var localized string ConnectText; var localized string DisconnectText; // Server/channel selection var GUILabel ServerLabel; var GUIButton ConnectButton; var GUIComboBox ServerCombo; var GUIButton RemoveServerButton; var GUILabel ChannelLabel; var GUIButton JoinChannelButton; var GUIComboBox ChannelCombo; var GUIButton RemoveChannelButton; var int CurChannel; var int PrevChannel; //function RefreshUI() //{ // IRCMain.RefreshData(GetActivePage()); //} function UpdateConnectCaption() { if(bConnected) ConnectButton.Caption = DisconnectText; else ConnectButton.Caption = ConnectText; } function InitComponent(GUIController MyController, GUIComponent MyOwner) { local GUIPanel UtilPanel; local int i, j; if(!bSysInitialised) { GUISplitter(Controls[1]).bDrawSplitter = false; // Dont draw this splitter // Plug button into util panel UtilPanel = GUIPanel( GUISplitter(Controls[1]).Controls[1] ); UtilPanel.Controls.Length = 8; UtilPanel.Controls[0] = ConnectButton; UtilPanel.Controls[1] = ServerCombo; UtilPanel.Controls[2] = RemoveServerButton; UtilPanel.Controls[3] = ServerLabel; UtilPanel.Controls[4] = JoinChannelButton; UtilPanel.Controls[5] = ChannelCombo; UtilPanel.Controls[6] = RemoveChannelButton; UtilPanel.Controls[7] = ChannelLabel; } Super.Initcomponent(MyController, MyOwner); if(!bSysInitialised) { SetTimer(1.0, true); UpdateConnectCaption(); // Load server and channel history into combo's Log(ServerHistory.Length$" Servers "$ChannelHistory.Length$" Channels"); for(i=0; i 0) ServerCombo.SetText(ServerHistory[0]); // load localized channel defaults if needed. if( ChannelHistory.Length == 0 ) { for( i=0;i 0) ChannelCombo.SetText(ChannelHistory[0]); bSysInitialised=true; } } function int FindServerHistoryIndex( string ServerName ) { local int ix, i; ix = -1; for(i=0; i 0) ServerCombo.SetText(ServerHistory[0]); } return true; } function bool RemoveChannelClick(GUIComponent Sender) { local string ChannelName; local int i; ChannelName = ChannelCombo.Edit.GetText(); i = FindChannelHistoryIndex(ChannelName); if(i != -1) { ChannelHistory.Remove(i,1); SaveConfig(); ChannelCombo.RemoveItem(i,1); if(ChannelHistory.Length > 0) ChannelCombo.SetText(ChannelHistory[0]); } return true; } // Timer function keeps nick up to date with player name if it changes event Timer() { if(bConnected && PlayerOwner() != None && PlayerOwner().PlayerReplicationInfo != None && PlayerOwner().PlayerReplicationInfo.PlayerName != OldPlayerName) { OldPlayerName = PlayerOwner().PlayerReplicationInfo.PlayerName; Link.SetNick(OldPlayerName); SystemText("SetNick: "$OldPlayerName); } } function SetCurrentChannelPage( IRC_Channel ChannelPage ) { local int i; for(i=0; i Channels.Length-1 || idx==CurChannel) { return; } PrevChannel = CurChannel; CurChannel = idx; // Make the current channel the active tab (if its not already). if(CurChannel == -1) { if( IRCPage.ChannelTabs.ActiveTab != MyButton ) IRCPage.ChannelTabs.ActivateTab( MyButton, true ); } else { if( IRCPage.ChannelTabs.ActiveTab != Channels[CurChannel].MyButton ) IRCPage.ChannelTabs.ActivateTab( Channels[CurChannel].MyButton, true ); } //RefreshUI(); } function IRC_Page GetActivePage() { if( CurChannel != -1 ) { return Channels[CurChannel]; } return self; } function ProcessInput(string Text) { if( CurChannel > -1 ) { Channels[CurChannel].ProcessInput(Text); } else { if(Left(Text, 1) != "/") { SystemText("*** "$NotInAChannelText); } else { Link.SendCommandText(Mid(Text, 1)); } } //RefreshUI(); } function IRC_Channel FindChannelWindow(string Channel) { local int i; for( i=0; i 0) AwayString = PlayerOwner().GetURLProtocol()$"://"$URL; else AwayString = "local game"; Link.SetAway(AwayString); //Log("Away: "$AwayString); bAway = True; } } } function CheckAway() { local string URL; if( bConnected ) { bAway = True; URL = PlayerOwner().Level.GetAddressURL(); if(InStr(URL, ":") > 0) Link.SetAway(PlayerOwner().GetURLProtocol()$"://"$URL); else if( InGame() ) Link.SetAway("local game"); else Link.SetAway("in menus"); } } function CTCP(string Channel, string Nick, string Message) { if(Channel == "" || Channel == NickName) SystemText("["$Nick$": "$Message$"]"); else SystemText("["$Nick$":"$Channel$" "$Message$"]"); } defaultproperties { Begin Object class=GUILabel Name=MyServerLabel Caption="Server" TextALign=TXTA_LEFT TextColor=(R=255,G=255,B=255,A=255) WinWidth=0.2 WinHeight=0.3 WinLeft=0.03 WinTop=0.1 StyleName="TextLabel" End Object ServerLabel=MyServerLabel Begin Object Class=GUIButton Name=MyConnectButton Caption="" OnClick=ConnectClick WinWidth=0.2 WinHeight=0.3 WinLeft=0.56 WinTop=0.1 End Object ConnectButton=MyConnectButton Begin Object class=GUIComboBox Name=MyServerCombo WinWidth=0.4 WinHeight=0.3 WinLeft=0.15 WinTop=0.1 End Object ServerCombo=MyServerCombo Begin Object Class=GUIButton Name=MyRemoveServerButton Caption="REMOVE SERVER" OnClick=RemoveServerClick WinWidth=0.2 WinHeight=0.3 WinLeft=0.77 WinTop=0.1 End Object RemoveServerButton=MyRemoveServerButton Begin Object class=GUILabel Name=MyChannelLabel Caption="Channel" TextALign=TXTA_LEFT TextColor=(R=255,G=255,B=255,A=255) WinWidth=0.2 WinHeight=0.3 WinLeft=0.03 WinTop=0.5 StyleName="TextLabel" End Object ChannelLabel=MyChannelLabel Begin Object Class=GUIButton Name=MyJoinChannelButton Caption="JOIN CHANNEL" OnClick=JoinChannelClick WinWidth=0.2 WinHeight=0.3 WinLeft=0.56 WinTop=0.5 End Object JoinChannelButton=MyJoinChannelButton Begin Object class=GUIComboBox Name=MyChannelCombo WinWidth=0.4 WinHeight=0.3 WinLeft=0.15 WinTop=0.5 End Object ChannelCombo=MyChannelCombo Begin Object Class=GUIButton Name=MyRemoveChannelButton Caption="REMOVE CHANNEL" OnClick=RemoveChannelClick WinWidth=0.2 WinHeight=0.3 WinLeft=0.77 WinTop=0.5 End Object RemoveChannelButton=MyRemoveChannelButton NotInAChannelText="Not in a channel!" KickedFromText="You were kicked from" ByText="by" IsAwayText="is away" CurChannel=-1 PrevChannel=-1 ConnectText="CONNECT" DisconnectText="DISCONNECT" }