aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellInfo.cpp
diff options
context:
space:
mode:
authorSeyden <saiifii@live.de>2023-08-22 00:02:37 +0200
committerGitHub <noreply@github.com>2023-08-22 00:02:37 +0200
commit42a6e0eb1afa431fc1efe7d4c5a62758fed42684 (patch)
tree236e4df00001eca190999eb4bd5d7419ee4a4b3a /src/server/game/Spells/SpellInfo.cpp
parente600cd392ba4eea17012663b08aeb429cb4fd774 (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.cpp35
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();