Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_grand_champions.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_grand_champions
8SD%Complete: 50 %
9SDComment: Is missing the ai to make the npcs look for a new mount and use it.
10SDCategory: Trial Of the Champion
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15#include "ScriptedEscortAI.h"
16#include "Vehicle.h"
18#include "Player.h"
19
21{
22 //Vehicle
23 SPELL_CHARGE = 63010,
25 SPELL_SHIELD = 66482,
26
27 // Marshal Jacob Alerius && Mokra the Skullcrusher || Warrior
32 SPELL_ROLLING_THROW = 47115, //not implemented in the AI yet...
33
34 // Ambrose Boltspark && Eressea Dawnsinger || Mage
39 SPELL_HASTE = 66045,
42
43 // Colosos && Runok Wildmane || Shaman
50
51 // Jaelyne Evensong && Zul'tore || Hunter
52 SPELL_DISENGAGE = 68340, //not implemented in the AI yet...
55 SPELL_SHOOT = 65868,
57
58 // Lana Stouthammer Evensong && Deathstalker Visceri || Rouge
63};
64
66{
68};
69
70/*
71struct Point
72{
73 float x, y, z;
74};
75
76const Point MovementPoint[] =
77{
78 {746.84f, 623.15f, 411.41f},
79 {747.96f, 620.29f, 411.09f},
80 {750.23f, 618.35f, 411.09f}
81};
82*/
84{
85 Map::PlayerList const &PlList = temp->GetMap()->GetPlayers();
86
87 if (PlList.isEmpty())
88 return;
89
90 for (Map::PlayerList::const_iterator i = PlList.begin(); i != PlList.end(); ++i)
91 {
92 if (Player* player = i->GetSource())
93 {
94 if (player->IsGameMaster())
95 continue;
96
97 if (player->IsAlive())
98 {
101 temp->SetInCombatWith(player);
102 player->SetInCombatWith(temp);
103 temp->AddThreat(player, 0.0f);
104 }
105 }
106 }
107}
108
110{
111 InstanceScript* instance = me->GetInstanceScript();
112
113 if (!instance)
114 return false;
115
116 Creature* pGrandChampion1 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_1));
117 Creature* pGrandChampion2 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_2));
118 Creature* pGrandChampion3 = Unit::GetCreature(*me, instance->GetData64(DATA_GRAND_CHAMPION_3));
119
120 if (pGrandChampion1 && pGrandChampion2 && pGrandChampion3)
121 {
122 if (!pGrandChampion1->m_movementInfo.transport.guid &&
123 !pGrandChampion2->m_movementInfo.transport.guid &&
124 !pGrandChampion3->m_movementInfo.transport.guid)
125 return true;
126 }
127
128 return false;
129}
130
131/*
132* Generic AI for vehicles used by npcs in ToC, it needs more improvements. *
133* Script Complete: 25%. *
134*/
135
137{
138public:
139 generic_vehicleAI_toc5() : CreatureScript("generic_vehicleAI_toc5") { }
140
142 {
144 {
145 SetDespawnAtEnd(false);
146 uiWaypointPath = 0;
147
148 instance = creature->GetInstanceScript();
149 }
150
152
156
158
160 {
161 uiChargeTimer = 5000;
163 uiBuffTimer = std::rand() % 60000 + 30000;
164 }
165
166 void SetData(uint32 uiType, uint32 /*uiData*/) OVERRIDE
167 {
168 switch (uiType)
169 {
170 case 1:
171 AddWaypoint(0, 747.36f, 634.07f, 411.572f);
172 AddWaypoint(1, 780.43f, 607.15f, 411.82f);
173 AddWaypoint(2, 785.99f, 599.41f, 411.92f);
174 AddWaypoint(3, 778.44f, 601.64f, 411.79f);
175 uiWaypointPath = 1;
176 break;
177 case 2:
178 AddWaypoint(0, 747.35f, 634.07f, 411.57f);
179 AddWaypoint(1, 768.72f, 581.01f, 411.92f);
180 AddWaypoint(2, 763.55f, 590.52f, 411.71f);
181 uiWaypointPath = 2;
182 break;
183 case 3:
184 AddWaypoint(0, 747.35f, 634.07f, 411.57f);
185 AddWaypoint(1, 784.02f, 645.33f, 412.39f);
186 AddWaypoint(2, 775.67f, 641.91f, 411.91f);
187 uiWaypointPath = 3;
188 break;
189 }
190
191 if (uiType <= 3)
192 Start(false, true, 0, NULL);
193 }
194
196 {
197 if (!instance)
198 return;
199
200 switch (waypointId)
201 {
202 case 2:
203 if (uiWaypointPath == 3 || uiWaypointPath == 2)
205 break;
206 case 3:
208 break;
209 }
210 }
211
212 void EnterCombat(Unit* /*who*/) OVERRIDE
213 {
215 }
216
218 {
219 for (uint8 i = 0; i < 3; ++i)
220 DoCast(me, SPELL_SHIELD, true);
221 }
222
224 {
226
227 if (!UpdateVictim())
228 return;
229
230 if (uiBuffTimer <= uiDiff)
231 {
232 if (!me->HasAura(SPELL_SHIELD))
234
235 uiBuffTimer = std::rand() % 45000 + 30000;
236 }else uiBuffTimer -= uiDiff;
237
238 if (uiChargeTimer <= uiDiff)
239 {
240 Map::PlayerList const& players = me->GetMap()->GetPlayers();
241 if (me->GetMap()->IsDungeon() && !players.isEmpty())
242 {
243 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
244 {
245 Player* player = itr->GetSource();
246 if (player && !player->IsGameMaster() && me->IsInRange(player, 8.0f, 25.0f, false))
247 {
249 me->AddThreat(player, 1.0f);
250 DoCast(player, SPELL_CHARGE);
251 break;
252 }
253 }
254 }
255 uiChargeTimer = 5000;
256 }else uiChargeTimer -= uiDiff;
257
258 //dosen't work at all
259 if (uiShieldBreakerTimer <= uiDiff)
260 {
261 Vehicle* pVehicle = me->GetVehicleKit();
262 if (!pVehicle)
263 return;
264
265 if (Unit* pPassenger = pVehicle->GetPassenger(SEAT_ID_0))
266 {
267 Map::PlayerList const& players = me->GetMap()->GetPlayers();
268 if (me->GetMap()->IsDungeon() && !players.isEmpty())
269 {
270 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
271 {
272 Player* player = itr->GetSource();
273 if (player && !player->IsGameMaster() && me->IsInRange(player, 10.0f, 30.0f, false))
274 {
275 pPassenger->CastSpell(player, SPELL_SHIELD_BREAKER, true);
276 break;
277 }
278 }
279 }
280 }
282 }else uiShieldBreakerTimer -= uiDiff;
283
285 }
286 };
287
289 {
290 return new generic_vehicleAI_toc5AI(creature);
291 }
292};
293
295{
296public:
297 boss_warrior_toc5() : CreatureScript("boss_warrior_toc5") { }
298
299 // Marshal Jacob Alerius && Mokra the Skullcrusher || Warrior
301 {
303 {
304 instance = creature->GetInstanceScript();
305
306 bDone = false;
307 bHome = false;
308
309 uiPhase = 0;
310 uiPhaseTimer = 0;
311
312 me->SetReactState(REACT_PASSIVE);
313 // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
315 }
316
318
321
326
327 bool bDone;
328 bool bHome;
329
331 {
332 uiBladeStormTimer = std::rand() % 20000 + 15000;
333 uiInterceptTimer = 7000;
334 uiMortalStrikeTimer = std::rand() % 12000 + 8000;
335 }
336
338 {
340
341 if (!bHome)
342 return;
343
344 uiPhaseTimer = 15000;
345 uiPhase = 1;
346
347 bHome = false;
348 }
349
351 {
353 {
354 bDone = true;
355
356 if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_1))
357 me->SetHomePosition(739.678f, 662.541f, 412.393f, 4.49f);
358 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_2))
359 me->SetHomePosition(746.71f, 661.02f, 411.69f, 4.6f);
360 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_3))
361 me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f);
362
364 bHome = true;
365 }
366
367 if (uiPhaseTimer <= uiDiff)
368 {
369 if (uiPhase == 1)
370 {
372 uiPhase = 0;
373 }
374 }else uiPhaseTimer -= uiDiff;
375
376 if (!UpdateVictim() || me->m_movementInfo.transport.guid)
377 return;
378
379 if (uiInterceptTimer <= uiDiff)
380 {
381 Map::PlayerList const& players = me->GetMap()->GetPlayers();
382 if (me->GetMap()->IsDungeon() && !players.isEmpty())
383 {
384 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
385 {
386 Player* player = itr->GetSource();
387 if (player && !player->IsGameMaster() && me->IsInRange(player, 8.0f, 25.0f, false))
388 {
390 me->AddThreat(player, 5.0f);
391 DoCast(player, SPELL_INTERCEPT);
392 break;
393 }
394 }
395 }
396 uiInterceptTimer = 7000;
397 } else uiInterceptTimer -= uiDiff;
398
399 if (uiBladeStormTimer <= uiDiff)
400 {
402 uiBladeStormTimer = std::rand() % 20000 + 15000;
403 } else uiBladeStormTimer -= uiDiff;
404
405 if (uiMortalStrikeTimer <= uiDiff)
406 {
408 uiMortalStrikeTimer = std::rand() % 12000 + 8000;
409 } else uiMortalStrikeTimer -= uiDiff;
410
412 }
413
414 void JustDied(Unit* /*killer*/) OVERRIDE
415 {
416 if (instance)
418 }
419 };
420
422 {
423 return new boss_warrior_toc5AI(creature);
424 }
425};
426
428{
429public:
430 boss_mage_toc5() : CreatureScript("boss_mage_toc5") { }
431
432 // Ambrose Boltspark && Eressea Dawnsinger || Mage
434 {
435 boss_mage_toc5AI(Creature* creature) : ScriptedAI(creature)
436 {
437 instance = creature->GetInstanceScript();
438
439 bDone = false;
440 bHome = false;
441
442 uiPhase = 0;
443 uiPhaseTimer = 0;
444
445 me->SetReactState(REACT_PASSIVE);
446 // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
448 }
449
451
454
459
460 bool bDone;
461 bool bHome;
462
464 {
465 uiFireBallTimer = 5000;
466 uiPolymorphTimer = 8000;
467 uiBlastWaveTimer = 12000;
468 uiHasteTimer = 22000;
469 }
470
472 {
474
475 if (!bHome)
476 return;
477
478 uiPhaseTimer = 15000;
479 uiPhase = 1;
480
481 bHome = false;
482 }
483
485 {
487 {
488 bDone = true;
489
490 if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_1))
491 me->SetHomePosition(739.678f, 662.541f, 412.393f, 4.49f);
492 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_2))
493 me->SetHomePosition(746.71f, 661.02f, 411.69f, 4.6f);
494 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_3))
495 me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f);
496
497 if (instance)
499
501 bHome = true;
502 }
503
504 if (uiPhaseTimer <= uiDiff)
505 {
506 if (uiPhase == 1)
507 {
509 uiPhase = 0;
510 }
511 }else uiPhaseTimer -= uiDiff;
512
513 if (uiFireBallTimer <= uiDiff)
514 {
515 if (me->GetVictim())
517 uiFireBallTimer = 5000;
518 } else uiFireBallTimer -= uiDiff;
519
520 if (!UpdateVictim() || me->m_movementInfo.transport.guid)
521 return;
522
523 if (uiFireBallTimer <= uiDiff)
524 {
526 uiFireBallTimer = 5000;
527 } else uiFireBallTimer -= uiDiff;
528
529 if (uiPolymorphTimer <= uiDiff)
530 {
531 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
532 DoCast(target, SPELL_POLYMORPH);
533 uiPolymorphTimer = 8000;
534 } else uiPolymorphTimer -= uiDiff;
535
536 if (uiBlastWaveTimer <= uiDiff)
537 {
539 uiBlastWaveTimer = 13000;
540 } else uiBlastWaveTimer -= uiDiff;
541
542 if (uiHasteTimer <= uiDiff)
543 {
544 me->InterruptNonMeleeSpells(true);
545
547 uiHasteTimer = 22000;
548 } else uiHasteTimer -= uiDiff;
549
551 }
552
553 void JustDied(Unit* /*killer*/) OVERRIDE
554 {
555 if (instance)
557 }
558 };
559
561 {
562 return new boss_mage_toc5AI(creature);
563 }
564};
565
567{
568public:
569 boss_shaman_toc5() : CreatureScript("boss_shaman_toc5") { }
570
571 // Colosos && Runok Wildmane || Shaman
573 {
575 {
576 instance = creature->GetInstanceScript();
577
578 bDone = false;
579 bHome = false;
580
581 uiPhase = 0;
582 uiPhaseTimer = 0;
583
584 me->SetReactState(REACT_PASSIVE);
585 // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
587 }
588
590
593
598
599 bool bDone;
600 bool bHome;
601
603 {
604 uiChainLightningTimer = 16000;
605 uiHealingWaveTimer = 12000;
606 uiEartShieldTimer = std::rand() % 35000 + 30000;
607 uiHexMendingTimer = std::rand() % 25000 + 20000;
608 }
609
615
617 {
619
620 if (!bHome)
621 return;
622
623 uiPhaseTimer = 15000;
624 uiPhase = 1;
625
626 bHome = false;
627 }
628
630 {
632 {
633 bDone = true;
634
635 if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_1))
636 me->SetHomePosition(739.678f, 662.541f, 412.393f, 4.49f);
637 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_2))
638 me->SetHomePosition(746.71f, 661.02f, 411.69f, 4.6f);
639 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_3))
640 me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f);
641
642 if (instance)
644
646 bHome = true;
647 }
648
649 if (uiPhaseTimer <= uiDiff)
650 {
651 if (uiPhase == 1)
652 {
654 uiPhase = 0;
655 }
656 }else uiPhaseTimer -= uiDiff;
657
658 if (!UpdateVictim() || me->m_movementInfo.transport.guid)
659 return;
660
661 if (uiChainLightningTimer <= uiDiff)
662 {
663 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
665
666 uiChainLightningTimer = 16000;
667 } else uiChainLightningTimer -= uiDiff;
668
669 if (uiHealingWaveTimer <= uiDiff)
670 {
671 bool bChance = std::rand() % 1;
672
673 if (!bChance)
674 {
675 if (Unit* pFriend = DoSelectLowestHpFriendly(40))
676 DoCast(pFriend, SPELL_HEALING_WAVE);
677 } else
679
680 uiHealingWaveTimer = 12000;
681 } else uiHealingWaveTimer -= uiDiff;
682
683 if (uiEartShieldTimer <= uiDiff)
684 {
686
687 uiEartShieldTimer = std::rand() % 35000 + 30000;
688 } else uiEartShieldTimer -= uiDiff;
689
690 if (uiHexMendingTimer <= uiDiff)
691 {
693
694 uiHexMendingTimer = std::rand() % 25000 + 20000;
695 } else uiHexMendingTimer -= uiDiff;
696
698 }
699
700 void JustDied(Unit* /*killer*/) OVERRIDE
701 {
702 if (instance)
704 }
705 };
706
708 {
709 return new boss_shaman_toc5AI(creature);
710 }
711};
712
714{
715public:
716 boss_hunter_toc5() : CreatureScript("boss_hunter_toc5") { }
717
718 // Jaelyne Evensong && Zul'tore || Hunter
720 {
722 {
723 instance = creature->GetInstanceScript();
724
725 bDone = false;
726 bHome = false;
727
728 uiPhase = 0;
729 uiPhaseTimer = 0;
730
731 me->SetReactState(REACT_PASSIVE);
732 // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
734 }
735
737
740
744
746
747 bool bShoot;
748 bool bDone;
749 bool bHome;
750
752 {
753 uiShootTimer = 12000;
756
757 uiTargetGUID = 0;
758
759 bShoot = false;
760 }
761
763 {
765
766 if (!bHome)
767 return;
768
769 uiPhaseTimer = 15000;
770 uiPhase = 1;
771
772 bHome = false;
773 }
774
776 {
778 {
779 bDone = true;
780
781 if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_1))
782 me->SetHomePosition(739.678f, 662.541f, 412.393f, 4.49f);
783 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_2))
784 me->SetHomePosition(746.71f, 661.02f, 411.69f, 4.6f);
785 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_3))
786 me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f);
787
788 if (instance)
790
792 bHome = true;
793 }
794
795 if (uiPhaseTimer <= uiDiff)
796 {
797 if (uiPhase == 1)
798 {
800 uiPhase = 0;
801 }
802 }else uiPhaseTimer -= uiDiff;
803
804 if (!UpdateVictim() || me->m_movementInfo.transport.guid)
805 return;
806
807 if (uiLightningArrowsTimer <= uiDiff)
808 {
811 } else uiLightningArrowsTimer -= uiDiff;
812
813 if (uiShootTimer <= uiDiff)
814 {
815 if (Unit* target = SelectTarget(SELECT_TARGET_FARTHEST, 0, 30.0f))
816 {
817 uiTargetGUID = target->GetGUID();
818 DoCast(target, SPELL_SHOOT);
819 }
820 uiShootTimer = 12000;
821 uiMultiShotTimer = 3000;
822 bShoot = true;
823 } else uiShootTimer -= uiDiff;
824
825 if (bShoot && uiMultiShotTimer <= uiDiff)
826 {
827 me->InterruptNonMeleeSpells(true);
828 Unit* target = Unit::GetUnit(*me, uiTargetGUID);
829
830 if (target && me->IsInRange(target, 5.0f, 30.0f, false))
831 {
832 DoCast(target, SPELL_MULTI_SHOT);
833 }
834 else
835 {
836 Map::PlayerList const& players = me->GetMap()->GetPlayers();
837 if (me->GetMap()->IsDungeon() && !players.isEmpty())
838 {
839 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
840 {
841 Player* player = itr->GetSource();
842 if (player && !player->IsGameMaster() && me->IsInRange(player, 5.0f, 30.0f, false))
843 {
844 DoCast(player, SPELL_MULTI_SHOT);
845 break;
846 }
847 }
848 }
849 }
850 bShoot = false;
851 } else uiMultiShotTimer -= uiDiff;
852
854 }
855
856 void JustDied(Unit* /*killer*/) OVERRIDE
857 {
858 if (instance)
860 }
861 };
862
864 {
865 return new boss_hunter_toc5AI(creature);
866 }
867};
868
870{
871public:
872 boss_rouge_toc5() : CreatureScript("boss_rouge_toc5") { }
873
874 // Lana Stouthammer Evensong && Deathstalker Visceri || Rouge
876 {
877 boss_rouge_toc5AI(Creature* creature) : ScriptedAI(creature)
878 {
879 instance = creature->GetInstanceScript();
880
881 bDone = false;
882 bHome = false;
883
884 uiPhase = 0;
885 uiPhaseTimer = 0;
886
887 me->SetReactState(REACT_PASSIVE);
888 // THIS IS A HACK, SHOULD BE REMOVED WHEN THE EVENT IS FULL SCRIPTED
890 }
891
893
899
900 bool bDone;
901 bool bHome;
902
904 {
905 uiEviscerateTimer = 8000;
906 uiFanKivesTimer = 14000;
907 uiPosionBottleTimer = 19000;
908 }
909
911 {
913
914 if (!bHome)
915 return;
916
917 uiPhaseTimer = 15000;
918 uiPhase = 1;
919
920 bHome = false;
921 }
922
924 {
926 {
927 bDone = true;
928
929 if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_1))
930 me->SetHomePosition(739.678f, 662.541f, 412.393f, 4.49f);
931 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_2))
932 me->SetHomePosition(746.71f, 661.02f, 411.69f, 4.6f);
933 else if (instance && me->GetGUID() == instance->GetData64(DATA_GRAND_CHAMPION_3))
934 me->SetHomePosition(754.34f, 660.70f, 412.39f, 4.79f);
935
936 if (instance)
938
940 bHome = true;
941 }
942
943 if (uiPhaseTimer <= uiDiff)
944 {
945 if (uiPhase == 1)
946 {
948 uiPhase = 0;
949 }
950 } else uiPhaseTimer -= uiDiff;
951
952 if (!UpdateVictim() || me->m_movementInfo.transport.guid)
953 return;
954
955 if (uiEviscerateTimer <= uiDiff)
956 {
958 uiEviscerateTimer = 8000;
959 } else uiEviscerateTimer -= uiDiff;
960
961 if (uiFanKivesTimer <= uiDiff)
962 {
964 uiFanKivesTimer = 14000;
965 } else uiFanKivesTimer -= uiDiff;
966
967 if (uiPosionBottleTimer <= uiDiff)
968 {
969 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
971 uiPosionBottleTimer = 19000;
972 } else uiPosionBottleTimer -= uiDiff;
973
975 }
976
977 void JustDied(Unit* /*killer*/) OVERRIDE
978 {
979 if (instance)
981 }
982 };
983
985 {
986 return new boss_rouge_toc5AI(creature);
987 }
988};
989
991{
993 new boss_warrior_toc5();
994 new boss_mage_toc5();
995 new boss_shaman_toc5();
996 new boss_hunter_toc5();
997 new boss_rouge_toc5();
998}
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
@ DONE
@ REACT_PASSIVE
Definition Unit.h:1156
@ REACT_AGGRESSIVE
Definition Unit.h:1158
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FLAG_IMMUNE_TO_PC
Definition Unit.h:633
@ SELECT_TARGET_FARTHEST
Definition UnitAI.h:27
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ UNIT_FIELD_FLAGS
@ SPELL_CHARGE
@ SPELL_FIREBALL
@ SPELL_MORTAL_STRIKE
void AggroAllPlayers(Creature *temp)
@ SPELL_MORTAL_STRIKE_H
@ SPELL_HEALING_WAVE_H
@ SPELL_EVISCERATE_H
@ SPELL_EVISCERATE
@ SPELL_SHIELD_BREAKER
@ SPELL_FAN_OF_KNIVES
@ SPELL_BLAST_WAVE
@ SPELL_MORTAL_STRIKE
@ SPELL_EARTH_SHIELD
@ SPELL_INTERCEPT
@ SPELL_ROLLING_THROW
@ SPELL_DISENGAGE
@ SPELL_HEALING_WAVE
@ SPELL_POISON_BOTTLE
@ SPELL_BLADESTORM
@ SPELL_CHAIN_LIGHTNING
@ SPELL_POLYMORPH_H
@ SPELL_LIGHTNING_ARROWS
@ SPELL_FIREBALL_H
@ SPELL_MULTI_SHOT
@ SPELL_HEX_OF_MENDING
@ SPELL_BLAST_WAVE_H
@ SPELL_POLYMORPH
@ SPELL_CHAIN_LIGHTNING_H
bool GrandChampionsOutVehicle(Creature *me)
void AddSC_boss_grand_champions()
@ SPELL_HASTE
@ SPELL_HEALING_WAVE
@ SPELL_CHAIN_LIGHTNING
virtual void JustReachedHome()
Definition CreatureAI.h:123
bool UpdateVictim()
virtual void EnterEvadeMode()
void SetReactState(ReactStates st)
Definition Creature.h:460
CreatureScript(const char *name)
bool isEmpty() const
Definition LinkedList.h:86
MapRefManager PlayerList
Definition Map.h:406
PlayerList const & GetPlayers() const
Definition Map.h:407
iterator end()
iterator begin()
LinkedListHead::Iterator< MapReference const > const_iterator
void RemoveFlag(uint16 index, uint32 oldFlag)
Definition Object.cpp:1280
bool IsGameMaster() const
Definition Player.h:1369
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
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:176
Definition Unit.h:1367
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=NULL)
Definition Unit.cpp:4463
static Creature * GetCreature(WorldObject &object, uint64 guid)
Definition Unit.cpp:4905
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition Unit.cpp:4895
void SetInCombatWith(Unit *enemy)
Unit * GetPassenger(int8 seatId) const
Gets a passenger on specified seat.
Definition Vehicle.cpp:306
Map * GetMap() const
Definition Object.h:740
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
MovementInfo m_movementInfo
Definition Object.h:807
virtual uint64 GetData64(uint32) const
Definition ZoneScript.h:32
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
struct MovementInfo::TransportInfo transport
Creature * me
Unit * DoSelectLowestHpFriendly(float range, uint32 minHPDiff=1)
ScriptedAI(Creature *creature)
void UpdateAI(uint32 uiDiff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 uiDiff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 uiDiff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 uiDiff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 uiDiff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 uiDiff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
npc_escortAI(Creature *creature)
void SetDespawnAtEnd(bool despawn)
void Start(bool isActiveAttacker=true, bool run=false, uint64 playerGUID=0, Quest const *quest=NULL, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=true)
void AddWaypoint(uint32 id, float x, float y, float z, uint32 waitTime=0)
@ DATA_GRAND_CHAMPION_2
@ DATA_GRAND_CHAMPION_1
@ DATA_GRAND_CHAMPION_3
@ BOSS_GRAND_CHAMPIONS
@ DATA_MOVEMENT_DONE