From c14bacd3704a4d941c4c583875f7a5876c84daa9 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Thu, 25 Jul 2019 22:43:19 +0200 Subject: [PATCH] Scripts/BoT: * fixed an issue that was causing Arion to mark three targets for Lightning Rod on 10 player difficulty * fixed Lightning Blast's visual effect targeting * use new predicates for victim and non-victim target selection --- .../custom/custom_2019_07_25_02_world.sql | 3 + .../boss_ascendant_council.cpp | 55 +++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) create mode 100644 sql/updates/world/custom/custom_2019_07_25_02_world.sql diff --git a/sql/updates/world/custom/custom_2019_07_25_02_world.sql b/sql/updates/world/custom/custom_2019_07_25_02_world.sql new file mode 100644 index 0000000000..f5bbbb5bd7 --- /dev/null +++ b/sql/updates/world/custom/custom_2019_07_25_02_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_arion_lightning_blast_dummy'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(94731, 'spell_arion_lightning_blast_dummy'); diff --git a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp index 4d8ec4002f..c1f97c2f5b 100644 --- a/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp +++ b/src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_ascendant_council.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "CommonPredicates.h" #include "GridNotifiers.h" #include "ObjectMgr.h" #include "ScriptMgr.h" @@ -2312,7 +2313,7 @@ class spell_arion_lightning_rod : public SpellScript void FilterTargets(std::list& targets) { - if (targets.size() < 3) + if (targets.empty()) return; uint8 size = GetCaster()->GetMap()->Is25ManRaid() ? 3 : 1; @@ -2400,32 +2401,6 @@ class spell_arion_disperse : public SpellScript } }; -class AttackerVictimCheck -{ - public: - AttackerVictimCheck(Unit* _attacker) : attacker(_attacker) { } - - bool operator()(WorldObject* object) - { - return (attacker->GetVictim() && attacker->GetVictim() == object->ToUnit()); - } - private: - Unit* attacker; -}; - -class AttackerNonVictimCheck -{ - public: - AttackerNonVictimCheck(Unit* _attacker) : attacker(_attacker) { } - - bool operator()(WorldObject* object) - { - return (attacker->GetVictim() && attacker->GetVictim() != object->ToUnit()); - } - private: - Unit* attacker; -}; - class spell_arion_lightning_blast : public SpellScript { PrepareSpellScript(spell_arion_lightning_blast); @@ -2435,7 +2410,7 @@ class spell_arion_lightning_blast : public SpellScript if (targets.empty()) return; - targets.remove_if(AttackerNonVictimCheck(GetCaster())); + targets.remove_if(Trinity::Predicates::Invert(Trinity::Predicates::IsVictimOf(GetCaster()))); } void Register() override @@ -2445,6 +2420,24 @@ class spell_arion_lightning_blast : public SpellScript } }; +class spell_arion_lightning_blast_dummy : public SpellScript +{ + PrepareSpellScript(spell_arion_lightning_blast_dummy); + + void FilterTargets(std::list& targets) + { + if (targets.empty()) + return; + + targets.remove_if(Trinity::Predicates::Invert(Trinity::Predicates::IsVictimOf(GetCaster()))); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_arion_lightning_blast_dummy::FilterTargets, EFFECT_0, TARGET_UNIT_SRC_AREA_ENEMY); + } +}; + class spell_arion_static_overload : public SpellScript { PrepareSpellScript(spell_arion_static_overload); @@ -2798,7 +2791,10 @@ class spell_elementium_monstrosity_gravity_crush : public SpellScript if (targets.empty()) return; - targets.remove_if(AttackerVictimCheck(GetCaster())); + targets.remove_if(Trinity::Predicates::IsVictimOf(GetCaster())); + + if (targets.empty()) + return; Trinity::Containers::RandomResize(targets, GetCaster()->GetMap()->Is25ManRaid() ? 3 : 1); } @@ -2859,6 +2855,7 @@ void AddSC_boss_ascendant_council() RegisterSpellScript(spell_arion_chain_lightning_targeting); RegisterSpellScript(spell_arion_disperse); RegisterSpellScript(spell_arion_lightning_blast); + RegisterSpellScript(spell_arion_lightning_blast_dummy); RegisterSpellScript(spell_arion_static_overload); RegisterSpellScript(spell_arion_static_overload_triggered); RegisterSpellScript(spell_terrastra_gravity_well);