aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Achievements/CriteriaHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-10-10 16:21:55 +0200
committerShauren <shauren.trinity@gmail.com>2025-10-10 16:21:55 +0200
commit53068a94e88991ae7196fb247df4b7ca2e47e554 (patch)
tree42afe6e6160b0317f72ddec25562988145d7a5ff /src/server/game/Achievements/CriteriaHandler.cpp
parenta7d825c6deb2711392956abac2d494a8731f58c3 (diff)
Core: Updated to 11.2.5.63704
Diffstat (limited to 'src/server/game/Achievements/CriteriaHandler.cpp')
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp48
1 files changed, 17 insertions, 31 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 3d444c2948c..99d91824557 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -3874,21 +3874,14 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
}
case ModifierTreeType::PlayerHasTraitNodeEntryInActiveConfig: // 340
{
- auto hasTraitNodeEntry = [referencePlayer, reqValue]()
+ auto hasTraitNodeEntry = [referencePlayer, reqValue]
{
- for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs)
- {
- if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat)
- {
- if (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID
- || !EnumFlag(TraitCombatConfigFlags(*traitConfig.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec))
- continue;
- }
-
- for (UF::TraitEntry const& traitEntry : traitConfig.Entries)
+ UF::TraitConfig const* config = referencePlayer->GetTraitConfig(referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID);
+ if (config && EnumFlag(TraitCombatConfigFlags(*config->CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec))
+ for (UF::TraitEntry const& traitEntry : config->Entries)
if (traitEntry.TraitNodeEntryID == int32(reqValue))
return true;
- }
+
return false;
}();
if (!hasTraitNodeEntry)
@@ -3899,19 +3892,12 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
{
auto traitNodeEntryRank = [referencePlayer, secondaryAsset]() -> Optional<uint16>
{
- for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs)
- {
- if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat)
- {
- if (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID
- || !EnumFlag(TraitCombatConfigFlags(*traitConfig.CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec))
- continue;
- }
-
- for (UF::TraitEntry const& traitEntry : traitConfig.Entries)
+ UF::TraitConfig const* config = referencePlayer->GetTraitConfig(referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID);
+ if (config && EnumFlag(TraitCombatConfigFlags(*config->CombatConfigFlags)).HasFlag(TraitCombatConfigFlags::ActiveForSpec))
+ for (UF::TraitEntry const& traitEntry : config->Entries)
if (traitEntry.TraitNodeEntryID == int32(secondaryAsset))
return traitEntry.Rank;
- }
+
return {};
}();
if (!traitNodeEntryRank || traitNodeEntryRank < int32(reqValue))
@@ -3943,18 +3929,18 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
break;
case ModifierTreeType::PlayerHasAtLeastProfPathRanks: // 355
{
- auto traitNodeEntryRankCount = [referencePlayer, secondaryAsset]()
+ uint32 traitNodeEntryRankCount = [referencePlayer, secondaryAsset]
{
uint32 ranks = 0;
- for (UF::TraitConfig const& traitConfig : referencePlayer->m_activePlayerData->TraitConfigs)
+ for (auto const& [_, traitConfig] : referencePlayer->m_activePlayerData->TraitConfigs)
{
- if (TraitConfigType(*traitConfig.Type) != TraitConfigType::Profession)
+ if (TraitConfigType(*traitConfig.value.Type) != TraitConfigType::Profession)
continue;
- if (*traitConfig.SkillLineID != int32(secondaryAsset))
+ if (*traitConfig.value.SkillLineID != int32(secondaryAsset))
continue;
- for (UF::TraitEntry const& traitEntry : traitConfig.Entries)
+ for (UF::TraitEntry const& traitEntry : traitConfig.value.Entries)
if (sTraitNodeEntryStore.AssertEntry(traitEntry.TraitNodeEntryID)->GetNodeEntryType() == TraitNodeEntryType::ProfPath)
ranks += traitEntry.Rank + traitEntry.GrantedRanks;
}
@@ -4025,7 +4011,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
}
case ModifierTreeType::PlayerHasActiveTraitSubTree: // 385
{
- int32 traitConfigWithSubtree = referencePlayer->m_activePlayerData->TraitConfigs.FindIndexIf([referencePlayer, reqValue](UF::TraitConfig const& traitConfig)
+ int32 const* traitConfigWithSubtree = referencePlayer->m_activePlayerData->TraitConfigs.FindIf([referencePlayer, reqValue](UF::TraitConfig const& traitConfig)
{
if (TraitConfigType(*traitConfig.Type) == TraitConfigType::Combat
&& (int32(*referencePlayer->m_activePlayerData->ActiveCombatTraitConfigID) != traitConfig.ID
@@ -4036,8 +4022,8 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
{
return traitSubTree.TraitSubTreeID == int32(reqValue) && traitSubTree.Active;
}) >= 0;
- });
- if (traitConfigWithSubtree < 0)
+ }).first;
+ if (!traitConfigWithSubtree)
return false;
break;
}