diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index cc3562d463a..72fe60846b8 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -56,6 +56,44 @@ enum eSpells SPELL_WAKING_NIGHTMARE_H = 67677 }; +class OrientationCheck : public std::unary_function<Unit*, bool> +{ + public: + explicit OrientationCheck(Unit* _caster) : caster(_caster) { } + bool operator() (Unit* unit) + { + return !unit->isInFront(caster, 40.0f, 2.5f); + } + + private: + Unit* caster; +}; + +class spell_eadric_radiance : public SpellScriptLoader +{ + public: + spell_eadric_radiance() : SpellScriptLoader("spell_eadric_radiance") { } + class spell_eadric_radiance_SpellScript : public SpellScript + { + PrepareSpellScript(spell_eadric_radiance_SpellScript); + void FilterTargets(std::list<Unit*>& unitList) + { + unitList.remove_if(OrientationCheck(GetCaster())); + } + + void Register() + { + OnUnitTargetSelect += SpellUnitTargetFn(spell_eadric_radiance_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_AREA_ENEMY_SRC); + OnUnitTargetSelect += SpellUnitTargetFn(spell_eadric_radiance_SpellScript::FilterTargets, EFFECT_1, TARGET_UNIT_AREA_ENEMY_SRC); + } + }; + + SpellScript *GetSpellScript() const + { + return new spell_eadric_radiance_SpellScript(); + } +}; + class boss_eadric : public CreatureScript { public: @@ -512,6 +550,7 @@ public: void AddSC_boss_argent_challenge() { new boss_eadric(); + new spell_eadric_radiance(); new boss_paletress(); new npc_memory(); new npc_argent_soldier(); |