Esempio n. 1
0
    /**
     * 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;
    }
Esempio n. 2
0
        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);
            }
        }