Esempio n. 1
0
 private bool InventoryEmpty(SaveComponent inventoryComponent)
 {
     for (int i = 0; i < inventoryComponent.DataFields.Count; i++)
     {
         if (inventoryComponent.DataFields[i].PropertyName == "mInventoryStacks")
         {
             ArrayProperty inventoryArray = (ArrayProperty)inventoryComponent.DataFields[i];
             for (int j = 0; j < ((ArrayProperty)inventoryComponent.DataFields[i]).Elements.Count; j++)
             {
                 StructProperty    inventoryStruct = (StructProperty)inventoryArray.Elements[j];
                 DynamicStructData inventoryItem   = (DynamicStructData)inventoryStruct.Data;
                 for (int k = 0; k < inventoryItem.Fields.Count; k++)
                 {
                     if (inventoryItem.Fields[k].PropertyName == "NumItems")
                     {
                         IntProperty itemCount = (IntProperty)inventoryItem.Fields[k];
                         if (itemCount.Value != 0)
                         {
                             return(false);
                         }
                     }
                 }
             }
             return(true);
         }
     }
     return(true);
 }
Esempio n. 2
0
        private int MassDismantle(List <SaveObjectModel> objects, ArrayProperty inventory, SaveObjectModel rootItem)
        {
            int count = 0;

            foreach (SaveObjectModel item in objects)
            {
                if (item is SaveEntityModel)
                {
                    if (IsPointInPolygon(((SaveEntityModel)item).Position, polygon) && minZ <= ((SaveEntityModel)item).Position.Z && ((SaveEntityModel)item).Position.Z <= maxZ)
                    {
                        ArrayPropertyViewModel dismantleRefund = ((SaveEntityModel)item).FindField <ArrayPropertyViewModel>("mDismantleRefund");
                        if (dismantleRefund != null)
                        {
                            foreach (SerializedPropertyViewModel property in dismantleRefund.Elements)
                            {
                                DynamicStructData itemAmountStruct = (DynamicStructData)((StructProperty)property.Model).Data;
                                string            itemPath         = ((ObjectProperty)itemAmountStruct.Fields[0]).PathName;
                                int    itemAmount = ((IntProperty)itemAmountStruct.Fields[1]).Value;
                                byte[] bytes      = PrepareForParse(itemPath, itemAmount);
                                using (MemoryStream ms = new MemoryStream(bytes))
                                    using (BinaryReader reader = new BinaryReader(ms))
                                    {
                                        SerializedProperty prop = SerializedProperty.Parse(reader);
                                        inventory.Elements.Add(prop);
                                    }
                            }
                        }
                        if (item.FindField <ObjectPropertyViewModel>("mInventory") != null)
                        {
                            inventory.Elements.AddRange(((ArrayProperty)rootItem.FindChild(item.FindField <ObjectPropertyViewModel>("mInventory").Str2, false).FindField <ArrayPropertyViewModel>("mInventoryStacks").Model).Elements);
                        }
                        if (item.FindField <ObjectPropertyViewModel>("mStorageInventory") != null)
                        {
                            inventory.Elements.AddRange(((ArrayProperty)rootItem.FindChild(item.FindField <ObjectPropertyViewModel>("mStorageInventory").Str2, false).FindField <ArrayPropertyViewModel>("mInventoryStacks").Model).Elements);
                        }
                        if (item.FindField <ObjectPropertyViewModel>("mInputInventory") != null)
                        {
                            inventory.Elements.AddRange(((ArrayProperty)rootItem.FindChild(item.FindField <ObjectPropertyViewModel>("mInputInventory").Str2, false).FindField <ArrayPropertyViewModel>("mInventoryStacks").Model).Elements);
                        }
                        if (item.FindField <ObjectPropertyViewModel>("mOutputInventory") != null)
                        {
                            inventory.Elements.AddRange(((ArrayProperty)rootItem.FindChild(item.FindField <ObjectPropertyViewModel>("mOutputInventory").Str2, false).FindField <ArrayPropertyViewModel>("mInventoryStacks").Model).Elements);
                        }
                        rootItem.Remove(item);
                        count++;
                    }
                }
            }
            return(count);
        }
        private ArrayProperty ArrangeInventory(ArrayProperty inventory)
        {
            SortedDictionary <string, int> stacks = new SortedDictionary <string, int>();

            foreach (StructProperty inventoryStruct in inventory.Elements.Cast <StructProperty>())
            {
                DynamicStructData inventoryStack = (DynamicStructData)inventoryStruct.Data;
                InventoryItem     inventoryItem  = (InventoryItem)((StructProperty)inventoryStack.Fields[0]).Data;
                IntProperty       itemCount      = (IntProperty)inventoryStack.Fields[1];
                if (!stacks.ContainsKey(inventoryItem.ItemType))
                {
                    stacks[inventoryItem.ItemType] = 0;
                }
                stacks[inventoryItem.ItemType] += itemCount.Value;
            }
            ArrayProperty newInventory = new ArrayProperty("mInventoryStacks")
            {
                Type = "StructProperty"
            };

            foreach (KeyValuePair <string, int> itemStack in stacks)
            {
                string itemPath = itemStack.Key;
                if (string.IsNullOrWhiteSpace(itemPath))
                {
                    continue;
                }
                int    itemAmount = itemStack.Value;
                byte[] bytes      = PrepareForParse(itemPath, itemAmount);
                using (MemoryStream ms = new MemoryStream(bytes))
                    using (BinaryReader reader = new BinaryReader(ms))
                    {
                        SerializedProperty prop = SerializedProperty.Parse(reader);
                        newInventory.Elements.Add(prop);
                    }
            }
            return(newInventory);
        }
        private int MassDismantle(List <SaveObjectModel> objects, ArrayProperty inventory, SaveObjectModel rootItem)
        {
            int count = 0;

            foreach (SaveObjectModel item in objects)
            {
                if (item is SaveEntityModel)
                {
                    if (IsPointInPolygon(((SaveEntityModel)item).Position, polygon) && minZ <= ((SaveEntityModel)item).Position.Z && ((SaveEntityModel)item).Position.Z <= maxZ)
                    {
                        ArrayPropertyViewModel dismantleRefund = ((SaveEntityModel)item).FindField <ArrayPropertyViewModel>("mDismantleRefund");
                        if (dismantleRefund != null)
                        {
                            foreach (SerializedPropertyViewModel property in dismantleRefund.Elements)
                            {
                                DynamicStructData itemAmountStruct = (DynamicStructData)((StructProperty)property.Model).Data;
                                string            itemPath         = ((ObjectProperty)itemAmountStruct.Fields[0]).PathName;
                                int    itemAmount = ((IntProperty)itemAmountStruct.Fields[1]).Value;
                                byte[] bytes      = PrepareForParse(itemPath, itemAmount);
                                using (MemoryStream ms = new MemoryStream(bytes))
                                    using (BinaryReader reader = new BinaryReader(ms))
                                    {
                                        SerializedProperty prop = SerializedProperty.Parse(reader);
                                        inventory.Elements.Add(prop);
                                    }
                            }
                        }
                        if (item.FindField <ObjectPropertyViewModel>("mInventory") != null)
                        {
                            inventory.Elements.AddRange(((ArrayProperty)rootItem.FindChild(item.FindField <ObjectPropertyViewModel>("mInventory").Str2, false).FindField <ArrayPropertyViewModel>("mInventoryStacks").Model).Elements);
                        }
                        if (item.FindField <ObjectPropertyViewModel>("mStorageInventory") != null)
                        {
                            inventory.Elements.AddRange(((ArrayProperty)rootItem.FindChild(item.FindField <ObjectPropertyViewModel>("mStorageInventory").Str2, false).FindField <ArrayPropertyViewModel>("mInventoryStacks").Model).Elements);
                        }
                        if (item.FindField <ObjectPropertyViewModel>("mInputInventory") != null)
                        {
                            inventory.Elements.AddRange(((ArrayProperty)rootItem.FindChild(item.FindField <ObjectPropertyViewModel>("mInputInventory").Str2, false).FindField <ArrayPropertyViewModel>("mInventoryStacks").Model).Elements);
                        }
                        if (item.FindField <ObjectPropertyViewModel>("mOutputInventory") != null)
                        {
                            inventory.Elements.AddRange(((ArrayProperty)rootItem.FindChild(item.FindField <ObjectPropertyViewModel>("mOutputInventory").Str2, false).FindField <ArrayPropertyViewModel>("mInventoryStacks").Model).Elements);
                        }
                        // Unlink miners & geysers
                        if (item.Model.TypePath.StartsWith("/Game/FactoryGame/Buildable/Factory/Miner") || item.Model.TypePath.StartsWith("/Game/FactoryGame/Buildable/Factory/GeneratorGeoThermal") || item.Model.TypePath.StartsWith("/Game/FactoryGame/Buildable/Factory/OilPump"))
                        {
                            string resourceNode = item.FindField <ObjectPropertyViewModel>("mExtractResourceNode").Str2;
                            rootItem.FindChild(resourceNode, false).FindField <BoolPropertyViewModel>("mIsOccupied", property => property.Value = false);
                        }
                        var gameState = rootItem.FindChild("Persistent_Level:PersistentLevel.BP_GameState_C_0", false);
                        if (item.Model.TypePath.StartsWith("/Game/FactoryGame/Buildable/Factory/TradingPost/Build_TradingPost.Build_TradingPost_C"))
                        {
                            gameState.FindField <BoolPropertyViewModel>("mIsTradingPostBuilt", property => property.Value = false);
                        }
                        if (item.Model.TypePath.StartsWith("/Game/FactoryGame/Buildable/Factory/SpaceElevator/Build_SpaceElevator.Build_SpaceElevator_C"))
                        {
                            gameState.FindField <BoolPropertyViewModel>("mIsSpaceElevatorBuilt", property => property.Value = false);
                        }
                        rootItem.Remove(item);
                        count++;
                    }
                }
            }
            return(count);
        }
Esempio n. 5
0
        public DynamicStructDataViewModel(DynamicStructData dynamicStruct)
        {
            model = dynamicStruct;

            Fields = new ObservableCollection <SerializedPropertyViewModel>(dynamicStruct.Fields.Select(PropertyViewModelMapper.Convert));
        }