Exemple #1
0
            public Item ToItem()
            {
                if (Amount == 0)
                {
                    return(null);
                }

                Item item = ItemManager.CreateByItemID(ID, Amount, Skin);

                item.position = Position;

                if (IsBlueprint)
                {
                    item.blueprintTarget = BlueprintTarget;
                    return(item);
                }

                item.fuel      = Fuel;
                item.condition = Condition;

                if (MaxCondition != -1)
                {
                    item.maxCondition = MaxCondition;
                }

                if (Contents != null)
                {
                    foreach (var contentItem in Contents)
                    {
                        contentItem.ToItem().MoveToContainer(item.contents);
                    }
                }
                else
                {
                    item.contents = null;
                }

                BaseProjectile.Magazine magazine     = item.GetHeldEntity()?.GetComponent <BaseProjectile>()?.primaryMagazine;
                FlameThrower            flameThrower = item.GetHeldEntity()?.GetComponent <FlameThrower>();

                if (magazine != null)
                {
                    magazine.contents = Ammo;
                    magazine.ammoType = ItemManager.FindItemDefinition(AmmoType);
                }

                if (flameThrower != null)
                {
                    flameThrower.ammo = FlameFuel;
                }

                if (item.instanceData != null)
                {
                    item.instanceData.dataInt = DataInt;
                }

                item.text = Text;

                return(item);
            }
Exemple #2
0
                public Item ToItem()
                {
                    Item item = ItemManager.CreateByItemID(ID, Amount, Skin);

                    BaseProjectile.Magazine magazine     = item.GetHeldEntity()?.GetComponent <BaseProjectile>()?.primaryMagazine;
                    FlameThrower            flameThrower = item.GetHeldEntity()?.GetComponent <FlameThrower>();

                    item.fuel      = Fuel;
                    item.condition = Condition;

                    if (Contents != null)
                    {
                        foreach (var contentItem in Contents)
                        {
                            contentItem.ToItem().MoveToContainer(item.contents);
                        }
                    }
                    else
                    {
                        item.contents = null;
                    }

                    if (magazine != null)
                    {
                        magazine.contents = Ammo;
                        magazine.ammoType = ItemManager.FindItemDefinition(AmmoType);
                    }

                    if (flameThrower != null)
                    {
                        flameThrower.ammo = FlameFuel;
                    }

                    return(item);
                }
Exemple #3
0
        private Item OnItemSplit(Item item, int amount)
        {
            item.amount -= amount;

            Item newItem = ItemManager.CreateByItemID(item.info.itemid, amount, item.skin);

            if (item.IsBlueprint())
            {
                newItem.blueprintTarget = item.blueprintTarget;
            }

            if (item.info.amountType == ItemDefinition.AmountType.Genetics && item.instanceData != null &&
                item.instanceData.dataInt != 0)
            {
                newItem.instanceData = new ProtoBuf.Item.InstanceData()
                {
                    dataInt    = item.instanceData.dataInt,
                    ShouldPool = false
                };
            }

            // Remove default contents (fuel, etc)
            if (newItem.contents?.itemList.Count > 0)
            {
                foreach (Item containedItem in item.contents.itemList)
                {
                    containedItem.Remove();
                }
            }

            item.MarkDirty();

            if (_config.DisableDupeFixAndLeaveWeaponMagsAlone)
            {
                return(newItem);
            }

            BaseProjectile.Magazine newItemMag =
                newItem.GetHeldEntity()?.GetComponent <BaseProjectile>()?.primaryMagazine;

            // Remove default ammo
            if (newItemMag != null)
            {
                newItemMag.contents = 0;
            }

            if (newItem.GetHeldEntity() is FlameThrower)
            {
                newItem.GetHeldEntity().GetComponent <FlameThrower>().ammo = 0;
            }

            if (newItem.GetHeldEntity() is Chainsaw)
            {
                newItem.GetHeldEntity().GetComponent <Chainsaw>().ammo = 0;
            }

            return(newItem);
        }
        private object CanStackItem(Item item, Item targetItem)
        {
            if (_config.DisableDupeFixAndLeaveWeaponMagsAlone ||
                (item.GetOwnerPlayer().IsUnityNull() && targetItem.GetOwnerPlayer().IsUnityNull())
                )
            {
                return(null);
            }

            // Duplicating all game checks since we're overriding them by returning true
            if (
                item == targetItem ||
                item.info.stackable <= 1 ||
                targetItem.info.stackable <= 1 ||
                item.info.itemid != targetItem.info.itemid ||
                !item.IsValid() ||
                item.IsBlueprint() && item.blueprintTarget != targetItem.blueprintTarget ||
                targetItem.hasCondition && (targetItem.condition < targetItem.info.condition.max - 5) ||
                (_config.PreventStackingDifferentSkins && item.skin != targetItem.skin)
                )
            {
                return(false);
            }

            if (item.info.amountType == ItemDefinition.AmountType.Genetics ||
                targetItem.info.amountType == ItemDefinition.AmountType.Genetics)
            {
                if ((item.instanceData?.dataInt ?? -1) != (targetItem.instanceData?.dataInt ?? -1))
                {
                    return(false);
                }
            }

            BaseProjectile.Magazine itemMag =
                targetItem.GetHeldEntity()?.GetComponent <BaseProjectile>()?.primaryMagazine;

            // Return ammo
            if (itemMag != null)
            {
                if (itemMag.contents > 0)
                {
                    item.parent.AddItem(itemMag.ammoType, itemMag.contents);

                    itemMag.contents = 0;
                }
            }

            if (targetItem.GetHeldEntity() is FlameThrower)
            {
                FlameThrower flameThrower = targetItem.GetHeldEntity().GetComponent <FlameThrower>();

                if (flameThrower.ammo > 0)
                {
                    item.parent.AddItem(flameThrower.fuelType, flameThrower.ammo);

                    flameThrower.ammo = 0;
                }
            }

            if (targetItem.GetHeldEntity() is Chainsaw)
            {
                Chainsaw chainsaw = targetItem.GetHeldEntity().GetComponent <Chainsaw>();

                if (chainsaw.ammo > 0)
                {
                    item.parent.AddItem(chainsaw.fuelType, chainsaw.ammo);

                    chainsaw.ammo = 0;
                }
            }

            return(true);
        }
Exemple #5
0
        private object CanStackItem(Item item, Item targetItem)
        {
            if (item.GetOwnerPlayer().IsUnityNull())
            {
                return(null);
            }

            if (
                item == targetItem ||
                item.info.stackable <= 1 ||
                item.info.itemid != targetItem.info.itemid ||
                !item.IsValid() ||
                (item.IsBlueprint() && item.blueprintTarget != targetItem.blueprintTarget) ||
                (item.hasCondition && (item.condition != item.info.condition.max ||
                                       targetItem.condition != targetItem.info.condition.max))
                )
            {
                return(false);
            }

            if (item.info.amountType == ItemDefinition.AmountType.Genetics ||
                targetItem.info.amountType == ItemDefinition.AmountType.Genetics)
            {
                if ((item.instanceData?.dataInt ?? -1) != (targetItem.instanceData?.dataInt ?? -1))
                {
                    return(false);
                }
            }

            // Return contents
            if (targetItem.contents?.itemList.Count > 0)
            {
                foreach (Item containedItem in targetItem.contents.itemList)
                {
                    item.parent.playerOwner.GiveItem(ItemManager.CreateByItemID(containedItem.info.itemid,
                                                                                containedItem.amount));
                }
            }

            if (_config.DisableDupeFixAndLeaveWeaponMagsAlone)
            {
                return(null);
            }

            BaseProjectile.Magazine itemMag =
                targetItem.GetHeldEntity()?.GetComponent <BaseProjectile>()?.primaryMagazine;

            // Return ammo
            if (itemMag != null)
            {
                if (itemMag.contents > 0)
                {
                    item.GetOwnerPlayer().GiveItem(ItemManager.CreateByItemID(itemMag.ammoType.itemid,
                                                                              itemMag.contents));
                }
            }

            if (targetItem.GetHeldEntity() is FlameThrower)
            {
                FlameThrower flameThrower = targetItem.GetHeldEntity().GetComponent <FlameThrower>();

                if (flameThrower.ammo > 0)
                {
                    item.GetOwnerPlayer().GiveItem(ItemManager.CreateByItemID(flameThrower.fuelType.itemid,
                                                                              flameThrower.ammo));
                }
            }

            if (targetItem.GetHeldEntity() is Chainsaw)
            {
                Chainsaw chainsaw = targetItem.GetHeldEntity().GetComponent <Chainsaw>();

                if (chainsaw.ammo > 0)
                {
                    item.GetOwnerPlayer().GiveItem(ItemManager.CreateByItemID(chainsaw.fuelType.itemid,
                                                                              chainsaw.ammo));
                }
            }

            return(null);
        }