diff options
| author | Shauren <shauren.trinity@gmail.com> | 2016-07-10 14:41:18 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-07-10 14:41:18 +0200 |
| commit | 452cae0c0b343597c3e6721fd5aa57fd787a06c9 (patch) | |
| tree | 6c736a54f8cc17fb1d0fe8abcc93b679d1c097e3 /src/server/game/Server | |
| parent | ee2abfba9102ca4acce334de00a0bca0ae5c624c (diff) | |
Core/Items: Fixed saving gem bonuses
Diffstat (limited to 'src/server/game/Server')
| -rw-r--r-- | src/server/game/Server/Packets/InspectPackets.cpp | 19 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/ItemPackets.cpp | 14 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/ItemPackets.h | 1 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MailPackets.cpp | 19 |
4 files changed, 35 insertions, 18 deletions
diff --git a/src/server/game/Server/Packets/InspectPackets.cpp b/src/server/game/Server/Packets/InspectPackets.cpp index fe81ac6c048..666f653d69e 100644 --- a/src/server/game/Server/Packets/InspectPackets.cpp +++ b/src/server/game/Server/Packets/InspectPackets.cpp @@ -71,16 +71,17 @@ WorldPackets::Inspect::InspectItemData::InspectItemData(::Item const* item, uint if (uint32 enchId = item->GetEnchantmentId(EnchantmentSlot(i))) Enchants.emplace_back(enchId, i); - for (std::size_t i = 0; i < item->GetDynamicValues(ITEM_DYNAMIC_FIELD_GEMS).size(); ++i) + uint8 i = 0; + for (ItemDynamicFieldGems const& gemData : item->GetGems()) { - uint32 gemItemId = item->GetDynamicValue(ITEM_DYNAMIC_FIELD_GEMS, i); - if (!gemItemId) - continue; - - WorldPackets::Item::ItemGemInstanceData gem; - gem.Slot = i; - gem.Item.ItemID = gemItemId; - Gems.push_back(gem); + if (gemData.ItemId) + { + WorldPackets::Item::ItemGemInstanceData gem; + gem.Slot = i; + gem.Item.Initialize(&gemData); + Gems.push_back(gem); + } + ++i; } } diff --git a/src/server/game/Server/Packets/ItemPackets.cpp b/src/server/game/Server/Packets/ItemPackets.cpp index c6609812af5..54bc120d178 100644 --- a/src/server/game/Server/Packets/ItemPackets.cpp +++ b/src/server/game/Server/Packets/ItemPackets.cpp @@ -281,6 +281,20 @@ void WorldPackets::Item::ItemInstance::Initialize(::Item const* item) } } +void WorldPackets::Item::ItemInstance::Initialize(::ItemDynamicFieldGems const* gem) +{ + ItemID = gem->ItemId; + + ItemBonusInstanceData bonus; + bonus.Context = gem->Context; + for (uint16 bonusListId : gem->BonusListIDs) + if (bonusListId) + bonus.BonusListIDs.push_back(bonusListId); + + if (bonus.Context || !bonus.BonusListIDs.empty()) + ItemBonus = bonus; +} + void WorldPackets::Item::ItemInstance::Initialize(::LootItem const& lootItem) { ItemID = lootItem.itemid; diff --git a/src/server/game/Server/Packets/ItemPackets.h b/src/server/game/Server/Packets/ItemPackets.h index aef6060b260..feb4f8f1120 100644 --- a/src/server/game/Server/Packets/ItemPackets.h +++ b/src/server/game/Server/Packets/ItemPackets.h @@ -40,6 +40,7 @@ namespace WorldPackets struct ItemInstance { void Initialize(::Item const* item); + void Initialize(::ItemDynamicFieldGems const* gem); void Initialize(::LootItem const& lootItem); void Initialize(::VoidStorageItem const* voidItem); diff --git a/src/server/game/Server/Packets/MailPackets.cpp b/src/server/game/Server/Packets/MailPackets.cpp index 12f48debe3d..f9bfaad578b 100644 --- a/src/server/game/Server/Packets/MailPackets.cpp +++ b/src/server/game/Server/Packets/MailPackets.cpp @@ -44,16 +44,17 @@ WorldPackets::Mail::MailAttachedItem::MailAttachedItem(::Item const* item, uint8 Enchants.push_back(enchant); } - for (std::size_t i = 0; i < item->GetDynamicValues(ITEM_DYNAMIC_FIELD_GEMS).size(); ++i) + uint8 i = 0; + for (ItemDynamicFieldGems const& gemData : item->GetGems()) { - uint32 gemItemId = item->GetDynamicValue(ITEM_DYNAMIC_FIELD_GEMS, i); - if (!gemItemId) - continue; - - Item::ItemGemInstanceData gem; - gem.Slot = i; - gem.Item.ItemID = gemItemId; - Gems.push_back(gem); + if (gemData.ItemId) + { + WorldPackets::Item::ItemGemInstanceData gem; + gem.Slot = i; + gem.Item.Initialize(&gemData); + Gems.push_back(gem); + } + ++i; } } |
