diff options
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.cpp | 35 | ||||
-rw-r--r-- | src/server/game/Spells/Spell.h | 3 | ||||
-rw-r--r-- | src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp | 2 |
5 files changed, 21 insertions, 36 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index b418a94f2fc..3e58e8e5b4d 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2999,24 +2999,19 @@ SpellCastResult WorldObject::CastSpell(CastSpellTargetArg const& targets, uint32 SpellInfo const* info = sSpellMgr->GetSpellInfo(spellId, args.CastDifficulty != DIFFICULTY_NONE ? args.CastDifficulty : GetMap()->GetDifficultyID()); if (!info) { - TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell {} by caster {}", spellId, GetGUID().ToString()); + TC_LOG_ERROR("entities.unit", "CastSpell: unknown spell {} by caster {}", spellId, GetGUID()); return SPELL_FAILED_SPELL_UNAVAILABLE; } if (!targets.Targets) { - TC_LOG_ERROR("entities.unit", "CastSpell: Invalid target passed to spell cast {} by {}", spellId, GetGUID().ToString()); + TC_LOG_ERROR("entities.unit", "CastSpell: Invalid target passed to spell cast {} by {}", spellId, GetGUID()); return SPELL_FAILED_BAD_TARGETS; } Spell* spell = new Spell(this, info, args.TriggerFlags, args.OriginalCaster, args.OriginalCastId); - for (auto const& [Type, Value] : args.SpellValueOverrides) - { - if (Type < SPELLVALUE_INT_END) - spell->SetSpellValue(SpellValueMod(Type), Value.I); - else - spell->SetSpellValue(SpellValueModFloat(Type), Value.F); - } + for (CastSpellExtraArgsInit::SpellValueOverride const& value : args.SpellValueOverrides) + spell->SetSpellValue(value); spell->m_CastItem = args.CastItem; if (args.OriginalCastItemLevel) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index b2142825d9d..a41f2a7a268 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -8493,49 +8493,40 @@ SpellCastResult Spell::CanOpenLock(SpellEffectInfo const& effect, uint32 lockId, return SPELL_CAST_OK; } -void Spell::SetSpellValue(SpellValueMod mod, int32 value) +void Spell::SetSpellValue(CastSpellExtraArgsInit::SpellValueOverride const& value) { - if (mod < SPELLVALUE_BASE_POINT_END) + if (value.Type >= SPELLVALUE_BASE_POINT0 && value.Type < SPELLVALUE_BASE_POINT_END) { - m_spellValue->EffectBasePoints[mod] = value; - m_spellValue->CustomBasePointsMask |= 1 << mod; + m_spellValue->EffectBasePoints[value.Type - SPELLVALUE_BASE_POINT0] = value.Value.I; + m_spellValue->CustomBasePointsMask |= 1 << (value.Type - SPELLVALUE_BASE_POINT0); return; } - switch (mod) + switch (value.Type) { case SPELLVALUE_MAX_TARGETS: - m_spellValue->MaxAffectedTargets = (uint32)value; + m_spellValue->MaxAffectedTargets = uint32(value.Value.I); break; case SPELLVALUE_AURA_STACK: - m_spellValue->AuraStackAmount = uint8(value); + m_spellValue->AuraStackAmount = uint8(value.Value.I); break; case SPELLVALUE_DURATION: - m_spellValue->Duration = value; + m_spellValue->Duration = value.Value.I; break; case SPELLVALUE_PARENT_SPELL_TARGET_COUNT: - m_spellValue->ParentSpellTargetCount = value; + m_spellValue->ParentSpellTargetCount = value.Value.I; break; case SPELLVALUE_PARENT_SPELL_TARGET_INDEX: - m_spellValue->ParentSpellTargetIndex = value; + m_spellValue->ParentSpellTargetIndex = value.Value.I; break; - default: - break; - } -} - -void Spell::SetSpellValue(SpellValueModFloat mod, float value) -{ - switch (mod) - { case SPELLVALUE_RADIUS_MOD: - m_spellValue->RadiusMod = value; + m_spellValue->RadiusMod = value.Value.F; break; case SPELLVALUE_CRIT_CHANCE: - m_spellValue->CriticalChance = value; + m_spellValue->CriticalChance = value.Value.F; break; case SPELLVALUE_DURATION_PCT: - m_spellValue->DurationMul = value / 100.0f; + m_spellValue->DurationMul = value.Value.F / 100.0f; break; default: break; diff --git a/src/server/game/Spells/Spell.h b/src/server/game/Spells/Spell.h index 4debc6c7656..c8506d0c405 100644 --- a/src/server/game/Spells/Spell.h +++ b/src/server/game/Spells/Spell.h @@ -659,8 +659,7 @@ class TC_GAME_API Spell void CleanupTargetList(); - void SetSpellValue(SpellValueMod mod, int32 value); - void SetSpellValue(SpellValueModFloat mod, float value); + void SetSpellValue(CastSpellExtraArgsInit::SpellValueOverride const& value); Spell** m_selfContainer; // pointer to our spell container (if applicable) diff --git a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp index 6420e9ad6f4..28769da7628 100644 --- a/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp +++ b/src/server/scripts/Maelstrom/Stonecore/boss_high_priestess_azil.cpp @@ -555,7 +555,7 @@ public: { void SetRadiusMod() { - GetSpell()->SetSpellValue(SPELLVALUE_RADIUS_MOD, GetCaster()->GetObjectScale() * 2 / 3); + GetSpell()->SetSpellValue({ SPELLVALUE_RADIUS_MOD, GetCaster()->GetObjectScale() * 2 / 3 }); } void FilterTargets(std::list<WorldObject*>& unitList) @@ -626,7 +626,7 @@ public: { void SetRadiusMod() { - GetSpell()->SetSpellValue(SPELLVALUE_RADIUS_MOD, GetCaster()->GetObjectScale() * 2 / 3); + GetSpell()->SetSpellValue({ SPELLVALUE_RADIUS_MOD, GetCaster()->GetObjectScale() * 2 / 3 }); } void Register() override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp index bf15b87bfa8..f2e09b6605a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp @@ -2808,7 +2808,7 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050 void ModSanityStacks() { - GetSpell()->SetSpellValue(SPELLVALUE_AURA_STACK, 100); + GetSpell()->SetSpellValue({ SPELLVALUE_AURA_STACK, 100 }); } void Register() override |