Skip to content

Commit a5c547a

Browse files
committed
Core/Spells: Don't fail spells SPELL_ATTR2_FAIL_ON_ALL_TARGETS_IMMUNE when target list is empty for one effect
Closes TrinityCore#30603
1 parent f133c0f commit a5c547a

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

src/server/game/Spells/Spell.cpp

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,7 @@ void Spell::SelectSpellTargets()
748748
{
749749
if (m_spellInfo->HasAttribute(SPELL_ATTR1_REQUIRE_ALL_TARGETS))
750750
{
751-
bool noTargetFound = std::none_of(m_UniqueTargetInfo.begin(), m_UniqueTargetInfo.end(), [effectMask = 1u << spellEffectInfo.EffectIndex](TargetInfo const& target)
751+
bool noTargetFound = std::ranges::none_of(m_UniqueTargetInfo, [effectMask = 1u << spellEffectInfo.EffectIndex](TargetInfo const& target)
752752
{
753753
return target.EffectMask & effectMask;
754754
});
@@ -760,20 +760,6 @@ void Spell::SelectSpellTargets()
760760
return;
761761
}
762762
}
763-
if (m_spellInfo->HasAttribute(SPELL_ATTR2_FAIL_ON_ALL_TARGETS_IMMUNE))
764-
{
765-
bool anyNonImmuneTargetFound = std::any_of(m_UniqueTargetInfo.begin(), m_UniqueTargetInfo.end(), [effectMask = 1u << spellEffectInfo.EffectIndex](TargetInfo const& target)
766-
{
767-
return target.EffectMask & effectMask && target.MissCondition != SPELL_MISS_IMMUNE && target.MissCondition != SPELL_MISS_IMMUNE2;
768-
});
769-
770-
if (!anyNonImmuneTargetFound)
771-
{
772-
SendCastResult(SPELL_FAILED_IMMUNE);
773-
finish(SPELL_FAILED_IMMUNE);
774-
return;
775-
}
776-
}
777763
}
778764

779765
if (m_spellInfo->IsChanneled())
@@ -798,6 +784,21 @@ void Spell::SelectSpellTargets()
798784
}
799785
}
800786

787+
if (m_spellInfo->HasAttribute(SPELL_ATTR2_FAIL_ON_ALL_TARGETS_IMMUNE))
788+
{
789+
bool anyNonImmuneTargetFound = std::ranges::any_of(m_UniqueTargetInfo, [](TargetInfo const& target)
790+
{
791+
return target.MissCondition != SPELL_MISS_IMMUNE && target.MissCondition != SPELL_MISS_IMMUNE2;
792+
});
793+
794+
if (!anyNonImmuneTargetFound)
795+
{
796+
SendCastResult(SPELL_FAILED_IMMUNE);
797+
finish(SPELL_FAILED_IMMUNE);
798+
return;
799+
}
800+
}
801+
801802
if (m_targets.HasDst())
802803
{
803804
if (m_spellInfo->HasAttribute(SPELL_ATTR8_REQUIRES_LOCATION_TO_BE_ON_LIQUID_SURFACE))

0 commit comments

Comments
 (0)