Scripts/Baradin Hold: fixed a crash in Occuthar's Focused Fire target selection and improved target filter scripts (#27604)

This commit is contained in:
Ovah
2022-01-12 22:23:58 +01:00
committed by GitHub
parent b987a8968b
commit 97fe56962a
@@ -205,26 +205,6 @@ class npc_eyestalk : public CreatureScript
}
};
class FocusedFireTargetSelector
{
public:
FocusedFireTargetSelector(Creature* me, const Unit* victim) : _me(me), _victim(victim) { }
bool operator() (WorldObject* target)
{
if (target == _victim && _me->GetThreatManager().GetThreatListSize() > 1)
return true;
if (target->GetTypeId() != TYPEID_PLAYER)
return true;
return false;
}
Creature* _me;
Unit const* _victim;
};
// 96872 - Focused Fire
class spell_occuthar_focused_fire : public SpellScriptLoader
{
@@ -237,13 +217,16 @@ class spell_occuthar_focused_fire : public SpellScriptLoader
void FilterTargets(std::list<WorldObject*>& targets)
{
if (targets.empty())
if (targets.size() < 2)
return;
targets.remove_if(FocusedFireTargetSelector(GetCaster()->ToCreature(), GetCaster()->GetVictim()));
WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
targets.clear();
targets.push_back(target);
targets.remove_if([&](WorldObject const* target)
{
return GetCaster()->GetVictim() == target;
});
if (targets.size() >= 2)
Trinity::Containers::RandomResize(targets, 1);
}
void Register() override
@@ -283,9 +266,7 @@ class spell_occuthar_eyes_of_occuthar : public SpellScriptLoader
if (targets.empty())
return;
WorldObject* target = Trinity::Containers::SelectRandomContainerElement(targets);
targets.clear();
targets.push_back(target);
Trinity::Containers::RandomResize(targets, 1);
}
void HandleScript(SpellEffIndex /*effIndex*/)