diff --git a/sources/GUI/NiceLobbyChat.uc b/sources/GUI/NiceLobbyChat.uc new file mode 100644 index 0000000..1819aec --- /dev/null +++ b/sources/GUI/NiceLobbyChat.uc @@ -0,0 +1,21 @@ +class NiceLobbyChat extends KFLobbyChat; + +function InitComponent(GUIController MyController, GUIComponent MyOwner) +{ + Super(PopupPageBase).InitComponent( MyController, MyOwner ); + + TextColor[0] = class'SayMessagePlus'.default.RedTeamColor; + TextColor[1] = class'SayMessagePlus'.default.BlueTeamColor; + TextColor[2] = class'SayMessagePlus'.default.DrawColor; + + eb_Send.MyEditBox.OnKeyEvent = InternalOnKeyEvent; + lb_Chat.MyScrollText.bNeverFocus=true; +} + +function bool NotifyLevelChange() // Don't keep this one around... +{ + bPersistent = false; + return true; +} + +defaultproperties{} \ No newline at end of file diff --git a/sources/GUI/NiceLobbyMenu.uc b/sources/GUI/NiceLobbyMenu.uc index 30fce98..fd2fd75 100644 --- a/sources/GUI/NiceLobbyMenu.uc +++ b/sources/GUI/NiceLobbyMenu.uc @@ -1,12 +1,868 @@ -class NiceLobbyMenu extends ScrnLobbyMenu; +// base class, not vanilla +class NiceLobbyMenu extends UT2k4MainPage; + + +// some constants +const MaxPlayersOnList=18; + +// RIGHT part lables +var private string str_Beginner, str_Normal, str_Hard, str_Sui, str_HOE; +var private string str_CurrentMap, str_Difficulty, str_ServerName; +var private string SelectPerkInformationString, PerksDisabledString; +// LEFT part labels +var private string str_LvlAbbr; +var private string WaitingForServerStatus, WaitingForOtherPlayers, AutoCommence; + +// player name-perk-ready boxes +struct FPlayerBoxEntry +{ + var moCheckBox ReadyBox; + var KFPlayerReadyBar PlayerBox; + var GUIImage PlayerPerk; + var GUILabel PlayerVetLabel; + var bool bIsEmpty; +}; +var array PlayerBoxes; + +var bool bShowProfilePage; + +// swapped class +var automated KFLobbyChat t_ChatBox; + +// diffculty / map name label +var automated AltSectionBackground GameInfoBG; +var automated GUILabel CurrentMapLabel; +var automated GUILabel DifficultyLabel; +var automated GUILabel ServerNameLabel; + +// circle and current wave label +var automated GUIImage WaveBG; +var automated GUILabel WaveLabel; + +var automated GUILabel label_TimeOutCounter; +var automated GUILabel PerkClickLabel; + +var bool bAllowClose; + +// Perks / Profile +var() string sChar, sCharD; +var() xUtil.PlayerRecord PlayerRec; + +var automated GUISectionBackground i_BGPerk; + +var automated GUISectionBackground i_BGPerkEffects; +var automated GUIScrollTextBox lb_PerkEffects; + +var automated GUIImage i_Portrait; +var automated GUISectionBackground PlayerPortraitBG; + +var float IconBorder; // Percent of Height to leave blank inside Icon Background +var float ItemBorder; // Percent of Height to leave blank inside Item Background +var float ItemSpacing; // Number of Pixels between Items +var float ProgressBarHeight; // Percent of Height to make Progress Bar's Height +var float TextTopOffset; // Percent of Height to off Progress String from top of Progress Bar(typically negative) +var float IconToInfoSpacing; // Percent of Width to offset Info from right side of Icon + +//var bool bAdminUse; // If you're not an admin, gtfo! + +var int ActivateTimeoutTime; // When was the lobby timeout turned on? +var bool bTimeoutTimeLogged; // Was it already logged once? +var bool bTimedOut; // Have we timed out out successfully? + +var bool bShouldUpdateVeterancy; +var class CurrentVeterancy; +var int CurrentVeterancyLevel; + + +function InitComponent(GUIController MyC, GUIComponent MyO) +{ + super(UT2k4MainPage).InitComponent(MyC, MyO); + + i_Portrait.WinTop = PlayerPortraitBG.ActualTop() + 30; + i_Portrait.WinHeight = PlayerPortraitBG.ActualHeight() - 36; + + t_ChatBox.FocusInstead = PerkClickLabel; +} + + +// Called when the Menu Owner is opened +event Opened(GUIComponent Sender) +{ + bShouldUpdateVeterancy = true; + + // disable some shit for story mode + if (PlayerOwner().GameReplicationInfo.IsA('KF_StoryGRI')) + { + // disable background + WaveBG.Image = none; + WaveBG.DisableMe(); + // disable waves text + WaveLabel.Caption = ""; + WaveLabel.Hide(); + } + + SetTimer(1, true); +} + + +// if we don't reset persistence, playerboxes will continue to pile +function bool NotifyLevelChange() +{ + bPersistent = false; + bAllowClose = true; + Controller.CloseMenu(true); + + return true; +} + + +function bool InternalOnKeyEvent(out byte Key, out byte State, float delta) +{ + local int i; + local bool bVoiceChatKey; + local array BindKeyNames, LocalizedBindKeyNames; + + Controller.GetAssignedKeys("VoiceTalk", BindKeyNames, LocalizedBindKeyNames); + + for (i = 0; i < BindKeyNames.Length; i++) + { + if (Mid(GetEnum(enum'EInputKey', Key), 3) ~= BindKeyNames[i]) + { + bVoiceChatKey = true; + break; + } + } + + if (bVoiceChatKey) + { + if (state == 1 || state == 2) + { + if (PlayerOwner() != none) + { + PlayerOwner().bVoiceTalk = 1; + } + } + else + { + if (PlayerOwner() != none) + { + PlayerOwner().bVoiceTalk = 0; + return false; + } + } + + return true; + } + + return false; +} + + +function TimedOut() +{ + bTimedOut = true; + PlayerOwner().ServerRestartPlayer(); + bAllowClose = true; +} + + +function bool InternalOnPreDraw(Canvas C) +{ + local int i, j; + local string StoryString; + local String SkillString; + local KFGameReplicationInfo KFGRI; + local PlayerController PC; + + PC = PlayerOwner(); + + if (PC == none || PC.Level == none) // Error? + return false; + + if ((PC.PlayerReplicationInfo != none && (!PC.PlayerReplicationInfo.bWaitingPlayer || PC.PlayerReplicationInfo.bOnlySpectator)) || PC.Outer.Name == 'Entry') + { + bAllowClose = true; + PC.ClientCloseMenu(true,false); + return false; + } + + t_Footer.InternalOnPreDraw(C); + KFGRI = KFGameReplicationInfo(PC.GameReplicationInfo); + + if (KFGRI != none) + { + WaveLabel.Caption = string(KFGRI.WaveNumber + 1) $ "/" $ string(KFGRI.FinalWave); + } + else + { + WaveLabel.Caption = "?/?"; + return false; + } + C.DrawColor.A = 255; + + // CHECK ME LATER + if (KFPlayerController(PC) != none && bShouldUpdateVeterancy) + { + if (KFPlayerController(PC).SelectedVeterancy == none) + { + bShowProfilePage = true; + + if (PC.SteamStatsAndAchievements == none) + { + if (PC.Level.NetMode != NM_Client) + { + PC.SteamStatsAndAchievements = PC.Spawn(PC.default.SteamStatsAndAchievementsClass, PC); + if (!PC.SteamStatsAndAchievements.Initialize(PC)) + { + Controller.OpenMenu(Controller.QuestionMenuClass); + GUIQuestionPage(Controller.TopPage()).SetupQuestion(class'KFMainMenu'.default.UnknownSteamErrorText, QBTN_Ok, QBTN_Ok); + PC.SteamStatsAndAchievements.Destroy(); + PC.SteamStatsAndAchievements = none; + } + else + { + PC.SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady; + } + } + + bShowProfilePage = false; + } + else if (!PC.SteamStatsAndAchievements.bInitialized) + { + PC.SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady; + PC.SteamStatsAndAchievements.GetStatsAndAchievements(); + bShowProfilePage = false; + } + + if (KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements) != none) + { + for (i = 0; i < class'KFGameType'.default.LoadedSkills.Length; i++) + { + if (KFSteamStatsAndAchievements(PC.SteamStatsAndAchievements).GetPerkProgress(i) < 0.0) + { + PC.SteamStatsAndAchievements.OnDataInitialized = OnSteamStatsAndAchievementsReady; + PC.SteamStatsAndAchievements.GetStatsAndAchievements(); + bShowProfilePage = false; + } + } + } + + if (bShowProfilePage) + { + OnSteamStatsAndAchievementsReady(); + } + + bShouldUpdateVeterancy = false; + } + else if (PC.SteamStatsAndAchievements != none && PC.SteamStatsAndAchievements.bInitialized) + { + KFPlayerController(PC).SendSelectedVeterancyToServer(); + bShouldUpdateVeterancy = false; + } + } + + // First fill in non-ready players. + for (i = 0; i < KFGRI.PRIArray.Length; i++) + { + if (!bValidPRI(KFGRI.PRIArray[i]) || KFGRI.PRIArray[i].bReadyToPlay) + continue; + + // start from 0 + AddPlayer(KFPlayerReplicationInfo(KFGRI.PRIArray[i]), j, C); + if (++j >= MaxPlayersOnList) + GoTo'DoneIt'; + } + + // Then comes rest. + for (i = 0; i < KFGRI.PRIArray.Length; i++) + { + if (!bValidPRI(KFGRI.PRIArray[i]) || !KFGRI.PRIArray[i].bReadyToPlay) + continue; + + if (KFGRI.PRIArray[i].bReadyToPlay) + { + if (!bTimeoutTimeLogged) + { + ActivateTimeoutTime = PC.Level.TimeSeconds; + bTimeoutTimeLogged = true; + } + } + // continue from last idx + AddPlayer(KFPlayerReplicationInfo(KFGRI.PRIArray[i]), j, C); + if (++j >= MaxPlayersOnList) + GoTo'DoneIt'; + } + + if (j < MaxPlayersOnList) + EmptyPlayers(j); + +DoneIt: + StoryString = PC.Level.Description; + + if (KFGRI.BaseDifficulty <= 1) + SkillString = str_Beginner; + else if (KFGRI.BaseDifficulty <= 2) + SkillString = str_Normal; + else if (KFGRI.BaseDifficulty <= 4) + SkillString = str_Hard; + else if (KFGRI.BaseDifficulty <= 5) + SkillString = str_Sui; + else + SkillString = str_HOE; + + CurrentMapLabel.Caption = str_CurrentMap @ PC.Level.Title; + DifficultyLabel.Caption = str_Difficulty @ SkillString; + + // UT2K4PlayerLoginMenu copy-cat + if (PC.Level.NetMode == NM_StandAlone || PC.GameReplicationInfo == None || PC.GameReplicationInfo.ServerName == "") + ServerNameLabel.Caption = str_ServerName @ "SOLO MODE ACTIVE!"; + else + ServerNameLabel.Caption = str_ServerName @ PC.GameReplicationInfo.ServerName; + + return false; +} + + +// filter none, spectators, non-KFPRI ones +final private function bool bValidPRI(PlayerReplicationInfo PRI) +{ + if (PRI == none || PRI.bOnlySpectator || KFPlayerReplicationInfo(PRI) == none) + return false; + else + return true; +} + + +final private function AddPlayer(KFPlayerReplicationInfo PRI, int Index, Canvas C) +{ + local float Top; + local Material M; + local ScrnBalance Mut; + local String PlayerName; + + if (Index >= PlayerBoxes.Length) + { + Top = Index * 0.045; + PlayerBoxes.Length = Index + 1; + // create GUIComponents and set defaults + PlayerBoxes[Index].ReadyBox = new (none) Class'moCheckBox'; + PlayerBoxes[Index].ReadyBox.bValueReadOnly = true; + PlayerBoxes[Index].ReadyBox.ComponentJustification = TXTA_Left; + PlayerBoxes[Index].ReadyBox.CaptionWidth = 0.82; + PlayerBoxes[Index].ReadyBox.LabelColor.B = 0; + PlayerBoxes[Index].ReadyBox.WinTop = 0.0475+Top; + PlayerBoxes[Index].ReadyBox.WinLeft = 0.075; + PlayerBoxes[Index].ReadyBox.WinWidth = 0.4; + PlayerBoxes[Index].ReadyBox.WinHeight = 0.045; + PlayerBoxes[Index].ReadyBox.RenderWeight = 0.55; + PlayerBoxes[Index].ReadyBox.bAcceptsInput = false; + PlayerBoxes[Index].PlayerBox = new (none) Class'KFPlayerReadyBar'; + PlayerBoxes[Index].PlayerBox.WinTop = 0.04+Top; + PlayerBoxes[Index].PlayerBox.WinLeft = 0.04; + PlayerBoxes[Index].PlayerBox.WinWidth = 0.35; + PlayerBoxes[Index].PlayerBox.WinHeight = 0.045; + PlayerBoxes[Index].PlayerBox.RenderWeight = 0.35; + PlayerBoxes[Index].PlayerPerk = new (none) Class'GUIImage'; + PlayerBoxes[Index].PlayerPerk.ImageStyle = ISTY_Justified; + PlayerBoxes[Index].PlayerPerk.WinTop = 0.043+Top; + PlayerBoxes[Index].PlayerPerk.WinLeft = 0.0418; + PlayerBoxes[Index].PlayerPerk.WinWidth = 0.039; + PlayerBoxes[Index].PlayerPerk.WinHeight = 0.039; + PlayerBoxes[Index].PlayerPerk.RenderWeight = 0.56; + PlayerBoxes[Index].PlayerVetLabel = new (none) Class'GUILabel'; + PlayerBoxes[Index].PlayerVetLabel.TextAlign = TXTA_Right; + PlayerBoxes[Index].PlayerVetLabel.TextColor = Class'Canvas'.Static.MakeColor(19,19,19); + PlayerBoxes[Index].PlayerVetLabel.TextFont = "UT2SmallFont"; + PlayerBoxes[Index].PlayerVetLabel.WinTop = 0.04+Top; + PlayerBoxes[Index].PlayerVetLabel.WinLeft = 0.22907; + PlayerBoxes[Index].PlayerVetLabel.WinWidth = 0.151172; + PlayerBoxes[Index].PlayerVetLabel.WinHeight = 0.045; + PlayerBoxes[Index].PlayerVetLabel.RenderWeight = 0.5; + + // finally add the GUIComponents + AppendComponent(PlayerBoxes[Index].ReadyBox, true); + AppendComponent(PlayerBoxes[Index].PlayerBox, true); + AppendComponent(PlayerBoxes[Index].PlayerPerk, true); + AppendComponent(PlayerBoxes[Index].PlayerVetLabel, true); + + Top = (PlayerBoxes[Index].PlayerBox.WinTop + PlayerBoxes[Index].PlayerBox.WinHeight); + } + PlayerBoxes[Index].ReadyBox.Checked(PRI.bReadyToPlay); + Mut = class'ScrnBalance'.default.Mut; + if ( Mut != none ) + PlayerName = Mut.LeftCol(Mut.ColoredPlayerName(PRI), 20); + else + PlayerName = Left(PRI.PlayerName, 20); + + PlayerBoxes[Index].ReadyBox.SetCaption(" "$PlayerName); + + if (PRI.ClientVeteranSkill != none) + { + PlayerBoxes[Index].PlayerVetLabel.Caption = str_LvlAbbr @ PRI.ClientVeteranSkillLevel @ PRI.ClientVeteranSkill.default.VeterancyName; + if (Class(PRI.ClientVeteranSkill) != None) + { + Class(PRI.ClientVeteranSkill).Static.PreDrawPerk(C,PRI.ClientVeteranSkillLevel,PlayerBoxes[Index].PlayerPerk.Image,M); + PlayerBoxes[Index].PlayerPerk.ImageColor = C.DrawColor; + } + else + { + PlayerBoxes[Index].PlayerPerk.Image = PRI.ClientVeteranSkill.default.OnHUDIcon; + PlayerBoxes[Index].PlayerPerk.ImageColor = Class'Canvas'.Static.MakeColor(255,255,255); + } + } + else + { + PlayerBoxes[Index].PlayerPerk.Image = None; + PlayerBoxes[Index].PlayerVetLabel.Caption = ""; + } + PlayerBoxes[Index].bIsEmpty = false; +} + + +final private function EmptyPlayers(int Index) +{ + local int i; + + while (Index < PlayerBoxes.Length && !PlayerBoxes[Index].bIsEmpty) + { + PlayerBoxes[Index].ReadyBox.Checked(false); + PlayerBoxes[Index].PlayerPerk.Image = none; + PlayerBoxes[Index].PlayerVetLabel.Caption = ""; + PlayerBoxes[Index].ReadyBox.SetCaption(""); + PlayerBoxes[Index].bIsEmpty = true; + ++Index; + } + + for (i = 0; i < PlayerBoxes.Length; i++) + { + if (PlayerBoxes[i].bIsEmpty) + { + // remove GUIComponents + RemoveComponent(PlayerBoxes[i].ReadyBox, false); + RemoveComponent(PlayerBoxes[i].PlayerBox, false); + RemoveComponent(PlayerBoxes[i].PlayerPerk, false); + RemoveComponent(PlayerBoxes[i].PlayerVetLabel, false); + // remove refs + PlayerBoxes[i].ReadyBox = none; + PlayerBoxes[i].PlayerBox = none; + PlayerBoxes[i].PlayerPerk = none; + PlayerBoxes[i].PlayerVetLabel = none; + // remove from array + PlayerBoxes.remove(i, 1); + // everything works fine this way, do not log + // log(">>> NiceLobbyMenu: EmptyPlayers executed."); + } + } +} + + +function bool StopClose(optional bool bCancelled) +{ + // clean chat box + t_ChatBox.lb_Chat.SetContent(""); + + // this is for the OnCanClose delegate + // can't close now unless done by call to CloseAll, + // or the bool has been set to true by LobbyFooter + return false; +} + + +function InternalOnClosed(bool bCancelled) +{ + if (PlayerOwner() != none) + { + PlayerOwner().Advertising_ExitZone(); + } +} + + +event Timer() +{ + local KFGameReplicationInfo KF; + + if (PlayerOwner().PlayerReplicationInfo == none) + return; + + if (PlayerOwner().PlayerReplicationInfo.bOnlySpectator) + { + label_TimeOutCounter.caption = "You are a spectator."; + return; + } + + KF = KFGameReplicationInfo(PlayerOwner().GameReplicationInfo); + + if (KF == none) + { + label_TimeOutCounter.caption = WaitingForServerStatus; + } + else if (KF.LobbyTimeout <= 0) + { + label_TimeOutCounter.caption = WaitingForOtherPlayers; + } + else + { + label_TimeOutCounter.caption = AutoCommence $ KF.LobbyTimeout; + } +} + + +final private function DrawPerk(Canvas Canvas) +{ + local float X, Y, Width, Height; + local int LevelIndex; + local float TempX, TempY; + local float TempWidth, TempHeight; + local float IconSize, ProgressBarWidth; + local string PerkName, PerkLevelString; + local KFPlayerReplicationInfo KFPRI; + local Material M, SM; + + DrawPortrait(); + + KFPRI = KFPlayerReplicationInfo(PlayerOwner().PlayerReplicationInfo); + + if (KFPRI == none || KFPRI.ClientVeteranSkill == None) + { + if (CurrentVeterancyLevel != 255) + { + CurrentVeterancyLevel = 255; + lb_PerkEffects.SetContent("None perk active"); + } + return; + } + + LevelIndex = KFPRI.ClientVeteranSkillLevel; + PerkName = KFPRI.ClientVeteranSkill.default.VeterancyName; + PerkLevelString = str_LvlAbbr @ LevelIndex; + + //Get the position size etc in pixels + X = (i_BGPerk.WinLeft + 0.003) * Canvas.ClipX; + Y = (i_BGPerk.WinTop + 0.040) * Canvas.ClipY; + + Width = (i_BGPerk.WinWidth - 0.006) * Canvas.ClipX; + Height = (i_BGPerk.WinHeight - 0.043) * Canvas.ClipY; + + // Offset for the Background + TempX = X; + TempY = Y; + + // Initialize the Canvas + Canvas.Style = 1; + Canvas.Font = class'ROHUD'.Static.GetSmallMenuFont(Canvas); + Canvas.SetDrawColor(255, 255, 255, 255); + + // Draw Item Background + Canvas.SetPos(TempX, TempY); + + // Offset and Calculate Icon's Size + TempX += ItemBorder * Height; + TempY += ItemBorder * Height; + IconSize = Height - (ItemBorder * 2.0 * Height); + + // Draw Icon + Canvas.SetPos(TempX, TempY); + if( Class(KFPRI.ClientVeteranSkill)!=None ) + Class(KFPRI.ClientVeteranSkill).Static.PreDrawPerk(Canvas,KFPRI.ClientVeteranSkillLevel,M,SM); + else M = KFPRI.ClientVeteranSkill.default.OnHUDIcon; + Canvas.DrawTile(M, IconSize, IconSize, 0, 0, M.MaterialUSize(), M.MaterialVSize()); + + TempX += IconSize + (IconToInfoSpacing * Width); + TempY += TextTopOffset * Height; + + ProgressBarWidth = Width - (TempX - X) - (IconToInfoSpacing * Width); + + // Select Text Color + Canvas.SetDrawColor(255, 255, 255, 255); + + // Draw the Perk's Level name + Canvas.StrLen(PerkName, TempWidth, TempHeight); + Canvas.SetPos(TempX, TempY); + Canvas.DrawText(PerkName); + + // Draw the Perk's Level + if (PerkLevelString != "") + { + Canvas.StrLen(PerkLevelString, TempWidth, TempHeight); + Canvas.SetPos(TempX + ProgressBarWidth - TempWidth, TempY); + Canvas.DrawText(PerkLevelString); + } + + TempY += TempHeight + (0.01 * Height); + + if (CurrentVeterancy != KFPRI.ClientVeteranSkill || CurrentVeterancyLevel != LevelIndex) + { + CurrentVeterancy = KFPRI.ClientVeteranSkill; + CurrentVeterancyLevel = LevelIndex; + lb_PerkEffects.SetContent(Class(KFPRI.ClientVeteranSkill).Static.GetVetInfoText(LevelIndex,1)); + } +} + + +final private function DrawPortrait() +{ + if (PlayerOwner().PlayerReplicationInfo != none) + sChar = PlayerOwner().PlayerReplicationInfo.CharacterName; + else + sChar = PlayerOwner().GetUrlOption("Character"); + + if (sCharD != sChar) + { + sCharD = sChar; + SetPlayerRec(); + } +} + + +final private function SetPlayerRec() +{ + PlayerRec = Class'xUtil'.Static.FindPlayerRecord(sChar); + i_Portrait.Image = PlayerRec.Portrait; +} + + +final private function bool ShowPerkMenu(GUIComponent Sender) +{ + if (PlayerOwner() != none) + { + if (ScrnPlayerController(PlayerOwner()) != none ) + PlayerOwner().ClientOpenMenu(ScrnPlayerController(PlayerOwner()).ProfilePageClassString, false); + else + PlayerOwner().ClientOpenMenu(string(class'ScrnProfilePage'), false); + } + + return true; +} + + +final private function OnSteamStatsAndAchievementsReady() +{ + Controller.OpenMenu("KFGUI.KFProfilePage"); + + Controller.OpenMenu(Controller.QuestionMenuClass); + GUIQuestionPage(Controller.TopPage()).SetupQuestion(SelectPerkInformationString, QBTN_Ok, QBTN_Ok); +} + + +//============================================================================= +// DEFAULTPROPERTIES +//============================================================================= defaultproperties { - Begin Object Class=NiceLobbyFooter Name=BuyFooter - RenderWeight=0.300000 - TabOrder=8 - bBoundToParent=False - bScaleToParent=False - OnPreDraw=BuyFooter.InternalOnPreDraw - End Object - t_Footer=BuyFooter -} + str_Beginner="Beginner" + str_Normal="Normal" + str_Hard="Hard" + str_Sui="Suicidal" + str_HOE="Hell on Earth" + + str_LvlAbbr="Lv" + str_CurrentMap="Current Map:" + str_Difficulty="Difficulty:" + str_ServerName="Server Name:" + + SelectPerkInformationString="Perks enhance certain abilities of your character.|There are 6 Perks to choose from in the center of the screen.|Each has different Effects shown in the upper right.|Perks improve as you complete the Level Requirements shown on the right." + PerksDisabledString="Perk Progress has been disabled because the Game Length is set to Custom, Sandbox Mode is on, or you have previously used Cheats." + + WaitingForServerStatus="Awaiting server status..." + WaitingForOtherPlayers="Waiting for players to be ready..." + AutoCommence="Game will auto-commence in: " + + // replace LobbyChat + Begin Object Class=NiceLobbyChat Name=ChatBox + OnCreateComponent=ChatBox.InternalOnCreateComponent + TabOrder=1 + RenderWeight=0.01 + OnHover=ChatBox.FloatingHover + WinTop=0.80760 + WinLeft=0.016090 + WinWidth=0.971410 + WinHeight=0.100000 + ToolTip=none + End Object + t_ChatBox=ChatBox + + // replace LobbyFooter + Begin Object Class=NiceLobbyFooter Name=BuyFooter + RenderWeight=0.300000 + TabOrder=8 + bBoundToParent=false + bScaleToParent=false + OnPreDraw=BuyFooter.InternalOnPreDraw + End Object + t_Footer=BuyFooter + + // RIGHT part, server name - map name - difficulty - waves + Begin Object Class=AltSectionBackground Name=GameInfoB + WinTop=0.037851 + WinLeft=0.489062 + WinWidth=0.487374 + WinHeight=0.100000 + OnPreDraw=GameInfoB.InternalPreDraw + End Object + GameInfoBG=GameInfoB + + Begin Object Class=GUILabel Name=ServerNameL + Caption="tmp name" + TextColor=(B=158,G=176,R=175) + WinTop=0.042179 + WinLeft=0.496524 + WinWidth=0.360000 + WinHeight=0.035714 + RenderWeight=0.900000 + End Object + ServerNameLabel=ServerNameL + + Begin Object Class=GUILabel Name=CurrentMapL + Caption="tmp Map" + TextColor=(B=158,G=176,R=175) + WinTop=0.072381 + WinLeft=0.496524 + WinWidth=0.360000 + WinHeight=0.035714 + RenderWeight=0.900000 + End Object + CurrentMapLabel=CurrentMapL + + Begin Object Class=GUILabel Name=DifficultyL + Caption="tmp diff" + TextColor=(B=158,G=176,R=175) + WinTop=0.102583 + WinLeft=0.496524 + WinWidth=0.360000 + WinHeight=0.035714 + RenderWeight=0.900000 + End Object + DifficultyLabel=DifficultyL + + Begin Object Class=GUIImage Name=WaveB + Image=Texture'KillingFloorHUD.HUD.Hud_Bio_Circle' + ImageStyle=ISTY_Justified + ImageRenderStyle=MSTY_Normal + WinTop=0.043810 + WinLeft=0.923238 + WinWidth=0.051642 + WinHeight=0.061783 + RenderWeight=0.800000 + End Object + WaveBG=WaveB + + Begin Object Class=GUILabel Name=WaveL + Caption="1/4" + TextAlign=TXTA_Center + TextColor=(B=158,G=176,R=175) + VertAlign=TXTA_Center + FontScale=FNS_Small + WinTop=0.043810 + WinLeft=0.923238 + WinWidth=0.051642 + WinHeight=0.061783 + RenderWeight=0.900000 + End Object + WaveLabel=WaveL + + // LEFT part + Begin Object Class=GUILabel Name=TimeOutCounter + Caption="Game will auto-commence in: " + TextAlign=TXTA_Center + TextColor=(B=158,G=176,R=175) + WinTop=0.000010 + WinLeft=0.059552 + WinWidth=0.346719 + WinHeight=0.045704 + TabOrder=6 + End Object + label_TimeOutCounter=TimeOutCounter + + Begin Object Class=GUILabel Name=PerkClickArea + WinTop=0.432395 + WinLeft=0.488851 + WinWidth=0.444405 + WinHeight=0.437312 + bAcceptsInput=true + OnClickSound=CS_Click + OnClick=NiceLobbyMenu.ShowPerkMenu + End Object + PerkClickLabel=PerkClickArea + + Begin Object Class=GUISectionBackground Name=BGPerk + bFillClient=true + Caption="Current Perk" + WinTop=0.432291 + WinLeft=0.650976 + WinWidth=0.325157 + WinHeight=0.138086 + OnPreDraw=BGPerk.InternalPreDraw + End Object + i_BGPerk=BGPerk + + Begin Object Class=GUISectionBackground Name=BGPerkEffects + bFillClient=true + Caption="Perk Effects" + WinTop=0.568448 + WinLeft=0.650976 + WinWidth=0.325157 + WinHeight=0.307442 + OnPreDraw=BGPerkEffects.InternalPreDraw + End Object + i_BGPerkEffects=BGPerkEffects + + Begin Object Class=GUIScrollTextBox Name=PerkEffectsScroll + CharDelay=0.002500 + EOLDelay=0.100000 + OnCreateComponent=PerkEffectsScroll.InternalOnCreateComponent + WinTop=0.626094 + WinLeft=0.659687 + WinWidth=0.309454 + WinHeight=0.244961 + TabOrder=9 + ToolTip=none + End Object + lb_PerkEffects=PerkEffectsScroll + + Begin Object Class=GUIImage Name=PlayerPortrait + Image=Texture'InterfaceArt_tex.Menu.changeme_texture' + ImageStyle=ISTY_Scaled + ImageRenderStyle=MSTY_Normal + IniOption="@Internal" + WinTop=0.472396 + WinLeft=0.492522 + WinWidth=0.156368 + WinHeight=0.397022 + RenderWeight=0.300000 + End Object + i_Portrait=PlayerPortrait + + Begin Object Class=GUISectionBackground Name=PlayerPortraitB + WinTop=0.432291 + WinLeft=0.489062 + WinWidth=0.163305 + WinHeight=0.443451 + OnPreDraw=PlayerPortraitB.InternalPreDraw + End Object + PlayerPortraitBG=PlayerPortraitB + + IconBorder=0.050000 + ItemBorder=0.110000 + ProgressBarHeight=0.300000 + TextTopOffset=0.050000 + IconToInfoSpacing=0.050000 + + c_Tabs=GUITabControl'KFGui.GUILibraryMenu.PageTabs' + + Begin Object Class=GUIHeader Name=ServerBrowserHeader + bVisible=false + End Object + t_Header=ServerBrowserHeader + + i_Background=none + i_bkChar=none + + bRenderWorld=true + bAllowedAsLast=true + OnClose=NiceLobbyMenu.InternalOnClosed + OnCanClose=NiceLobbyMenu.StopClose + WinHeight=0.500000 + OnPreDraw=NiceLobbyMenu.InternalOnPreDraw + OnRendered=NiceLobbyMenu.DrawPerk + OnKeyEvent=NiceLobbyMenu.InternalOnKeyEvent +} \ No newline at end of file