aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOvah <dreadkiller@gmx.de>2022-01-12 22:23:58 +0100
committerGitHub <noreply@github.com>2022-01-12 22:23:58 +0100
commit97fe56962a4b1a8b32c943ff8cbf9120cf55ec90 (patch)
treeac070561d7b5fedf507681e9f0e230feaf16f71e /src
parentb987a8968b45b8d5c86ab7e66d3910d2ecfe0963 (diff)
Scripts/Baradin Hold: fixed a crash in Occuthar's Focused Fire target selection and improved target filter scripts (#27604)
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp37
1 files changed, 9 insertions, 28 deletions
diff --git a/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp b/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
index 7b1f9e220c6..cb0338011d1 100644
--- a/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
+++ b/src/server/scripts/EasternKingdoms/BaradinHold/boss_occuthar.cpp
@@ -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*/)