aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/ArtifactHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-06-03 20:40:34 +0200
committerShauren <shauren.trinity@gmail.com>2019-06-08 17:06:57 +0200
commit455959c6064af6f7863a6b4b57cb0ef1646bd8ef (patch)
tree7d7a7cdd3a44643ee5fc7d19521ced1c8b815c66 /src/server/game/Handlers/ArtifactHandler.cpp
parent31fda79556e55375962a3c9e46f6dbdbf6e90d18 (diff)
Core/PacketIO: Rewrite updatefield handling
Diffstat (limited to 'src/server/game/Handlers/ArtifactHandler.cpp')
-rw-r--r--src/server/game/Handlers/ArtifactHandler.cpp52
1 files changed, 21 insertions, 31 deletions
diff --git a/src/server/game/Handlers/ArtifactHandler.cpp b/src/server/game/Handlers/ArtifactHandler.cpp
index d977c46dcd2..fd3571b1d58 100644
--- a/src/server/game/Handlers/ArtifactHandler.cpp
+++ b/src/server/game/Handlers/ArtifactHandler.cpp
@@ -41,17 +41,17 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1))
xpCost = uint64(currentArtifactTier == MAX_ARTIFACT_TIER ? cost->XP2 : cost->XP);
- if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP))
+ if (xpCost > artifact->m_itemData->ArtifactXP)
return;
if (artifactAddPower.PowerChoices.empty())
return;
- ItemDynamicFieldArtifactPowers const* artifactPower = artifact->GetArtifactPower(artifactAddPower.PowerChoices[0].ArtifactPowerID);
+ UF::ArtifactPower const* artifactPower = artifact->GetArtifactPower(artifactAddPower.PowerChoices[0].ArtifactPowerID);
if (!artifactPower)
return;
- ArtifactPowerEntry const* artifactPowerEntry = sArtifactPowerStore.LookupEntry(artifactPower->ArtifactPowerId);
+ ArtifactPowerEntry const* artifactPowerEntry = sArtifactPowerStore.LookupEntry(artifactPower->ArtifactPowerID);
if (!artifactPowerEntry)
return;
@@ -73,7 +73,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (!(artifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_NO_LINK_REQUIRED))
{
- if (std::unordered_set<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerId))
+ if (std::unordered_set<uint32> const* artifactPowerLinks = sDB2Manager.GetArtifactPowerLinks(artifactPower->ArtifactPowerID))
{
bool hasAnyLink = false;
for (uint32 artifactPowerLinkId : *artifactPowerLinks)
@@ -82,7 +82,7 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (!artifactPowerLink)
continue;
- ItemDynamicFieldArtifactPowers const* artifactPowerLinkLearned = artifact->GetArtifactPower(artifactPowerLinkId);
+ UF::ArtifactPower const* artifactPowerLinkLearned = artifact->GetArtifactPower(artifactPowerLinkId);
if (!artifactPowerLinkLearned)
continue;
@@ -98,22 +98,19 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
}
}
- ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerId, artifactPower->CurrentRankWithBonus + 1 - 1); // need data for next rank, but -1 because of how db2 data is structured
+ ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower->ArtifactPowerID, artifactPower->CurrentRankWithBonus + 1 - 1); // need data for next rank, but -1 because of how db2 data is structured
if (!artifactPowerRank)
return;
- ItemDynamicFieldArtifactPowers newPower = *artifactPower;
- ++newPower.PurchasedRank;
- ++newPower.CurrentRankWithBonus;
- artifact->SetArtifactPower(&newPower);
+ artifact->SetArtifactPower(artifactPower->ArtifactPowerID, artifactPower->PurchasedRank + 1, artifactPower->CurrentRankWithBonus + 1);
if (artifact->IsEquipped())
{
_player->ApplyArtifactPowerRank(artifact, artifactPowerRank, true);
- for (ItemDynamicFieldArtifactPowers const& power : artifact->GetArtifactPowers())
+ for (UF::ArtifactPower const& power : artifact->m_itemData->ArtifactPowers)
{
- ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId);
+ ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerID);
if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS))
continue;
@@ -121,16 +118,14 @@ void WorldSession::HandleArtifactAddPower(WorldPackets::Artifact::ArtifactAddPow
if (!scaledArtifactPowerRank)
continue;
- ItemDynamicFieldArtifactPowers newScaledPower = power;
- ++newScaledPower.CurrentRankWithBonus;
- artifact->SetArtifactPower(&newScaledPower);
+ artifact->SetArtifactPower(power.ArtifactPowerID, power.PurchasedRank, power.CurrentRankWithBonus + 1);
_player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false);
_player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, true);
}
}
- artifact->SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost);
+ artifact->SetArtifactXP(artifact->m_itemData->ArtifactXP - xpCost);
artifact->SetState(ITEM_CHANGED, _player);
uint32 totalPurchasedArtifactPower = artifact->GetTotalPurchasedArtifactPowers();
@@ -205,7 +200,7 @@ void WorldSession::HandleArtifactSetAppearance(WorldPackets::Artifact::ArtifactS
void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmArtifactRespec& confirmArtifactRespec)
{
- if (!_player->GetNPCIfCanInteractWith(confirmArtifactRespec.NpcGUID, UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC))
+ if (!_player->GetNPCIfCanInteractWith(confirmArtifactRespec.NpcGUID, UNIT_NPC_FLAG_ARTIFACT_POWER_RESPEC, UNIT_NPC_FLAG_2_NONE))
return;
Item* artifact = _player->GetItemByGuid(confirmArtifactRespec.ArtifactGUID);
@@ -216,33 +211,30 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(artifact->GetTotalPurchasedArtifactPowers() + 1))
xpCost = uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP);
- if (xpCost > artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP))
+ if (xpCost > artifact->m_itemData->ArtifactXP)
return;
- uint64 newAmount = artifact->GetUInt64Value(ITEM_FIELD_ARTIFACT_XP) - xpCost;
+ uint64 newAmount = artifact->m_itemData->ArtifactXP - xpCost;
for (uint32 i = 0; i <= artifact->GetTotalPurchasedArtifactPowers(); ++i)
if (GtArtifactLevelXPEntry const* cost = sArtifactLevelXPGameTable.GetRow(i))
newAmount += uint64(artifact->GetModifier(ITEM_MODIFIER_ARTIFACT_TIER) == 1 ? cost->XP2 : cost->XP);
- for (ItemDynamicFieldArtifactPowers const& artifactPower : artifact->GetArtifactPowers())
+ for (UF::ArtifactPower const& artifactPower : artifact->m_itemData->ArtifactPowers)
{
uint8 oldPurchasedRank = artifactPower.PurchasedRank;
if (!oldPurchasedRank)
continue;
- ItemDynamicFieldArtifactPowers newPower = artifactPower;
- newPower.PurchasedRank -= oldPurchasedRank;
- newPower.CurrentRankWithBonus -= oldPurchasedRank;
- artifact->SetArtifactPower(&newPower);
+ artifact->SetArtifactPower(artifactPower.ArtifactPowerID, artifactPower.PurchasedRank - oldPurchasedRank, artifactPower.CurrentRankWithBonus - oldPurchasedRank);
if (artifact->IsEquipped())
- if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerId, 0))
+ if (ArtifactPowerRankEntry const* artifactPowerRank = sDB2Manager.GetArtifactPowerRank(artifactPower.ArtifactPowerID, 0))
_player->ApplyArtifactPowerRank(artifact, artifactPowerRank, false);
}
- for (ItemDynamicFieldArtifactPowers const& power : artifact->GetArtifactPowers())
+ for (UF::ArtifactPower const& power : artifact->m_itemData->ArtifactPowers)
{
- ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerId);
+ ArtifactPowerEntry const* scaledArtifactPowerEntry = sArtifactPowerStore.AssertEntry(power.ArtifactPowerID);
if (!(scaledArtifactPowerEntry->Flags & ARTIFACT_POWER_FLAG_SCALES_WITH_NUM_POWERS))
continue;
@@ -250,13 +242,11 @@ void WorldSession::HandleConfirmArtifactRespec(WorldPackets::Artifact::ConfirmAr
if (!scaledArtifactPowerRank)
continue;
- ItemDynamicFieldArtifactPowers newScaledPower = power;
- newScaledPower.CurrentRankWithBonus = 0;
- artifact->SetArtifactPower(&newScaledPower);
+ artifact->SetArtifactPower(power.ArtifactPowerID, power.PurchasedRank, 0);
_player->ApplyArtifactPowerRank(artifact, scaledArtifactPowerRank, false);
}
- artifact->SetUInt64Value(ITEM_FIELD_ARTIFACT_XP, newAmount);
+ artifact->SetArtifactXP(newAmount);
artifact->SetState(ITEM_CHANGED, _player);
}