Class UIP_PerkSelectionLobby extends UIP_PerkSelection; var localized string LevelText; var localized string PointsText; var localized string NoPerkSelectedText; function Timer() { local int i; CurrentManager = ExtPlayerController(GetPlayer()).ActivePerkManager; if (CurrentManager!=None) { if (PrevPendingPerk!=None) { PendingPerk = CurrentManager.FindPerk(PrevPendingPerk); PrevPendingPerk = None; } PerkList.ChangeListSize(CurrentManager.UserPerks.Length); if (PendingPerk!=None && !PendingPerk.bPerkNetReady) return; // Huge code block to handle stat updating, but actually pretty well optimized. if (PendingPerk!=OldUsedPerk) { OldUsedPerk = PendingPerk; if (PendingPerk!=None) { OldPerkPoints = -1; if (StatsList.ItemComponents.Length!=PendingPerk.PerkStats.Length) { if (StatsList.ItemComponents.Length=StatBuyers.Length) { StatBuyers[StatBuyers.Length] = UIR_PerkStat(StatsList.AddListComponent(class'UIR_PerkStat')); StatBuyers[i].StatIndex = i; StatBuyers[i].InitMenu(); } else { StatsList.ItemComponents.Length = i+1; StatsList.ItemComponents[i] = StatBuyers[i]; } } } else if (StatsList.ItemComponents.Length>PendingPerk.PerkStats.Length) { for (i=PendingPerk.PerkStats.Length; i