private static int AddFakeScrapToContainerUpdate(ProtoBuf.ItemContainer containerInfo, int scrapAmount)
            {
                // Always use a separate item so it can be placed out of view.
                var itemInfo = _pluginInstance._scrapItem.Save();

                itemInfo.amount = scrapAmount;
                itemInfo.slot   = PlayerInventoryUtils.GetNextAvailableSlot(containerInfo);
                containerInfo.contents.Add(itemInfo);
                return(itemInfo.slot);
            }
            private static int GetNextAvailableSlot(ProtoBuf.ItemContainer containerInfo)
            {
                var highestSlot = MinHidddenSlot;

                foreach (var item in containerInfo.contents)
                {
                    if (item.slot > highestSlot)
                    {
                        highestSlot = item.slot;
                    }
                }
                return(highestSlot);
            }
        private int HighestUsedSlot(ProtoBuf.ItemContainer containerData)
        {
            var highestUsedSlot = -1;

            foreach (var item in containerData.contents)
            {
                if (item.slot > highestUsedSlot)
                {
                    highestUsedSlot = item.slot;
                }
            }

            return(highestUsedSlot);
        }
Example #4
0
        public ProtoBuf.ItemContainer GetProtobufObject()
        {
            List <ProtoBuf.Item> listItems = new List <ProtoBuf.Item>();

            for (var i = 0; i < ListItems.Count; i++)
            {
                listItems.Add(ListItems[i].GetProtobufObject());
            }

            ProtoBuf.ItemContainer container = new ProtoBuf.ItemContainer
            {
                allowedContents = 1,
                allowedItem     = 0,
                availableSlots  = availableSlots,
                contents        = listItems,
                flags           = (int)this.ItemContainerType,
                maxStackSize    = 0,
                slots           = this.Capacity,
                temperature     = 30f,
                UID             = this.UID
            };

            return(container);
        }
        private void AddItems(ProtoBuf.ItemContainer containerData, Ruleset ruleset)
        {
            if (containerData == null)
            {
                return;
            }

            // Note: Problems can arise if there are existing items spread out unevenly across the invisible slots.
            var slot = Math.Max(FirstInvisibleItemSlot, HighestUsedSlot(containerData) + 1);

            foreach (var entry in ruleset.ItemAmounts)
            {
                Item item;
                if (!TryGetItem(entry.Key, entry.Value, out item))
                {
                    continue;
                }

                item.position = slot++;
                containerData.contents.Add(item.Save());
            }

            containerData.slots = FirstInvisibleItemSlot + ruleset.ItemAmounts.Count;
        }
Example #6
0
 public BaseItemContainer(ProtoBuf.ItemContainer proto)
 {
     protobuf = proto;
     contents = new List <BaseItem>();
     proto.contents.ForEach(item => contents.Add(new BaseItem(item)));
 }