Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_priestess_delrissa.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6/* ScriptData
7SDName: Boss_Priestess_Delrissa
8SD%Complete: 65
9SDComment: No Heroic support yet. Needs further testing. Several scripts for pets disabled, not seem to require any special script.
10SDCategory: Magister's Terrace
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15#include "magisters_terrace.h"
16
17struct Speech
18{
20};
21
23{
24 {1},
25 {2},
26 {3},
27 {4},
28};
29
31{
32 {5},
33 {6},
34 {7},
35 {8},
36 {9},
37};
38
40{
43};
44
64
65enum Misc
66{
68};
69
70const float fOrientation = 4.98f;
71const float fZLocation = -19.921f;
72
73float LackeyLocations[4][2]=
74{
75 {123.77f, 17.6007f},
76 {131.731f, 15.0827f},
77 {121.563f, 15.6213f},
78 {129.988f, 17.2355f},
79};
80
82{
83 24557, //Kagani Nightstrike
84 24558, //Elris Duskhallow
85 24554, //Eramas Brightblaze
86 24561, //Yazzaj
87 24559, //Warlord Salaris
88 24555, //Garaxxas
89 24553, //Apoko
90 24556, //Zelfan
91};
92
94{
95public:
96 boss_priestess_delrissa() : CreatureScript("boss_priestess_delrissa") { }
97
99 {
100 return new boss_priestess_delrissaAI(creature);
101 }
102
104 {
106 {
107 instance = creature->GetInstanceScript();
108 memset(&m_auiLackeyGUID, 0, sizeof(m_auiLackeyGUID));
109 LackeyEntryList.clear();
110 }
111
113
114 std::vector<uint32> LackeyEntryList;
116
118
125
127 {
128 PlayersKilled = 0;
129
130 HealTimer = 15000;
131 RenewTimer = 10000;
132 ShieldTimer = 2000;
133 SWPainTimer = 5000;
134 DispelTimer = 7500;
135 ResetTimer = 5000;
136
138 }
139
140 //this mean she at some point evaded
142 {
143 if (instance)
145 }
146
148 {
150
151 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
152 {
153 if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[i]))
154 {
155 if (!pAdd->GetVictim())
156 {
157 who->SetInCombatWith(pAdd);
158 pAdd->AddThreat(who, 0.0f);
159 }
160 }
161 }
162
163 if (instance)
165 }
166
168 {
169 //can be called if Creature are dead, so avoid
170 if (!me->IsAlive())
171 return;
172
173 uint8 j = 0;
174
175 //it's empty, so first time
176 if (LackeyEntryList.empty())
177 {
178 //pre-allocate size for speed
179 LackeyEntryList.resize((sizeof(m_auiAddEntries) / sizeof(uint32)));
180
181 //fill vector array with entries from Creature array
182 for (uint8 i = 0; i < LackeyEntryList.size(); ++i)
184
185 //remove random entries
186 while (LackeyEntryList.size() > MAX_ACTIVE_LACKEY)
187 LackeyEntryList.erase(LackeyEntryList.begin() + rand()%LackeyEntryList.size());
188
189 //summon all the remaining in vector
190 for (std::vector<uint32>::const_iterator itr = LackeyEntryList.begin(); itr != LackeyEntryList.end(); ++itr)
191 {
193 m_auiLackeyGUID[j] = pAdd->GetGUID();
194
195 ++j;
196 }
197 }
198 else
199 {
200 for (std::vector<uint32>::const_iterator itr = LackeyEntryList.begin(); itr != LackeyEntryList.end(); ++itr)
201 {
202 Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[j]);
203
204 //object already removed, not exist
205 if (!pAdd)
206 {
208 if (pAdd)
209 m_auiLackeyGUID[j] = pAdd->GetGUID();
210 }
211 ++j;
212 }
213 }
214 }
215
217 {
218 if (victim->GetTypeId() != TypeID::TYPEID_PLAYER)
219 return;
220
222
223 if (PlayersKilled < 4)
225 }
226
227 void JustDied(Unit* /*killer*/) OVERRIDE
228 {
230
231 if (!instance)
232 return;
233
236 else
237 {
240 }
241 }
242
244 {
245 if (!UpdateVictim())
246 return;
247
248 if (ResetTimer <= diff)
249 {
250 float x, y, z, o;
251 me->GetHomePosition(x, y, z, o);
252 if (me->GetPositionZ() >= z+10)
253 {
255 return;
256 }
257 ResetTimer = 5000;
258 } else ResetTimer -= diff;
259
260 if (HealTimer <= diff)
261 {
262 uint32 health = me->GetHealth();
263 Unit* target = me;
264 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
265 {
266 if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUID[i]))
267 {
268 if (pAdd->IsAlive() && pAdd->GetHealth() < health)
269 target = pAdd;
270 }
271 }
272
273 DoCast(target, SPELL_FLASH_HEAL);
274 HealTimer = 15000;
275 } else HealTimer -= diff;
276
277 if (RenewTimer <= diff)
278 {
279 Unit* target = me;
280
281 if (std::rand() % 1)
283 if (pAdd->IsAlive())
284 target = pAdd;
285
286 DoCast(target, SPELL_RENEW_NORMAL);
287 RenewTimer = 5000;
288 } else RenewTimer -= diff;
289
290 if (ShieldTimer <= diff)
291 {
292 Unit* target = me;
293
294 if (std::rand() % 1)
296 if (pAdd->IsAlive() && !pAdd->HasAura(SPELL_SHIELD))
297 target = pAdd;
298
299 DoCast(target, SPELL_SHIELD);
300 ShieldTimer = 7500;
301 } else ShieldTimer -= diff;
302
303 if (DispelTimer <= diff)
304 {
305 Unit* target = NULL;
306
307 if (std::rand() % 1)
308 target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true);
309 else
310 {
311 if (std::rand() % 1)
312 target = me;
313 else
315 if (pAdd->IsAlive())
316 target = pAdd;
317 }
318
319 if (target)
320 DoCast(target, SPELL_DISPEL_MAGIC);
321
322 DispelTimer = 12000;
323 } else DispelTimer -= diff;
324
325 if (SWPainTimer <= diff)
326 {
327 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true))
329
330 SWPainTimer = 10000;
331 } else SWPainTimer -= diff;
332
334 }
335 };
336};
337
342
343//all 8 possible lackey use this common
345{
347 {
348 instance = creature->GetInstanceScript();
349 memset(&m_auiLackeyGUIDs, 0, sizeof(m_auiLackeyGUIDs));
350 AcquireGUIDs();
351 }
352
354
357
359
361 {
362 UsedPotion = false;
363
364 // These guys does not follow normal threat system rules
365 // For later development, some alternative threat system should be made
366 // We do not know what this system is based upon, but one theory is class (healers=high threat, dps=medium, etc)
367 // We reset their threat frequently as an alternative until such a system exist
368 ResetThreatTimer = std::rand() % 20000 + 5000;
369
370 // in case she is not alive and Reset was for some reason called, respawn her (most likely party wipe after killing her)
371 if (Creature* pDelrissa = Unit::GetCreature(*me, instance ? instance->GetData64(DATA_DELRISSA) : 0))
372 {
373 if (!pDelrissa->IsAlive())
374 pDelrissa->Respawn();
375 }
376 }
377
379 {
380 if (!who)
381 return;
382
383 if (instance)
384 {
385 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
386 {
387 if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUIDs[i]))
388 {
389 if (!pAdd->GetVictim() && pAdd != me)
390 {
391 who->SetInCombatWith(pAdd);
392 pAdd->AddThreat(who, 0.0f);
393 }
394 }
395 }
396
397 if (Creature* pDelrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
398 {
399 if (pDelrissa->IsAlive() && !pDelrissa->GetVictim())
400 {
401 who->SetInCombatWith(pDelrissa);
402 pDelrissa->AddThreat(who, 0.0f);
403 }
404 }
405 }
406 }
407
408 void JustDied(Unit* /*killer*/) OVERRIDE
409 {
410 if (!instance)
411 return;
412
413 Creature* pDelrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA));
414 uint32 uiLackeyDeathCount = instance->GetData(DATA_DELRISSA_DEATH_COUNT);
415
416 if (!pDelrissa)
417 return;
418
419 //should delrissa really yell if dead?
420 pDelrissa->AI()->Talk(LackeyDeath[uiLackeyDeathCount].id);
421
423
424 //increase local var, since we now may have four dead
425 ++uiLackeyDeathCount;
426
427 if (uiLackeyDeathCount == MAX_ACTIVE_LACKEY)
428 {
429 //time to make her lootable and complete event if she died before lackeys
430 if (!pDelrissa->IsAlive())
431 {
434
436 }
437 }
438 }
439
441 {
442 if (!instance)
443 return;
444
445 if (Creature* Delrissa = Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA)))
446 Delrissa->AI()->KilledUnit(victim);
447 }
448
450 {
451 if (!instance)
452 return;
453
454 if (Creature* Delrissa = (Unit::GetCreature(*me, instance->GetData64(DATA_DELRISSA))))
455 {
456 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
457 m_auiLackeyGUIDs[i] = CAST_AI(boss_priestess_delrissa::boss_priestess_delrissaAI, Delrissa->AI())->m_auiLackeyGUID[i];
458 }
459 }
460
462 {
463 if (!UsedPotion && HealthBelowPct(25))
464 {
466 UsedPotion = true;
467 }
468
469 if (ResetThreatTimer <= diff)
470 {
472 ResetThreatTimer = std::rand() % 20000 + 5000;
473 } else ResetThreatTimer -= diff;
474 }
475};
476
486
488{
489public:
490 boss_kagani_nightstrike() : CreatureScript("boss_kagani_nightstrike") { }
491
493 {
494 return new boss_kagani_nightstrikeAI(creature);
495 }
496
498 {
499 //Rogue
501
508
510 {
511 Gouge_Timer = 5500;
512 Kick_Timer = 7000;
513 Vanish_Timer = 2000;
514 Eviscerate_Timer = 6000;
515 Wait_Timer = 5000;
516 InVanish = false;
517 me->SetVisible(true);
518
520 }
521
523 {
524 if (!UpdateVictim())
525 return;
526
528
529 if (Vanish_Timer <= diff)
530 {
532
534
536
537 if (unit)
538 me->AddThreat(unit, 1000.0f);
539
540 InVanish = true;
541 Vanish_Timer = 30000;
542 Wait_Timer = 10000;
543 } else Vanish_Timer -= diff;
544
545 if (InVanish)
546 {
547 if (Wait_Timer <= diff)
548 {
551 me->SetVisible(true); // ...? Hacklike
552 InVanish = false;
553 } else Wait_Timer -= diff;
554 }
555
556 if (Gouge_Timer <= diff)
557 {
559 Gouge_Timer = 5500;
560 } else Gouge_Timer -= diff;
561
562 if (Kick_Timer <= diff)
563 {
565 Kick_Timer = 7000;
566 } else Kick_Timer -= diff;
567
568 if (Eviscerate_Timer <= diff)
569 {
571 Eviscerate_Timer = 4000;
572 } else Eviscerate_Timer -= diff;
573
574 if (!InVanish)
576 }
577 };
578};
579
590
592{
593public:
594 boss_ellris_duskhallow() : CreatureScript("boss_ellris_duskhallow") { }
595
597 {
598 return new boss_ellris_duskhallowAI(creature);
599 }
600
602 {
603 //Warlock
605
611
613 {
614 Immolate_Timer = 6000;
615 Shadow_Bolt_Timer = 3000;
618 Fear_Timer = 10000;
619
621 }
622
623 void EnterCombat(Unit* /*who*/) OVERRIDE
624 {
626 }
627
629 {
630 if (!UpdateVictim())
631 return;
632
634
635 if (Immolate_Timer <= diff)
636 {
638 Immolate_Timer = 6000;
639 } else Immolate_Timer -= diff;
640
641 if (Shadow_Bolt_Timer <= diff)
642 {
644 Shadow_Bolt_Timer = 5000;
645 } else Shadow_Bolt_Timer -= diff;
646
647 if (Seed_of_Corruption_Timer <= diff)
648 {
649 if (Unit* unit = SelectTarget(SELECT_TARGET_RANDOM, 0))
651
653 } else Seed_of_Corruption_Timer -= diff;
654
655 if (Curse_of_Agony_Timer <= diff)
656 {
657 if (Unit* unit = SelectTarget(SELECT_TARGET_RANDOM, 0))
659
660 Curse_of_Agony_Timer = 13000;
661 } else Curse_of_Agony_Timer -= diff;
662
663 if (Fear_Timer <= diff)
664 {
665 if (Unit* unit = SelectTarget(SELECT_TARGET_RANDOM, 0))
666 DoCast(unit, SPELL_FEAR);
667
668 Fear_Timer = 10000;
669 } else Fear_Timer -= diff;
670
672 }
673 };
674};
675
677{
680};
681
683{
684public:
685 boss_eramas_brightblaze() : CreatureScript("boss_eramas_brightblaze") { }
686
688 {
689 return new boss_eramas_brightblazeAI(creature);
690 }
691
693 {
694 //Monk
696
699
701 {
702 Knockdown_Timer = 6000;
703 Snap_Kick_Timer = 4500;
704
706 }
707
709 {
710 if (!UpdateVictim())
711 return;
712
714
715 if (Knockdown_Timer <= diff)
716 {
718 Knockdown_Timer = 6000;
719 } else Knockdown_Timer -= diff;
720
721 if (Snap_Kick_Timer <= diff)
722 {
724 Snap_Kick_Timer = 4500;
725 } else Snap_Kick_Timer -= diff;
726
728 }
729 };
730};
731
742
744{
745public:
746 boss_yazzai() : CreatureScript("boss_yazzai") { }
747
749 {
750 return new boss_yazzaiAI(creature);
751 }
752
754 {
755 //Mage
757
759
768
770 {
771 HasIceBlocked = false;
772
773 Polymorph_Timer = 1000;
774 Ice_Block_Timer = 20000;
775 Wait_Timer = 10000;
776 Blizzard_Timer = 8000;
777 Ice_Lance_Timer = 12000;
778 Cone_of_Cold_Timer = 10000;
779 Frostbolt_Timer = 3000;
780 Blink_Timer = 8000;
781
783 }
784
786 {
787 if (!UpdateVictim())
788 return;
789
791
792 if (Polymorph_Timer <= diff)
793 {
794 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
795 {
796 DoCast(target, SPELL_POLYMORPH);
797 Polymorph_Timer = 20000;
798 }
799 } else Polymorph_Timer -= diff;
800
801 if (HealthBelowPct(35) && !HasIceBlocked)
802 {
804 HasIceBlocked = true;
805 }
806
807 if (Blizzard_Timer <= diff)
808 {
809 if (Unit* unit = SelectTarget(SELECT_TARGET_RANDOM, 0))
810 DoCast(unit, SPELL_BLIZZARD);
811
812 Blizzard_Timer = 8000;
813 } else Blizzard_Timer -= diff;
814
815 if (Ice_Lance_Timer <= diff)
816 {
818 Ice_Lance_Timer = 12000;
819 } else Ice_Lance_Timer -= diff;
820
821 if (Cone_of_Cold_Timer <= diff)
822 {
824 Cone_of_Cold_Timer = 10000;
825 } else Cone_of_Cold_Timer -= diff;
826
827 if (Frostbolt_Timer <= diff)
828 {
830 Frostbolt_Timer = 8000;
831 } else Frostbolt_Timer -= diff;
832
833 if (Blink_Timer <= diff)
834 {
835 bool InMeleeRange = false;
836 ThreatContainer::StorageType const &t_list = me->getThreatManager().getThreatList();
837 for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
838 {
839 if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
840 {
841 //if in melee range
842 if (target->IsWithinDistInMap(me, 5))
843 {
844 InMeleeRange = true;
845 break;
846 }
847 }
848 }
849
850 //if anybody is in melee range than escape by blink
851 if (InMeleeRange)
853
854 Blink_Timer = 8000;
855 } else Blink_Timer -= diff;
856
858 }
859 };
860};
861
872
874{
875public:
876 boss_warlord_salaris() : CreatureScript("boss_warlord_salaris") { }
877
879 {
880 return new boss_warlord_salarisAI(creature);
881 }
882
884 {
885 //Warrior
887
894
896 {
898 Disarm_Timer = 6000;
899 Piercing_Howl_Timer = 10000;
901 Hamstring_Timer = 4500;
902 Mortal_Strike_Timer = 8000;
903
905 }
906
907 void EnterCombat(Unit* /*who*/) OVERRIDE
908 {
910 }
911
913 {
914 if (!UpdateVictim())
915 return;
916
918
919 if (Intercept_Stun_Timer <= diff)
920 {
921 bool InMeleeRange = false;
922 ThreatContainer::StorageType const &t_list = me->getThreatManager().getThreatList();
923 for (ThreatContainer::StorageType::const_iterator itr = t_list.begin(); itr!= t_list.end(); ++itr)
924 {
925 if (Unit* target = Unit::GetUnit(*me, (*itr)->getUnitGuid()))
926 {
927 //if in melee range
928 if (target->IsWithinDistInMap(me, ATTACK_DISTANCE))
929 {
930 InMeleeRange = true;
931 break;
932 }
933 }
934 }
935
936 //if nobody is in melee range than try to use Intercept
937 if (!InMeleeRange)
938 {
939 if (Unit* unit = SelectTarget(SELECT_TARGET_RANDOM, 0))
941 }
942
943 Intercept_Stun_Timer = 10000;
944 } else Intercept_Stun_Timer -= diff;
945
946 if (Disarm_Timer <= diff)
947 {
949 Disarm_Timer = 6000;
950 } else Disarm_Timer -= diff;
951
952 if (Hamstring_Timer <= diff)
953 {
955 Hamstring_Timer = 4500;
956 } else Hamstring_Timer -= diff;
957
958 if (Mortal_Strike_Timer <= diff)
959 {
961 Mortal_Strike_Timer = 4500;
962 } else Mortal_Strike_Timer -= diff;
963
964 if (Piercing_Howl_Timer <= diff)
965 {
967 Piercing_Howl_Timer = 10000;
968 } else Piercing_Howl_Timer -= diff;
969
970 if (Frightening_Shout_Timer <= diff)
971 {
974 } else Frightening_Shout_Timer -= diff;
975
977 }
978 };
979};
980
992
994{
995public:
996 boss_garaxxas() : CreatureScript("boss_garaxxas") { }
997
999 {
1000 return new boss_garaxxasAI(creature);
1001 }
1002
1004 {
1005 //Hunter
1007 {
1008 m_uiPetGUID = 0;
1009 }
1010
1012
1019
1021 {
1022 Aimed_Shot_Timer = 6000;
1023 Shoot_Timer = 2500;
1024 Concussive_Shot_Timer = 8000;
1025 Multi_Shot_Timer = 10000;
1026 Wing_Clip_Timer = 4000;
1027 Freezing_Trap_Timer = 15000;
1028
1029 Unit* pPet = Unit::GetUnit(*me, m_uiPetGUID);
1030 if (!pPet)
1031 me->SummonCreature(NPC_SLIVER, 0.0f, 0.0f, 0.0f, 0.0f, TempSummonType::TEMPSUMMON_CORPSE_DESPAWN, 0);
1032
1034 }
1035
1037 {
1038 m_uiPetGUID = summoned->GetGUID();
1039 }
1040
1042 {
1043 if (!UpdateVictim())
1044 return;
1045
1047
1048 if (me->IsWithinDistInMap(me->GetVictim(), ATTACK_DISTANCE))
1049 {
1050 if (Wing_Clip_Timer <= diff)
1051 {
1053 Wing_Clip_Timer = 4000;
1054 } else Wing_Clip_Timer -= diff;
1055
1056 if (Freezing_Trap_Timer <= diff)
1057 {
1058 //attempt find go summoned from spell (casted by me)
1059 GameObject* go = me->GetGameObject(SPELL_FREEZING_TRAP);
1060
1061 //if we have a go, we need to wait (only one trap at a time)
1062 if (go)
1063 Freezing_Trap_Timer = 2500;
1064 else
1065 {
1066 //if go does not exist, then we can cast
1068 Freezing_Trap_Timer = 15000;
1069 }
1070 } else Freezing_Trap_Timer -= diff;
1071
1073 }
1074 else
1075 {
1076 if (Concussive_Shot_Timer <= diff)
1077 {
1079 Concussive_Shot_Timer = 8000;
1080 } else Concussive_Shot_Timer -= diff;
1081
1082 if (Multi_Shot_Timer <= diff)
1083 {
1085 Multi_Shot_Timer = 10000;
1086 } else Multi_Shot_Timer -= diff;
1087
1088 if (Aimed_Shot_Timer <= diff)
1089 {
1091 Aimed_Shot_Timer = 6000;
1092 } else Aimed_Shot_Timer -= diff;
1093
1094 if (Shoot_Timer <= diff)
1095 {
1097 Shoot_Timer = 2500;
1098 } else Shoot_Timer -= diff;
1099 }
1100 }
1101 };
1102};
1103
1105{
1106public:
1107 boss_apoko() : CreatureScript("boss_apoko") { }
1108
1110 {
1111 return new boss_apokoAI(creature);
1112 }
1113
1115 {
1116 //Shaman
1118
1125
1127 {
1128 Totem_Timer = 2000;
1129 Totem_Amount = 1;
1130 War_Stomp_Timer = 10000;
1131 Purge_Timer = 8000;
1132 Healing_Wave_Timer = 5000;
1133 Frost_Shock_Timer = 7000;
1134
1136 }
1137
1139 {
1140 if (!UpdateVictim())
1141 return;
1142
1144
1145 if (Totem_Timer <= diff)
1146 {
1148 ++Totem_Amount;
1150 } else Totem_Timer -= diff;
1151
1152 if (War_Stomp_Timer <= diff)
1153 {
1155 War_Stomp_Timer = 10000;
1156 } else War_Stomp_Timer -= diff;
1157
1158 if (Purge_Timer <= diff)
1159 {
1160 if (Unit* unit = SelectTarget(SELECT_TARGET_RANDOM, 0))
1161 DoCast(unit, SPELL_PURGE);
1162
1163 Purge_Timer = 15000;
1164 } else Purge_Timer -= diff;
1165
1166 if (Frost_Shock_Timer <= diff)
1167 {
1169 Frost_Shock_Timer = 7000;
1170 } else Frost_Shock_Timer -= diff;
1171
1172 if (Healing_Wave_Timer <= diff)
1173 {
1174 // std::vector<Add*>::const_iterator itr = Group.begin() + rand()%Group.size();
1175 // uint64 guid = (*itr)->guid;
1176 // if (guid)
1177 // {
1178 // Unit* pAdd = Unit::GetUnit(*me, (*itr)->guid);
1179 // if (pAdd && pAdd->IsAlive())
1180 // {
1182 Healing_Wave_Timer = 5000;
1183 // }
1184 // }
1185 } else Healing_Wave_Timer -= diff;
1186
1188 }
1189 };
1190};
1191
1201
1203{
1204public:
1205 boss_zelfan() : CreatureScript("boss_zelfan") { }
1206
1208 {
1209 return new boss_zelfanAI(creature);
1210 }
1211
1213 {
1214 //Engineer
1216
1222
1224 {
1226 Rocket_Launch_Timer = 7000;
1227 Recombobulate_Timer = 4000;
1229 Fel_Iron_Bomb_Timer = 15000;
1230
1232 }
1233
1235 {
1236 if (!UpdateVictim())
1237 return;
1238
1240
1241 if (Goblin_Dragon_Gun_Timer <= diff)
1242 {
1245 } else Goblin_Dragon_Gun_Timer -= diff;
1246
1247 if (Rocket_Launch_Timer <= diff)
1248 {
1250 Rocket_Launch_Timer = 9000;
1251 } else Rocket_Launch_Timer -= diff;
1252
1253 if (Fel_Iron_Bomb_Timer <= diff)
1254 {
1256 Fel_Iron_Bomb_Timer = 15000;
1257 } else Fel_Iron_Bomb_Timer -= diff;
1258
1259 if (Recombobulate_Timer <= diff)
1260 {
1261 for (uint8 i = 0; i < MAX_ACTIVE_LACKEY; ++i)
1262 {
1263 if (Unit* pAdd = Unit::GetUnit(*me, m_auiLackeyGUIDs[i]))
1264 {
1265 if (pAdd->IsPolymorphed())
1266 {
1268 break;
1269 }
1270 }
1271 }
1272 Recombobulate_Timer = 2000;
1273 } else Recombobulate_Timer -= diff;
1274
1275 if (High_Explosive_Sheep_Timer <= diff)
1276 {
1279 } else High_Explosive_Sheep_Timer -= diff;
1280
1282 }
1283 };
1284};
1285
1286/*
1287class npc_high_explosive_sheep : public CreatureScript
1288{
1289public:
1290 npc_high_explosive_sheep() : CreatureScript("npc_high_explosive_sheep") { }
1291
1292 //CreatureAI* GetAI(Creature* creature) const OVERRIDE
1293 //{
1294 // return new npc_high_explosive_sheepAI(creature);
1295 //};
1296};
1297*/
1298
1300{
1305 new boss_yazzai();
1307 new boss_garaxxas();
1308 new boss_apoko();
1309 new boss_zelfan();
1310 // new npc_high_explosive_sheep();
1311}
const T & RAND(const T &v1, const T &v2)
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
@ IN_PROGRESS
@ FAIL
@ DONE
@ SPECIAL
#define ATTACK_DISTANCE
Definition Object.h:22
@ TYPEID_PLAYER
Definition Object.h:55
@ TEMPSUMMON_CORPSE_DESPAWN
Definition Object.h:72
#define CAST_AI(a, b)
@ UNIT_DYNFLAG_LOOTABLE
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ OBJECT_FIELD_DYNAMIC_FLAGS
@ SPELL_FROSTBOLT
@ SPELL_CONE_OF_COLD
#define SAY_DEATH
#define SAY_AGGRO
@ SPELL_KNOCKDOWN
@ SPELL_MORTAL_STRIKE
@ SPELL_FRIGHTENING_SHOUT
@ SPELL_SHADOW_BOLT
@ SPELL_VANISH
@ SPELL_GOUGE
@ SPELL_DISARM
@ SPELL_FEAR
#define SPELL_BLINK
Definition boss_noth.cpp: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_FIRE_NOVA_TOTEM
@ SPELL_EARTHBIND_TOTEM
@ SPELL_LESSER_HEALING_WAVE
static Speech PlayerDeath[]
@ SPELL_IMMOLATE
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
virtual void EnterEvadeMode()
CreatureAI * AI() const
Definition Creature.h:483
CreatureScript(const char *name)
uint64 GetGUID() const
Definition Object.h:119
void SetFlag(uint16 index, uint32 newFlag)
Definition Object.cpp:1261
bool HasFlag(uint16 index, uint32 flag) const
Definition Object.cpp:1309
std::list< HostileReference * > StorageType
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
bool IsAlive() const
Definition Unit.h:2032
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition Unit.cpp:4895
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
#define SPELL_ROCKET_LAUNCH
#define SPELL_FLASH_HEAL
#define SPELL_FEL_IRON_BOMB
@ DATA_DELRISSA_DEATH_COUNT
@ DATA_DELRISSA_EVENT
@ DATA_DELRISSA
Creature * me
bool HealthBelowPct(uint32 pct) const
ScriptedAI(Creature *creature)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void JustSummoned(Creature *summoned) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
uint64 m_auiLackeyGUIDs[MAX_ACTIVE_LACKEY]
void KilledUnit(Unit *victim) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================