Class UIP_PerkSelectionLobby extends UIP_PerkSelection; 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"); } } else if( PendingPerk!=None && OldPerkPoints!=PendingPerk.CurrentSP ) { OldPerkPoints = PendingPerk.CurrentSP; PerkLabel.SetText("Lv"$PendingPerk.GetLevelString()@PendingPerk.PerkName$" (Points: "$PendingPerk.CurrentSP$")"); for( i=0; i