Exemplo n.º 1
0
        public static void FillInventoryWithDefaults(MyObjectBuilder_Inventory inventory, MyScenarioDefinition scenario)
        {
            if (inventory.Items == null)
            {
                inventory.Items = new List <MyObjectBuilder_InventoryItem>(15);
            }
            else
            {
                inventory.Items.Clear();
            }

            if (scenario != null)
            {
                MyStringId[] guns;
                if (MySession.Static.CreativeMode)
                {
                    guns = scenario.CreativeModeWeapons;// new string[] { "AngleGrinderItem", "AutomaticRifleItem", "HandDrillItem", "WelderItem" };
                }
                else
                {
                    guns = scenario.SurvivalModeWeapons;// new string[] { "AngleGrinderItem", "HandDrillItem", "WelderItem" };
                }
                if (guns != null)
                {
                    foreach (var gun in guns)
                    {
                        var inventoryItem = Sandbox.Common.ObjectBuilders.Serializer.MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount  = 1;
                        inventoryItem.Content = Sandbox.Common.ObjectBuilders.Serializer.MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_PhysicalGunObject>(gun.ToString());
                        inventory.Items.Add(inventoryItem);
                    }
                }
            }
        }
Exemplo n.º 2
0
 public void RefreshInventory()
 {
     try
     {
         if (BackingObject != null)
         {
             //Update the base entity
             MyObjectBuilder_Inventory inventory = (MyObjectBuilder_Inventory)InvokeEntityMethod(BackingObject, InventoryGetObjectBuilderMethod);
             ObjectBuilder = inventory;
         }
         else
         {
             //Update the item manager
             MyObjectBuilder_Inventory  inventory = (MyObjectBuilder_Inventory)ObjectBuilder;
             List <InventoryItemEntity> itemList  = new List <InventoryItemEntity>();
             foreach (MyObjectBuilder_InventoryItem item in inventory.Items)
             {
                 InventoryItemEntity newItem = new InventoryItemEntity(item);
                 newItem.Container = this;
                 itemList.Add(newItem);
             }
             m_itemManager.Load(itemList);
         }
     }
     catch (Exception ex)
     {
         LogManager.ErrorLog.WriteLine(ex);
     }
 }
Exemplo n.º 3
0
 public InventoryEntity( MyObjectBuilder_Inventory definition, Object backingObject )
     : base(definition, backingObject)
 {
     //m_itemManager = new InventoryItemManager(this, backingObject, InventoryGetItemListMethod);
     //m_itemManager.Refresh();
     m_itemDeltaQueue = new Queue<InventoryDelta>( );
 }
Exemplo n.º 4
0
 public InventoryEntity(MyObjectBuilder_Inventory definition, Object backingObject)
     : base(definition, backingObject)
 {
     //m_itemManager = new InventoryItemManager(this, backingObject, InventoryGetItemListMethod);
     //m_itemManager.Refresh();
     m_itemDeltaQueue = new Queue <InventoryDelta>( );
 }
Exemplo n.º 5
0
        public InventoryEditorModel(MyObjectBuilder_Inventory inventory, float maxVolume, MyObjectBuilder_Character character = null)
        {
            _inventory = inventory;
            _maxVolume = maxVolume;
            _character = character;
            UpdateGeneralFromEntityBase();

            // Cube.InventorySize.X * CUbe.InventorySize.Y * CUbe.InventorySize.Z * 1000 * Sandbox.InventorySizeMultiplier;
            // or Cube.InventoryMaxVolume * 1000 * Sandbox.InventorySizeMultiplier;
            //Character.Inventory = 0.4 * 1000 * Sandbox.InventorySizeMultiplier;
        }
        public InventoryEntity(MyObjectBuilder_Inventory definition)
            : base(definition)
        {
            m_itemManager = new InventoryItemManager(this);

            List <InventoryItemEntity> itemList = new List <InventoryItemEntity>();

            foreach (MyObjectBuilder_InventoryItem item in definition.Items)
            {
                InventoryItemEntity newItem = new InventoryItemEntity(item);
                newItem.Container = this;
                itemList.Add(newItem);
            }
            m_itemManager.Load(itemList);
        }
Exemplo n.º 7
0
        public InventoryEntity( MyObjectBuilder_Inventory definition )
            : base(definition)
        {
            /*
            m_itemManager = new InventoryItemManager(this);

            List<InventoryItemEntity> itemList = new List<InventoryItemEntity>();
            foreach (MyObjectBuilder_InventoryItem item in definition.Items)
            {
                InventoryItemEntity newItem = new InventoryItemEntity(item);
                newItem.Container = this;
                itemList.Add(newItem);
            }
            m_itemManager.Load(itemList);
             */
            m_itemDeltaQueue = new Queue<InventoryDelta>( );
        }
Exemplo n.º 8
0
 public InventoryEntity(MyObjectBuilder_Inventory definition)
     : base(definition)
 {
     /*
      * m_itemManager = new InventoryItemManager(this);
      *
      * List<InventoryItemEntity> itemList = new List<InventoryItemEntity>();
      * foreach (MyObjectBuilder_InventoryItem item in definition.Items)
      * {
      *      InventoryItemEntity newItem = new InventoryItemEntity(item);
      *      newItem.Container = this;
      *      itemList.Add(newItem);
      * }
      * m_itemManager.Load(itemList);
      */
     m_itemDeltaQueue = new Queue <InventoryDelta>( );
 }
        public void Init(MyObjectBuilder_Inventory objectBuilder)
        {
            m_items.Clear();

            if (objectBuilder == null)
                return;

            foreach (var item in objectBuilder.Items)
            {
                if (item.Amount > 0)
                {
                    MyStockpileItem newItem = new MyStockpileItem();
                    newItem.Amount = (int)(item.Amount);
                    newItem.Content = item.PhysicalContent;
                    m_items.Add(newItem);
                }
            }
        }
Exemplo n.º 10
0
        private void CheckOxygenInventory(MyObjectBuilder_Inventory inventory)
        {
            if (inventory == null)
            {
                return;
            }

            foreach (var inventoryItem in inventory.Items)
            {
                var oxygenContainer = inventoryItem.PhysicalContent as MyObjectBuilder_OxygenContainerObject;
                if (oxygenContainer == null)
                {
                    continue;
                }

                FixOxygenContainer(oxygenContainer);
            }
        }
Exemplo n.º 11
0
 public void Init(MyObjectBuilder_Inventory objectBuilder)
 {
     this.m_items.Clear();
     if (objectBuilder != null)
     {
         foreach (MyObjectBuilder_InventoryItem item in objectBuilder.Items)
         {
             if (item.Amount > 0)
             {
                 MyStockpileItem item2 = new MyStockpileItem {
                     Amount  = (int)item.Amount,
                     Content = item.PhysicalContent
                 };
                 this.m_items.Add(item2);
             }
         }
     }
 }
        public void Init(MyObjectBuilder_Inventory objectBuilder)
        {
            m_items.Clear();

            if (objectBuilder == null)
            {
                return;
            }

            foreach (var item in objectBuilder.Items)
            {
                if (item.Amount > 0)
                {
                    MyStockpileItem newItem = new MyStockpileItem();
                    newItem.Amount  = (int)(item.Amount);
                    newItem.Content = item.PhysicalContent;
                    m_items.Add(newItem);
                }
            }
        }
        private static InventoryEditorModel ParseInventory(MyObjectBuilder_Inventory inventory, MyCubeBlockDefinition definition = null)
        {
            if (inventory == null)
            {
                return(null);
            }
            float volumeMultiplier = 1f; // Unsure if there should be a default of 1 if there isn't a InventorySize defined.

            if (definition == null)
            {
                volumeMultiplier = 0.4f;
            }
            else
            {
                var definitionType          = definition.GetType();
                var invSizeField            = definitionType.GetField("InventorySize");
                var inventoryMaxVolumeField = definitionType.GetField("InventoryMaxVolume");
                if (invSizeField != null)
                {
                    var invSize = (Vector3)invSizeField.GetValue(definition);
                    volumeMultiplier = invSize.X * invSize.Y * invSize.Z;
                }
                if (inventoryMaxVolumeField != null)
                {
                    var maxSize = (float)inventoryMaxVolumeField.GetValue(definition);
                    volumeMultiplier = MathHelper.Min(volumeMultiplier, maxSize);
                }
            }

            var settings = SpaceEngineersCore.WorldResource.Checkpoint.Settings;

            return(new InventoryEditorModel(inventory, volumeMultiplier * 1000 * settings.InventorySizeMultiplier, null)
            {
                Name = inventory.InventoryFlags.ToString(), IsValid = true
            });
        }
Exemplo n.º 14
0
        public static string RepairSandBox(WorldResource world)
        {
            var str           = new StringBuilder();
            var statusNormal  = true;
            var missingFiles  = false;
            var saveAfterScan = false;

            // repair will use the WorldResource, thus it won't have access to the wrapper classes.
            // Any repair must be on the raw XML or raw serialized classes.

            var repairWorld = world;

            repairWorld.LoadCheckpoint();

            var xDoc = repairWorld.LoadSectorXml();

            if (xDoc == null)
            {
                str.AppendLine("! Sector file is missing or broken.");
                str.AppendLine("! Unable to repair.");
                missingFiles = true;
            }
            else
            {
                var nsManager = xDoc.BuildXmlNamespaceManager();
                var nav       = xDoc.CreateNavigator();

                #region Updates the Group Control format.

                var shipNodes = nav.Select("MyObjectBuilder_Sector/SectorObjects/MyObjectBuilder_EntityBase[@xsi:type='MyObjectBuilder_CubeGrid']", nsManager);
                while (shipNodes.MoveNext())
                {
                    var groupBlocksNode = shipNodes.Current.SelectSingleNode("BlockGroups/MyObjectBuilder_BlockGroup/Blocks", nsManager);
                    if (groupBlocksNode != null)
                    {
                        var entityIdNodes = groupBlocksNode.Select("long", nsManager);
                        var removeNodes   = new List <XPathNavigator>();
                        while (entityIdNodes.MoveNext())
                        {
                            var entityId = Convert.ToInt64(entityIdNodes.Current.Value);
                            var node     = shipNodes.Current.SelectSingleNode(string.Format("CubeBlocks/*[./EntityId='{0}']", entityId), nsManager);
                            if (node != null)
                            {
                                var x = node.ToValue <string>("Min/@x");
                                var y = node.ToValue <string>("Min/@y");
                                var z = node.ToValue <string>("Min/@z");

                                entityIdNodes.Current.InsertBefore(string.Format("<Vector3I><X>{0}</X><Y>{1}</Y><Z>{2}</Z></Vector3I>", x, y, z));
                                removeNodes.Add(entityIdNodes.Current.Clone());
                                str.AppendLine("* Replaced BlockGroup item.");
                                saveAfterScan = true;
                                statusNormal  = false;
                            }
                        }

                        foreach (var node in removeNodes)
                        {
                            node.DeleteSelf();
                        }
                    }
                }

                //<BlockGroups>
                //<MyObjectBuilder_BlockGroup>
                //    <Name>Open</Name>
                //    <Blocks>
                //    <long>-2287829012813351669</long>
                //    <long>-1828477283611406765</long>
                //    <long>73405095007807299</long>
                //    <long>-8785290580748247313</long>
                //    </Blocks>
                //</MyObjectBuilder_BlockGroup>
                //</BlockGroups>

                //<BlockGroups>
                //<MyObjectBuilder_BlockGroup>
                //    <Name>Open</Name>
                //    <Blocks>
                //    <Vector3I>
                //        <X>-1</X>
                //        <Y>2</Y>
                //        <Z>-4</Z>
                //    </Vector3I>
                //    <Vector3I>
                //        <X>-1</X>
                //        <Y>7</Y>
                //        <Z>2</Z>
                //    </Vector3I>
                //    <Vector3I>
                //        <X>-1</X>
                //        <Y>8</Y>
                //        <Z>-9</Z>
                //    </Vector3I>
                //    <Vector3I>
                //        <X>-1</X>
                //        <Y>13</Y>
                //        <Z>-3</Z>
                //    </Vector3I>
                //    </Blocks>
                //</MyObjectBuilder_BlockGroup>
                //</BlockGroups>

                if (saveAfterScan)
                {
                    repairWorld.SaveSectorXml(true, xDoc);
                    str.AppendLine("* Saved changes.");
                }

                #endregion
            }

            repairWorld.LoadDefinitionsAndMods();
            repairWorld.LoadSector();

            if (repairWorld.Checkpoint == null)
            {
                statusNormal = false;
                str.AppendLine("! Checkpoint file is missing or broken.");
                str.AppendLine("! Unable to repair.");
                missingFiles = true;
            }

            if (repairWorld.SectorData == null)
            {
                statusNormal = false;
                str.AppendLine("! Sector file is missing or broken.");
                str.AppendLine("! Unable to repair.");
                missingFiles = true;
            }

            if (!missingFiles)
            {
                MyObjectBuilder_Character character;

                saveAfterScan = false;

                Dictionary <long, long> idReplacementTable = new Dictionary <long, long>();
                if (repairWorld.Checkpoint.Identities != null)
                {
                    foreach (var identity in repairWorld.Checkpoint.Identities)
                    {
                        if (!SpaceEngineersApi.ValidateEntityType(IDType.IDENTITY, identity.IdentityId))
                        {
                            identity.IdentityId = MergeId(identity.IdentityId, IDType.IDENTITY, ref idReplacementTable);

                            statusNormal = false;
                            str.AppendLine("! Fixed player identity.");
                            saveAfterScan = true;
                        }
                    }
                }

                if (repairWorld.Checkpoint.AllPlayersData != null)
                {
                    foreach (var player in repairWorld.Checkpoint.AllPlayersData.Dictionary)
                    {
                        if (!SpaceEngineersApi.ValidateEntityType(IDType.IDENTITY, player.Value.IdentityId))
                        {
                            player.Value.IdentityId = MergeId(player.Value.IdentityId, IDType.IDENTITY, ref idReplacementTable);

                            statusNormal = false;
                            str.AppendLine("! Fixed player identity.");
                            saveAfterScan = true;
                        }
                    }
                }

                if (saveAfterScan)
                {
                    repairWorld.SaveCheckPointAndSector(true);
                    str.AppendLine("* Saved changes.");
                }

                if (world.SaveType == SaveWorldType.Local)
                {
                    var player = repairWorld.FindPlayerCharacter();

                    if (player == null)
                    {
                        statusNormal = false;
                        str.AppendLine("! No active Player in Save content.");

                        character = repairWorld.FindAstronautCharacter();
                        if (character != null)
                        {
                            repairWorld.Checkpoint.ControlledObject = character.EntityId;
                            repairWorld.Checkpoint.CameraController = MyCameraControllerEnum.Entity;
                            repairWorld.Checkpoint.CameraEntity     = character.EntityId;
                            str.AppendLine("* Found and Set new active Player.");
                            repairWorld.SaveCheckPointAndSector(true);
                            str.AppendLine("* Saved changes.");
                        }
                        else
                        {
                            var cockpit = repairWorld.FindPilotCharacter();
                            if (cockpit != null)
                            {
                                repairWorld.Checkpoint.ControlledObject = cockpit.EntityId;
                                repairWorld.Checkpoint.CameraController = MyCameraControllerEnum.ThirdPersonSpectator;
                                repairWorld.Checkpoint.CameraEntity     = 0;
                                str.AppendLine("* Found and Set new active Player.");
                                repairWorld.SaveCheckPointAndSector(true);
                                str.AppendLine("* Saved changes.");
                            }
                            else
                            {
                                // The game is sucessfully generating new characters now, so this code shouldn't be requried any more.

                                /*
                                 * str.AppendLine("! Could not find any Player Characters.");
                                 * character = new MyObjectBuilder_Character();
                                 * character.EntityId = SpaceEngineersApi.GenerateEntityId(IDType.IDENTITY);
                                 * character.PersistentFlags = MyPersistentEntityFlags2.CastShadows | MyPersistentEntityFlags2.InScene;
                                 * character.PositionAndOrientation = new MyPositionAndOrientation(VRageMath.Vector3D.Zero, VRageMath.Vector3.Forward, VRageMath.Vector3.Up);
                                 * character.CharacterModel = Sandbox.Game.Entities.Character.MyCharacter.DefaultModel;
                                 * character.ColorMaskHSV = new SerializableVector3(0, -1, 1); // White
                                 * character.Battery = new MyObjectBuilder_Battery { CurrentCapacity = 0.5f };
                                 * character.LightEnabled = false;
                                 * character.HeadAngle = new VRageMath.Vector2();
                                 * character.LinearVelocity = new VRageMath.Vector3();
                                 * character.AutoenableJetpackDelay = -1;
                                 * character.JetpackEnabled = true;
                                 * character.Inventory = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_Inventory>();
                                 *
                                 * // Add default items to Inventory.
                                 * MyObjectBuilder_InventoryItem item;
                                 * MyObjectBuilder_EntityBase gunEntity;
                                 *
                                 * character.Inventory.Items.Add(item = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_InventoryItem>());
                                 * item.Amount = 1;
                                 * item.ItemId = 0;
                                 * gunEntity = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_Welder>();
                                 * gunEntity.EntityId = SpaceEngineersApi.GenerateEntityId(IDType.ENTITY);
                                 * gunEntity.PersistentFlags = MyPersistentEntityFlags2.None;
                                 * item.PhysicalContent = new MyObjectBuilder_PhysicalGunObject {GunEntity = gunEntity};
                                 *
                                 * character.Inventory.Items.Add(item = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_InventoryItem>());
                                 * item.Amount = 1;
                                 * item.ItemId = 1;
                                 * gunEntity = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_AngleGrinder>();
                                 * gunEntity.EntityId = SpaceEngineersApi.GenerateEntityId(IDType.ENTITY);
                                 * gunEntity.PersistentFlags = MyPersistentEntityFlags2.None;
                                 * item.PhysicalContent = new MyObjectBuilder_PhysicalGunObject { GunEntity = gunEntity };
                                 *
                                 * character.Inventory.Items.Add(item = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_InventoryItem>());
                                 * item.Amount = 1;
                                 * item.ItemId = 2;
                                 * gunEntity = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_HandDrill>();
                                 * gunEntity.EntityId = SpaceEngineersApi.GenerateEntityId(IDType.ENTITY);
                                 * gunEntity.PersistentFlags = MyPersistentEntityFlags2.None;
                                 * item.PhysicalContent = new MyObjectBuilder_PhysicalGunObject { GunEntity = gunEntity };
                                 *
                                 * character.Inventory.Items.Add(item = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_InventoryItem>());
                                 * item.Amount = 1;
                                 * item.ItemId = 3;
                                 * gunEntity = SpaceEngineersCore.Resources.CreateNewObject<MyObjectBuilder_AutomaticRifle>();
                                 * gunEntity.EntityId = SpaceEngineersApi.GenerateEntityId(IDType.ENTITY);
                                 * gunEntity.PersistentFlags = MyPersistentEntityFlags2.None;
                                 * item.PhysicalContent = new MyObjectBuilder_PhysicalGunObject { GunEntity = gunEntity };
                                 *
                                 * repairWorld.Checkpoint.ControlledObject = character.EntityId;
                                 * repairWorld.Checkpoint.CameraController = MyCameraControllerEnum.Entity;
                                 * repairWorld.Checkpoint.CameraEntity = character.EntityId;
                                 *
                                 * repairWorld.SectorData.SectorObjects.Add(character);
                                 *
                                 * str.AppendLine("* Created new active Player.");
                                 * repairWorld.SaveCheckPointAndSector(true);
                                 * str.AppendLine("* Saved changes.");
                                 */
                            }
                        }
                    }

                    saveAfterScan = false;

                    // Make sure the character in a locally saved world has all tools.
                    // SubtypeNames for required tools.
                    var requiredItems = new[] {
                        "WelderItem", "AngleGrinderItem", "HandDrillItem"
                    };

                    character = repairWorld.FindAstronautCharacter()
                                ?? repairWorld.FindPilotCharacter().Pilot;

                    var inventoryBase = character.ComponentContainer.Components.FirstOrDefault(e => e.TypeId == "MyInventoryBase");
                    MyObjectBuilder_Inventory inventory = inventoryBase == null ? null : inventoryBase.Component as MyObjectBuilder_Inventory;

                    if (inventory != null)
                    {
                        requiredItems.ForEach(
                            delegate(string subtypeName)
                        {
                            if (!inventory.Items.Any(i =>
                                                     i.PhysicalContent != null &&
                                                     i.PhysicalContent.SubtypeName == subtypeName))
                            {
                                statusNormal = false;
                                str.AppendLine("! Replaced astronaut's missing " + subtypeName + ".");
                                saveAfterScan = true;
                                inventory.Items.Add(new MyObjectBuilder_InventoryItem
                                {
                                    Amount          = 1,
                                    PhysicalContent = new MyObjectBuilder_PhysicalGunObject {
                                        SubtypeName = subtypeName
                                    },
                                    ItemId = inventory.nextItemId,
                                });
                                inventory.nextItemId++;
                            }
                        });
                    }
                }

                // Scan through all items.
                foreach (var entity in repairWorld.SectorData.SectorObjects)
                {
                    if (entity is MyObjectBuilder_CubeGrid)
                    {
                        var cubeGrid = (MyObjectBuilder_CubeGrid)entity;

                        var list = cubeGrid.CubeBlocks.OfType <MyObjectBuilder_Cockpit>().ToArray();
                        for (var i = 0; i < list.Length; i++)
                        {
                            if (((MyObjectBuilder_Cockpit)list[i]).Pilot != null)
                            {
                                character = ((MyObjectBuilder_Cockpit)list[i]).Pilot;

                                if (!SpaceEngineersCore.Resources.Definitions.Characters.Any(c => c.Model == character.CharacterModel || c.Name == character.CharacterModel))
                                {
                                    character.CharacterModel = Sandbox.Game.Entities.Character.MyCharacter.DefaultModel;
                                    statusNormal             = false;
                                    str.AppendLine("! Fixed astronaut's CharacterModel.");
                                    saveAfterScan = true;
                                }
                            }
                        }

                        // TODO: search for cubeblocks that don't exist in the definitions.
                        //var definition = SpaceEngineersAPI.GetCubeDefinition(block.GetType(), CubeGrid.GridSizeEnum, block.SubtypeName);
                    }

                    character = entity as MyObjectBuilder_Character;
                    if (character != null)
                    {
                        if (!SpaceEngineersCore.Resources.Definitions.Characters.Any(c => c.Model == character.CharacterModel || c.Name == character.CharacterModel))
                        {
                            character.CharacterModel = Sandbox.Game.Entities.Character.MyCharacter.DefaultModel;
                            statusNormal             = false;
                            str.AppendLine("! Fixed astronaut's CharacterModel.");
                            saveAfterScan = true;
                        }
                    }
                }

                //if (world.Checkpoint.Players != null)
                //{
                //    foreach (var item in world.Checkpoint.Players.Dictionary)
                //    {
                //        if (!SpaceEngineersCore.Resources.Definitions.Characters.Any(c => c.Name == item.Value.PlayerModel))
                //        {
                //            item.Value.PlayerModel = SpaceEngineersCore.Resources.Definitions.Characters[0].Name;
                //            statusNormal = false;
                //            str.AppendLine("! Fixed astronaut's CharacterModel.");
                //            saveAfterScan = true;
                //        }

                //        // AllPlayers is obsolete.
                //        //if (item.Value.PlayerId == 0)
                //        //{
                //        //    item.Value.PlayerId = SpaceEngineersApi.GenerateEntityId();
                //        //    world.Checkpoint.AllPlayers.Add(new MyObjectBuilder_Checkpoint.PlayerItem(item.Value.PlayerId, "Repair", false, item.Value.SteamID, null));
                //        //    statusNormal = false;
                //        //    str.AppendLine("! Fixed corrupt or missing Player defitinion.");
                //        //    saveAfterScan = true;
                //        //}
                //    }
                //}

                if (saveAfterScan)
                {
                    repairWorld.SaveCheckPointAndSector(true);
                    str.AppendLine("* Saved changes.");
                }
            }

            if (statusNormal)
            {
                str.AppendLine("Detected no issues.");
            }

            return(str.ToString());
        }
Exemplo n.º 15
0
        public void Init(MyObjectBuilder_Inventory objectBuilder)
        {
            Clear();

            if (objectBuilder == null)
            {
                return;
            }

            if (objectBuilder.Mass.HasValue)
            {
                m_maxMass = objectBuilder.Mass.Value;
            }
            if (objectBuilder.Volume.HasValue)
            {
                m_maxVolume = objectBuilder.Volume.Value;
            }
            if (objectBuilder.Size.HasValue)
            {
                m_size = objectBuilder.Size.Value;
            }
            if (objectBuilder.InventoryFlags.HasValue)
            {
                m_flags = objectBuilder.InventoryFlags.Value;
            }

            if (!Sync.IsServer)
            {
                m_nextItemID = objectBuilder.nextItemId;
            }
            else
            {
                m_nextItemID = 0;
            }

            int i = 0;

            foreach (var item in objectBuilder.Items)
            {
                if (item.Amount <= 0)
                {
                    // Remove all items with 0 amount when loading inventory.
                    // Should only solve backward problems with saves. 0 amount items should not be created.
                    Debug.Fail(string.Format("Removing item with invalid amount: {0}x '{1}'. This is safe to ignore.", item.Amount, item.PhysicalContent.GetObjectId()));
                    continue;
                }

                var contentId = item.PhysicalContent.GetObjectId();

                if (!CanItemsBeAdded(item.Amount, contentId))
                {
                    continue;
                }

                var canStackWithItself = item.PhysicalContent.CanStack(item.PhysicalContent);
                if (!canStackWithItself)
                {
                    MyFixedPoint added = 0;
                    while (added < item.Amount)
                    {
                        AddItemsInternal(1, item.PhysicalContent, i, itemId: (Sync.IsServer) ? null : (uint?)item.ItemId);
                        added += 1;
                        ++i;
                    }
                }
                else
                {
                    if (Sync.IsServer)
                    {
                        AddItemsInternal(item.Amount, item.PhysicalContent, i);
                    }
                    else
                    {
                        //Building from information recieved from server - dont send msg about adding this
                        AddItemsInternal(item.Amount, item.PhysicalContent, i, itemId: item.ItemId);
                    }
                }
                i++;
            }
            VerifyIntegrity();
        }
Exemplo n.º 16
0
        public static void FillInventoryWithDefaults(MyObjectBuilder_Inventory inventory, MyScenarioDefinition scenario)
        {
            if (inventory.Items == null)
            {
                inventory.Items = new List <MyObjectBuilder_InventoryItem>();
            }
            else
            {
                inventory.Items.Clear();
            }

            if (scenario != null && MySession.Static.Settings.SpawnWithTools)
            {
                MyStringId[] guns;
                if (MySession.Static.CreativeMode)
                {
                    guns = scenario.CreativeModeWeapons;// new string[] { "AngleGrinderItem", "AutomaticRifleItem", "HandDrillItem", "WelderItem" };
                }
                else
                {
                    guns = scenario.SurvivalModeWeapons;// new string[] { "AngleGrinderItem", "HandDrillItem", "WelderItem" };
                }
                uint itemId = 0;
                if (guns != null)
                {
                    foreach (var gun in guns)
                    {
                        var inventoryItem = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount          = 1;
                        inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_PhysicalGunObject>(gun.ToString());
                        inventoryItem.ItemId          = itemId++;
                        inventory.Items.Add(inventoryItem);
                    }
                    inventory.nextItemId = itemId;
                }

                MyScenarioDefinition.StartingItem[] items;
                if (MySession.Static.CreativeMode)
                {
                    items = scenario.CreativeModeComponents;
                }
                else
                {
                    items = scenario.SurvivalModeComponents;
                }

                if (items != null)
                {
                    foreach (var item in items)
                    {
                        var inventoryItem = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount          = item.amount;
                        inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_Component>(item.itemName.ToString());
                        inventoryItem.ItemId          = itemId++;
                        inventory.Items.Add(inventoryItem);
                    }
                    inventory.nextItemId = itemId;
                }

                MyScenarioDefinition.StartingPhysicalItem[] physicalItems;
                if (MySession.Static.CreativeMode)
                {
                    physicalItems = scenario.CreativeModePhysicalItems;
                }
                else
                {
                    physicalItems = scenario.SurvivalModePhysicalItems;
                }

                if (physicalItems != null)
                {
                    foreach (var item in physicalItems)
                    {
                        var inventoryItem = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount = item.amount;
                        if (item.itemType.ToString().Equals("Ore"))
                        {
                            inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_Ore>(item.itemName.ToString());
                        }
                        else if (item.itemType.ToString().Equals("Ingot"))
                        {
                            inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_Ingot>(item.itemName.ToString());
                        }
                        else if (item.itemType.ToString().Equals("OxygenBottle"))
                        {
                            inventoryItem.Amount          = 1;
                            inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_OxygenContainerObject>(item.itemName.ToString());
                            (inventoryItem.PhysicalContent as MyObjectBuilder_GasContainerObject).GasLevel = (float)item.amount;
                        }
                        else if (item.itemType.ToString().Equals("GasBottle"))
                        {
                            inventoryItem.Amount          = 1;
                            inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_GasContainerObject>(item.itemName.ToString());
                            (inventoryItem.PhysicalContent as MyObjectBuilder_GasContainerObject).GasLevel = (float)item.amount;
                        }
                        inventoryItem.ItemId = itemId++;
                        inventory.Items.Add(inventoryItem);
                    }
                    inventory.nextItemId = itemId;
                }

                if (MySession.Static.CreativeMode)
                {
                    items = scenario.CreativeModeAmmoItems;
                }
                else
                {
                    items = scenario.SurvivalModeAmmoItems;
                }

                if (items != null)
                {
                    foreach (var item in items)
                    {
                        var inventoryItem = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount          = item.amount;
                        inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_AmmoMagazine>(item.itemName.ToString());
                        inventoryItem.ItemId          = itemId++;
                        inventory.Items.Add(inventoryItem);
                    }
                    inventory.nextItemId = itemId;
                }
            }
        }
Exemplo n.º 17
0
        public static void FillInventoryWithDefaults(MyObjectBuilder_Inventory inventory, MyScenarioDefinition scenario)
        {
            if (inventory.Items == null)
                inventory.Items = new List<MyObjectBuilder_InventoryItem>();
            else
                inventory.Items.Clear();

            if (scenario != null && MySession.Static.Settings.SpawnWithTools)
            {
                MyStringId[] guns;
                if (MySession.Static.CreativeMode)
                    guns = scenario.CreativeModeWeapons;// new string[] { "AngleGrinderItem", "AutomaticRifleItem", "HandDrillItem", "WelderItem" };
                else
                    guns = scenario.SurvivalModeWeapons;// new string[] { "AngleGrinderItem", "HandDrillItem", "WelderItem" };

                uint itemId = 0;
                if (guns != null)
                {
                    foreach (var gun in guns)
                    {
                        var inventoryItem = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount = 1;
                        inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_PhysicalGunObject>(gun.ToString());
                        inventoryItem.ItemId = itemId++;
                        inventory.Items.Add(inventoryItem);
                    }
                    inventory.nextItemId = itemId;
                }

                MyScenarioDefinition.StartingItem[] items;
                if (MySession.Static.CreativeMode)
                    items = scenario.CreativeModeComponents;
                else
                    items = scenario.SurvivalModeComponents;

                if (items != null)
                {
                    foreach (var item in items)
                    {
                        var inventoryItem = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount = item.amount;
                        inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_Component>(item.itemName.ToString());
                        inventoryItem.ItemId = itemId++;
                        inventory.Items.Add(inventoryItem);
                    }
                    inventory.nextItemId = itemId;
                }

                MyScenarioDefinition.StartingPhysicalItem[] physicalItems;
                if (MySession.Static.CreativeMode)
                    physicalItems = scenario.CreativeModePhysicalItems;
                else
                    physicalItems = scenario.SurvivalModePhysicalItems;

                if (physicalItems != null)
                {
                    foreach (var item in physicalItems)
                    {
                        var inventoryItem = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount = item.amount;
                        if (item.itemType.ToString().Equals("Ore"))
                        {
                            inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_Ore>(item.itemName.ToString());
                        }
                        else if (item.itemType.ToString().Equals("Ingot"))
                        {
                            inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_Ingot>(item.itemName.ToString());
                        }
                        else if (item.itemType.ToString().Equals("OxygenBottle"))
                        {
                            inventoryItem.Amount = 1;
                            inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_OxygenContainerObject>(item.itemName.ToString());
                            (inventoryItem.PhysicalContent as MyObjectBuilder_GasContainerObject).GasLevel = (float)item.amount;
                        }
                        else if (item.itemType.ToString().Equals("GasBottle"))
                        {
                            inventoryItem.Amount = 1;
                            inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_GasContainerObject>(item.itemName.ToString());
                            (inventoryItem.PhysicalContent as MyObjectBuilder_GasContainerObject).GasLevel = (float)item.amount;
                        }
                        inventoryItem.ItemId = itemId++;
                        inventory.Items.Add(inventoryItem);
                    }
                    inventory.nextItemId = itemId;
                }

                if (MySession.Static.CreativeMode)
                    items = scenario.CreativeModeAmmoItems;
                else
                    items = scenario.SurvivalModeAmmoItems;

                if (items != null)
                {
                    foreach (var item in items)
                    {
                        var inventoryItem = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_InventoryItem>();
                        inventoryItem.Amount = item.amount;
                        inventoryItem.PhysicalContent = MyObjectBuilderSerializer.CreateNewObject<MyObjectBuilder_AmmoMagazine>(item.itemName.ToString());
                        inventoryItem.ItemId = itemId++;
                        inventory.Items.Add(inventoryItem);
                    }
                    inventory.nextItemId = itemId;
                }
            }
        }
		private void CheckOxygenInventory(MyObjectBuilder_Inventory inventory)
		{
			if (inventory == null)
				return;

			foreach (var inventoryItem in inventory.Items)
			{
				var oxygenContainer = inventoryItem.PhysicalContent as MyObjectBuilder_OxygenContainerObject;
				if (oxygenContainer == null)
					continue;

				FixOxygenContainer(oxygenContainer);
			}
		}
Exemplo n.º 19
0
        public void Init(MyObjectBuilder_Inventory objectBuilder)
        {
            Clear(false);

            if (objectBuilder == null)
            {
                if (myObjectBuilder_InventoryDefinition != null)
                {
                    m_maxMass = (MyFixedPoint)myObjectBuilder_InventoryDefinition.InventoryMass;
                    m_maxVolume = (MyFixedPoint)myObjectBuilder_InventoryDefinition.InventoryVolume;
                    m_maxItemCount = myObjectBuilder_InventoryDefinition.MaxItemCount;
                }
                return;
            }

            if (objectBuilder.Mass.HasValue)
                m_maxMass = objectBuilder.Mass.Value;
            if (objectBuilder.Volume.HasValue)
            {
                MyFixedPoint savedValue = objectBuilder.Volume.Value;
                if (savedValue != MyFixedPoint.MaxValue || MyPerGameSettings.ConstrainInventory() == false)
                {
                    m_maxVolume = savedValue;
                }
            }
            if (objectBuilder.MaxItemCount.HasValue)
                m_maxItemCount = objectBuilder.MaxItemCount.Value;
            if (objectBuilder.InventoryFlags.HasValue)
                m_flags = objectBuilder.InventoryFlags.Value;

            RemoveEntityOnEmpty = objectBuilder.RemoveEntityOnEmpty;

            // HACK: when the session is being loaded, ids get reset. Later on they stay the same. This fixes the issue with desync of ids which may cause inventories to work incorrectly
            bool keepIds = !Sync.IsServer || MySession.Static.Ready;
            if (keepIds)
                m_nextItemID = objectBuilder.nextItemId;
            else
                m_nextItemID = 0;

            int i = 0;
            foreach (var item in objectBuilder.Items)
            {
                if (item.Amount <= 0)
                {
                    // Remove all items with 0 amount when loading inventory.
                    // Should only solve backward problems with saves. 0 amount items should not be created.
                    Debug.Fail(string.Format("Removing item with invalid amount: {0}x '{1}'. This is safe to ignore.", item.Amount, item.PhysicalContent.GetObjectId()));
                    continue;
                }

                if (item.PhysicalContent == null)
                {
                    continue;
                }

                if (!MyInventoryItemAdapter.Static.TryAdapt(item.PhysicalContent.GetObjectId()))
                {
                    Debug.Assert(false, "Invalid inventory item: " + item.PhysicalContent.GetObjectId().ToString() + " Not adding it!");
                    continue;
                }

                var contentId = item.PhysicalContent.GetObjectId();

                var fittingAmount = ComputeAmountThatFits(contentId);
                var addedAmount = MyFixedPoint.Min(fittingAmount, item.Amount);

                if (addedAmount == MyFixedPoint.Zero)
                    continue;

                var canStackWithItself = item.PhysicalContent.CanStack(item.PhysicalContent);
                if (!canStackWithItself)
                {
                    MyFixedPoint added = 0;
                    while (added < addedAmount)
                    {
                        AddItemsInternal(1, item.PhysicalContent, itemId: !keepIds ? null : (uint?)item.ItemId, index: i);
                        added += 1;
                        ++i;
                    }
                }
                else
                {
                    AddItemsInternal(addedAmount, item.PhysicalContent, itemId: !keepIds ? null : (uint?)item.ItemId, index: i);
                }
                i++;
            }
            VerifyIntegrity();
        }
Exemplo n.º 20
0
        public void Init(MyObjectBuilder_Inventory objectBuilder)
        {
            Clear();

            if (objectBuilder == null)
            {
                if (myObjectBuilder_InventoryDefinition != null)
                {
                    m_maxMass = (MyFixedPoint)myObjectBuilder_InventoryDefinition.InventoryMass;
                    m_maxVolume = (MyFixedPoint)myObjectBuilder_InventoryDefinition.InventoryVolume;
                    m_size = new Vector3(myObjectBuilder_InventoryDefinition.InventorySizeX, myObjectBuilder_InventoryDefinition.InventorySizeY, myObjectBuilder_InventoryDefinition.InventorySizeZ);
                }
                return;
            }

            if (objectBuilder.Mass.HasValue)
                m_maxMass = objectBuilder.Mass.Value;
            if (objectBuilder.Volume.HasValue)
            {
                MyFixedPoint savedValue = objectBuilder.Volume.Value;
                if(savedValue != MyFixedPoint.MaxValue || MyPerGameSettings.ConstrainInventory() == false)
                {
                    m_maxVolume = savedValue;
                }
            }
            if (objectBuilder.Size.HasValue)
                m_size = objectBuilder.Size.Value;
            if (objectBuilder.InventoryFlags.HasValue)
                m_flags = objectBuilder.InventoryFlags.Value;

            if (!Sync.IsServer)
                m_nextItemID = objectBuilder.nextItemId;
            else
                m_nextItemID = 0;

            int i = 0;
            foreach (var item in objectBuilder.Items)
            {
                if (item.Amount <= 0)
                {
                    // Remove all items with 0 amount when loading inventory.
                    // Should only solve backward problems with saves. 0 amount items should not be created.
                    Debug.Fail(string.Format("Removing item with invalid amount: {0}x '{1}'. This is safe to ignore.", item.Amount, item.PhysicalContent.GetObjectId()));
                    continue;
                }

                if (!MyInventoryItemAdapter.Static.TryAdapt(item.PhysicalContent.GetObjectId()))
                {
                    Debug.Assert(false, "Invalid inventory item: " + item.PhysicalContent.GetObjectId().ToString() + " Not adding it!");
                    continue;
                }

                var contentId = item.PhysicalContent.GetObjectId();

                if (!CanItemsBeAdded(item.Amount, contentId))
                    continue;

                var canStackWithItself = item.PhysicalContent.CanStack(item.PhysicalContent);
                if (!canStackWithItself)
                {
                    MyFixedPoint added = 0;
                    while (added < item.Amount)
                    {
                        AddItemsInternal(1, item.PhysicalContent, i, itemId: (Sync.IsServer) ? null : (uint?)item.ItemId);
                        added += 1;
                        ++i;
                    }
                }
                else
                {
                    if (Sync.IsServer)
                        AddItemsInternal(item.Amount, item.PhysicalContent, i);
                    else
                        //Building from information recieved from server - dont send msg about adding this
                        AddItemsInternal(item.Amount, item.PhysicalContent, i, itemId: item.ItemId);
                }
                i++;
            }
            VerifyIntegrity();
        }