diff options
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*/) |