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); }
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); }
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); }
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); }