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