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

1410 lines
38 KiB
Ucode

//-----------------------------------------------------------
//
//-----------------------------------------------------------
class LobbyMenu extends UT2k4MainPage;
var automated moCheckBox ReadyBox[6];
var automated KFPlayerReadyBar PlayerBox[6];
var automated GUIImage PlayerPerk[6];
var automated GUILabel PlayerVetLabel[6];
var automated KFLobbyChat t_ChatBox;
//var automated KFLobbyTitleLabel l_TitleBar;
var automated KFMapStoryLabel l_StoryBox;
var automated AltSectionBackground StoryBoxBG;
var automated KFBotComboBox BotSlot1;
var automated KFAddBotButton AddBotButton;
var automated KFRemoveBotButton RemoveBotButton;
var automated KFRemoveAllBotButton TotallyRemoveBotsButton;
var automated GUISectionBackground BotsBG;
var automated AltSectionBackground GameInfoBG;
var automated GUILabel CurrentMapLabel;
var automated GUILabel DifficultyLabel;
var automated GUIImage WaveBG;
var automated GUILabel WaveLabel;
// Localized Strings
var localized string CurrentMapString;
var localized string DifficultyString;
var localized string LvAbbrString;
var automated GUILabel label_TimeOutCounter;
var automated GUILabel PerkClickLabel;
var bool bStoryBoxFilled;
var bool bAllowClose;
//Perks/Profile
var() string sChar, sCharD;
var() int nFOV;
var() xUtil.PlayerRecord PlayerRec;
var automated GUISectionBackground i_BGPerks;
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 texture ItemBackground;
var texture ProgressBarBackground;
var texture ProgressBarForeground;
var texture PerkBackground;
var texture InfoBackground;
//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 localized string WaitingForServerStatus;
var localized string WaitingForOtherPlayers;
var localized string AutoCommence;
var localized string BeginnerString;
var localized string NormalString;
var localized string HardString;
var localized string SuicidalString;
var localized string HellOnEarthString;
var bool bShouldUpdateVeterancy;
var() localized string SelectPerkInformationString;
var() localized string PerksDisabledString;
var class<KFVeterancyTypes> CurrentVeterancy;
var int CurrentVeterancyLevel;
var float VideoTimer;
var bool VideoOpened;
var bool VideoPlayed;
var automated GUISectionBackground ADBackground;
var LobbyMenuAd LobbyMenuAd;
const MAX_MOVIES = 6;
function InitComponent(GUIController MyC, GUIComponent MyO)
{
local int i;
Super.InitComponent(MyC, MyO);
LobbyMenuAd = new class'LobbyMenuAd';
LobbyMenuAd.MenuMovie = new class'Movie';
LobbyMenuAd.MenuMovie.Callbacks = LobbyMenuAd;
for ( i = 0; i < 6; i++ )
{
PlayerPerk[i].WinWidth = PlayerPerk[i].ActualHeight();
PlayerPerk[i].WinLeft += ((PlayerBox[i].ActualHeight() - PlayerPerk[i].ActualHeight()) / 2) / MyC.ResX;
}
i_Portrait.WinTop = PlayerPortraitBG.ActualTop() + 30;
i_Portrait.WinHeight = PlayerPortraitBG.ActualHeight() - 36;
t_ChatBox.FocusInstead = PerkClickLabel;
}
function CheckBotButtonAccess()
{
if ( KFGameReplicationInfo(PlayerOwner().GameReplicationInfo) == none )
{
return;
}
// log(PlayerOwner().GameReplicationInfo.GameClass);
// Dont show Invasion bots, on Story mode.
// Check the GRI, on dedicated servers
// Level.Game seems to work on listens.
if ( true || PlayerOwner().GameReplicationInfo.GameClass == "KFMod.KFSPGameType" ||
PlayerOwner().Level.NetMode == NM_ListenServer && KFSPGameType(PlayerOwner().Level.Game) != none )
{
BotSlot1.Hide();
AddBotButton.Hide();
RemoveBotButton.Hide();
TotallyRemoveBotsButton.Hide();
BotsBG.Hide();
}
/*
else
{
BotSlot1.Show();
AddBotButton.Show();
RemoveBotButton.Show();
TotallyRemoveBotsButton.Show();
BotsBG.Show();
}
if ( !PlayerOwner().PlayerReplicationInfo.bAdmin && PlayerOwner().Level.NetMode != NM_StandAlone )
{
BotSlot1.DisableMe();
AddBotButton.DisableMe();
RemoveBotButton.DisableMe();
TotallyRemoveBotsButton.DisableMe();
BotsBG.DisableMe();
}
if ( PlayerOwner().PlayerReplicationInfo.bAdmin || PlayerOwner().Level.NetMode == NM_ListenServer )
{
if ( KFGameReplicationInfo(PlayerOwner().GameReplicationInfo).bNoBots )
{
BotSlot1.DisableMe();
AddBotButton.DisableMe();
RemoveBotButton.DisableMe();
TotallyRemoveBotsButton.DisableMe();
BotsBG.DisableMe();
}
else
{
BotSlot1.EnableMe();
AddBotButton.EnableMe();
RemoveBotButton.EnableMe();
BotsBG.EnableMe();
TotallyRemoveBotsButton.EnableMe();
}
if ( PlayerOwner().GameReplicationInfo.PRIArray.length + KFGameReplicationInfo(PlayerOwner().GameReplicationInfo).PendingBots < 6 )
{
AddBotButton.EnableMe();
}
else
{
AddBotButton.DisableMe();
}
if ( KFGameReplicationInfo(PlayerOwner().GameReplicationInfo).PendingBots > 0 )
{
RemoveBotButton.EnableMe();
TotallyRemoveBotsButton.EnableMe();
}
else
{
RemoveBotButton.DisableMe();
TotallyRemoveBotsButton.DisableMe();
}
}*/
}
function bool InternalOnKeyEvent(out byte Key, out byte State, float delta)
{
local int i;
local bool bVoiceChatKey;
local array<string> 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 UpdateBotSlots();
function ClearChatBox()
{
t_ChatBox.lb_Chat.SetContent("");
}
function TimedOut()
{
bTimedOut = true;
PlayerOwner().ServerRestartPlayer();
bAllowClose = true;
}
function bool InternalOnPreDraw(Canvas C)
{
local int i, j, z;
local string StoryString;
local String SkillString;
local KFGameReplicationInfo KFGRI;
local PlayerController PC;
local PlayerReplicationInfo InList[6];
local bool bWasThere, bShowProfilePage;
PC = PlayerOwner();
if ( PC == none || PC.Level == none ) // Error?
{
return false;
}
i_Portrait.WinTop = PlayerPortraitBG.ActualTop() + 30;
i_Portrait.WinHeight = PlayerPortraitBG.ActualHeight() - 36;
if ( PC.PlayerReplicationInfo != none && (!PC.PlayerReplicationInfo.bWaitingPlayer || PC.PlayerReplicationInfo.bOnlySpectator) )
{
PC.ClientCloseMenu(True,False);
return false;
}
t_Footer.InternalOnPreDraw(C);
WaveLabel.WinWidth = WaveLabel.ActualHeight();
KFGRI = KFGameReplicationInfo(PC.GameReplicationInfo);
if ( KFGRI != none )
{
WaveLabel.Caption = string(KFGRI.WaveNumber + 1) $ "/" $ string(KFGRI.FinalWave);
}
else
{
WaveLabel.Caption = "?/?";
}
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;
}
}
/* if ( KFGRI == none ) // May not have been received yet on client.
{
l_TitleBar.Caption = WaitingForServerStatus;
Return False;
}
*/
// First fill in non-ready players.
if ( KFGRI != none )
{
for ( i = 0; i < KFGRI.PRIArray.Length; i++ )
{
if ( KFGRI.PRIArray[i] == none || KFGRI.PRIArray[i].bOnlySpectator || KFGRI.PRIArray[i].bReadyToPlay )
{
continue;
}
PlayerPerk[j].Image = none;
ReadyBox[j].Checked(False);
ReadyBox[j].SetCaption(Left(KFGRI.PRIArray[i].PlayerName, 20));
if ( KFPlayerReplicationInfo(KFGRI.PRIArray[i]).ClientVeteranSkill != none )
{
PlayerVetLabel[j].Caption = LvAbbrString @ KFPlayerReplicationInfo(KFGRI.PRIArray[i]).ClientVeteranSkillLevel @ KFPlayerReplicationInfo(KFGRI.PRIArray[i]).ClientVeteranSkill.default.VeterancyName;
PlayerPerk[j].Image = KFPlayerReplicationInfo(KFGRI.PRIArray[i]).ClientVeteranSkill.default.OnHUDIcon;
}
//PlayerBox[j].ImageColor = PlayerBox[j].Default.ImageColor;
InList[j] = KFGRI.PRIArray[i];
j++;
if( j >= 6 )
{
GoTo'DoneIt';
}
}
// Then comes rest.
for ( i = 0; i < KFGRI.PRIArray.Length; i++ )
{
if ( KFGRI.PRIArray[i] == none || KFGRI.PRIArray[i].bOnlySpectator )
{
Continue;
}
bWasThere = False;
for ( z = 0; z < j; z++ )
{
if ( InList[z] == KFGRI.PRIArray[i] )
{
bWasThere = True;
Break;
}
}
if ( bWasThere )
{
Continue;
}
PlayerPerk[j].Image = none;
ReadyBox[j].Checked(KFGRI.PRIArray[i].bReadyToPlay);
ReadyBox[j].SetCaption(Left(KFGRI.PRIArray[i].PlayerName, 20));
if ( KFPlayerReplicationInfo(KFGRI.PRIArray[i]).ClientVeteranSkill != none )
{
PlayerVetLabel[j].Caption = LvAbbrString @ KFPlayerReplicationInfo(KFGRI.PRIArray[i]).ClientVeteranSkillLevel @ KFPlayerReplicationInfo(KFGRI.PRIArray[i]).ClientVeteranSkill.default.VeterancyName;
PlayerPerk[j].Image = KFPlayerReplicationInfo(KFGRI.PRIArray[i]).ClientVeteranSkill.default.OnHUDIcon;
}
if ( KFGRI.PRIArray[i].bReadyToPlay )
{
//PlayerBox[j].ImageColor.R = 200;
//PlayerBox[j].ImageColor.G = 75;
//PlayerBox[j].ImageColor.B = 75;
//PlayerBox[j].ImageColor.A = 200;
if ( !bTimeoutTimeLogged )
{
ActivateTimeoutTime = PC.Level.TimeSeconds;
bTimeoutTimeLogged = true;
}
}
else
{
//PlayerBox[j].ImageColor = PlayerBox[j].Default.ImageColor;
}
j++;
if ( j >= 6 )
{
Break;
}
}
}
while( j < 6 )
{
PlayerPerk[j].Image = none;
ReadyBox[j].Checked(False);
ReadyBox[j].SetCaption("");
PlayerVetLabel[j].Caption = "";
//PlayerBox[j].ImageColor = PlayerBox[j].Default.ImageColor;
j++;
}
DoneIt:
StoryString = PC.Level.Description;
if ( !bStoryBoxFilled )
{
l_StoryBox.LoadStoryText();
bStoryBoxFilled = true;
}
CheckBotButtonAccess();
// Hate to do it like this, but there's no real easy way to get the SkillLevel strings from the Scoreboard, since it's only ever
// called as a class. Spawning a fresh one /w DynamicLoadObject doesn't work too great (online).
if ( KFGRI != none )
{
if ( KFGRI.BaseDifficulty == 1 )
{
SkillString = BeginnerString;
}
else if ( KFGRI.BaseDifficulty == 2 )
{
SkillString = NormalString;
}
else if ( KFGRI.BaseDifficulty == 4 )
{
SkillString = HardString;
}
else if ( KFGRI.BaseDifficulty == 5 )
{
SkillString = SuicidalString;
}
else if ( KFGRI.BaseDifficulty == 7 )
{
SkillString = HellOnEarthString;
}
}
// l_TitleBar.Caption = (SkillString@KFGRI.GameName$" on "$PC.Level.Title);
CurrentMapLabel.Caption = CurrentMapString @ PC.Level.Title;
DifficultyLabel.Caption = DifficultyString @ SkillString;
return false;
}
function bool StopClose(optional bool bCancelled)
{
bStoryBoxFilled = false;
CheckBotButtonAccess();
UpdateBotSlots();
ClearChatBox();
// 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;
}
event Opened(GUIComponent Sender) // Called when the Menu Owner is opened
{
if ( LobbyMenuAd == none)
{
LobbyMenuAd = new class'LobbyMenuAd';
if (LobbyMenuAd.MenuMovie == None)
{
LobbyMenuAd.MenuMovie = new class'Movie';
LobbyMenuAd.MenuMovie.Callbacks = LobbyMenuAd;
}
}
bShouldUpdateVeterancy = true;
SetTimer(1,true);
VideoTimer = 0.0;
VideoPlayed = false;
VideoOpened = false;
}
/*
functon InternalReOpen()
{
VideoTimer = 0.0;
VideoPlayed = false;
}
*/
function InternalOnClosed(bool bCancelled)
{
if ( PlayerOwner() != none)
{
PlayerOwner().Advertising_ExitZone();
}
if (LobbyMenuAd != None)
{
LobbyMenuAd.DestroyMovie();
LobbyMenuAd = none;
}
}
event Timer()
{
local KFGameReplicationInfo KF;
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;
}
}
function DrawPerk(Canvas Canvas)
{
local float X, Y, Width, Height;
local int CurIndex, LevelIndex;
local float TempX, TempY;
local float TempWidth, TempHeight;
local float IconSize, ProgressBarWidth, PerkProgress;
local string PerkName, PerkLevelString;
local bool focused;
DrawPortrait();
focused = Controller.ActivePage == self;
if (focused)
{
VideoTimer += Controller.RenderDelta;
}
else
{
if (LobbyMenuAd == None || !LobbyMenuAd.MenuMovie.IsPlaying())
{
VideoTimer = 0.0;
}
VideoPlayed = false;
}
if (focused && LobbyMenuAd != None)
{
Canvas.SetPos(0.066797 * Canvas.ClipX + 5, 0.325208 * Canvas.ClipY + 30);
X = Canvas.ClipX / 1024; // X & Y scale
AdBackground.WinWidth = 320 * X + 10;
AdBackground.WinHeight = 240 * X + 37;
// if ( !VideoOpened && (LobbyMenuAd.GetState() == ADASSET_STATE_DOWNLOADED))
// {
// // Open the video
// VideoOpened = true;
//
// LobbyMenuAd.MenuMovie.Open(LobbyMenuAd.DownloadPath);
// }
/*else*/ if ( !VideoOpened /*&& (LobbyMenuAd.GetState() == ADASSET_STATE_ERROR)*/)
{
// Open the video
VideoOpened = true;
LobbyMenuAd.MenuMovie.Open("../Movies/Movie"$(rand(MAX_MOVIES) + 1)$".bik");
}
// Hold on the first frame for 3 seconds so it doesn't
// Overwhelm the player
if ( !VideoPlayed && VideoTimer > 3.0 )
{
// Start video
VideoPlayed = true;
LobbyMenuAd.MenuMovie.Play(false);
}
Canvas.DrawTile(LobbyMenuAd.MenuMovie, 320 * X, 240 * X,
0, 0, 320, 240);
}
if ( KFPlayerController(PlayerOwner()) == none || KFPlayerController(PlayerOwner()).SelectedVeterancy == none ||
KFSteamStatsAndAchievements(PlayerOwner().SteamStatsAndAchievements) == none )
{
return;
}
else
CurIndex = KFPlayerController(PlayerOwner()).SelectedVeterancy.default.PerkIndex;
LevelIndex = KFSteamStatsAndAchievements(PlayerOwner().SteamStatsAndAchievements).PerkHighestLevelAvailable(CurIndex);
PerkName = KFPlayerController(PlayerOwner()).SelectedVeterancy.default.VeterancyName;
PerkLevelString = LvAbbrString @ LevelIndex;
PerkProgress = KFSteamStatsAndAchievements(PlayerOwner().SteamStatsAndAchievements).GetPerkProgress(CurIndex);
//Get the position size etc in pixels
X = i_BGPerk.ActualLeft() + 5;
Y = i_BGPerk.ActualTop() + 30;
Width = i_BGPerk.ActualWidth() - 10;
Height = i_BGPerk.ActualHeight() - 37;
// Offset for the Background
TempX = X;
TempY = Y + ItemSpacing / 2.0;
// 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);
//Canvas.DrawTileStretched(ItemBackground, Width, Height);
IconSize = Height - ItemSpacing;
// Draw Item Background
Canvas.DrawTileStretched(PerkBackground, IconSize, IconSize);
Canvas.SetPos(TempX + IconSize - 1.0, Y + 7.0);
Canvas.DrawTileStretched(InfoBackground, Width - IconSize, Height - ItemSpacing - 14);
IconSize -= IconBorder * 2.0 * Height;
// Draw Icon
Canvas.SetPos(TempX + IconBorder * Height, TempY + IconBorder * Height);
Canvas.DrawTile(class'KFGameType'.default.LoadedSkills[CurIndex].default.OnHUDIcon, IconSize, IconSize, 0, 0, 256, 256);
TempX += IconSize + (IconToInfoSpacing * Width);
TempY += TextTopOffset * Height + ItemBorder * Height;
ProgressBarWidth = Width - (TempX - X) - (IconToInfoSpacing * Width);
// Select Text Color
Canvas.SetDrawColor(0, 0, 0, 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.04 * Height);
// Draw Progress Bar
Canvas.SetDrawColor(255, 255, 255, 255);
Canvas.SetPos(TempX, TempY);
Canvas.DrawTileStretched(ProgressBarBackground, ProgressBarWidth, ProgressBarHeight * Height);
Canvas.SetPos(TempX + 3.0, TempY + 3.0);
Canvas.DrawTileStretched(ProgressBarForeground, (ProgressBarWidth - 6.0) * PerkProgress, (ProgressBarHeight * Height) - 6.0);
if ( PlayerOwner().SteamStatsAndAchievements.bUsedCheats )
{
if ( CurrentVeterancyLevel != 255 )
{
lb_PerkEffects.SetContent(PerksDisabledString);
CurrentVeterancyLevel = 255;
}
}
else if ( CurrentVeterancy != KFPlayerController(PlayerOwner()).SelectedVeterancy || CurrentVeterancyLevel != LevelIndex )
{
lb_PerkEffects.SetContent(KFPlayerController(PlayerOwner()).SelectedVeterancy.default.LevelEffects[LevelIndex]);
CurrentVeterancy = KFPlayerController(PlayerOwner()).SelectedVeterancy;
CurrentVeterancyLevel = LevelIndex;
}
}
function DrawPortrait()
{
sChar = PlayerOwner().GetUrlOption("Character");
sCharD = sChar;
SetPlayerRec();
}
function SetPlayerRec()
{
local int i;
local array<xUtil.PlayerRecord> PList;
class'xUtil'.static.GetPlayerList(PList);
// Filter out to only characters without the 's' menu setting
for ( i = 0; i < PList.Length; i++ )
{
if ( sChar ~= Plist[i].DefaultName )
{
PlayerRec = PList[i];
break;
}
}
i_Portrait.Image = PlayerRec.Portrait;
}
function bool ShowPerkMenu(GUIComponent Sender)
{
if ( PlayerOwner() != none)
{
PlayerOwner().ClientOpenMenu("KFGUI.KFProfilePage", false);
}
return true;
}
function OnSteamStatsAndAchievementsReady()
{
Controller.OpenMenu("KFGUI.KFProfilePage");
Controller.OpenMenu(Controller.QuestionMenuClass);
GUIQuestionPage(Controller.TopPage()).SetupQuestion(SelectPerkInformationString, QBTN_Ok, QBTN_Ok);
}
defaultproperties
{
IconBorder=0.05
ItemBorder=0.11
ProgressBarHeight=0.3
IconToInfoSpacing=0.05
TextTopOffset=0.05
ItemSpacing=0.0
PerkBackground=Texture'KF_InterfaceArt_tex.Menu.Item_box_box'
InfoBackground=Texture'KF_InterfaceArt_tex.Menu.Item_box_bar'
ProgressBarBackground=Texture'KF_InterfaceArt_tex.Menu.Innerborder'
ProgressBarForeground=Texture'InterfaceArt_tex.Menu.progress_bar'
WaitingForServerStatus="Awaiting server status..."
WaitingForOtherPlayers="Waiting for players to be ready..."
AutoCommence="Game will auto-commence in"
CurrentMapString="Current Map:"
DifficultyString="Difficulty Level:"
LvAbbrString="Lv"
BeginnerString="Beginner"
NormalString="Normal"
HardString="Hard"
SuicidalString="Suicidal"
HellOnEarthString="Hell on Earth"
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."
Begin Object Class=moCheckBox Name=ReadyBox0
bValueReadOnly=True
ComponentJustification=TXTA_Left
CaptionWidth=0.820000
Caption="NAME1"
OnCreateComponent=ReadyBox0.InternalOnCreateComponent
WinTop=0.0475
WinLeft=0.075000
WinWidth=0.400000
WinHeight=0.045000
bAcceptsInput=false
bNeverFocus=true
bAnimating=true
RenderWeight=0.55
LabelColor=(R=10,G=10,B=10,A=210)
LabelStyleName=""
End Object
ReadyBox(0)=moCheckBox'KFGui.LobbyMenu.ReadyBox0'
Begin Object Class=moCheckBox Name=ReadyBox1
bValueReadOnly=True
ComponentJustification=TXTA_Left
CaptionWidth=0.820000
Caption="NAME2"
OnCreateComponent=ReadyBox1.InternalOnCreateComponent
WinTop=0.0925000
WinLeft=0.075000
WinWidth=0.400000
WinHeight=0.045000
bAcceptsInput=false
bNeverFocus=true
bAnimating=true
RenderWeight=0.55
LabelColor=(R=0,G=0,B=0,A=255)
End Object
ReadyBox(1)=moCheckBox'KFGui.LobbyMenu.ReadyBox1'
Begin Object Class=moCheckBox Name=ReadyBox2
bValueReadOnly=True
ComponentJustification=TXTA_Left
CaptionWidth=0.820000
Caption="NAME3"
OnCreateComponent=ReadyBox2.InternalOnCreateComponent
WinTop=0.137500
WinLeft=0.075000
WinWidth=0.400000
WinHeight=0.048000
bAcceptsInput=false
bNeverFocus=true
bAnimating=true
RenderWeight=0.55
LabelColor=(R=0,G=0,B=0,A=255)
End Object
ReadyBox(2)=moCheckBox'KFGui.LobbyMenu.ReadyBox2'
Begin Object Class=moCheckBox Name=ReadyBox3
bValueReadOnly=True
ComponentJustification=TXTA_Left
CaptionWidth=0.820000
Caption="NAME4"
OnCreateComponent=ReadyBox3.InternalOnCreateComponent
WinTop=0.182500
WinLeft=0.075000
WinWidth=0.400000
WinHeight=0.045000
bAcceptsInput=false
bNeverFocus=true
bAnimating=true
RenderWeight=0.55
LabelColor=(R=0,G=0,B=0,A=255)
End Object
ReadyBox(3)=moCheckBox'KFGui.LobbyMenu.ReadyBox3'
Begin Object Class=moCheckBox Name=ReadyBox4
bValueReadOnly=True
ComponentJustification=TXTA_Left
CaptionWidth=0.820000
Caption="NAME5"
OnCreateComponent=ReadyBox4.InternalOnCreateComponent
WinTop=0.227500
WinLeft=0.075000
WinWidth=0.400000
WinHeight=0.045000
bAcceptsInput=false
bNeverFocus=true
bAnimating=true
RenderWeight=0.55
LabelColor=(R=0,G=0,B=0,A=255)
End Object
ReadyBox(4)=moCheckBox'KFGui.LobbyMenu.ReadyBox4'
Begin Object Class=moCheckBox Name=ReadyBox5
bValueReadOnly=True
ComponentJustification=TXTA_Left
CaptionWidth=0.820000
Caption="NAME6"
OnCreateComponent=ReadyBox5.InternalOnCreateComponent
WinTop=0.272500
WinLeft=0.075000
WinWidth=0.400000
WinHeight=0.045000
bAcceptsInput=false
bNeverFocus=true
bAnimating=true
RenderWeight=0.55
LabelColor=(R=0,G=0,B=0,A=255)
End Object
ReadyBox(5)=moCheckBox'KFGui.LobbyMenu.ReadyBox5'
Begin Object Class=KFPlayerReadyBar Name=Player1BackDrop
WinTop=0.040000
WinLeft=0.040000
WinWidth=0.350000
WinHeight=0.045000
RenderWeight=0.35
End Object
PlayerBox(0)=KFPlayerReadyBar'KFGui.LobbyMenu.Player1BackDrop'
Begin Object Class=GUIImage Name=Player1P
Image=none//texture'KillingFloorHUD.Perks.Perk_FireBug'
ImageColor=(B=255,G=255,R=255,A=255)
ImageStyle=ISTY_Justified
WinTop=0.043000
WinLeft=0.040000
WinWidth=0.039000
WinHeight=0.039000
RenderWeight=0.56
End Object
PlayerPerk(0)=GUIImage'KFGui.LobbyMenu.Player1P'
Begin Object Class=KFPlayerReadyBar Name=Player2BackDrop
WinTop=0.085000
WinLeft=0.040000
WinWidth=0.350000
WinHeight=0.045000
RenderWeight=0.35
End Object
PlayerBox(1)=KFPlayerReadyBar'KFGui.LobbyMenu.Player2BackDrop'
Begin Object Class=GUIImage Name=Player2P
Image=none//texture'KillingFloorHUD.Perks.Perk_FireBug'
ImageColor=(B=255,G=255,R=255,A=255)
ImageStyle=ISTY_Justified
WinTop=0.088000
WinLeft=0.040000
WinWidth=0.045000
WinHeight=0.039000
RenderWeight=0.56
End Object
PlayerPerk(1)=GUIImage'KFGui.LobbyMenu.Player2P'
Begin Object Class=KFPlayerReadyBar Name=Player3BackDrop
WinTop=0.130000
WinLeft=0.040000
WinWidth=0.350000
WinHeight=0.045000
RenderWeight=0.35
End Object
PlayerBox(2)=KFPlayerReadyBar'KFGui.LobbyMenu.Player3BackDrop'
Begin Object Class=GUIImage Name=Player3P
Image=none//texture'KillingFloorHUD.Perks.Perk_FireBug'
ImageColor=(B=255,G=255,R=255,A=255)
ImageStyle=ISTY_Justified
WinTop=0.133000
WinLeft=0.040000
WinWidth=0.045000
WinHeight=0.039000
RenderWeight=0.56
End Object
PlayerPerk(2)=GUIImage'KFGui.LobbyMenu.Player3P'
Begin Object Class=KFPlayerReadyBar Name=Player4BackDrop
WinTop=0.175000
WinLeft=0.040000
WinWidth=0.350000
WinHeight=0.045000
RenderWeight=0.35
End Object
PlayerBox(3)=KFPlayerReadyBar'KFGui.LobbyMenu.Player4BackDrop'
Begin Object Class=GUIImage Name=Player4P
Image=none//texture'KillingFloorHUD.Perks.Perk_FireBug'
ImageColor=(B=255,G=255,R=255,A=255)
ImageStyle=ISTY_Justified
WinTop=0.178000
WinLeft=0.040000
WinWidth=0.045000
WinHeight=0.039000
RenderWeight=0.56
End Object
PlayerPerk(3)=GUIImage'KFGui.LobbyMenu.Player4P'
Begin Object Class=KFPlayerReadyBar Name=Player5BackDrop
WinTop=0.220000
WinLeft=0.040000
WinWidth=0.350000
WinHeight=0.045000
RenderWeight=0.35
End Object
PlayerBox(4)=KFPlayerReadyBar'KFGui.LobbyMenu.Player5BackDrop'
Begin Object Class=GUIImage Name=Player5P
Image=none//texture'KillingFloorHUD.Perks.Perk_FireBug'
ImageColor=(B=255,G=255,R=255,A=255)
ImageStyle=ISTY_Justified
WinTop=0.223000
WinLeft=0.040000
WinWidth=0.045000
WinHeight=0.039000
RenderWeight=0.56
End Object
PlayerPerk(4)=GUIImage'KFGui.LobbyMenu.Player5P'
Begin Object Class=KFPlayerReadyBar Name=Player6BackDrop
WinTop=0.265000
WinLeft=0.040000
WinWidth=0.350000
WinHeight=0.045000
RenderWeight=0.35
End Object
PlayerBox(5)=KFPlayerReadyBar'KFGui.LobbyMenu.Player6BackDrop'
Begin Object Class=GUIImage Name=Player6P
Image=none//texture'KillingFloorHUD.Perks.Perk_FireBug'
ImageColor=(B=255,G=255,R=255,A=255)
ImageStyle=ISTY_Justified
WinTop=0.268000
WinLeft=0.040000
WinWidth=0.045000
WinHeight=0.039000
RenderWeight=0.56
End Object
PlayerPerk(5)=GUIImage'KFGui.LobbyMenu.Player6P'
Begin Object Class=GUILabel Name=Player1Veterancy
TextAlign=TXTA_Right
TextFont="UT2SmallFont"
TextColor=(B=19,G=19,R=19,A=255)
WinTop=0.040000
WinLeft=0.229070
WinWidth=0.151172
WinHeight=0.045000
RenderWeight=0.5
End Object
PlayerVetLabel(0)=GUILabel'KFGui.LobbyMenu.Player1Veterancy'
Begin Object Class=GUILabel Name=Player2Veterancy
TextFont="UT2SmallFont"
TextAlign=TXTA_Right
TextColor=(B=19,G=19,R=19,A=255)
WinTop=0.085000
WinLeft=0.229070
WinWidth=0.151172
WinHeight=0.045000
RenderWeight=0.5
End Object
PlayerVetLabel(1)=GUILabel'KFGui.LobbyMenu.Player2Veterancy'
Begin Object Class=GUILabel Name=Player3Veterancy
TextFont="UT2SmallFont"
TextAlign=TXTA_Right
TextColor=(B=19,G=19,R=19,A=255)
WinTop=0.130000
WinLeft=0.229070
WinWidth=0.151172
WinHeight=0.045000
RenderWeight=0.55
End Object
PlayerVetLabel(2)=GUILabel'KFGui.LobbyMenu.Player3Veterancy'
Begin Object Class=GUILabel Name=Player4Veterancy
TextFont="UT2SmallFont"
TextAlign=TXTA_Right
TextColor=(B=19,G=19,R=19,A=255)
WinTop=0.175000
WinLeft=0.229070
WinWidth=0.151172
WinHeight=0.045000
RenderWeight=0.55
End Object
PlayerVetLabel(3)=GUILabel'KFGui.LobbyMenu.Player4Veterancy'
Begin Object Class=GUILabel Name=Player5Veterancy
TextFont="UT2SmallFont"
TextAlign=TXTA_Right
TextColor=(B=19,G=19,R=19,A=255)
WinTop=0.220000
WinLeft=0.229070
WinWidth=0.151172
WinHeight=0.045000
RenderWeight=0.55
End Object
PlayerVetLabel(4)=GUILabel'KFGui.LobbyMenu.Player5Veterancy'
Begin Object Class=GUILabel Name=Player6Veterancy
TextFont="UT2SmallFont"
TextAlign=TXTA_Right
TextColor=(B=19,G=19,R=19,A=255)
WinTop=0.265000
WinLeft=0.229070
WinWidth=0.151172
WinHeight=0.045000
RenderWeight=0.55
End Object
PlayerVetLabel(5)=GUILabel'KFGui.LobbyMenu.Player6Veterancy'
Begin Object Class=KFLobbyChat Name=ChatBox
OnCreateComponent=ChatBox.InternalOnCreateComponent
TabOrder=1
RenderWeight=0.01
//OnPreDraw=ChatBox.FloatingPreDraw
//OnRendered=ChatBox.FloatingRendered
OnHover=ChatBox.FloatingHover
//OnMousePressed=ChatBox.FloatingMousePressed
//OnMouseRelease=ChatBox.FloatingMouseRelease
WinTop=0.80760
WinLeft=0.016090
WinWidth=0.971410
WinHeight=0.100000
ToolTip=none
End Object
t_ChatBox=KFLobbyChat'KFGui.LobbyMenu.ChatBox'
/* Begin Object Class=KFLobbyTitleLabel Name=LobbyTitle
TextColor=(B=255,G=255,R=255)
WinTop=0.009375
WinLeft=0.043164
WinWidth=0.915313
WinHeight=0.049359
RenderWeight=0.300000
bScaleToParent=True
End Object
l_TitleBar=KFLobbyTitleLabel'KFGui.LobbyMenu.LobbyTitle'
*/
Begin Object Class=KFMapStoryLabel Name=LobbyMapStoryBox
OnCreateComponent=LobbyMapStoryBox.InternalOnCreateComponent
ToolTip=none
End Object
l_StoryBox=KFMapStoryLabel'KFGui.LobbyMenu.LobbyMapStoryBox'
Begin Object Class=AltSectionBackground Name=GameInfoB
WinTop=0.037851
WinLeft=0.489062
WinWidth=0.487374
WinHeight=0.075000
ToolTip=none
End Object
GameInfoBG=GameInfoB
Begin Object Class=AltSectionBackground Name=StoryBoxBackground
bNoCaption=true
WinTop=0.109808
WinLeft=0.489062
WinWidth=0.487374
WinHeight=0.309092
OnPreDraw=StoryBoxBackground.InternalPreDraw
ToolTip=none
End Object
StoryBoxBG=GUISectionBackground'KFGui.LobbyMenu.StoryBoxBackground'
Begin Object Class=KFBotComboBox Name=BotComboBox1
ComponentJustification=TXTA_Left
CaptionWidth=0.650000
Caption=" Bot Control"
OnCreateComponent=BotComboBox1.InternalOnCreateComponent
Hint="Select Bot to Add"
WinTop=0.550000
WinLeft=0.400000
WinWidth=0.550000
TabOrder=10
OnChange=LobbyMenu.InternalOnChange
End Object
BotSlot1=KFBotComboBox'KFGui.LobbyMenu.BotComboBox1'
Begin Object Class=KFAddBotButton Name=AddBotGUIButton
OnCreateComponent=AddBotGUIButton.InternalOnCreateComponent
WinTop=0.650000
WinLeft=0.450000
WinWidth=0.450000
OnChange=LobbyMenu.InternalOnChange
End Object
AddBotButton=KFAddBotButton'KFGui.LobbyMenu.AddBotGUIButton'
Begin Object Class=KFRemoveBotButton Name=RemoveBotGUIButton
OnCreateComponent=RemoveBotGUIButton.InternalOnCreateComponent
WinTop=0.700000
WinLeft=0.320000
WinWidth=0.590000
OnChange=LobbyMenu.InternalOnChange
End Object
RemoveBotButton=KFRemoveBotButton'KFGui.LobbyMenu.RemoveBotGUIButton'
Begin Object Class=KFRemoveAllBotButton Name=RemoveAllBotsGUIButton
OnCreateComponent=RemoveAllBotsGUIButton.InternalOnCreateComponent
WinTop=0.750000
WinLeft=0.320000
WinWidth=0.590000
OnChange=LobbyMenu.InternalOnChange
End Object
TotallyRemoveBotsButton=KFRemoveAllBotButton'KFGui.LobbyMenu.RemoveAllBotsGUIButton'
Begin Object Class=AltSectionBackground Name=BotAreaBackground
bNoCaption=true
WinTop=0.500000
WinLeft=0.450000
WinWidth=0.520000
WinHeight=0.380000
OnPreDraw=BotAreaBackground.InternalPreDraw
// HeaderBase=none
End Object
BotsBG=AltSectionBackground'KFGui.LobbyMenu.BotAreaBackground'
Begin Object Class=LobbyFooter Name=BuyFooter
RenderWeight=0.300000
TabOrder=8
bBoundToParent=False
bScaleToParent=False
OnPreDraw=BuyFooter.InternalOnPreDraw
ToolTip=none
End Object
t_Footer=LobbyFooter'KFGui.LobbyMenu.BuyFooter'
Begin Object Class=GUILabel Name=TimeOutCounter
TextAlign=TXTA_Center
Caption="Game will auto-commence in: "
FontScale=FNS_Medium
TextColor=(R=175,G=176,B=158,A=255)
WinTop=0.00001
WinLeft=0.059552
WinWidth=0.346719
WinHeight=0.045704
TabOrder=6
End Object
label_TimeOutCounter=GUILabel'KFGui.LobbyMenu.TimeOutCounter'
Begin Object class=GUISectionBackground Name=BGPerk
WinTop=0.432291
WinLeft=0.650976
WinWidth=0.325157
WinHeight=0.138086
Caption="Current Perk"
bFillClient=true
Hint=""
End Object
i_BGPerk=BGPerk
Begin Object class=GUISectionBackground Name=BGPerkEffects
WinTop=0.568448
WinLeft=0.650976
WinWidth=0.325157
WinHeight=0.307442
Caption="Perk Effects"
bFillClient=true
Hint=""
End Object
i_BGPerkEffects=BGPerkEffects
Begin Object Class=GUIScrollTextBox Name=PerkEffectsScroll
WinTop=0.626094
WinLeft=0.659687
WinWidth=0.309454
WinHeight=0.244961
CharDelay=0.0025
EOLDelay=0.1
TabOrder=9
StyleName="NoBackground"
Hint=""
ToolTip=none
End Object
lb_PerkEffects=PerkEffectsScroll
Begin Object class=GUIImage Name=PlayerPortrait
WinTop=0.472396
WinLeft=0.492522
WinWidth=0.156368
WinHeight=0.397022
Image=Texture'InterfaceArt_tex.Menu.changeme_texture' //Material'2K4Menus.Controls.thinpipe_b'
ImageColor=(R=255,G=255,B=255,A=255)
ImageRenderStyle=MSTY_Normal
ImageStyle=ISTY_Scaled
RenderWeight=0.3
//OnLoadINI=InternalOnLoadINI
IniOption="@Internal"
//OnDraw=InternalDraw
End Object
i_Portrait=PlayerPortrait
Begin Object class=GUISectionBackground Name=PlayerPortraitB
WinTop=0.432291
WinLeft=0.489062
WinWidth=0.163305
WinHeight=0.443451
End Object
PlayerPortraitBG=PlayerPortraitB
Begin Object Class=GUILabel Name=PerkClickArea
WinTop=0.432395
WinLeft=0.488851
WinWidth=0.444405
WinHeight=0.437312
OnClick=ShowPerkMenu
bAcceptsInput=true
OnClickSound=CS_Click
End Object
PerkClickLabel=GUILabel'KFGui.LobbyMenu.PerkClickArea'
Begin Object class=GUISectionBackground Name=ADBG
WinTop=0.325208
WinLeft=0.066797
WinWidth=0.322595
WinHeight=0.374505
RenderWeight=0.3
End Object
ADBackground=ADBG
Begin Object Class=GUILabel Name=CurrentMapL
WinTop=0.042179
WinLeft=0.496524
WinWidth=0.36
WinHeight=0.035714
RenderWeight=0.900
Caption="LAlalala Map"
TextColor=(R=175,G=176,B=158,A=255)
End Object
CurrentMapLabel=CurrentMapL
Begin Object Class=GUILabel Name=DifficultyL
WinTop=0.072381
WinLeft=0.496524
WinWidth=0.36
WinHeight=0.035714
RenderWeight=0.900
Caption="Difficulty"
TextColor=(R=175,G=176,B=158,A=255)
End Object
DifficultyLabel=DifficultyL
Begin Object class=GUIImage Name=WaveB
WinTop=0.043810
WinLeft=0.923238
WinWidth=0.051642
WinHeight=0.061783
Image=Texture'KillingFloorHud.HUD.HUD_Bio_Circle' //Material'2K4Menus.Controls.thinpipe_b'
ImageColor=(R=255,G=255,B=255,A=255)
ImageRenderStyle=MSTY_Normal
ImageStyle=ISTY_Justified
RenderWeight=0.8
End Object
WaveBG=WaveB
Begin Object Class=GUILabel Name=WaveL
Caption="1/4"
TextAlign=TXTA_Center
TextColor=(B=158,G=176,R=175)
TextFont="UT2MenuFont"
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
Begin Object Class=GUIHeader Name=ServerBrowserHeader
bUseTextHeight=false
Caption=""
WinHeight=0
bVisible=false
End Object
t_Header=ServerBrowserHeader
c_Tabs=PageTabs
i_Background=None
i_bkChar=None
i_bkScan=None
bRenderWorld=True
bAllowedAsLast=True
OnCanClose=LobbyMenu.StopClose
WinHeight=0.500000
OnPreDraw=LobbyMenu.InternalOnPreDraw
OnRendered=DrawPerk
OnClose=InternalOnClosed
OnKeyEvent=InternalOnKeyEvent
}