Ejemplo n.º 1
0
        /// <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;
            }
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        /// <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;
            }
        }
Ejemplo n.º 4
0
        /// <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);
Ejemplo n.º 6
0
 /// <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);
 }