diff options
author | Ovah <dreadkiller@gmx.de> | 2022-01-12 22:23:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-12 22:23:58 +0100 |
commit | 97fe56962a4b1a8b32c943ff8cbf9120cf55ec90 (patch) | |
tree | ac070561d7b5fedf507681e9f0e230feaf16f71e /src | |
parent | b987a8968b45b8d5c86ab7e66d3910d2ecfe0963 (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.cpp | 37 |
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*/) |