Ejemplo n.º 1
0
        private async Task EquipItem(InventoryComponent inventory, IInventoriedEntity entity, ItemInstanceDto itemToEquip)
        {
            // check if slot already claimed
            ItemInstanceDto alreadyEquipped = inventory.GetWeared(itemToEquip.Item.EquipmentSlot);
            var             player          = entity as IPlayerEntity;

            if (alreadyEquipped != null)
            {
                // todo refacto to "MoveSlot" method
                inventory.Equipment[itemToEquip.Slot] = alreadyEquipped;
                alreadyEquipped.Slot = itemToEquip.Slot;
                alreadyEquipped.Type = InventoryType.Equipment;
            }
            else
            {
                inventory.Equipment[itemToEquip.Slot] = null;
            }

            if (!(player is null))
            {
                await player.SendPacketAsync(player.GenerateEmptyIvnPacket(itemToEquip.Type, itemToEquip.Slot));
            }

            inventory.Wear[(int)itemToEquip.Item.EquipmentSlot] = itemToEquip;
            itemToEquip.Slot = (short)itemToEquip.Item.EquipmentSlot;
            itemToEquip.Type = InventoryType.Wear;

            if (alreadyEquipped == null)
            {
                return;
            }

            if (!(player is null))
            {
                await player?.SendPacketAsync(alreadyEquipped.GenerateIvnPacket());
            }
        }