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
321 }
322};
323
328
330{
332 {
333 Initialize();
334 instance = creature->GetInstanceScript();
335 }
336
338 {
339 UsedPotion = false;
340
341 // These guys does not follow normal threat system rules
342 // For later development, some alternative threat system should be made
343 // We do not know what this system is based upon, but one theory is class (healers=high threat, dps=medium, etc)
344 // We reset their threat frequently as an alternative until such a system exist
345 ResetThreatTimer = urand(5000, 20000);
346 }
347
349
352
354
355 void Reset() override
356 {
357 Initialize();
358 AcquireGUIDs();
359
360 // in case she is not alive and Reset was for some reason called, respawn her (most likely party wipe after killing her)
362 {
363 if (!delrissa->IsAlive())
364 delrissa->Respawn();
365 }
366 }
367
368 void JustEngagedWith(Unit* who) override
369 {
370 if (!who)
371 return;
372
373 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
375 if (!pAdd->IsEngaged() && pAdd != me)
376 AddThreat(who, 0.0f, pAdd);
377
379 if (delrissa->IsAlive() && !delrissa->IsEngaged())
380 AddThreat(who, 0.0f, delrissa);
381 }
382
383 void JustDied(Unit* /*killer*/) override
384 {
386 uint32 uiLackeyDeathCount = instance->GetData(DATA_DELRISSA_DEATH_COUNT);
387
388 if (!delrissa)
389 return;
390
391 //should delrissa really yell if dead?
392 delrissa->AI()->Talk(LackeyDeath[uiLackeyDeathCount].id);
393
395
396 //increase local var, since we now may have four dead
397 ++uiLackeyDeathCount;
398
399 if (uiLackeyDeathCount == MAX_ACTIVE_LACKEY)
400 {
401 //time to make her lootable and complete event if she died before lackeys
402 if (!delrissa->IsAlive())
403 {
405
407 }
408 }
409 }
410
411 void KilledUnit(Unit* victim) override
412 {
414 delrissa->AI()->KilledUnit(victim);
415 }
416
418 {
420 {
421 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
422 m_auiLackeyGUIDs[i] = ENSURE_AI(boss_priestess_delrissa, delrissa->AI())->m_auiLackeyGUID[i];
423 }
424 }
425
426 void UpdateAI(uint32 diff) override
427 {
428 if (!UsedPotion && HealthBelowPct(25))
429 {
431 UsedPotion = true;
432 }
433
434 if (ResetThreatTimer <= diff)
435 {
437 ResetThreatTimer = urand(5000, 20000);
438 } else ResetThreatTimer -= diff;
439 }
440};
441
451
452// 24557 - Kagani Nightstrike (Rogue)
454{
459
461 {
462 Gouge_Timer = 5500;
463 Kick_Timer = 7000;
464 Vanish_Timer = 2000;
465 Eviscerate_Timer = 6000;
466 Wait_Timer = 5000;
467 InVanish = false;
468 }
469
476
477 void Reset() override
478 {
479 Initialize();
480 me->SetVisible(true);
481
483 }
484
485 void UpdateAI(uint32 diff) override
486 {
487 if (!UpdateVictim())
488 return;
489
491
492 if (Vanish_Timer <= diff)
493 {
495
497
499
500 if (unit)
501 AddThreat(unit, 1000.0f);
502
503 InVanish = true;
504 Vanish_Timer = 30000;
505 Wait_Timer = 10000;
506 } else Vanish_Timer -= diff;
507
508 if (InVanish)
509 {
510 if (Wait_Timer <= diff)
511 {
514 me->SetVisible(true); // ...? Hacklike
515 InVanish = false;
516 } else Wait_Timer -= diff;
517 }
518
519 if (Gouge_Timer <= diff)
520 {
522 Gouge_Timer = 5500;
523 } else Gouge_Timer -= diff;
524
525 if (Kick_Timer <= diff)
526 {
528 Kick_Timer = 7000;
529 } else Kick_Timer -= diff;
530
531 if (Eviscerate_Timer <= diff)
532 {
534 Eviscerate_Timer = 4000;
535 } else Eviscerate_Timer -= diff;
536
537 if (!InVanish)
539 }
540};
541
552
553// 24558 - Ellrys Duskhallow (Warlock)
555{
560
562 {
563 Immolate_Timer = 6000;
564 Shadow_Bolt_Timer = 3000;
567 Fear_Timer = 10000;
568 }
569
575
576 void Reset() override
577 {
578 Initialize();
579
581 }
582
583 void JustEngagedWith(Unit* /*who*/) override
584 {
586 }
587
588 void UpdateAI(uint32 diff) override
589 {
590 if (!UpdateVictim())
591 return;
592
594
595 if (Immolate_Timer <= diff)
596 {
598 Immolate_Timer = 6000;
599 } else Immolate_Timer -= diff;
600
601 if (Shadow_Bolt_Timer <= diff)
602 {
604 Shadow_Bolt_Timer = 5000;
605 } else Shadow_Bolt_Timer -= diff;
606
607 if (Seed_of_Corruption_Timer <= diff)
608 {
611
613 } else Seed_of_Corruption_Timer -= diff;
614
615 if (Curse_of_Agony_Timer <= diff)
616 {
619
620 Curse_of_Agony_Timer = 13000;
621 } else Curse_of_Agony_Timer -= diff;
622
623 if (Fear_Timer <= diff)
624 {
626 DoCast(unit, SPELL_FEAR);
627
628 Fear_Timer = 10000;
629 } else Fear_Timer -= diff;
630
632 }
633};
634
636{
638 SPELL_SNAP_KICK = 46182
640
641// 24554 - Eramas Brightblaze (Monk)
643{
648
650 {
651 Knockdown_Timer = 6000;
652 Snap_Kick_Timer = 4500;
653 }
654
657
658 void Reset() override
659 {
660 Initialize();
661
663 }
664
665 void UpdateAI(uint32 diff) override
666 {
667 if (!UpdateVictim())
668 return;
669
671
672 if (Knockdown_Timer <= diff)
673 {
675 Knockdown_Timer = 6000;
676 } else Knockdown_Timer -= diff;
677
678 if (Snap_Kick_Timer <= diff)
679 {
681 Snap_Kick_Timer = 4500;
682 } else Snap_Kick_Timer -= diff;
683
685 }
686};
687
698
699// 24561 - Yazzai (Mage)
701{
703 {
704 Initialize();
705 }
706
708 {
709 HasIceBlocked = false;
710
711 Polymorph_Timer = 1000;
712 Ice_Block_Timer = 20000;
713 Wait_Timer = 10000;
714 Blizzard_Timer = 8000;
715 Ice_Lance_Timer = 12000;
716 Cone_of_Cold_Timer = 10000;
717 Frostbolt_Timer = 3000;
718 Blink_Timer = 8000;
719 }
720
722
731
732 void Reset() override
733 {
734 Initialize();
735
737 }
738
739 void UpdateAI(uint32 diff) override
740 {
741 if (!UpdateVictim())
742 return;
743
745
746 if (Polymorph_Timer <= diff)
747 {
749 {
750 DoCast(target, SPELL_POLYMORPH);
751 Polymorph_Timer = 20000;
752 }
753 } else Polymorph_Timer -= diff;
754
755 if (HealthBelowPct(35) && !HasIceBlocked)
756 {
758 HasIceBlocked = true;
759 }
760
761 if (Blizzard_Timer <= diff)
762 {
764 DoCast(unit, SPELL_BLIZZARD);
765
766 Blizzard_Timer = 8000;
767 } else Blizzard_Timer -= diff;
768
769 if (Ice_Lance_Timer <= diff)
770 {
772 Ice_Lance_Timer = 12000;
773 } else Ice_Lance_Timer -= diff;
774
775 if (Cone_of_Cold_Timer <= diff)
776 {
778 Cone_of_Cold_Timer = 10000;
779 } else Cone_of_Cold_Timer -= diff;
780
781 if (Frostbolt_Timer <= diff)
782 {
784 Frostbolt_Timer = 8000;
785 } else Frostbolt_Timer -= diff;
786
787 if (Blink_Timer <= diff)
788 {
789 bool InMeleeRange = false;
790 for (auto const& pair : me->GetCombatManager().GetPvECombatRefs())
791 {
792 if (pair.second->GetOther(me)->IsWithinMeleeRange(me))
793 {
794 InMeleeRange = true;
795 break;
796 }
797 }
798
799 //if anybody is in melee range than escape by blink
800 if (InMeleeRange)
802
803 Blink_Timer = 8000;
804 } else Blink_Timer -= diff;
805
807 }
808};
809
820
821// 24559 - Warlord Salaris (Warrior)
823{
828
830 {
832 Disarm_Timer = 6000;
833 Piercing_Howl_Timer = 10000;
835 Hamstring_Timer = 4500;
836 Mortal_Strike_Timer = 8000;
837 }
838
845
846 void Reset() override
847 {
848 Initialize();
849
851 }
852
853 void JustEngagedWith(Unit* /*who*/) override
854 {
856 }
857
858 void UpdateAI(uint32 diff) override
859 {
860 if (!UpdateVictim())
861 return;
862
864
865 if (Intercept_Stun_Timer <= diff)
866 {
867 bool InMeleeRange = false;
868 for (auto const& pair : me->GetCombatManager().GetPvECombatRefs())
869 {
870 if (pair.second->GetOther(me)->IsWithinMeleeRange(me))
871 {
872 InMeleeRange = true;
873 break;
874 }
875 }
876
877 //if nobody is in melee range than try to use Intercept
878 if (!InMeleeRange)
879 {
882 }
883
884 Intercept_Stun_Timer = 10000;
885 } else Intercept_Stun_Timer -= diff;
886
887 if (Disarm_Timer <= diff)
888 {
890 Disarm_Timer = 6000;
891 } else Disarm_Timer -= diff;
892
893 if (Hamstring_Timer <= diff)
894 {
896 Hamstring_Timer = 4500;
897 } else Hamstring_Timer -= diff;
898
899 if (Mortal_Strike_Timer <= diff)
900 {
902 Mortal_Strike_Timer = 4500;
903 } else Mortal_Strike_Timer -= diff;
904
905 if (Piercing_Howl_Timer <= diff)
906 {
908 Piercing_Howl_Timer = 10000;
909 } else Piercing_Howl_Timer -= diff;
910
911 if (Frightening_Shout_Timer <= diff)
912 {
915 } else Frightening_Shout_Timer -= diff;
916
918 }
919};
920
932
933// 24555 - Garaxxas (Hunter)
935{
937 {
938 Initialize();
939 }
940
942 {
943 Aimed_Shot_Timer = 6000;
944 Shoot_Timer = 2500;
946 Multi_Shot_Timer = 10000;
947 Wing_Clip_Timer = 4000;
948 Freezing_Trap_Timer = 15000;
949 }
950
952
959
960 void Reset() override
961 {
962 Initialize();
963
965 if (!pPet)
966 me->SummonCreature(NPC_SLIVER, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_CORPSE_DESPAWN);
967
969 }
970
971 void JustSummoned(Creature* summoned) override
972 {
973 m_uiPetGUID = summoned->GetGUID();
974 }
975
976 void UpdateAI(uint32 diff) override
977 {
978 if (!UpdateVictim())
979 return;
980
982
984 {
985 if (Wing_Clip_Timer <= diff)
986 {
988 Wing_Clip_Timer = 4000;
989 } else Wing_Clip_Timer -= diff;
990
991 if (Freezing_Trap_Timer <= diff)
992 {
993 //attempt find go summoned from spell (cast by me)
995
996 //if we have a go, we need to wait (only one trap at a time)
997 if (go)
998 Freezing_Trap_Timer = 2500;
999 else
1000 {
1001 //if go does not exist, then we can cast
1003 Freezing_Trap_Timer = 15000;
1004 }
1005 } else Freezing_Trap_Timer -= diff;
1006
1008 }
1009 else
1010 {
1011 if (Concussive_Shot_Timer <= diff)
1012 {
1014 Concussive_Shot_Timer = 8000;
1015 } else Concussive_Shot_Timer -= diff;
1016
1017 if (Multi_Shot_Timer <= diff)
1018 {
1020 Multi_Shot_Timer = 10000;
1021 } else Multi_Shot_Timer -= diff;
1022
1023 if (Aimed_Shot_Timer <= diff)
1024 {
1026 Aimed_Shot_Timer = 6000;
1027 } else Aimed_Shot_Timer -= diff;
1028
1029 if (Shoot_Timer <= diff)
1030 {
1032 Shoot_Timer = 2500;
1033 } else Shoot_Timer -= diff;
1034 }
1035 }
1036};
1037
1048
1049// 24553 - Apoko (Shaman)
1051{
1053 {
1054 Initialize();
1055 }
1056
1058 {
1059 Totem_Timer = 2000;
1060 Totem_Amount = 1;
1061 War_Stomp_Timer = 10000;
1062 Purge_Timer = 8000;
1063 Healing_Wave_Timer = 5000;
1064 Frost_Shock_Timer = 7000;
1065 }
1066
1073
1074 void Reset() override
1075 {
1076 Initialize();
1077
1079 }
1080
1081 void UpdateAI(uint32 diff) override
1082 {
1083 if (!UpdateVictim())
1084 return;
1085
1087
1088 if (Totem_Timer <= diff)
1089 {
1091 ++Totem_Amount;
1093 } else Totem_Timer -= diff;
1094
1095 if (War_Stomp_Timer <= diff)
1096 {
1098 War_Stomp_Timer = 10000;
1099 } else War_Stomp_Timer -= diff;
1100
1101 if (Purge_Timer <= diff)
1102 {
1104 DoCast(unit, SPELL_PURGE);
1105
1106 Purge_Timer = 15000;
1107 } else Purge_Timer -= diff;
1108
1109 if (Frost_Shock_Timer <= diff)
1110 {
1112 Frost_Shock_Timer = 7000;
1113 } else Frost_Shock_Timer -= diff;
1114
1115 if (Healing_Wave_Timer <= diff)
1116 {
1118 Healing_Wave_Timer = 5000;
1119 } else Healing_Wave_Timer -= diff;
1120
1122 }
1123};
1124
1134
1135// 24556 - Zelfan (Engineer)
1137{
1139 {
1140 Initialize();
1141 }
1142
1144 {
1146 Rocket_Launch_Timer = 7000;
1147 Recombobulate_Timer = 4000;
1149 Fel_Iron_Bomb_Timer = 15000;
1150 }
1151
1157
1158 void Reset() override
1159 {
1160 Initialize();
1161
1163 }
1164
1165 void UpdateAI(uint32 diff) override
1166 {
1167 if (!UpdateVictim())
1168 return;
1169
1171
1172 if (Goblin_Dragon_Gun_Timer <= diff)
1173 {
1176 } else Goblin_Dragon_Gun_Timer -= diff;
1177
1178 if (Rocket_Launch_Timer <= diff)
1179 {
1181 Rocket_Launch_Timer = 9000;
1182 } else Rocket_Launch_Timer -= diff;
1183
1184 if (Fel_Iron_Bomb_Timer <= diff)
1185 {
1187 Fel_Iron_Bomb_Timer = 15000;
1188 } else Fel_Iron_Bomb_Timer -= diff;
1189
1190 if (Recombobulate_Timer <= diff)
1191 {
1192 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
1193 {
1195 {
1196 if (pAdd->IsPolymorphed())
1197 {
1199 break;
1200 }
1201 }
1202 }
1203 Recombobulate_Timer = 2000;
1204 } else Recombobulate_Timer -= diff;
1205
1206 if (High_Explosive_Sheep_Timer <= diff)
1207 {
1210 } else High_Explosive_Sheep_Timer -= diff;
1211
1213 }
1214};
1215
First const & RAND(First const &first, Second const &second, Rest const &... rest)
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
@ IN_PROGRESS
@ FAIL
@ DONE
@ SPECIAL
#define ATTACK_DISTANCE
@ TEMPSUMMON_CORPSE_DESPAWN
@ TYPEID_PLAYER
Definition ObjectGuid.h:39
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:42
uint32 rand32()
Definition Random.cpp:70
@ UNIT_DYNFLAG_LOOTABLE
#define ENSURE_AI(a, b)
Definition UnitAI.h:28
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[]
std::unordered_map< ObjectGuid, CombatReference * > const & GetPvECombatRefs() const
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:82
virtual void EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
void GetHomePosition(float &x, float &y, float &z, float &ori) const
Definition Creature.h:295
CreatureAI * AI() const
Definition Creature.h:154
virtual bool SetBossState(uint32 id, EncounterState state)
Creature * GetCreature(uint32 type)
virtual void RemoveDynamicFlag(uint32 flag)
Definition Object.h:90
TypeID GetTypeId() const
Definition Object.h:93
virtual void SetDynamicFlag(uint32 flag)
Definition Object.h:89
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:54
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.cpp:166
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition UnitAI.cpp:96
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:106
Definition Unit.h:769
void SetVisible(bool x)
Definition Unit.cpp:8513
bool IsAlive() const
Definition Unit.h:1234
GameObject * GetGameObject(uint32 spellId) const
Definition Unit.cpp:5077
uint32 GetHealth() const
Definition Unit.h:913
Unit * GetVictim() const
Definition Unit.h:859
CombatManager & GetCombatManager()
Definition Unit.h:1130
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1087
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:1992
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1192
virtual uint32 GetData(uint32) const
Definition ZoneScript.h:55
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:56
#define RegisterMagistersTerraceCreatureAI(ai_name)
@ DATA_DELRISSA_DEATH_COUNT
@ DATA_PRIESTESS_DELRISSA
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
float GetPositionZ() const
Definition Position.h:81
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