aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-01-27 00:24:12 +0100
committerShauren <shauren.trinity@gmail.com>2025-01-27 00:24:12 +0100
commita5c547a383e40b155a2063404c040ea0007c9ebd (patch)
treedf3ac2ac4e8d1decc144b7f06787f0de27f2dbdf
parentf133c0f91699defa406565fc6e43d55916ed6d98 (diff)
Core/Spells: Don't fail spells SPELL_ATTR2_FAIL_ON_ALL_TARGETS_IMMUNE when target list is empty for one effect
Closes #30603
-rw-r--r--src/server/game/Spells/Spell.cpp31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp
index 7ab55f24af8..3d99133087b 100644
--- a/src/server/game/Spells/Spell.cpp
+++ b/src/server/game/Spells/Spell.cpp
@@ -748,7 +748,7 @@ void Spell::SelectSpellTargets()
{
if (m_spellInfo->HasAttribute(SPELL_ATTR1_REQUIRE_ALL_TARGETS))
{
- bool noTargetFound = std::none_of(m_UniqueTargetInfo.begin(), m_UniqueTargetInfo.end(), [effectMask = 1u << spellEffectInfo.EffectIndex](TargetInfo const& target)
+ bool noTargetFound = std::ranges::none_of(m_UniqueTargetInfo, [effectMask = 1u << spellEffectInfo.EffectIndex](TargetInfo const& target)
{
return target.EffectMask & effectMask;
});
@@ -760,20 +760,6 @@ void Spell::SelectSpellTargets()
return;
}
}
- if (m_spellInfo->HasAttribute(SPELL_ATTR2_FAIL_ON_ALL_TARGETS_IMMUNE))
- {
- bool anyNonImmuneTargetFound = std::any_of(m_UniqueTargetInfo.begin(), m_UniqueTargetInfo.end(), [effectMask = 1u << spellEffectInfo.EffectIndex](TargetInfo const& target)
- {
- return target.EffectMask & effectMask && target.MissCondition != SPELL_MISS_IMMUNE && target.MissCondition != SPELL_MISS_IMMUNE2;
- });
-
- if (!anyNonImmuneTargetFound)
- {
- SendCastResult(SPELL_FAILED_IMMUNE);
- finish(SPELL_FAILED_IMMUNE);
- return;
- }
- }
}
if (m_spellInfo->IsChanneled())
@@ -798,6 +784,21 @@ void Spell::SelectSpellTargets()
}
}
+ if (m_spellInfo->HasAttribute(SPELL_ATTR2_FAIL_ON_ALL_TARGETS_IMMUNE))
+ {
+ bool anyNonImmuneTargetFound = std::ranges::any_of(m_UniqueTargetInfo, [](TargetInfo const& target)
+ {
+ return target.MissCondition != SPELL_MISS_IMMUNE && target.MissCondition != SPELL_MISS_IMMUNE2;
+ });
+
+ if (!anyNonImmuneTargetFound)
+ {
+ SendCastResult(SPELL_FAILED_IMMUNE);
+ finish(SPELL_FAILED_IMMUNE);
+ return;
+ }
+ }
+
if (m_targets.HasDst())
{
if (m_spellInfo->HasAttribute(SPELL_ATTR8_REQUIRES_LOCATION_TO_BE_ON_LIQUID_SURFACE))