// ACTION_WaitForPlayer succeds only if MyPlayerController.Pawn is nearby // ACTION_WaitForAnyPlayer succeeds if any players are nearby class ACTION_WaitForAnyPlayer extends ACTION_WaitForPlayer; var(Action) float CheckTime; // how often to look for a player? var ScriptedController MyScriptedController; function bool InitActionFor(ScriptedController C) { MyScriptedController = C; if ( CheckIfNearPlayer(C) ) return false; C.CurrentAction = self; C.SetTimer(fmax(CheckTime, 0.1),true); return true; } function bool WaitForPlayer() { if ( MyScriptedController != none ) CheckIfNearPlayer(MyScriptedController); // update MyScriptedController.MyPlayerController return true; } function bool CheckIfNearPlayer(ScriptedController SC) { local Controller C; local PlayerController PC, BACKUP_MyPlayerController; if ( SC.MyPlayerController != none && SC.MyPlayerController.Pawn != none && SC.CheckIfNearPlayer(Distance) ) return true; BACKUP_MyPlayerController = SC.MyPlayerController; for ( C = SC.Level.ControllerList; C != none; C = C.nextController ) { PC = PlayerController(C); if ( PC != none && PC.Pawn != none ) { SC.MyPlayerController = PC; if ( SC.CheckIfNearPlayer(Distance) ) return true; } } // restore original MyPlayerController, if no players are nearby - just in case SC.MyPlayerController = BACKUP_MyPlayerController; return false; } defaultproperties { CheckTime=1.000000 }