Check whether the item has 2sockets? LOL.
Here is how I do it in my source.
Copy-pasting won't work, so use it as a reference.
Code:
public static void Handle(Entities.GameClient client, DataPacket packet)
{
if (client.Booth != null)
return;
using (var socket = new GemSocketingPacket(packet))
{
if (!client.Inventory.ContainsByUID(socket.ItemUID) &&
!client.Inventory.ContainsByUID(socket.GemUID))
{
return;
}
Data.ItemInfo SocketItem = client.Inventory.GetItemByUID(socket.ItemUID);
if (SocketItem.CurrentDura < SocketItem.MaxDura)
return;
if (!socket.RemoveGem)
{
if (SocketItem.Gem1 != Enums.SocketGem.EmptySocket && socket.Socket == 1)
{
return;
}
else if (SocketItem.Gem2 != Enums.SocketGem.EmptySocket)
{
return;
}
Data.ItemInfo Gem = client.Inventory.GetItemByUID(socket.GemUID);
if (Gem == null || SocketItem == null)
{
return;
}
if (SocketItem.IsGarment() || SocketItem.IsArrow() || SocketItem.IsBottle() ||
SocketItem.IsSteed() || SocketItem.IsMisc() || SocketItem.IsFan() || SocketItem.IsTower())
{
return;
}
Enums.SocketGem gem = (Enums.SocketGem)(Gem.ItemID % 100);
if (gem != Enums.SocketGem.NormalThunderGem &&
gem != Enums.SocketGem.RefinedThunderGem &&
gem != Enums.SocketGem.SuperThunderGem &&
gem != Enums.SocketGem.NormalGloryGem &&
gem != Enums.SocketGem.RefinedGloryGem &&
gem != Enums.SocketGem.SuperGloryGem)
{
if (socket.Socket == 1)
{
SocketItem.Gem1 = gem;
}
else
{
SocketItem.Gem2 = gem;
}
Database.CharacterDatabase.SaveInventory(client, SocketItem, client.Inventory.GetPositionFromItemUID(SocketItem.UID));
client.Inventory.RemoveItemByUID(Gem.UID);
SocketItem.SendPacket(client, 3);
}
}
else
{
if (SocketItem.Gem1 == Enums.SocketGem.EmptySocket && socket.Socket == 1
|| SocketItem.Gem1 == Enums.SocketGem.NoSocket && socket.Socket == 1)
{
return;
}
else if (SocketItem.Gem2 == Enums.SocketGem.EmptySocket && socket.Socket != 1
||SocketItem.Gem2 == Enums.SocketGem.NoSocket && socket.Socket != 1)
{
return;
}
if (socket.Socket == 1)
{
SocketItem.Gem1 = Enums.SocketGem.EmptySocket;
}
else
{
SocketItem.Gem2 = Enums.SocketGem.EmptySocket;
}
Database.CharacterDatabase.SaveInventory(client, SocketItem, client.Inventory.GetPositionFromItemUID(SocketItem.UID));
SocketItem.SendPacket(client, 3);
}
}
}