diff options
| author | Seyden <saiifii@live.de> | 2023-08-22 00:02:37 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-22 00:02:37 +0200 |
| commit | 42a6e0eb1afa431fc1efe7d4c5a62758fed42684 (patch) | |
| tree | 236e4df00001eca190999eb4bd5d7419ee4a4b3a /src/server/game/Spells/SpellInfo.cpp | |
| parent | e600cd392ba4eea17012663b08aeb429cb4fd774 (diff) | |
Core/Spells: Implement sqrt based aoe damage diminishing (#29192)
Co-authored-by: Shauren <shauren.trinity@gmail.com>
Diffstat (limited to 'src/server/game/Spells/SpellInfo.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index f43fbf07847..7020e63b246 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -3568,6 +3568,41 @@ void SpellInfo::_LoadImmunityInfo() } } +void SpellInfo::_LoadSqrtTargetLimit(int32 maxTargets, int32 numNonDiminishedTargets, Optional<SpellEffIndex> maxTargetsEffectValueHolder, + Optional<SpellEffIndex> numNonDiminishedTargetsEffectValueHolder) +{ + SqrtDamageAndHealingDiminishing.MaxTargets = maxTargets; + SqrtDamageAndHealingDiminishing.NumNonDiminishedTargets = numNonDiminishedTargets; + + if (maxTargetsEffectValueHolder) + { + if (maxTargetsEffectValueHolder < GetEffects().size()) + { + SpellEffectInfo const& valueHolder = GetEffect(*maxTargetsEffectValueHolder); + 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); + } + else + TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(maxTargets): Spell {} does not have effect {}", Id, AsUnderlyingType(*maxTargetsEffectValueHolder)); + } + + if (numNonDiminishedTargetsEffectValueHolder) + { + if (numNonDiminishedTargetsEffectValueHolder < GetEffects().size()) + { + SpellEffectInfo const& valueHolder = GetEffect(*numNonDiminishedTargetsEffectValueHolder); + 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); + } + else + TC_LOG_ERROR("spells", "SpellInfo::_LoadSqrtTargetLimit(numNonDiminishedTargets): Spell {} does not have effect {}", Id, AsUnderlyingType(*numNonDiminishedTargetsEffectValueHolder)); + } +} + void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, SpellEffectInfo const& spellEffectInfo, bool apply) const { SpellEffectInfo::ImmunityInfo const* immuneInfo = spellEffectInfo.GetImmunityInfo(); |
