diff options
Diffstat (limited to 'src/server/game/Handlers/ArtifactHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/ArtifactHandler.cpp | 52 |
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); } |