Example #1
0
        internal static void RemoveFromFilter(IMyTerminalBlock block)
        {
            FilteredContainer component = block?.GameLogic?.GetAs <FilteredContainer>();

            if (component.FilterController.ListToRemove.Count == 0)
            {
                return;
            }
            Filterdata filterdata = new Filterdata
            {
                id          = component.Entity.EntityId,
                FilterMode  = component.FilterController.FilterMode,
                FilterItems = component.FilterController.ListToRemove.ToArray(),
            };
            var metaData   = MyAPIGateway.Utilities.SerializeToBinary <Filterdata>(filterdata);
            var SendPacket = new MetaPacket
            {
                EntityId   = component.Entity.EntityId,
                PacketType = PacketType.FILTER_REMOVE,
                MetaData   = metaData,
            };

            MyAPIGateway.Multiplayer.SendMessageToServer(31875, MyAPIGateway.Utilities.SerializeToBinary <MetaPacket>(SendPacket));
            component.RemoveFromFilter(filterdata);
            component.FilterController.ListToRemove.Clear();
            ContainerControls.updateVisual("CurrentList");
        }
Example #2
0
        internal void LoadData()
        {
            if (Entity.Storage == null)
            {
                // DebugLog.Write("storage is null, exiting loadData().");
                return;
            }
            string Data;

            if (Entity.Storage.TryGetValue(FilterStateGUID, out Data))
            {
                // DebugLog.Write(Data);
                Filterdata loadedfilterdata = new Filterdata();

                var base64 = Convert.FromBase64String(Data);
                loadedfilterdata = MyAPIGateway.Utilities.SerializeFromBinary <Filterdata>(base64);
                // DebugLog.Write($"loaded id: {loadedfilterdata.id}");
                if (loadedfilterdata.id == MyCargoContainer.EntityId)
                {
                    // DebugLog.Write($"Saved state found (id: {loadedfilterdata.id})");
                    MyInventory inventory = (MyInventory)MyCargoContainer.GetInventory();
                    if (loadedfilterdata.FilterItems != null)
                    {
                        for (int i = 0; i < loadedfilterdata.FilterItems.Count(); i++)
                        {
                            // DebugLog.Write($"{loadedfilterdata.FilterItems[i].DisplayName}");
                            FilterController.FilterList.Add(loadedfilterdata.FilterItems[i]);
                            if (loadedfilterdata.FilterItems[i].Type == FilterType.FILTER_TYPE)
                            {
                                MyObjectBuilderType type;
                                if (MyObjectBuilderType.TryParse(loadedfilterdata.FilterItems[i].ParseItem, out type) == true)
                                {
                                    inventory.Constraint.AddObjectBuilderType(type);
                                }
                            }
                            else if (loadedfilterdata.FilterItems[i].Type == FilterType.FILTER_ITEM)
                            {
                                MyDefinitionId Id;
                                if (MyDefinitionId.TryParse(loadedfilterdata.FilterItems[i].ParseItem, out Id) == true)
                                {
                                    inventory.Constraint.Add(Id);
                                }
                            }
                        }
                    }
                    inventory.Constraint.IsWhitelist = loadedfilterdata.FilterMode;
                    FilterController.FilterMode      = loadedfilterdata.FilterMode;
                    inventory.Constraint.Icon        = null;
                }
                else
                {
                    // DebugLog.Write($"Id mismatch - Entity Id: {Entity.EntityId}  MyCargoContainerId: {MyCargoContainer.EntityId}");
                }
            }
        }
Example #3
0
 internal void SaveData()
 {
     if (Entity.Storage != null && MyCargoContainer.EntityId != 0)
     {
         Filterdata filterdata = new Filterdata
         {
             id          = MyCargoContainer.EntityId,
             FilterMode  = FilterController.FilterMode,
             FilterItems = FilterController.FilterList.ToArray(),
         };
         // DebugLog.Write($"SaveData() called for id {filterdata.id}");
         var data = MyAPIGateway.Utilities.SerializeToBinary <Filterdata>(filterdata);
         var save = Convert.ToBase64String(data);
         DebugLog.Write(save);
         Entity.Storage[FilterStateGUID] = save;
     }
 }
Example #4
0
        internal void AddToFilter(Filterdata filterdata)
        {
            if (filterdata.FilterItems.Length == 0)
            {
                // DebugLog.Write("AddToFilter called with 0 items to add. ignoring...");
                return;
            }

            var inventory = (MyInventory)MyCargoContainer.GetInventory();

            for (int i = 0; i < filterdata.FilterItems.Length; i++)
            {
                if (filterdata.FilterItems[i].Type == FilterType.FILTER_TYPE)
                {
                    MyObjectBuilderType type;
                    if (MyObjectBuilderType.TryParse(filterdata.FilterItems[i].ParseItem, out type) == true)
                    {
                        if (!inventory.Constraint.ConstrainedTypes.Contains(type))
                        {
                            inventory.Constraint.AddObjectBuilderType(type);
                        }
                    }
                }
                if (filterdata.FilterItems[i].Type == FilterType.FILTER_ITEM)
                {
                    MyDefinitionId Id;
                    if (MyDefinitionId.TryParse(filterdata.FilterItems[i].ParseItem, out Id) == true)
                    {
                        if (!inventory.Constraint.ConstrainedIds.Contains(Id))
                        {
                            inventory.Constraint.Add(Id);
                        }
                    }
                }
                if (!FilterController.FilterList.Contains(filterdata.FilterItems[i]))
                {
                    FilterController.FilterList.Add(filterdata.FilterItems[i]);
                }
            }
            inventory.Constraint.Icon = null;
            SaveData();
        }
Example #5
0
        internal static void SetFilterMode(IMyTerminalBlock block, long value)
        {
            FilteredContainer component = block?.GameLogic?.GetAs <FilteredContainer>();
            var filterdata = new Filterdata();

            if (value == 0)
            {
                filterdata.FilterMode = true;
            }
            if (value == 1)
            {
                filterdata.FilterMode = false;
            }
            var Sendpacket = new MetaPacket
            {
                EntityId   = component.Entity.EntityId,
                PacketType = PacketType.FILTER_MODE,
                MetaData   = MyAPIGateway.Utilities.SerializeToBinary <Filterdata>(filterdata),
            };

            MyAPIGateway.Multiplayer.SendMessageToServer(31875, MyAPIGateway.Utilities.SerializeToBinary <MetaPacket>(Sendpacket));
            component.SetFilterMode(filterdata.FilterMode);
        }