/** * Get the player currently flying a ship. */ public static IMyPlayer GetControllingPlayer(this IMyCubeGrid grid) { IMyGridTerminalSystem term = grid.GetTerminalSystem(); List<IMyShipController> shipControllers = term.GetBlocksOfType<IMyShipController>(collect: x => x.IsUnderControl); if (shipControllers.Count > 0) { return MyAPIGateway.Players.GetPlayerByID( shipControllers[0].ControllerInfo.ControllingIdentityId); } shipControllers = term.GetBlocksOfType<IMyShipController>(x => x.GetBuiltBy() != 0); if (shipControllers.Count > 0) { IMyShipController mainController = shipControllers.Find(x => x.IsMainCockpit); if (mainController == null) { mainController = shipControllers[0]; } return MyAPIGateway.Players.GetPlayerByID(mainController.GetBuiltBy()); } return null; }
public static IMyPlayer FindControllingPlayer(this IMyCubeGrid Grid, bool Write = true) { try { IMyPlayer Player = null; IMyGridTerminalSystem Term = Grid.GetTerminalSystem(); List <IMyShipController> ShipControllers = Term.GetBlocksOfType <IMyShipController>(collect: x => x.IsUnderControl); if (ShipControllers.Count == 0) { ShipControllers = Term.GetBlocksOfType <IMyShipController>(x => x.GetBuiltBy() != 0); if (ShipControllers.Count > 0) { IMyShipController MainController = ShipControllers.FirstOrDefault(x => x.IsMainCockpit()) ?? ShipControllers.First(); long ID = MainController.GetBuiltBy(); Player = MyAPIGateway.Players.GetPlayerByID(ID); if (Write && Player != null) { Grid.DebugWrite("Grid.FindControllingPlayer", $"Found cockpit built by player {Player.DisplayName}."); } return(Player); } if (Write) { Grid.DebugWrite("Grid.FindControllingPlayer", "No builder player was found."); } return(null); } Player = MyAPIGateway.Players.GetPlayerByID(ShipControllers.First().ControllerInfo.ControllingIdentityId); if (Write && Player != null) { Grid.DebugWrite("Grid.FindControllingPlayer", $"Found player in control: {Player.DisplayName}"); } return(Player); } catch (Exception Scrap) { Grid.LogError("Grid.FindControllingPlayer", Scrap); return(null); } }