public static void InventoryDrop(Vector3D position, MyFixedPoint amount, MyDefinitionId definitionId) { MyObjectBuilder_FloatingObject floatingBuilder = new MyObjectBuilder_FloatingObject(); var content = (MyObjectBuilder_PhysicalObject)MyObjectBuilderSerializer.CreateNewObject(definitionId); var gasContainer = content as MyObjectBuilder_GasContainerObject; if (gasContainer != null) gasContainer.GasLevel = 1f; floatingBuilder.Item = new MyObjectBuilder_InventoryItem() { Amount = amount, Content = content }; floatingBuilder.PersistentFlags = MyPersistentEntityFlags2.InScene; // Very important floatingBuilder.PositionAndOrientation = new MyPositionAndOrientation() { Position = position, Forward = Vector3D.Forward.ToSerializableVector3(), Up = Vector3D.Up.ToSerializableVector3(), }; floatingBuilder.CreateAndSyncEntity(); }
public override bool Invoke(string messageText) { MyObjectBuilder_Base content = null; string[] options; decimal amount = 1; var match = Regex.Match(messageText, @"/drop\s{1,}(?:(?<Key>.+)\s(?<Value>[+-]?((\d+(\.\d*)?)|(\.\d+)))|(?<Key>.+))", RegexOptions.IgnoreCase); if (match.Success && content == null) { var itemName = match.Groups["Key"].Value; var strAmount = match.Groups["Value"].Value; if (!decimal.TryParse(strAmount, out amount)) amount = 1; if (!Support.FindPhysicalParts(_oreNames, _ingotNames, _physicalItemNames, _physicalItems, itemName, out content, out options) && options.Length > 0) { MyAPIGateway.Utilities.ShowMessage("Did you mean", String.Join(", ", options) + " ?"); return true; } } if (content != null) { if (amount < 0) amount = 1; if (content.TypeId != typeof(MyObjectBuilder_Ore) && content.TypeId != typeof(MyObjectBuilder_Ingot)) { // must be whole numbers. amount = Math.Round(amount, 0); } MyObjectBuilder_FloatingObject floatingBuilder = new MyObjectBuilder_FloatingObject(); floatingBuilder.Item = new MyObjectBuilder_InventoryItem() { Amount = MyFixedPoint.DeserializeString(amount.ToString(CultureInfo.InvariantCulture)), Content = content }; floatingBuilder.PersistentFlags = MyPersistentEntityFlags2.InScene; // Very important var worldMatrix = MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.WorldMatrix; Vector3D position; if (MyAPIGateway.Session.Player.Controller.ControlledEntity.Entity.Parent == null) { position = worldMatrix.Translation + worldMatrix.Forward * 1.5f + worldMatrix.Up * 1.5f; // Spawn item 1.5m in front of player. } else { position = worldMatrix.Translation + worldMatrix.Forward * 1.5f; // Spawn item 1.5m in front of player in cockpit. } floatingBuilder.PositionAndOrientation = new MyPositionAndOrientation() { Position = position, Forward = worldMatrix.Forward.ToSerializableVector3(), Up = worldMatrix.Up.ToSerializableVector3(), }; floatingBuilder.CreateAndSyncEntity(); return true; } MyAPIGateway.Utilities.ShowMessage("Unknown Item", "Could not find the specified name."); return true; }
public static void InventoryDrop(IMyEntity entity, MyFixedPoint amount, MyDefinitionId definitionId) { Vector3D position; if (entity is IMyCharacter) position = entity.WorldMatrix.Translation + entity.WorldMatrix.Forward * 1.5f + entity.WorldMatrix.Up * 1.5f; // Spawn item 1.5m in front of player. else position = entity.WorldMatrix.Translation + entity.WorldMatrix.Forward * 1.5f; // Spawn item 1.5m in front of player in cockpit. MyObjectBuilder_FloatingObject floatingBuilder = new MyObjectBuilder_FloatingObject(); var content = (MyObjectBuilder_PhysicalObject)MyObjectBuilderSerializer.CreateNewObject(definitionId); var gasContainer = content as MyObjectBuilder_GasContainerObject; if (gasContainer != null) gasContainer.GasLevel = 1f; floatingBuilder.Item = new MyObjectBuilder_InventoryItem() { Amount = amount, Content = content }; floatingBuilder.PersistentFlags = MyPersistentEntityFlags2.InScene; // Very important floatingBuilder.PositionAndOrientation = new MyPositionAndOrientation() { Position = position, Forward = entity.WorldMatrix.Forward.ToSerializableVector3(), Up = entity.WorldMatrix.Up.ToSerializableVector3(), }; floatingBuilder.CreateAndSyncEntity(); }