From 0cc5ab8372f19dad7412038d52dcd39db5e0e171 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 16 Dec 2022 22:44:55 +0100 Subject: Core/Players: Implemented new talent system --- src/server/game/Spells/SpellEffects.cpp | 40 +++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) (limited to 'src/server/game/Spells/SpellEffects.cpp') diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 2bde0329e6f..bc768ab550b 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -75,6 +75,8 @@ #include "TalentPackets.h" #include "TemporarySummon.h" #include "Totem.h" +#include "TraitMgr.h" +#include "TraitPacketsCommon.h" #include "Unit.h" #include "Util.h" #include "World.h" @@ -386,8 +388,8 @@ NonDefaultConstructible SpellEffectHandlers[TOTAL_SPELL_EF &Spell::EffectUnused, //300 SPELL_EFFECT_300 &Spell::EffectNULL, //301 SPELL_EFFECT_CRAFT_ENCHANT &Spell::EffectNULL, //302 SPELL_EFFECT_GATHERING - &Spell::EffectNULL, //303 SPELL_EFFECT_CREATE_TRAIT_TREE_CONFIG - &Spell::EffectNULL, //304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG + &Spell::EffectCreateTraitTreeConfig, //303 SPELL_EFFECT_CREATE_TRAIT_TREE_CONFIG + &Spell::EffectChangeActiveCombatTraitConfig, //304 SPELL_EFFECT_CHANGE_ACTIVE_COMBAT_TRAIT_CONFIG }; void Spell::EffectNULL() @@ -5873,3 +5875,37 @@ void Spell::EffectModifySpellCharges() for (int32 i = 0; i < damage; ++i) unitTarget->GetSpellHistory()->RestoreCharge(effectInfo->MiscValue); } + +void Spell::EffectCreateTraitTreeConfig() +{ + if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) + return; + + Player* target = Object::ToPlayer(unitTarget); + if (!target) + return; + + WorldPackets::Traits::TraitConfig newConfig; + newConfig.Type = TraitMgr::GetConfigTypeForTree(effectInfo->MiscValue); + if (newConfig.Type != TraitConfigType::Generic) + return; + + newConfig.TraitSystemID = sTraitTreeStore.AssertEntry(effectInfo->MiscValue)->TraitSystemID; + target->CreateTraitConfig(newConfig); +} + +void Spell::EffectChangeActiveCombatTraitConfig() +{ + if (effectHandleMode != SPELL_EFFECT_HANDLE_HIT_TARGET) + return; + + Player* target = Object::ToPlayer(unitTarget); + if (!target) + return; + + WorldPackets::Traits::TraitConfig* traitConfig = std::any_cast(&m_customArg); + if (!traitConfig) + return; + + target->UpdateTraitConfig(std::move(*traitConfig), damage, false); +} -- cgit v1.2.3