From 38eee2f034398e77335ec97228b931aaca5579bd Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 23 Dec 2024 17:53:58 +0100 Subject: Core/Spells: Moved loading aoe target caps out of SpellMgr::LoadSpellInfoCorrections --- src/server/game/Spells/SpellInfo.cpp | 43 ++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'src/server/game/Spells/SpellInfo.cpp') diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index f0eaa86f97e..7b93cce27e1 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -3483,38 +3483,53 @@ void SpellInfo::_LoadImmunityInfo() } } -void SpellInfo::_LoadSqrtTargetLimit(int32 maxTargets, int32 numNonDiminishedTargets, Optional maxTargetsEffectValueHolder, - Optional numNonDiminishedTargetsEffectValueHolder) +void SpellInfo::_LoadSqrtTargetLimit(int32 maxTargets, int32 numNonDiminishedTargets, + Optional maxTargetsValueHolderSpell, Optional maxTargetsValueHolderEffect, + Optional numNonDiminishedTargetsValueHolderSpell, Optional numNonDiminishedTargetsValueHolderEffect) { SqrtDamageAndHealingDiminishing.MaxTargets = maxTargets; SqrtDamageAndHealingDiminishing.NumNonDiminishedTargets = numNonDiminishedTargets; - if (maxTargetsEffectValueHolder) + if (maxTargetsValueHolderEffect) { - if (maxTargetsEffectValueHolder < GetEffects().size()) + SpellInfo const* maxTargetValueHolder = this; + if (maxTargetsValueHolderSpell) + maxTargetValueHolder = sSpellMgr->GetSpellInfo(*maxTargetsValueHolderSpell, Difficulty); + + if (!maxTargetValueHolder) + TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} does not exist", maxTargetsValueHolderSpell); + else if (maxTargetsValueHolderEffect >= maxTargetValueHolder->GetEffects().size()) + TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} does not have effect {}", + maxTargetValueHolder->Id, AsUnderlyingType(*maxTargetsValueHolderEffect)); + else { - SpellEffectInfo const& valueHolder = GetEffect(*maxTargetsEffectValueHolder); + SpellEffectInfo const& valueHolder = maxTargetValueHolder->GetEffect(*maxTargetsValueHolderEffect); int32 expectedValue = valueHolder.CalcBaseValue(nullptr, nullptr, 0, -1); if (maxTargets != expectedValue) TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} has different value in effect {} than expected, recheck target caps (expected {}, got {})", - Id, AsUnderlyingType(*maxTargetsEffectValueHolder), maxTargets, expectedValue); + maxTargetValueHolder->Id, AsUnderlyingType(*maxTargetsValueHolderEffect), maxTargets, expectedValue); } - else - TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} does not have effect {}", Id, AsUnderlyingType(*maxTargetsEffectValueHolder)); } - if (numNonDiminishedTargetsEffectValueHolder) + if (numNonDiminishedTargetsValueHolderEffect) { - if (numNonDiminishedTargetsEffectValueHolder < GetEffects().size()) + SpellInfo const* numNonDiminishedTargetsValueHolder = this; + if (numNonDiminishedTargetsValueHolderSpell) + numNonDiminishedTargetsValueHolder = sSpellMgr->GetSpellInfo(*numNonDiminishedTargetsValueHolderSpell, Difficulty); + + if (!numNonDiminishedTargetsValueHolder) + TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} does not exist", maxTargetsValueHolderSpell); + else if (numNonDiminishedTargetsValueHolderEffect >= numNonDiminishedTargetsValueHolder->GetEffects().size()) + TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} does not have effect {}", + numNonDiminishedTargetsValueHolder->Id, AsUnderlyingType(*maxTargetsValueHolderEffect)); + else { - SpellEffectInfo const& valueHolder = GetEffect(*numNonDiminishedTargetsEffectValueHolder); + SpellEffectInfo const& valueHolder = numNonDiminishedTargetsValueHolder->GetEffect(*numNonDiminishedTargetsValueHolderEffect); int32 expectedValue = valueHolder.CalcBaseValue(nullptr, nullptr, 0, -1); if (numNonDiminishedTargets != expectedValue) TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} has different value in effect {} than expected, recheck target caps (expected {}, got {})", - Id, AsUnderlyingType(*numNonDiminishedTargetsEffectValueHolder), numNonDiminishedTargets, expectedValue); + numNonDiminishedTargetsValueHolder->Id, AsUnderlyingType(*numNonDiminishedTargetsValueHolderEffect), numNonDiminishedTargets, expectedValue); } - else - TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} does not have effect {}", Id, AsUnderlyingType(*numNonDiminishedTargetsEffectValueHolder)); } } -- cgit v1.2.3