diff options
| -rw-r--r-- | src/server/game/Entities/Item/Item.cpp | 29 |
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; |
