TrinityCore
Loading...
Searching...
No Matches
boss_priestess_delrissa.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/* ScriptData
19SDName: Boss_Priestess_Delrissa
20SD%Complete: 65
21SDComment: No Heroic support yet. Needs further testing. Several scripts for pets disabled, not seem to require any special script.
22SDCategory: Magister's Terrace
23EndScriptData */
24
25#include "ScriptMgr.h"
26#include "magisters_terrace.h"
27#include "InstanceScript.h"
28#include "ObjectAccessor.h"
29#include "ScriptedCreature.h"
30#include "TemporarySummon.h"
31
32struct Speech
33{
35};
36
38{
39 {1},
40 {2},
41 {3},
42 {4},
43};
44
46{
47 {5},
48 {6},
49 {7},
50 {8},
51 {9},
52};
53
55{
57 SAY_DEATH = 10
58};
59
70
75
76const float fOrientation = 4.98f;
77const float fZLocation = -19.921f;
78
79float LackeyLocations[4][2]=
80{
81 {123.77f, 17.6007f},
82 {131.731f, 15.0827f},
83 {121.563f, 15.6213f},
84 {129.988f, 17.2355f},
85};
86
88{
89 24557, //Kagani Nightstrike
90 24558, //Elris Duskhallow
91 24554, //Eramas Brightblaze
92 24561, //Yazzaj
93 24559, //Warlord Salaris
94 24555, //Garaxxas
95 24553, //Apoko
96 24556, //Zelfan
97};
98
99// 24560 - Priestess Delrissa
101{
103 {
104 Initialize();
105 instance = creature->GetInstanceScript();
106 LackeyEntryList.clear();
107 }
108
110 {
111 PlayersKilled = 0;
112
113 HealTimer = 15000;
114 RenewTimer = 10000;
115 ShieldTimer = 2000;
116 SWPainTimer = 5000;
117 DispelTimer = 7500;
118 ResetTimer = 5000;
119 }
120
122
123 std::vector<uint32> LackeyEntryList;
125
127
134
135 void Reset() override
136 {
137 Initialize();
138
140 }
141
142 //this mean she at some point evaded
147
148 void JustEngagedWith(Unit* who) override
149 {
151
152 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
154 if (!pAdd->IsEngaged())
155 AddThreat(who, 0.0f, pAdd);
156
158 }
159
161 {
162 //can be called if Creature are dead, so avoid
163 if (!me->IsAlive())
164 return;
165
166 uint8 j = 0;
167
168 //it's empty, so first time
169 if (LackeyEntryList.empty())
170 {
171 //pre-allocate size for speed
172 LackeyEntryList.resize((sizeof(m_auiAddEntries) / sizeof(uint32)));
173
174 //fill vector array with entries from Creature array
175 for (uint8 i = 0; i < LackeyEntryList.size(); ++i)
177
178 //remove random entries
179 while (LackeyEntryList.size() > MAX_ACTIVE_LACKEY)
180 LackeyEntryList.erase(LackeyEntryList.begin() + rand32() % LackeyEntryList.size());
181
182 //summon all the remaining in vector
183 for (std::vector<uint32>::const_iterator itr = LackeyEntryList.begin(); itr != LackeyEntryList.end(); ++itr)
184 {
186 m_auiLackeyGUID[j] = pAdd->GetGUID();
187
188 ++j;
189 }
190 }
191 else
192 {
193 for (std::vector<uint32>::const_iterator itr = LackeyEntryList.begin(); itr != LackeyEntryList.end(); ++itr)
194 {
196
197 //object already removed, not exist
198 if (!pAdd)
199 {
201 if (pAdd)
202 m_auiLackeyGUID[j] = pAdd->GetGUID();
203 }
204 ++j;
205 }
206 }
207 }
208
209 void KilledUnit(Unit* victim) override
210 {
211 if (victim->GetTypeId() != TYPEID_PLAYER)
212 return;
213
215
216 if (PlayersKilled < 4)
218 }
219
229
230 void UpdateAI(uint32 diff) override
231 {
232 if (!UpdateVictim())
233 return;
234
235 if (ResetTimer <= diff)
236 {
237 float x, y, z, o;
238 me->GetHomePosition(x, y, z, o);
239 if (me->GetPositionZ() >= z+10)
240 {
242 return;
243 }
244 ResetTimer = 5000;
245 } else ResetTimer -= diff;
246
247 if (HealTimer <= diff)
248 {
249 uint32 health = me->GetHealth();
250 Unit* target = me;
251 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
252 {
254 {
255 if (pAdd->IsAlive() && pAdd->GetHealth() < health)
256 target = pAdd;
257 }
258 }
259
260 DoCast(target, SPELL_FLASH_HEAL);
261 HealTimer = 15000;
262 } else HealTimer -= diff;
263
264 if (RenewTimer <= diff)
265 {
266 Unit* target = me;
267
268 if (urand(0, 1))
270 if (pAdd->IsAlive())
271 target = pAdd;
272
273 DoCast(target, SPELL_RENEW_NORMAL);
274 RenewTimer = 5000;
275 } else RenewTimer -= diff;
276
277 if (ShieldTimer <= diff)
278 {
279 Unit* target = me;
280
281 if (urand(0, 1))
283 if (pAdd->IsAlive() && !pAdd->HasAura(SPELL_SHIELD))
284 target = pAdd;
285
286 DoCast(target, SPELL_SHIELD);
287 ShieldTimer = 7500;
288 } else ShieldTimer -= diff;
289
290 if (DispelTimer <= diff)
291 {
292 Unit* target = nullptr;
293
294 if (urand(0, 1))
295 target = SelectTarget(SelectTargetMethod::Random, 0, 100, true);
296 else
297 {
298 if (urand(0, 1))
299 target = me;
300 else
302 if (pAdd->IsAlive())
303 target = pAdd;
304 }
305
306 if (target)
307 DoCast(target, SPELL_DISPEL_MAGIC);
308
309 DispelTimer = 12000;
310 } else DispelTimer -= diff;
311
312 if (SWPainTimer <= diff)
313 {
314 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
316
317 SWPainTimer = 10000;
318 } else SWPainTimer -= diff;
319 }
320};
321
326
328{
330 {
331 Initialize();
332 instance = creature->GetInstanceScript();
333 }
334
336 {
337 UsedPotion = false;
338
339 // These guys does not follow normal threat system rules
340 // For later development, some alternative threat system should be made
341 // We do not know what this system is based upon, but one theory is class (healers=high threat, dps=medium, etc)
342 // We reset their threat frequently as an alternative until such a system exist
343 ResetThreatTimer = urand(5000, 20000);
344 }
345
347
350
352
353 void Reset() override
354 {
355 Initialize();
356 AcquireGUIDs();
357
358 // in case she is not alive and Reset was for some reason called, respawn her (most likely party wipe after killing her)
360 {
361 if (!delrissa->IsAlive())
362 delrissa->Respawn();
363 }
364 }
365
366 void JustEngagedWith(Unit* who) override
367 {
368 if (!who)
369 return;
370
371 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
373 if (!pAdd->IsEngaged() && pAdd != me)
374 AddThreat(who, 0.0f, pAdd);
375
377 if (delrissa->IsAlive() && !delrissa->IsEngaged())
378 AddThreat(who, 0.0f, delrissa);
379 }
380
381 void JustDied(Unit* /*killer*/) override
382 {
384 uint32 uiLackeyDeathCount = instance->GetData(DATA_DELRISSA_DEATH_COUNT);
385
386 if (!delrissa)
387 return;
388
389 //should delrissa really yell if dead?
390 delrissa->AI()->Talk(LackeyDeath[uiLackeyDeathCount].id);
391
393
394 //increase local var, since we now may have four dead
395 ++uiLackeyDeathCount;
396
397 if (uiLackeyDeathCount == MAX_ACTIVE_LACKEY)
398 {
399 //time to make her lootable and complete event if she died before lackeys
400 if (!delrissa->IsAlive())
401 {
403
405 }
406 }
407 }
408
409 void KilledUnit(Unit* victim) override
410 {
412 delrissa->AI()->KilledUnit(victim);
413 }
414
416 {
418 {
419 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
420 m_auiLackeyGUIDs[i] = ENSURE_AI(boss_priestess_delrissa, delrissa->AI())->m_auiLackeyGUID[i];
421 }
422 }
423
424 void UpdateAI(uint32 diff) override
425 {
426 if (!UsedPotion && HealthBelowPct(25))
427 {
429 UsedPotion = true;
430 }
431
432 if (ResetThreatTimer <= diff)
433 {
435 ResetThreatTimer = urand(5000, 20000);
436 } else ResetThreatTimer -= diff;
437 }
438};
439
449
450// 24557 - Kagani Nightstrike (Rogue)
452{
457
459 {
460 Gouge_Timer = 5500;
461 Kick_Timer = 7000;
462 Vanish_Timer = 2000;
463 Eviscerate_Timer = 6000;
464 Wait_Timer = 5000;
465 InVanish = false;
466 }
467
474
475 void Reset() override
476 {
477 Initialize();
478 me->SetVisible(true);
479 me->SetCanMelee(true);
480
482 }
483
484 void UpdateAI(uint32 diff) override
485 {
486 if (!UpdateVictim())
487 return;
488
490 me->SetCanMelee(true);
491
492 if (Vanish_Timer <= diff)
493 {
495
497
499
500 if (unit)
501 AddThreat(unit, 1000.0f);
502
503 InVanish = true;
504 me->SetCanMelee(false);
505 Vanish_Timer = 30000;
506 Wait_Timer = 10000;
507 } else Vanish_Timer -= diff;
508
509 if (InVanish)
510 {
511 if (Wait_Timer <= diff)
512 {
515 me->SetVisible(true); // ...? Hacklike
516 InVanish = false;
517 me->SetCanMelee(true);
518 } else Wait_Timer -= diff;
519 }
520
521 if (Gouge_Timer <= diff)
522 {
524 Gouge_Timer = 5500;
525 } else Gouge_Timer -= diff;
526
527 if (Kick_Timer <= diff)
528 {
530 Kick_Timer = 7000;
531 } else Kick_Timer -= diff;
532
533 if (Eviscerate_Timer <= diff)
534 {
536 Eviscerate_Timer = 4000;
537 } else Eviscerate_Timer -= diff;
538 }
539};
540
551
552// 24558 - Ellrys Duskhallow (Warlock)
554{
559
561 {
562 Immolate_Timer = 6000;
563 Shadow_Bolt_Timer = 3000;
566 Fear_Timer = 10000;
567 }
568
574
575 void Reset() override
576 {
577 Initialize();
578
580 }
581
582 void JustEngagedWith(Unit* /*who*/) override
583 {
585 }
586
587 void UpdateAI(uint32 diff) override
588 {
589 if (!UpdateVictim())
590 return;
591
593
594 if (Immolate_Timer <= diff)
595 {
597 Immolate_Timer = 6000;
598 } else Immolate_Timer -= diff;
599
600 if (Shadow_Bolt_Timer <= diff)
601 {
603 Shadow_Bolt_Timer = 5000;
604 } else Shadow_Bolt_Timer -= diff;
605
606 if (Seed_of_Corruption_Timer <= diff)
607 {
610
612 } else Seed_of_Corruption_Timer -= diff;
613
614 if (Curse_of_Agony_Timer <= diff)
615 {
618
619 Curse_of_Agony_Timer = 13000;
620 } else Curse_of_Agony_Timer -= diff;
621
622 if (Fear_Timer <= diff)
623 {
625 DoCast(unit, SPELL_FEAR);
626
627 Fear_Timer = 10000;
628 } else Fear_Timer -= diff;
629 }
630};
631
633{
635 SPELL_SNAP_KICK = 46182
637
638// 24554 - Eramas Brightblaze (Monk)
640{
645
647 {
648 Knockdown_Timer = 6000;
649 Snap_Kick_Timer = 4500;
650 }
651
654
655 void Reset() override
656 {
657 Initialize();
658
660 }
661
662 void UpdateAI(uint32 diff) override
663 {
664 if (!UpdateVictim())
665 return;
666
668
669 if (Knockdown_Timer <= diff)
670 {
672 Knockdown_Timer = 6000;
673 } else Knockdown_Timer -= diff;
674
675 if (Snap_Kick_Timer <= diff)
676 {
678 Snap_Kick_Timer = 4500;
679 } else Snap_Kick_Timer -= diff;
680 }
681};
682
693
694// 24561 - Yazzai (Mage)
696{
698 {
699 Initialize();
700 }
701
703 {
704 HasIceBlocked = false;
705
706 Polymorph_Timer = 1000;
707 Ice_Block_Timer = 20000;
708 Wait_Timer = 10000;
709 Blizzard_Timer = 8000;
710 Ice_Lance_Timer = 12000;
711 Cone_of_Cold_Timer = 10000;
712 Frostbolt_Timer = 3000;
713 Blink_Timer = 8000;
714 }
715
717
726
727 void Reset() override
728 {
729 Initialize();
730
732 }
733
734 void UpdateAI(uint32 diff) override
735 {
736 if (!UpdateVictim())
737 return;
738
740
741 if (Polymorph_Timer <= diff)
742 {
744 {
745 DoCast(target, SPELL_POLYMORPH);
746 Polymorph_Timer = 20000;
747 }
748 } else Polymorph_Timer -= diff;
749
750 if (HealthBelowPct(35) && !HasIceBlocked)
751 {
753 HasIceBlocked = true;
754 }
755
756 if (Blizzard_Timer <= diff)
757 {
759 DoCast(unit, SPELL_BLIZZARD);
760
761 Blizzard_Timer = 8000;
762 } else Blizzard_Timer -= diff;
763
764 if (Ice_Lance_Timer <= diff)
765 {
767 Ice_Lance_Timer = 12000;
768 } else Ice_Lance_Timer -= diff;
769
770 if (Cone_of_Cold_Timer <= diff)
771 {
773 Cone_of_Cold_Timer = 10000;
774 } else Cone_of_Cold_Timer -= diff;
775
776 if (Frostbolt_Timer <= diff)
777 {
779 Frostbolt_Timer = 8000;
780 } else Frostbolt_Timer -= diff;
781
782 if (Blink_Timer <= diff)
783 {
784 bool InMeleeRange = false;
785 for (auto const& pair : me->GetCombatManager().GetPvECombatRefs())
786 {
787 if (pair.second->GetOther(me)->IsWithinMeleeRange(me))
788 {
789 InMeleeRange = true;
790 break;
791 }
792 }
793
794 //if anybody is in melee range than escape by blink
795 if (InMeleeRange)
797
798 Blink_Timer = 8000;
799 } else Blink_Timer -= diff;
800 }
801};
802
813
814// 24559 - Warlord Salaris (Warrior)
816{
821
823 {
825 Disarm_Timer = 6000;
826 Piercing_Howl_Timer = 10000;
828 Hamstring_Timer = 4500;
829 Mortal_Strike_Timer = 8000;
830 }
831
838
839 void Reset() override
840 {
841 Initialize();
842
844 }
845
846 void JustEngagedWith(Unit* /*who*/) override
847 {
849 }
850
851 void UpdateAI(uint32 diff) override
852 {
853 if (!UpdateVictim())
854 return;
855
857
858 if (Intercept_Stun_Timer <= diff)
859 {
860 bool InMeleeRange = false;
861 for (auto const& pair : me->GetCombatManager().GetPvECombatRefs())
862 {
863 if (pair.second->GetOther(me)->IsWithinMeleeRange(me))
864 {
865 InMeleeRange = true;
866 break;
867 }
868 }
869
870 //if nobody is in melee range than try to use Intercept
871 if (!InMeleeRange)
872 {
875 }
876
877 Intercept_Stun_Timer = 10000;
878 } else Intercept_Stun_Timer -= diff;
879
880 if (Disarm_Timer <= diff)
881 {
883 Disarm_Timer = 6000;
884 } else Disarm_Timer -= diff;
885
886 if (Hamstring_Timer <= diff)
887 {
889 Hamstring_Timer = 4500;
890 } else Hamstring_Timer -= diff;
891
892 if (Mortal_Strike_Timer <= diff)
893 {
895 Mortal_Strike_Timer = 4500;
896 } else Mortal_Strike_Timer -= diff;
897
898 if (Piercing_Howl_Timer <= diff)
899 {
901 Piercing_Howl_Timer = 10000;
902 } else Piercing_Howl_Timer -= diff;
903
904 if (Frightening_Shout_Timer <= diff)
905 {
908 } else Frightening_Shout_Timer -= diff;
909 }
910};
911
923
924// 24555 - Garaxxas (Hunter)
926{
928 {
929 Initialize();
930 }
931
933 {
934 Aimed_Shot_Timer = 6000;
935 Shoot_Timer = 2500;
937 Multi_Shot_Timer = 10000;
938 Wing_Clip_Timer = 4000;
939 Freezing_Trap_Timer = 15000;
940 }
941
943
950
951 void Reset() override
952 {
953 Initialize();
954
956 if (!pPet)
957 me->SummonCreature(NPC_SLIVER, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN);
958
960 }
961
962 void JustSummoned(Creature* summoned) override
963 {
964 m_uiPetGUID = summoned->GetGUID();
965 }
966
967 void UpdateAI(uint32 diff) override
968 {
969 if (!UpdateVictim())
970 return;
971
973
975 {
976 if (Wing_Clip_Timer <= diff)
977 {
979 Wing_Clip_Timer = 4000;
980 } else Wing_Clip_Timer -= diff;
981
982 if (Freezing_Trap_Timer <= diff)
983 {
984 //attempt find go summoned from spell (cast by me)
986
987 //if we have a go, we need to wait (only one trap at a time)
988 if (go)
989 Freezing_Trap_Timer = 2500;
990 else
991 {
992 //if go does not exist, then we can cast
994 Freezing_Trap_Timer = 15000;
995 }
996 } else Freezing_Trap_Timer -= diff;
997 }
998 else
999 {
1000 if (Concussive_Shot_Timer <= diff)
1001 {
1003 Concussive_Shot_Timer = 8000;
1004 } else Concussive_Shot_Timer -= diff;
1005
1006 if (Multi_Shot_Timer <= diff)
1007 {
1009 Multi_Shot_Timer = 10000;
1010 } else Multi_Shot_Timer -= diff;
1011
1012 if (Aimed_Shot_Timer <= diff)
1013 {
1015 Aimed_Shot_Timer = 6000;
1016 } else Aimed_Shot_Timer -= diff;
1017
1018 if (Shoot_Timer <= diff)
1019 {
1021 Shoot_Timer = 2500;
1022 } else Shoot_Timer -= diff;
1023 }
1024 }
1025};
1026
1037
1038// 24553 - Apoko (Shaman)
1040{
1042 {
1043 Initialize();
1044 }
1045
1047 {
1048 Totem_Timer = 2000;
1049 Totem_Amount = 1;
1050 War_Stomp_Timer = 10000;
1051 Purge_Timer = 8000;
1052 Healing_Wave_Timer = 5000;
1053 Frost_Shock_Timer = 7000;
1054 }
1055
1062
1063 void Reset() override
1064 {
1065 Initialize();
1066
1068 }
1069
1070 void UpdateAI(uint32 diff) override
1071 {
1072 if (!UpdateVictim())
1073 return;
1074
1076
1077 if (Totem_Timer <= diff)
1078 {
1080 ++Totem_Amount;
1082 } else Totem_Timer -= diff;
1083
1084 if (War_Stomp_Timer <= diff)
1085 {
1087 War_Stomp_Timer = 10000;
1088 } else War_Stomp_Timer -= diff;
1089
1090 if (Purge_Timer <= diff)
1091 {
1093 DoCast(unit, SPELL_PURGE);
1094
1095 Purge_Timer = 15000;
1096 } else Purge_Timer -= diff;
1097
1098 if (Frost_Shock_Timer <= diff)
1099 {
1101 Frost_Shock_Timer = 7000;
1102 } else Frost_Shock_Timer -= diff;
1103
1104 if (Healing_Wave_Timer <= diff)
1105 {
1107 Healing_Wave_Timer = 5000;
1108 } else Healing_Wave_Timer -= diff;
1109 }
1110};
1111
1121
1122// 24556 - Zelfan (Engineer)
1124{
1126 {
1127 Initialize();
1128 }
1129
1131 {
1133 Rocket_Launch_Timer = 7000;
1134 Recombobulate_Timer = 4000;
1136 Fel_Iron_Bomb_Timer = 15000;
1137 }
1138
1144
1145 void Reset() override
1146 {
1147 Initialize();
1148
1150 }
1151
1152 void UpdateAI(uint32 diff) override
1153 {
1154 if (!UpdateVictim())
1155 return;
1156
1158
1159 if (Goblin_Dragon_Gun_Timer <= diff)
1160 {
1163 } else Goblin_Dragon_Gun_Timer -= diff;
1164
1165 if (Rocket_Launch_Timer <= diff)
1166 {
1168 Rocket_Launch_Timer = 9000;
1169 } else Rocket_Launch_Timer -= diff;
1170
1171 if (Fel_Iron_Bomb_Timer <= diff)
1172 {
1174 Fel_Iron_Bomb_Timer = 15000;
1175 } else Fel_Iron_Bomb_Timer -= diff;
1176
1177 if (Recombobulate_Timer <= diff)
1178 {
1179 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
1180 {
1182 {
1183 if (pAdd->IsPolymorphed())
1184 {
1186 break;
1187 }
1188 }
1189 }
1190 Recombobulate_Timer = 2000;
1191 } else Recombobulate_Timer -= diff;
1192
1193 if (High_Explosive_Sheep_Timer <= diff)
1194 {
1197 } else High_Explosive_Sheep_Timer -= diff;
1198 }
1199};
1200
First const & RAND(First const &first, Second const &second, Rest const &... rest)
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
@ IN_PROGRESS
@ FAIL
@ DONE
@ SPECIAL
#define ATTACK_DISTANCE
@ TEMPSUMMON_CORPSE_DESPAWN
@ TYPEID_PLAYER
Definition ObjectGuid.h:44
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:43
uint32 rand32()
Definition Random.cpp:71
@ UNIT_DYNFLAG_LOOTABLE
#define ENSURE_AI(a, b)
Definition UnitAI.h:30
const float fOrientation
float LackeyLocations[4][2]
const uint32 m_auiAddEntries[]
@ SPELL_HIGH_EXPLOSIVE_SHEEP
void AddSC_boss_priestess_delrissa()
const float fZLocation
static Speech LackeyDeath[]
@ SPELL_SEED_OF_CORRUPTION
@ SPELL_FRIGHTENING_SHOUT
@ SPELL_LESSER_HEALING_WAVE
static Speech PlayerDeath[]
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
TypeID GetTypeId() const
Definition BaseEntity.h:166
std::unordered_map< ObjectGuid, CombatReference * > const & GetPvECombatRefs() const
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:63
void SetCanMelee(bool canMelee, bool fleeFromMelee=false)
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:396
CreatureAI * AI() const
Definition Creature.h:235
virtual bool SetBossState(uint32 id, EncounterState state)
Creature * GetCreature(uint32 type)
void SetDynamicFlag(uint32 flag)
Definition Object.h:97
void RemoveDynamicFlag(uint32 flag)
Definition Object.h:98
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.cpp:172
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition UnitAI.cpp:71
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:81
Definition Unit.h:647
void SetVisible(bool x)
Definition Unit.cpp:8787
bool IsAlive() const
Definition Unit.h:1205
GameObject * GetGameObject(uint32 spellId) const
Definition Unit.cpp:5369
uint64 GetHealth() const
Definition Unit.h:800
Unit * GetVictim() const
Definition Unit.h:738
CombatManager & GetCombatManager()
Definition Unit.h:1053
InstanceScript * GetInstanceScript() const
Definition Object.cpp:394
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1403
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:499
virtual uint32 GetData(uint32) const
Definition ZoneScript.h:99
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:100
#define RegisterMagistersTerraceCreatureAI(ai_name)
@ DATA_DELRISSA_DEATH_COUNT
@ DATA_PRIESTESS_DELRISSA
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
constexpr float GetPositionZ() const
Definition Position.h:89
bool HealthBelowPct(uint32 pct) const
void ResetThreatList(Unit *who=nullptr)
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
boss_apoko(Creature *creature)
void UpdateAI(uint32 diff) override
void JustEngagedWith(Unit *) override
void UpdateAI(uint32 diff) override
boss_ellris_duskhallow(Creature *creature)
boss_eramas_brightblaze(Creature *creature)
void UpdateAI(uint32 diff) override
void UpdateAI(uint32 diff) override
void JustSummoned(Creature *summoned) override
boss_garaxxas(Creature *creature)
void UpdateAI(uint32 diff) override
boss_kagani_nightstrike(Creature *creature)
ObjectGuid m_auiLackeyGUID[MAX_ACTIVE_LACKEY]
std::vector< uint32 > LackeyEntryList
void JustEngagedWith(Unit *who) override
void KilledUnit(Unit *victim) override
void UpdateAI(uint32 diff) override
boss_priestess_delrissa(Creature *creature)
void KilledUnit(Unit *victim) override
ObjectGuid m_auiLackeyGUIDs[MAX_ACTIVE_LACKEY]
void UpdateAI(uint32 diff) override
void JustEngagedWith(Unit *) override
boss_warlord_salaris(Creature *creature)
void UpdateAI(uint32 diff) override
boss_yazzai(Creature *creature)
boss_zelfan(Creature *creature)
void UpdateAI(uint32 diff) override