aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 01cf68b89c2..8ab3c15d1a1 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -6150,13 +6150,30 @@ void Spell::EffectCreateTraitTreeConfig()
return;
newConfig.TraitSystemID = sTraitTreeStore.AssertEntry(effectInfo->MiscValue)->TraitSystemID;
- int32 existingConfigForSystem = target->m_activePlayerData->TraitConfigs.FindIndexIf([&](UF::TraitConfig const& config)
+ TraitSystemEntry const* traitSystem = sTraitSystemStore.LookupEntry(newConfig.TraitSystemID);
+ if (!traitSystem)
+ return;
+
+ switch (traitSystem->GetVariationType())
+ {
+ case TraitSystemVariationType::None:
+ newConfig.VariationID = 0;
+ break;
+ case TraitSystemVariationType::Spec:
+ newConfig.VariationID = AsUnderlyingType(target->GetPrimarySpecialization());
+ break;
+ default:
+ return;
+ }
+
+ int32 const* existingConfigIdForSystem = target->m_activePlayerData->TraitConfigs.FindIf([&](UF::TraitConfig const& config)
{
return static_cast<TraitConfigType>(*config.Type) == TraitConfigType::Generic
- && config.TraitSystemID == newConfig.TraitSystemID;
- });
+ && config.TraitSystemID == newConfig.TraitSystemID
+ && config.VariationID == newConfig.VariationID;
+ }).first;
- if (existingConfigForSystem < 0)
+ if (!existingConfigIdForSystem)
target->CreateTraitConfig(newConfig);
}