Class MS_PC extends KFPlayerController; var localized string ConnectingTo; var localized string ConnectionAborted; var localized string UserAbortedConnection; var localized string ConnectionError; var localized string Disconnecting; var MS_PendingData TravelData; var byte ConnectionCounter; var bool bConnectionFailed; simulated event ReceivedPlayer(); simulated function ReceivedGameClass(class GameClass); simulated function HandleNetworkError(bool bConnectionLost) { ConsoleCommand("Disconnect"); } event PlayerTick(float DeltaTime) { if (ConnectionCounter<3 && ++ConnectionCounter==3) { if (TravelData.PendingURL!="") { MS_HUD(myHUD).ShowProgressMsg(ConnectingTo@TravelData.PendingURL); ConsoleCommand("Open "$TravelData.PendingURL); } if (TravelData.PendingSong!=None) StartMusicTrack(TravelData.PendingSong); // Reset all cached data. TravelData.Reset(); } PlayerInput.PlayerInput(DeltaTime); MS_HUD(myHUD).ActiveGame.UpdateMouse(PlayerInput.aTurn,PlayerInput.aLookUp); } simulated final function StartMusicTrack(SoundCue Music) { local AudioComponent A; if (WorldInfo.MusicComp!=None) { WorldInfo.MusicComp.FadeOut(WorldInfo.CurrentMusicTrack.FadeOutTime,WorldInfo.CurrentMusicTrack.FadeOutVolumeLevel); WorldInfo.MusicComp = None; } Music.SoundClass = 'Music'; // Force music group for this. A = WorldInfo.CreateAudioComponent(Music,false,false,false,,false); if (A!=None) { // update the new component with the correct settings A.bAutoDestroy = true; A.bShouldRemainActiveIfDropped = true; A.bIsMusic = true; A.bAutoPlay = true; A.bIgnoreForFlushing = false; A.FadeIn(0.25, 1.f); } WorldInfo.MusicComp = A; WorldInfo.CurrentMusicTrack.TheSoundCue = Music; WorldInfo.CurrentMusicTrack.FadeInTime = 1; WorldInfo.CurrentMusicTrack.FadeOutTime = 1; } final function AbortConnection() { if (bConnectionFailed) HandleNetworkError(false); else { ShowConnectionProgressPopup(PMT_ConnectionFailure,ConnectionAborted,UserAbortedConnection,true); ConsoleCommand("Cancel"); } } reliable client event TeamMessage(PlayerReplicationInfo PRI, coerce string S, name Type, optional float MsgLifeTime ); reliable client event bool ShowConnectionProgressPopup(EProgressMessageType ProgressType, string ProgressTitle, string ProgressDescription, bool SuppressPasswordRetry = false) { if (bConnectionFailed) return false; switch (ProgressType) { case PMT_ConnectionFailure: case PMT_PeerConnectionFailure: bConnectionFailed = true; MS_HUD(myHUD).ShowProgressMsg(ConnectionError@ProgressTitle$"|"$ProgressDescription$"|"$Disconnecting,true); SetTimer(4,false,'HandleNetworkError'); return true; case PMT_DownloadProgress: case PMT_AdminMessage: MS_HUD(myHUD).ShowProgressMsg(ProgressTitle$"|"$ProgressDescription); return true; } return false; } exec function CustomStartFire(optional byte FireModeNum) { if (!MS_HUD(myHUD).ActiveGame.bGameStarted) MS_HUD(myHUD).ActiveGame.StartGame(); } exec function SelectNextWeapon() { MS_HUD(myHUD).ActiveGame.AdjustSensitivity(true); } exec function SelectPrevWeapon() { MS_HUD(myHUD).ActiveGame.AdjustSensitivity(false); } auto state PlayerWaiting { ignores SeePlayer, HearNoise, NotifyBump, TakeDamage, PhysicsVolumeChange, NextWeapon, PrevWeapon, SwitchToBestWeapon; reliable server function ServerChangeTeam(int N); reliable server function ServerRestartPlayer(); function PlayerMove(float DeltaTime) { } } defaultproperties { InputClass=class'MS_Input' Begin Object Class=MS_PendingData Name=UserPendingData End Object TravelData=UserPendingData }