aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Server
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-07-10 14:41:18 +0200
committerShauren <shauren.trinity@gmail.com>2016-07-10 14:41:18 +0200
commit452cae0c0b343597c3e6721fd5aa57fd787a06c9 (patch)
tree6c736a54f8cc17fb1d0fe8abcc93b679d1c097e3 /src/server/game/Server
parentee2abfba9102ca4acce334de00a0bca0ae5c624c (diff)
Core/Items: Fixed saving gem bonuses
Diffstat (limited to 'src/server/game/Server')
-rw-r--r--src/server/game/Server/Packets/InspectPackets.cpp19
-rw-r--r--src/server/game/Server/Packets/ItemPackets.cpp14
-rw-r--r--src/server/game/Server/Packets/ItemPackets.h1
-rw-r--r--src/server/game/Server/Packets/MailPackets.cpp19
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;
}
}