I search for solutions in this order: Past Code, Unreal Source, Wiki, BUF, groups.yahoo, google, screaming at monitor. – RegularX
Legacy:RegularEngine/RegularPlayer
From Unreal Wiki, The Unreal Engine Documentation Site
RegularPlayer is the PlayerController class. Chiefly it starts the VersatileKeyBind interaction, talks to the PRI and Pawn to properly setup the player class and holds specific functions for spawning, opening menus, etc.
class RegularPlayer extends xPlayer; replication { // Things client should send to server reliable if ( Role < ROLE_Authority ) RestartPawn,SetChosenMap,SetPlayerTeam; } event InitInputSystem() { local int i; super.InitInputSystem(); for (i = 0; i < Player.LocalInteractions.Length; i++) { if ( RegularVersatileKeyBind(Player.LocalInteractions[i]) != None ) { Player.interactionMaster.RemoveInteraction(Player.LocalInteractions[i]);} } Player.interactionMaster.AddInteraction("RegularEngine.RegularVersatileKeyBind", Player); } exec function keybinds() { ClientOpenMenu("RegularEngine.RegularVKBTrader"); } exec function OpenClassTrader() { // open menu to change player classes Log("Opening class Trader"); ClientOpenMenu("RegularEngine.ClassTrader"); } function OpenMapTrader() { // open menu for map voting Log("Opening Map Trader"); ClientOpenMenu("RegularEngine.MapTrader"); } function OpenMapViewer() { // open menu to see current maps Log("Opening Map Trader"); ClientOpenMenu("RegularEngine.MapViewer"); } function Possess( Pawn aPawn ) // Possess attaches our PRI's info about the player class { // to the pawn local RegularPawn rp; rp = RegularPawn(aPawn); if (rp != none) {rp.PlayerClassName = RegularPRI(PlayerReplicationInfo).PlayerClassName;} Super.Possess( aPawn ); } simulated function RestartPawn(string NewClass) { // restart with a new player calss RegularPRI(PlayerReplicationInfo).PlayerClassName = NewClass< SEMI > RegularPRI(PlayerReplicationInfo).SaveConfig(); Suicide(); AskForPawn(); } simulated function SetChosenMap(string ChosenMap) { // place this player's vote into the PRI RegularPRI(PlayerReplicationInfo).ChosenMap = ChosenMap; } simulated function SetPlayerTeam(int i) { // swap teams for player, allow new classes if(GameReplicationInfo.Teams[i] != none){ if(PlayerReplicationInfo.Team != none){PlayerReplicationInfo.Team.RemoveFromTeam(self);} if(PlayerReplicationInfo.Team != GameReplicationInfo.Teams[i]) { GameReplicationInfo.Teams[i].AddToTeam(self); PlayerReplicationInfo.Team = GameReplicationInfo.Teams[i]; } log("SBPlayer Set Player Team to "$PlayerReplicationInfo.Team.TeamName ); } else{ log("ERROR NO PLAYER TEAM SET");} } auto state PlayerWaiting // bored while dead or spectating? pick a new class { exec function AltFire(optional float F) { OpenClassTrader(); } } state Dead { exec function AltFire(optional float F) { OpenClassTrader(); } } defaultproperties { PawnClass=class'RegularPawn' PlayerReplicationInfoClass=Class'RegularPRI' }