aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Item/Item.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index ae0ea9784fd..99a3abb6084 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -1543,24 +1543,31 @@ void Item::SetGem(uint16 slot, ItemDynamicFieldGems const* gem, uint32 gemScalin
bool Item::GemsFitSockets() const
{
- uint32 gemSlot = 0;
- for (UF::SocketedGem const& gemData : m_itemData->Gems)
+ for (uint32 gemSlot = 0; gemSlot < MAX_ITEM_PROTO_SOCKETS; ++gemSlot)
{
- SocketColor color = GetTemplate()->GetSocketColor(gemSlot);
- if (!color) // no socket slot
+ uint8 SocketColor = GetTemplate()->GetSocketColor(gemSlot);
+
+ if (!SocketColor) // no socket slot
continue;
- uint32 GemColor = 0;
+ if (gemSlot >= m_itemData->Gems.size()) // no gems on this socket
+ return false;
- ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemData.ItemID);
- if (gemProto)
+ uint8 GemColor = 0;
+
+ uint32 gemid = m_itemData->Gems[gemSlot].ItemID;
+ if (gemid)
{
- GemPropertiesEntry const* gemProperty = sGemPropertiesStore.LookupEntry(gemProto->GetGemProperties());
- if (gemProperty)
- GemColor = gemProperty->Type;
+ ItemTemplate const* gemProto = sObjectMgr->GetItemTemplate(gemid);
+ if (gemProto)
+ {
+ GemPropertiesEntry const* gemProperty = sGemPropertiesStore.LookupEntry(gemProto->GetGemProperties());
+ if (gemProperty)
+ GemColor = gemProperty->Type;
+ }
}
- if (!(GemColor & SocketColorToGemTypeMask[color])) // bad gem color on this socket
+ if (!(GemColor & SocketColorToGemTypeMask[SocketColor])) // bad gem color on this socket
return false;
}
return true;