Core/Scripts: Expose Spell::GetUnitTargetIndexForEffect in scripts

This commit is contained in:
Shauren
2026-02-19 21:41:14 +01:00
parent db54bfc5ac
commit 76c292ae4a
3 changed files with 18 additions and 6 deletions

View File

@@ -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);
});

View File

@@ -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())

View File

@@ -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;