TrinityCore
boss_illidari_council.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "ScriptMgr.h"
19#include "black_temple.h"
20#include "CellImpl.h"
21#include "Containers.h"
22#include "GridNotifiersImpl.h"
23#include "InstanceScript.h"
24#include "PassiveAI.h"
25#include "ScriptedCreature.h"
26#include "SpellAuraEffects.h"
27#include "SpellScript.h"
28
29enum Says
30{
37};
38
40{
41 // Illidari Council (Trigger)
44
45 // Generic
50
51 // High Nethermancer Zerevor's
57
58 // Lady Malande's
64
65 // Gathios the Shatterer's
78
79 // Veras Darkshadow's
84 SPELL_VANISH = 41476,
86
87 // Veras Vanish Effect
88 SPELL_BIRTH = 40031,
90};
91
93{
111
113{
117
119{
124};
125
127{
128 std::vector<uint32> bossData;
129 for (uint32 data : CouncilData)
130 if (data != exception)
131 bossData.emplace_back(data);
132
134}
135
137{
139
140 void Reset() override
141 {
142 _Reset();
143 _inCombat = false;
145 }
146
147 void JustEngagedWith(Unit* who) override
148 {
149 if (!_inCombat)
150 {
151 _inCombat = true;
154 for (uint32 bossData : CouncilData)
155 {
156 if (Creature* council = instance->GetCreature(bossData))
157 {
159 DoZoneInCombat(council);
160 }
161 }
164 if (Creature* council = instance->GetCreature(CouncilData[urand(0, 3)]))
165 council->AI()->Talk(SAY_COUNCIL_AGRO);
166 }
167 }
168
169 void EnterEvadeMode(EvadeReason /*why*/) override
170 {
171 if (!me->IsInEvadeMode())
172 {
173 _inCombat = false;
174 for (uint32 bossData : CouncilData)
175 if (Creature* council = instance->GetCreature(bossData))
177
180 }
181 }
182
183 void JustDied(Unit* /*killer*/) override
184 {
185 _inCombat = false;
186 events.Reset();
188
189 for (uint32 bossData : CouncilData)
190 {
191 if (Creature* council = instance->GetCreature(bossData))
192 {
193 // Allow loot
195 council->LowerPlayerDamageReq(council->GetMaxHealth());
196 council->CastSpell(council, SPELL_QUIET_SUICIDE, true);
197 }
198 }
199 }
200
201 void UpdateAI(uint32 diff) override
202 {
203 if (!UpdateVictim())
204 return;
205
206 events.Update(diff);
207
209 return;
210
211 while (uint32 eventId = events.ExecuteEvent())
212 {
213 switch (eventId)
214 {
218 break;
219 case EVENT_BERSERK:
220 for (uint32 bossData : CouncilData)
221 {
222 if (Creature* council = instance->GetCreature(bossData))
223 {
224 council->CastSpell(council, SPELL_BERSERK, true);
225 council->AI()->Talk(SAY_COUNCIL_ENRAGE);
226 }
227 }
228 break;
229 default:
230 break;
231 }
232
234 return;
235 }
236 }
237
238private:
240};
241
243{
244 IllidariCouncilBossAI(Creature* creature, uint32 bossId) : BossAI(creature, bossId), _bossId(bossId)
245 {
247 }
248
249 void Reset() override
250 {
252 events.Reset();
254 }
255
256 void JustEngagedWith(Unit* /*who*/) override
257 {
259 me->setActive(true);
261 DoZoneInCombat(illidari);
263 }
264
265 virtual void ScheduleEvents() = 0;
266
267 void JustDied(Unit* /*killer*/) override
268 {
270 }
271
272 void EnterEvadeMode(EvadeReason why) override
273 {
275 illidari->AI()->EnterEvadeMode(why);
276 }
277
278 void DamageTaken(Unit* who, uint32& damage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
279 {
280 if (damage >= me->GetHealth() && (!who || who->GetGUID() != me->GetGUID()))
281 damage = me->GetHealth() - 1;
282 }
283
284 void KilledUnit(Unit* victim) override
285 {
286 if (victim->GetTypeId() == TYPEID_PLAYER)
288
289 if (roll_chance_i(30))
291 boss->AI()->Talk(SAY_COUNCIL_COMNT);
292 }
293
294private:
296};
297
299{
300public:
301 HammerTargetSelector(Unit const* unit) : _me(unit) { }
302
303 bool operator()(Unit* unit) const
304 {
305 return _me->IsInRange(unit, 10.0f, 40.0f);
306 }
307
308private:
309 Unit const* _me;
310};
311
313{
315
316 void ScheduleEvents() override
317 {
324 }
325
326 void ExecuteEvent(uint32 eventId) override
327 {
328 switch (eventId)
329 {
330 case EVENT_BLESS:
331 {
332 std::list<Unit*> TargetList;
335 Cell::VisitAllObjects(me, searcher, 100.0f);
336
337 if (!TargetList.empty())
338 {
341 }
342 events.Repeat(Seconds(30), Seconds(45));
343 break;
344 }
345 case EVENT_AURA:
347 events.Repeat(Seconds(30));
348 break;
352 events.Repeat(Seconds(20));
353 break;
354 case EVENT_JUDGEMENT:
356 events.Repeat(Seconds(15));
357 break;
360 events.Repeat(Seconds(30), Seconds(35));
361 break;
362 default:
363 break;
364 }
365 }
366};
367
369{
371
372 void Reset() override
373 {
377 }
378
379 void ScheduleEvents() override
380 {
385 }
386
387 void DoAction(int32 actionId) override
388 {
389 if (actionId == ACTION_REFRESH_DAMPEN)
391 }
392 void ExecuteEvent(uint32 eventId) override
393 {
394 switch (eventId)
395 {
398 DoCast(target, SPELL_FLAMESTRIKE);
400 events.Repeat(Seconds(40));
401 break;
402 case EVENT_BLIZZARD:
404 DoCast(target, SPELL_BLIZZARD);
405 events.Repeat(Seconds(15), Seconds(40));
406 break;
409 break;
412 {
416 }
418 break;
421 break;
422 default:
423 break;
424 }
425 }
426
427 void UpdateAI(uint32 diff) override
428 {
429 if (!UpdateVictim())
430 return;
431
432 events.Update(diff);
433
435 return;
436
437 while (uint32 eventId = events.ExecuteEvent())
438 {
439 ExecuteEvent(eventId);
441 return;
442 }
443
445 }
446
447private:
449};
450
452{
454 {
455 me->SetCanMelee(false); // DoSpellAttackIfReady
456 }
457
458 void ScheduleEvents() override
459 {
463 }
464
465 void HealReceived(Unit* /*who*/, uint32& addhealth) override
466 {
467 // Need be negative to heal trigger
468 me->CastSpell(nullptr, SPELL_SHARED_RULE, CastSpellExtraArgs(TRIGGERED_FULL_MASK).AddSpellBP0(-int32(addhealth)));
469 }
470
471 void ExecuteEvent(uint32 eventId) override
472 {
473 switch (eventId)
474 {
477 events.Repeat(Seconds(20), Seconds(35));
478 break;
482 events.Repeat(Seconds(40));
483 break;
486 events.Repeat(Seconds(20));
487 break;
488 default:
489 break;
490 }
491 }
492
493 void UpdateAI(uint32 diff) override
494 {
495 if (!UpdateVictim())
496 return;
497
498 events.Update(diff);
499
501 return;
502
503 while (uint32 eventId = events.ExecuteEvent())
504 {
505 ExecuteEvent(eventId);
507 return;
508 }
509
511 }
512};
513
515{
517
518 void ScheduleEvents() override
519 {
521 }
522
523 bool CanSeeAlways(WorldObject const* who) override
524 {
525 return me->HasAura(SPELL_VANISH) ? true : ScriptedAI::CanSeeAlways(who);
526 }
527
528 void ExecuteEvent(uint32 eventId) override
529 {
530 switch (eventId)
531 {
532 case EVENT_VANISH:
536 events.Repeat(Seconds(60));
537 break;
538 default:
539 break;
540 }
541 }
542};
543
545{
546 npc_veras_vanish_effect(Creature* creature) : PassiveAI(creature) { }
547
548 void Reset() override
549 {
550 DoCastSelf(SPELL_BIRTH, true);
551 _scheduler.Schedule(Seconds(1), [this](TaskContext /*context*/)
552 {
554 });
555 }
556
557 void UpdateAI(uint32 diff) override
558 {
559 _scheduler.Update(diff);
560 }
561
562private:
564};
565
566// 41499 - Empyreal Balance
568{
569 void HandleDummy(SpellEffIndex /*effIndex*/)
570 {
571 Unit* target = GetHitUnit();
572 uint32 health = GetCaster()->CountPctFromCurHealth(25);
573 target->SetMaxHealth(health);
574 target->SetHealth(health);
575 }
576
577 void Register() override
578 {
580 }
581};
582
583// 41333 - Empyreal Equivalency
585{
586 void HandleScript(SpellEffIndex /*effIndex*/)
587 {
588 GetHitUnit()->SetHealth(GetCaster()->CountPctFromCurHealth(25));
589 }
590
591 void Register() override
592 {
594 }
595};
596
597// 41341 - Balance of Power
599{
600 bool Validate(SpellInfo const* /*spellInfo*/) override
601 {
603 }
604
605 void Absorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& /*absorbAmount*/)
606 {
608 GetTarget()->CastSpell(nullptr, SPELL_SHARED_RULE, CastSpellExtraArgs(aurEff).AddSpellBP0(dmgInfo.GetDamage()));
609 }
610
611 void Register() override
612 {
614 }
615};
616
617// 41480 - Deadly Strike
619{
620 bool Validate(SpellInfo const* /*spellInfo*/) override
621 {
623 }
624
625 void OnTrigger(AuraEffect const* aurEff)
626 {
628
629 if (Unit* victim = GetTarget()->GetAI()->SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, true))
630 GetTarget()->CastSpell(victim, SPELL_DEADLY_POISON, aurEff);
631 }
632
633 void Register() override
634 {
636 }
637};
638
639// 41485 - Deadly Poison
641{
642 bool Validate(SpellInfo const* /*spellInfo*/) override
643 {
645 }
646
647 void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
648 {
649 if (Unit* caster = GetCaster())
650 {
651 Unit* target = GetTarget();
652 caster->CastSpell(target, SPELL_ENVENOM, true);
653 target->CastSpell(nullptr, SPELL_ENVENOM_VISUAL, true);
654 }
655 }
656
657 void Register() override
658 {
660 }
661};
662
663// 41476 - Vanish
665{
666 bool Validate(SpellInfo const* /*spellInfo*/) override
667 {
669 }
670
671 void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
672 {
674 }
675
676 void Register() override
677 {
679 }
680};
681
682// 41475 - Reflective Shield
684{
685 bool Validate(SpellInfo const* /*spellInfo*/) override
686 {
688 }
689
690 void OnAbsorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount)
691 {
692 Unit* target = GetTarget();
693 if (dmgInfo.GetAttacker() == target)
694 return;
695
696 target->CastSpell(dmgInfo.GetAttacker(), SPELL_REFLECTIVE_SHIELD_DAMAGE, CastSpellExtraArgs(aurEff).AddSpellBP0(absorbAmount/2));
697 }
698
699 void Register() override
700 {
702 }
703};
704
705// 41467 - Judgement
707{
708 bool Validate(SpellInfo const* /*spellInfo*/) override
709 {
710 return ValidateSpellInfo(
711 {
715 });
716 }
717
718 void HandleScript(SpellEffIndex /*effIndex*/)
719 {
720 Unit* caster = GetCaster();
721 Unit* target = GetHitUnit();
723 caster->CastSpell(target, SPELL_JUDGEMENT_PRIMER, true);
724 caster->CastSpell(target, judgementId, true);
725 }
726
728 {
729 if (Creature* caster = GetCaster()->ToCreature())
730 caster->AI()->Talk(SAY_COUNCIL_SPECIAL);
731 }
732
733 void Register() override
734 {
737 }
738};
739
740/* 41469 - Seal of Command
741 41459 - Seal of Blood */
743{
744 bool Validate(SpellInfo const* /*spellInfo*/) override
745 {
746 return ValidateSpellInfo(
747 {
750 });
751 }
752
753 void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/)
754 {
755 Unit* target = GetTarget();
756 if (target->IsInWorld() && target->IsAlive())
757 {
759 target->CastSpell(target, spellId, true);
760 }
761 }
762
763 void Register() override
764 {
766 }
767};
768
769// 41478 - Dampen Magic
771{
772 void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
773 {
774 if (Creature* target = GetTarget()->ToCreature())
775 {
778 target->AI()->DoAction(ACTION_REFRESH_DAMPEN);
779 }
780 }
781
782 void Register() override
783 {
785 }
786};
787
789{
806}
First const & RAND(First const &first, Second const &second, Rest const &... rest)
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:32
@ DONE
@ ENCOUNTER_FRAME_DISENGAGE
@ ENCOUNTER_FRAME_ENGAGE
@ TYPEID_PLAYER
Definition: ObjectGuid.h:41
Spells
Definition: PlayerAI.cpp:32
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:42
bool roll_chance_i(int chance)
Definition: Random.h:59
#define RegisterSpellScript(spell_script)
Definition: ScriptMgr.h:1369
SpellEffIndex
Definition: SharedDefines.h:29
@ EFFECT_0
Definition: SharedDefines.h:30
@ EFFECT_2
Definition: SharedDefines.h:32
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
AuraRemoveMode
@ AURA_REMOVE_BY_EXPIRE
@ AURA_REMOVE_BY_ENEMY_SPELL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_DUMMY
@ SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
@ SPELL_AURA_MOD_ROOT
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
Definition: SpellDefines.h:266
#define SpellEffectFn(F, I, N)
Definition: SpellScript.h:842
#define AuraEffectPeriodicFn(F, I, N)
Definition: SpellScript.h:2046
#define SpellCastFn(F)
Definition: SpellScript.h:825
#define AuraEffectAbsorbFn(F, I)
Definition: SpellScript.h:2090
#define AuraEffectRemoveFn(F, I, N, M)
Definition: SpellScript.h:2040
EvadeReason
Definition: UnitAICommon.h:30
DamageEffectType
Definition: UnitDefines.h:131
@ UNIT_STATE_CASTING
Definition: Unit.h:270
#define RegisterBlackTempleCreatureAI(ai_name)
Definition: black_temple.h:149
@ DATA_ILLIDARI_COUNCIL
Definition: black_temple.h:38
@ DATA_HIGH_NETHERMANCER_ZEREVOR
Definition: black_temple.h:48
@ DATA_GATHIOS_THE_SHATTERER
Definition: black_temple.h:47
@ DATA_VERAS_DARKSHADOW
Definition: black_temple.h:50
@ DATA_LADY_MALANDE
Definition: black_temple.h:49
Says
@ SAY_COUNCIL_SLAY
@ SAY_COUNCIL_DEATH
@ SAY_COUNCIL_AGRO
@ SAY_COUNCIL_COMNT
@ SAY_COUNCIL_ENRAGE
@ SAY_COUNCIL_SPECIAL
@ EVENT_REFLECTIVE_SHIELD
@ EVENT_CIRCLE_OF_HEALING
@ EVENT_HAMMER_OF_JUSTICE
@ EVENT_FLAMESTRIKE
@ EVENT_ARCANE_EXPLOSION
@ EVENT_EMPYREAL_EQUIVALENCY
@ EVENT_CONSECRATION
@ EVENT_DIVINE_WRATH
@ EVENT_BLIZZARD
@ EVENT_ARCANE_EXPLOSION_CHECK
@ EVENT_DAMPEN_MAGIC
void AddSC_boss_illidari_council()
uint32 const CouncilData[4]
@ SPELL_CIRCLE_OF_HEALING
@ SPELL_HAMMER_OF_JUSTICE
@ SPELL_SHARED_RULE
@ SPELL_DIVINE_WRATH
@ SPELL_JUDGEMENT_PRIMER
@ SPELL_FLAMESTRIKE
@ SPELL_JUDGEMENT_OF_COMMAND
@ SPELL_ENVENOM_VISUAL
@ SPELL_EMPYREAL_EQUIVALENCY
@ SPELL_EMPOWERED_SMITE
@ SPELL_VANISH_TELEPORT
@ SPELL_REFLECTIVE_SHIELD
@ SPELL_REFLECTIVE_SHIELD_DAMAGE
@ SPELL_BALANCE_OF_POWER
@ SPELL_CONSECRATION
@ SPELL_ARCANE_EXPLOSION
@ SPELL_DEADLY_POISON
@ SPELL_BLIZZARD
@ SPELL_BLESS_PROTECTION
@ SPELL_CHROMATIC_AURA
@ SPELL_DEVOTION_AURA
@ SPELL_EMPYREAL_BALANCE
@ SPELL_SEAL_OF_BLOOD
@ SPELL_ARCANE_BOLT
@ SPELL_QUIET_SUICIDE
@ SPELL_DAMPEN_MAGIC
@ SPELL_JUDGEMENT_OF_BLOOD
@ SPELL_BLESS_SPELL_WARDING
@ SPELL_SEAL_OF_COMMAND
@ SPELL_DEADLY_STRIKE
@ SPELL_JUDGEMENT
@ SPELL_ENVENOM_DUMMY
static uint32 GetRandomBossExcept(uint32 exception)
@ ACTION_REFRESH_DAMPEN
@ SUMMON_COUNCIL_GROUP
AuraRemoveMode GetRemoveMode() const
Definition: SpellAuras.h:91
uint32 GetId() const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
Definition: SpellScript.h:2039
HookList< EffectPeriodicHandler > OnEffectPeriodic
Definition: SpellScript.h:2045
HookList< EffectAbsorbHandler > AfterEffectAbsorb
Definition: SpellScript.h:2096
Unit * GetCaster() const
HookList< EffectAbsorbHandler > OnEffectAbsorb
Definition: SpellScript.h:2089
Unit * GetTarget() const
HookList< EffectApplyHandler > OnEffectRemove
Definition: SpellScript.h:2035
InstanceScript *const instance
void JustEngagedWith(Unit *who) override
void _DespawnAtEvade(Seconds delayToRespawn=30s, Creature *who=nullptr)
SummonList summons
EventMap events
virtual bool CanSeeAlways(WorldObject const *)
Definition: CreatureAI.h:224
void DoZoneInCombat()
Definition: CreatureAI.h:161
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:56
bool UpdateVictim()
Definition: CreatureAI.cpp:245
void SetBoundary(CreatureBoundary const *boundary, bool negativeBoundaries=false)
Definition: CreatureAI.cpp:446
Creature *const me
Definition: CreatureAI.h:61
void SetCombatPulseDelay(uint32 delay)
Definition: Creature.h:345
void SetCanMelee(bool canMelee, bool fleeFromMelee=false)
Definition: Creature.cpp:2822
bool IsInEvadeMode() const
Definition: Creature.h:203
Unit * GetAttacker() const
Definition: Unit.h:440
uint32 GetDamage() const
Definition: Unit.h:446
uint32 ExecuteEvent()
Definition: EventMap.cpp:73
void Update(uint32 time)
Definition: EventMap.h:56
void Repeat(Milliseconds time)
Definition: EventMap.cpp:63
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition: EventMap.cpp:36
void Reset()
Definition: EventMap.cpp:21
HammerTargetSelector(Unit const *unit)
bool operator()(Unit *unit) const
virtual bool SetBossState(uint32 id, EncounterState state)
Creature * GetCreature(uint32 type)
CreatureBoundary const * GetBossBoundary(uint32 id) const
void SendEncounterUnit(EncounterFrameType type, Unit const *unit, Optional< int32 > param1={}, Optional< int32 > param2={})
bool IsInWorld() const
Definition: Object.h:154
TypeID GetTypeId() const
Definition: Object.h:173
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Definition: SpellScript.h:162
HookList< CastHandler > AfterCast
Definition: SpellScript.h:824
Unit * GetCaster() const
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
Definition: SpellScript.h:840
TaskScheduler & Schedule(std::chrono::duration< Rep, Period > time, task_handler_t task)
TaskScheduler & Update(success_t const &callback=nullptr)
bool DoSpellAttackIfReady(uint32 spellId)
Definition: UnitAI.cpp:61
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition: UnitAI.h:159
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition: UnitAI.cpp:180
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition: UnitAI.cpp:79
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:89
Definition: Unit.h:627
void SetHealth(uint64 val)
Definition: Unit.cpp:9346
bool IsAlive() const
Definition: Unit.h:1164
uint64 GetHealth() const
Definition: Unit.h:776
uint64 CountPctFromCurHealth(int32 pct) const
Definition: Unit.h:786
void SetMaxHealth(uint64 val)
Definition: Unit.cpp:9377
bool HasUnitState(const uint32 f) const
Definition: Unit.h:732
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition: Unit.cpp:4664
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
void setActive(bool isActiveObject)
Definition: Object.cpp:922
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
Definition: Object.cpp:1238
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
Definition: Object.cpp:2131
void Absorb(AuraEffect *aurEff, DamageInfo &dmgInfo, uint32 &)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void OnTrigger(AuraEffect const *aurEff)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void OnAbsorb(AuraEffect *aurEff, DamageInfo &dmgInfo, uint32 &absorbAmount)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *) override
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition: Containers.h:109
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:203
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
virtual void ScheduleEvents()=0
IllidariCouncilBossAI(Creature *creature, uint32 bossId)
void EnterEvadeMode(EvadeReason why) override
void KilledUnit(Unit *victim) override
void JustEngagedWith(Unit *) override
void JustDied(Unit *) override
boss_gathios_the_shatterer(Creature *creature)
void ExecuteEvent(uint32 eventId) override
void ExecuteEvent(uint32 eventId) override
boss_high_nethermancer_zerevor(Creature *creature)
void DoAction(int32 actionId) override
void UpdateAI(uint32 diff) override
boss_illidari_council(Creature *creature)
void JustEngagedWith(Unit *who) override
void JustDied(Unit *) override
void EnterEvadeMode(EvadeReason) override
void UpdateAI(uint32 diff) override
void ExecuteEvent(uint32 eventId) override
void HealReceived(Unit *, uint32 &addhealth) override
void UpdateAI(uint32 diff) override
boss_lady_malande(Creature *creature)
void ScheduleEvents() override
boss_veras_darkshadow(Creature *creature)
bool CanSeeAlways(WorldObject const *who) override
void ExecuteEvent(uint32 eventId) override
void UpdateAI(uint32 diff) override
npc_veras_vanish_effect(Creature *creature)