diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index d097b9257b..342d3fa010 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2657,18 +2657,18 @@ int32 Spell::GetUnitTargetIndexForEffect(ObjectGuid const& target, SpellEffIndex if (uniqueTargetInfo.MissCondition == SPELL_MISS_NONE && uniqueTargetInfo.EffectMask & (1 << effect)) { if (uniqueTargetInfo.TargetGUID == target) - break; + return index; ++index; } } - return index; + return -1; } int64 Spell::GetUnitTargetCountForEffect(SpellEffIndex effect) const { - return std::count_if(m_UniqueTargetInfo.begin(), m_UniqueTargetInfo.end(), [effect](TargetInfo const& targetInfo) + return std::ranges::count_if(m_UniqueTargetInfo, [effect](TargetInfo const& targetInfo) { return targetInfo.MissCondition == SPELL_MISS_NONE && targetInfo.EffectMask & (1 << effect); }); @@ -2676,7 +2676,7 @@ int64 Spell::GetUnitTargetCountForEffect(SpellEffIndex effect) const int64 Spell::GetGameObjectTargetCountForEffect(SpellEffIndex effect) const { - return std::count_if(m_UniqueGOTargetInfo.begin(), m_UniqueGOTargetInfo.end(), [effect](GOTargetInfo const& targetInfo) + return std::ranges::count_if(m_UniqueGOTargetInfo, [effect](GOTargetInfo const& targetInfo) { return targetInfo.EffectMask & (1 << effect); }); @@ -2684,7 +2684,7 @@ int64 Spell::GetGameObjectTargetCountForEffect(SpellEffIndex effect) const int64 Spell::GetItemTargetCountForEffect(SpellEffIndex effect) const { - return std::count_if(m_UniqueItemInfo.begin(), m_UniqueItemInfo.end(), [effect](ItemTargetInfo const& targetInfo) + return std::ranges::count_if(m_UniqueItemInfo, [effect](ItemTargetInfo const& targetInfo) { return targetInfo.EffectMask & (1 << effect); }); @@ -2692,7 +2692,7 @@ int64 Spell::GetItemTargetCountForEffect(SpellEffIndex effect) const int64 Spell::GetCorpseTargetCountForEffect(SpellEffIndex effect) const { - return std::count_if(m_UniqueCorpseTargetInfo.begin(), m_UniqueCorpseTargetInfo.end(), [effect](CorpseTargetInfo const& targetInfo) + return std::ranges::count_if(m_UniqueCorpseTargetInfo, [effect](CorpseTargetInfo const& targetInfo) { return targetInfo.EffectMask & (1 << effect); }); diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index 9e7b33d903..0a1edb7ab5 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -486,6 +486,17 @@ int64 SpellScript::GetUnitTargetCountForEffect(SpellEffIndex effect) const return m_spell->GetUnitTargetCountForEffect(effect); } +int32 SpellScript::GetUnitTargetIndexForEffect(ObjectGuid const& target, SpellEffIndex effect) const +{ + if (!IsAfterTargetSelectionPhase()) + { + TC_LOG_ERROR("scripts", "Script: `{}` Spell: `{}`: function SpellScript::GetUnitTargetIndexForEffect was called, but function has no effect in current hook! (spell has not selected targets yet)", + m_scriptName, m_scriptSpellId); + return 0; + } + return m_spell->GetUnitTargetIndexForEffect(target, effect); +} + int64 SpellScript::GetGameObjectTargetCountForEffect(SpellEffIndex effect) const { if (!IsAfterTargetSelectionPhase()) diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index 19b30ef995..e3f818628b 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -889,6 +889,7 @@ public: // methods usable only after spell targets have been fully selected int64 GetUnitTargetCountForEffect(SpellEffIndex effect) const; + int32 GetUnitTargetIndexForEffect(ObjectGuid const& target, SpellEffIndex effect) const; int64 GetGameObjectTargetCountForEffect(SpellEffIndex effect) const; int64 GetItemTargetCountForEffect(SpellEffIndex effect) const; int64 GetCorpseTargetCountForEffect(SpellEffIndex effect) const;