Core/Spells: Moved loading aoe target caps out of SpellMgr::LoadSpellInfoCorrections

This commit is contained in:
Shauren
2024-12-23 17:53:58 +01:00
parent 38a5956b85
commit 38eee2f034
5 changed files with 54 additions and 22 deletions

View File

@@ -3483,38 +3483,53 @@ void SpellInfo::_LoadImmunityInfo()
}
}
void SpellInfo::_LoadSqrtTargetLimit(int32 maxTargets, int32 numNonDiminishedTargets, Optional<SpellEffIndex> maxTargetsEffectValueHolder,
Optional<SpellEffIndex> numNonDiminishedTargetsEffectValueHolder)
void SpellInfo::_LoadSqrtTargetLimit(int32 maxTargets, int32 numNonDiminishedTargets,
Optional<uint32> maxTargetsValueHolderSpell, Optional<SpellEffIndex> maxTargetsValueHolderEffect,
Optional<uint32> numNonDiminishedTargetsValueHolderSpell, Optional<SpellEffIndex> 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));
}
}