private static void HandleMountGem(GameSession session, PacketReader packet) { long equipItemUid = packet.ReadLong(); long gemItemUid = packet.ReadLong(); byte slot = packet.ReadByte(); if (!session.Player.Inventory.Items.ContainsKey(equipItemUid)) { session.Send(ItemSocketSystemPacket.Notice((int)ItemSocketSystemNotice.TargetIsNotInYourInventory)); return; } if (!session.Player.Inventory.Items.ContainsKey(gemItemUid)) { session.Send(ItemSocketSystemPacket.Notice((int)ItemSocketSystemNotice.ItemIsNotInYourInventory)); return; } Item equipItem = session.Player.Inventory.Items[equipItemUid]; Item gemItem = session.Player.Inventory.Items[gemItemUid]; if (!equipItem.Stats.GemSockets[slot].IsUnlocked) { return; } if (equipItem.Stats.GemSockets[slot].Gemstone != null) { return; } Gemstone gemstone = new() { Id = gemItem.Id, IsLocked = gemItem.IsLocked, UnlockTime = gemItem.UnlockTime }; if (gemItem.OwnerCharacterId != 0) { gemstone.OwnerId = gemItem.OwnerCharacterId; gemstone.OwnerName = gemItem.OwnerCharacterName; } equipItem.Stats.GemSockets[slot].Gemstone = gemstone; session.Player.Inventory.ConsumeItem(session, gemItem.Uid, 1); session.Send(ItemSocketSystemPacket.MountGem(equipItemUid, gemstone, slot)); }