class KFServerBrowser extends UT2K4ServerBrowser; var private ROMasterServerClient ROMSC; var localized string AllTypesString; var string AllTypesClassName; var localized string ServerPerkGatedHeading; function InitializeGameTypeCombo(optional bool ClearFirst) { local int i, j; local UT2K4Browser_ServersList ListObj; local array Maps; co_GameType.MyComboBox.MaxVisibleItems = 10; PopulateGameTypes(); if (ClearFirst) co_GameType.MyComboBox.List.Clear(); j = -1; // Adds the option to search all game types co_GameType.AddItem(AllTypesString, none, AllTypesClassName); CurrentGameType = AllTypesClassName; // Create a seperate list for each gametype, and store the lists in the combo box for (i = 0; i < Records.Length; i++) { class'CacheManager'.static.GetMapList( Maps, Records[i].MapPrefix ); if ( Maps.Length == 0 ) continue; ListObj = new(None) class'GUI2K4.UT2K4Browser_ServersList'; co_GameType.AddItem(Records[i].GameName, ListObj, Records[i].ClassName); } j = co_GameType.FindIndex(CurrentGameType,true,true); if (j != -1) { co_GameType.SetIndex(j); SetFilterInfo(); } } function MasterServerClient Uplink() { if ( ROMSC == None && PlayerOwner() != None ) ROMSC = PlayerOwner().Spawn(class'ROMasterServerClient'); return ROMSC; } // Server browser must remain persistent across level changes, in order for the IRC client to function properly event bool NotifyLevelChange() { local int i; for ( i = 0; i < c_Tabs.TabStack.Length; i++ ) { if ( KFServerListPageInternet(c_Tabs.TabStack[i].MyPanel) != none ) { KFServerListPageInternet(c_Tabs.TabStack[i].MyPanel).NotifyLevelChange(); } } if ( ROMSC != None ) { ROMSC.Stop(); ROMSC.Destroy(); ROMSC = None; } LevelChanged(); return false; } function EnableMSTabs() { } function DisableMSTabs() { Verified = False; } function AddToServerCache(GameInfo.ServerResponseLine Entry) { } function bool ComboOnPreDraw(Canvas Canvas) { co_GameType.WinTop = co_GameType.RelativeTop(t_Header.ActualTop() + t_Header.ActualHeight() + float(Controller.ResY) / 100.0); co_GameType.WinLeft = co_GameType.RelativeLeft((c_Tabs.ActualLeft() + c_Tabs.ActualWidth()) - (co_GameType.ActualWidth() + 12)); return false; } function JoinClicked() { local int InternetPageIndex, CurrentServerDifficulty, PlayerHighestPerkLevel; local KFServerListPageInternet InternetPage; local string PerkLevels; InternetPageIndex = c_Tabs.TabIndex( PanelCaption[4] ); InternetPage = KFServerListPageInternet( c_Tabs.TabStack[InternetPageIndex].MyPanel ); CurrentServerDifficulty = InternetPage.GetCurrentServerDifficulty(); PlayerHighestPerkLevel = CalcPlayerHighestPerkLevel( PlayerOwner() ); if( PlayerHighestPerkLevel < 2 && CurrentServerDifficulty > 1 ) // 0 - beginner, 1 - normal { Controller.OpenMenu("GUI2K4.UT2K4GenericMessageBox",ServerPerkGatedHeading,""); } else { super.JoinClicked(); } } static function int CalcPlayerHighestPerkLevel( PlayerController P ) { local int i, HPL, NumPerks; local array< class > PerkClasses; local KFSteamStatsAndAchievements KFSS; HPL = -1; if( P != none ) { KFSS = KFSteamStatsAndAchievements(P.SteamStatsAndAchievements); if ( KFSS != none ) { PerkClasses = class'KFGameType'.default.LoadedSkills; NumPerks = class'KFGameType'.default.LoadedSkills.Length; for( i = 0; i < class'KFGameType'.default.LoadedSkills.Length; ++i ) { HPL = Max(HPL, KFSS.PerkHighestLevelAvailable(class'KFGameType'.default.LoadedSkills[i].default.PerkIndex) ); } } } return HPL; } defaultproperties { AllTypesClassName="All Types" Begin Object Class=moComboBox Name=GameTypeCombo bReadOnly=True CaptionWidth=0.100000 Caption="Game Type" OnCreateComponent=GameTypeCombo.InternalOnCreateComponent IniOption="@INTERNAL" Hint="Choose the gametype to query" WinTop=0.050160 WinLeft=0.638878 WinWidth=0.358680 WinHeight=0.035000 RenderWeight=1.000000 bTabStop=True TabOrder=0 OnPreDraw=ComboOnPreDraw OnLoadINI=InternalOnLoadINI End Object co_GameType=GameTypeCombo Begin Object Class=GUIHeader Name=ServerBrowserHeader bUseTextHeight=True Caption="Server Browser" End Object t_Header=ServerBrowserHeader Begin Object Class=KFBrowser_Footer Name=FooterPanel WinTop=0.917943 TabOrder=4 OnPreDraw=FooterPanel.InternalOnPreDraw Justification=TXTA_Center End Object t_Footer=FooterPanel Begin Object Class=BackgroundImage Name=PageBackground Image=Texture'KillingFloor2HUD.menu.menuBackground' ImageStyle=ISTY_Justified ImageAlign=IMGA_Center RenderWeight=0.010000 End Object i_Background=PageBackground PanelClass(0)="KFGUI.KFMOTD" PanelClass(1)="GUI2K4.UT2k4Browser_ServerListPageFavorites" PanelClass(2)="KFGUI.KFServerListPageFriends" PanelClass(3)="GUI2K4.UT2K4Browser_ServerListPageLAN" PanelClass(4)="KFGUI.KFServerListPageInternet" PanelClass(5)="none" PanelCaption(0)="News" PanelCaption(1)="Favorites" PanelCaption(2)="Friends" PanelCaption(3)="LAN" PanelCaption(4)="Internet Games" PanelHint(0)="The latest on KF" PanelHint(1)="View Killing Floor servers your Steam Friends are currently playing on" PanelHint(2)="View Killing Floor servers currently added to your Favorites" PanelHint(3)="View all Killing Floor servers currently running on your LAN" PanelHint(4)="Choose from hundreds of Killing Floor servers around the world" OnOpen=BrowserOpened bRenderWorld=True BackgroundColor=(R=0,B=0,G=0,A=255) }