/// <summary> /// This constructor creates a completely new Item from a ItemID but wont spawn it /// </summary> /// <param name="type"></param> public SynapseItem(int id) : this() { if (id == -1 && None == null) { ID = -1; ItemType = ItemType.None; Name = "None"; return; } Serial = ItemSerialGenerator.GenerateNext(); AllItems[Serial] = this; ID = id; Schematic = ItemManager.Get.GetSchematic(ID); if (id >= 0 && id <= ItemManager.HighestItem) { IsCustomItem = false; ItemType = (ItemType)id; Name = ItemType.ToString(); } else { IsCustomItem = true; ItemType = Server.Get.ItemManager.GetBaseType(id); Name = Server.Get.ItemManager.GetName(id); } if (InventoryItemLoader.AvailableItems.TryGetValue(ItemType, out var examplebase)) { ItemCategory = examplebase.Category; TierFlags = examplebase.TierFlags; Weight = examplebase.Weight; } }
private static bool ServerAddItem(ref ItemBase __result, Inventory inv, ItemType type, ushort itemSerial, ItemPickupBase pickup) { try { __result = null; if (inv.UserInventory.Items.Count >= 8) { return(false); } var itemBase = inv.CreateItemInstance(type, inv.isLocalPlayer); if (itemBase == null) { return(false); } SynapseItem item; if (itemSerial == 0) { itemSerial = ItemSerialGenerator.GenerateNext(); itemBase.ItemSerial = itemSerial; item = new SynapseItem(itemBase); } else if (SynapseItem.AllItems.TryGetValue(itemSerial, out item)) { item.ItemBase = itemBase; } else { Logger.Get.Warn($"Found unregistered ItemSerial: {itemSerial}"); return(false); } inv.UserInventory.Items[itemSerial] = itemBase; itemBase.ItemSerial = itemSerial; itemBase.OnAdded(pickup); if (inv.isLocalPlayer && itemBase is IAcquisitionConfirmationTrigger trigger) { trigger.ServerConfirmAcqusition(); } inv.SendItemsNextFrame = true; __result = itemBase; return(false); } catch (Exception e) { Logger.Get.Error($"Synapse-Items: AddItem failed!!\n{e}"); return(false); } }
/// <summary> /// This constructor creates a completely new Item from a ItemType but wont spawn it /// </summary> /// <param name="type"></param> public SynapseItem(ItemType type) : this() { Serial = ItemSerialGenerator.GenerateNext(); AllItems[Serial] = this; ID = (int)type; Name = type.ToString(); IsCustomItem = false; ItemType = type; if (InventoryItemLoader.AvailableItems.TryGetValue(type, out var examplebase)) { ItemCategory = examplebase.Category; TierFlags = examplebase.TierFlags; Weight = examplebase.Weight; } }
/// <summary> /// Initializes a new instance of the <see cref="Item"/> class. /// </summary> /// <param name="itemBase"><inheritdoc cref="Base"/></param> public Item(ItemBase itemBase) { Base = itemBase; Type = itemBase.ItemTypeId; Serial = Base.OwnerInventory.UserInventory.Items.FirstOrDefault(i => i.Value == Base).Key; if (Serial == 0) { ushort serial = ItemSerialGenerator.GenerateNext(); Serial = serial; #if DEBUG Log.Debug($"{nameof(Item)}.ctor: Generating new serial number. Serial should now be: {serial}. // {Serial}"); #endif } #if DEBUG Log.Debug($"{nameof(Item)}.ctor: New item created with Serial: {Serial}"); #endif BaseToItem.Add(itemBase, this); }
private static bool ServerCreatePickupPatch(ref ItemPickupBase __result, Inventory inv, ItemBase item, PickupSyncInfo psi, bool spawn = true) { try { __result = null; if (item == null) { return(false); } var pickup = UnityEngine.Object.Instantiate(item.PickupDropModel, inv.transform.position, ReferenceHub.GetHub(inv.gameObject).PlayerCameraReference.rotation * item.PickupDropModel.transform.rotation); //The Value to the Serial can also be null but every Serial should be as key inside AllItems if (!SynapseItem.AllItems.TryGetValue(psi.Serial, out var sitem)) { Logger.Get.Warn($"Found unregistered ItemSerial in PickupSyncInfo (CreatePickupPatch): {psi.Serial}"); psi.Serial = ItemSerialGenerator.GenerateNext(); } pickup.NetworkInfo = psi; pickup.Info = psi; if (sitem == null) { sitem = new SynapseItem(pickup); } else { sitem.PickupBase = pickup; } pickup.transform.localScale = sitem.Scale; if (spawn) { NetworkServer.Spawn(pickup.gameObject); } sitem.CheckForSchematic(); pickup.InfoReceived(default, psi);
/// <summary> /// Initializes a new instance of the <see cref="Pickup"/> class. /// </summary> /// <param name="pickupBase"><inheritdoc cref="Base"/></param> public Pickup(ItemPickupBase pickupBase) { Base = pickupBase; Serial = pickupBase.NetworkInfo.Serial == 0 ? ItemSerialGenerator.GenerateNext() : pickupBase.NetworkInfo.Serial; BaseToItem.Add(pickupBase, this); }