private static void HandleSelectGemUpgrade(GameSession session, PacketReader packet) { long equipUid = packet.ReadLong(); byte slot = packet.ReadByte(); long itemUid = packet.ReadLong(); if (equipUid == 0) // this is a gemstone in the player's inventory { if (!session.Player.Inventory.Items.ContainsKey(itemUid)) { session.Send(ItemSocketSystemPacket.Notice((int)ItemSocketSystemNotice.ItemIsNotInYourInventory)); return; } session.Send(ItemSocketSystemPacket.SelectGemUpgrade(equipUid, slot, itemUid)); return; } // select gem mounted on a equipment if (!session.Player.Inventory.Items.ContainsKey(equipUid)) { session.Send(ItemSocketSystemPacket.Notice((int)ItemSocketSystemNotice.ItemIsNotInYourInventory)); return; } Gemstone gemstone = session.Player.Inventory.Items[equipUid].Stats.GemSockets[slot].Gemstone; if (gemstone == null) { return; } session.Send(ItemSocketSystemPacket.SelectGemUpgrade(equipUid, slot, itemUid)); }