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

295 lines
6.7 KiB
Ucode

//====================================================================
// Online message of the day page.
//
// Written by Joe Wilcox
// Updated by Ron Prestenback
// (c) 2003, Epic Games, Inc. All Rights Reserved
// ====================================================================
class UT2K4Browser_MOTD extends UT2K4Browser_Page;
var automated GUIScrollTextBox lb_MOTD;
var automated GUILabel l_Version;
var automated GUIButton b_QuickConnect;
var String MOTD;
var bool bUpgrade, bOptionalUpgrade;
var bool GotMOTD;
var float ReReadyPause;
var int RetryCount;
var() config int RetryMax;
var localized string UpgradeCaption;
var localized string VersionString;
var config string QuickConnectMenu;
var localized string ConnectFailed;
var localized string ConnectTimeout;
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
Super.InitComponent(MyController, MyOwner);
lb_MOTD.MyScrollText.bClickText=true;
lb_MOTD.MyScrollText.OnDblClick=LaunchURL;
}
function bool LaunchURL(GUIComponent Sender)
{
local string ClickString;
ClickString = StripColorCodes(lb_MOTD.MyScrollText.ClickedString);
Controller.LaunchURL(ClickString);
return true;
}
event Timer()
{
if (RetryCount++ < RetryMax)
{
SetFooterCaption( RetryString, True );
Browser.Uplink().StartQuery(CTM_GetMOTD);
}
else
{
SetFooterCaption( ReadyString );
KillTimer();
}
}
event Opened(GUIComponent Sender)
{
// if _RO
l_Version.Caption = VersionString@PlayerOwner().Level.ROVersion;
// else
// l_Version.Caption = VersionString@PlayerOwner().Level.EngineVersion;
if ( !GotMOTD )
{
DisableComponent(b_QuickConnect);
Refresh();
}
Super.Opened(Sender);
}
function ShowPanel( bool bShow )
{
Super.ShowPanel(bShow);
if ( bShow && !bInit )
BindQueryClient(Browser.Uplink());
}
function Refresh()
{
KillTimer();
bUpgrade = false;
CheckJoinButton(False);
lb_MOTD.Stop();
RetryCount = 0;
ResetQueryClient( Browser.Uplink() );
SetFooterCaption( StartQueryString );
Browser.Uplink().StartQuery(CTM_GetMOTD);
}
// delegates
function ReceivedMOTD( MasterServerClient.EMOTDResponse Command, string Data )
{
switch( Command )
{
case MR_MOTD:
GotMOTD = true;
EnableComponent(b_QuickConnect);
lb_MOTD.SetContent(Data, Chr(13));
break;
case MR_OptionalUpgrade:
bOptionalUpgrade = True;
CheckJoinButton(True);
break;
case MR_MandatoryUpgrade:
bUpgrade = true;
CheckJoinButton(True);
break;
case MR_NewServer:
break;
case MR_IniSetting:
break;
case MR_Command:
break;
}
}
function OpenStatusMessage(string Code, optional string data)
{
if (!Browser.bHideNetworkMessage)
Controller.OpenMenu(Controller.NetworkMsgMenu,Code,Data);
Browser.bHideNetworkMessage=true;
SetFooterCaption(AuthFailString);
SetTimer(ReReadyPause, false);
}
function QueryComplete( MasterServerClient.EResponseInfo ResponseInfo, int Info )
{
switch( ResponseInfo )
{
case RI_Success:
if ( Info == 1 ) // CTM_GetMOTD
{
if ( Browser.Uplink().ModRevLevel >0 )
{
class'GUI2K4.UT2K4Community'.default.ModRevLevel = Browser.Uplink().ModRevLevel;
class'GUI2K4.UT2K4Community'.static.staticsaveconfig();
}
SetFooterCaption(QueryCompleteString);
// Allow a few seconds to display the "Query Complete" message, then set the caption to "Ready"
RetryCount = RetryMax;
SetTimer(ReReadyPause, false);
if( !bUpgrade && !Browser.Verified)
Browser.MOTDVerified(true);
}
break;
case RI_AuthenticationFailed:
OpenStatusMessage("RI_AuthenticationFailed");break;
case RI_DevClient:
OpenStatusMessage("RI_DevClient");break;
case RI_BadClient:
OpenStatusMessage("RI_BadClient");break;
case RI_BannedClient:
OpenStatusMessage("RI_BannedClient",ResponseInfo$Browser.Uplink().OptionalResult);break;
case RI_ConnectionFailed:
lb_MOTD.SetContent(ConnectFailed);
Browser.MOTDVerified(false);
break;
case RI_ConnectionTimeout:
lb_MOTD.SetContent(ConnectTimeout);
Browser.MOTDVerified(false);
break;
}
}
function JoinClicked()
{
Browser.Uplink().LaunchAutoUpdate();
}
function bool IsSpectateAvailable( out string ButtonCaption )
{
ButtonCaption = SpectateCaption;
return false;
}
function bool IsJoinAvailable( out string ButtonCaption )
{
ButtonCaption = UpgradeCaption;
return bUpgrade || bOptionalUpgrade;
}
function bool IsRefreshAvailable( out string ButtonCaption )
{
ButtonCaption = RefreshCaption;
return true;
}
function bool InternalOnClick(GUIComponent Sender)
{
if ( Sender == b_QuickConnect )
{
if ( Controller.OpenMenu(QuickConnectMenu) )
Controller.ActivePage.HandleObject( Browser.Uplink() );
return true;
}
return false;
}
function ResetQueryClient( ServerQueryClient Client )
{
Super.ResetQueryClient(Client);
if ( MasterServerClient(Client) != None )
MasterServerClient(Client).Query.Length = 0;
}
function BindQueryClient( ServerQueryClient Client )
{
Super.BindQueryClient(Client);
if ( MasterServerClient(Client) != None )
{
MasterServerClient(Client).OnReceivedMOTDData = ReceivedMOTD;
MasterServerClient(Client).OnQueryFinished = QueryComplete;
}
}
defaultproperties
{
Begin Object class=GUIScrollTextBox Name=MyMOTDText
TextAlign=TXTA_Left
WinWidth=1.0
WinHeight=0.833203
WinLeft=0.0
WinTop=0.002679
CharDelay=0.05
EOLDelay=0.1
bNeverFocus=true
bAcceptsInput=true
RenderWeight=0.6
TabOrder=1
bVisibleWhenEmpty=True
bNoTeletype=True
StyleName="ListBox"
End Object
lb_MOTD=MyMOTDText
Begin Object class=GUILabel Name=VersionNum
Caption=""
StyleName="TextLabel"
TextALign=TXTA_Right
WinWidth=0.202128
WinHeight=0.040000
WinLeft=0.793500
WinTop=-0.043415
bBoundToParent=false
bScaleToParent=false
RenderWeight=20.7
bTransparent=true
End Object
l_Version=VersionNum
Begin Object Class=GUIButton Name=QuickPlay
WinWidth=0.161994
WinHeight=0.079063
WinLeft=0.425180
WinTop=0.866146
TabOrder=2
Caption="QUICK PLAY"
Hint="Open a dialog that can help you easily find the best online server based on your criteria"
OnClick=InternalOnClick
bAutoSize=True
End Object
b_QuickConnect=QuickPlay
ReReadyPause=3.0
RetryMax=10
VersionString="Version"
PanelCaption="News from Tripwire Interactive"
UpgradeCaption="UPGRADE"
QuickConnectMenu="GUI2K4.UT2K4QuickPlay"
ConnectFailed="The Killing Floor master server could not be reached. Please try again later."
ConnectTimeout="Your connection to the Killing Floor master server has timed out"
}