TrinityCore
Loading...
Searching...
No Matches
boss_hexlord.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_Hex_Lord_Malacrass
20SD%Complete:
21SDComment:
22SDCategory: Zul'Aman
23EndScriptData */
24
25#include "ScriptMgr.h"
26#include "Containers.h"
27#include "InstanceScript.h"
28#include "MotionMaster.h"
29#include "ObjectAccessor.h"
30#include "ScriptedCreature.h"
31#include "SpellScript.h"
32#include "TemporarySummon.h"
33#include "zulaman.h"
34
44
46{
47 NPC_TEMP_TRIGGER = 23920
48};
49
51{
55
56 // Druid
60
61 // Hunter
65
66 // Mage
71
72 // Paladin
76
77 // Priest
84
85 // Rogue
89
90 // Shaman
94
95 // Warlock
100
101 // Warrior
105
106 // Thurg
109
110 // Gazakroth
112
113 // Alyson Antille
116
117 // Lord Raadan
120
121 // Darkheart
123
124 // Slither
126
127 // Fenstalker
129
130 // Koragg
132 SPELL_MIGHTY_BLOW = 43592
134
135#define ORIENT 1.5696f
136#define POS_Y 921.2795f
137#define POS_Z 33.8883f
138
139static float Pos_X[4] = {112.8827f, 107.8827f, 122.8827f, 127.8827f};
140
141static uint8 const AddCount = 8;
143{
144 24240, //Alyson Antille
145 24241, //Thurg
146 24242, //Slither
147 24243, //Lord Raadan
148 24244, //Gazakroth
149 24245, //Fenstalker
150 24246, //Darkheart
151 24247 //Koragg
152};
153
163
165{
168 uint32 cooldown; //FIXME - it's never used
169};
170
172{
173 // 1 warrior
177 // 2 paladin
181 // 3 hunter
185 // 4 rogue
189 // 5 priest
193 // 5* shadow priest
197 // 7 shaman
201 // 8 mage
205 // 9 warlock
209 // 11 druid
213};
214
216{
218
220 {
221 instance = creature->GetInstanceScript();
222 }
223
224 void Reset() override { }
225
226 void JustEngagedWith(Unit* /*who*/) override
227 {
229 }
230
231 void UpdateAI(uint32 /*diff*/) override
232 {
234 {
236 return;
237 }
238
240 }
241};
242
244{
245 public:
246
247 boss_hexlord_malacrass() : CreatureScript("boss_hexlord_malacrass") { }
248
250 {
252 {
253 Initialize();
255
257 }
258
260 {
261 SpiritBolts_Timer = 20000;
262 DrainPower_Timer = 60000;
263 SiphonSoul_Timer = 100000;
264 PlayerAbility_Timer = 99999;
265 CheckAddState_Timer = 5000;
266 ResetTimer = 5000;
267 }
268
271
273
280
282
283 void Reset() override
284 {
285 _Reset();
286 Initialize();
287
288 SpawnAdds();
289 }
290
291 void JustEngagedWith(Unit* who) override
292 {
295
296 for (uint8 i = 0; i < 4; ++i)
297 {
299 if (creature && creature->IsAlive())
300 creature->AI()->AttackStart(me->GetVictim());
301 else
302 {
304 break;
305 }
306 }
307 }
308
309 void KilledUnit(Unit* /*victim*/) override
310 {
311 switch (urand(0, 1))
312 {
313 case 0:
315 break;
316 case 1:
318 break;
319 }
320 }
321
322 void JustDied(Unit* /*killer*/) override
323 {
324 _JustDied();
326
327 for (uint8 i = 0; i < 4; ++i)
328 {
330 if (Temp && Temp->IsAlive())
331 Temp->KillSelf();
332 }
333 }
334
336 {
337 std::list<uint32> addList(&AddEntryList[0], &AddEntryList[AddCount]);
339
340 uint8 i = 0;
341 for (auto itr = addList.begin(); itr != addList.end(); ++itr, ++i)
342 AddEntry[i] = *itr;
343 }
344
346 {
347 for (uint8 i = 0; i < 4; ++i)
348 {
350 if (!creature || !creature->IsAlive())
351 {
352 if (creature)
353 creature->setDeathState(DEAD);
355 if (creature)
356 AddGUID[i] = creature->GetGUID();
357 }
358 else
359 {
360 creature->AI()->EnterEvadeMode();
361 creature->UpdatePosition(Pos_X[i], POS_Y, POS_Z, ORIENT);
362 creature->StopMoving();
363 }
364 }
365 }
366
367 void UpdateAI(uint32 diff) override
368 {
369 if (!UpdateVictim())
370 return;
371
372 if (ResetTimer <= diff)
373 {
374 if (me->IsWithinDist3d(119.223f, 1035.45f, 29.4481f, 10))
375 {
377 return;
378 }
379 ResetTimer = 5000;
380 }
381 else
382 ResetTimer -= diff;
383
384 if (CheckAddState_Timer <= diff)
385 {
386 for (uint8 i = 0; i < 4; ++i)
388 if (temp->IsAlive() && !temp->GetVictim())
389 temp->AI()->AttackStart(me->GetVictim());
390
391 CheckAddState_Timer = 5000;
392 }
393 else
394 CheckAddState_Timer -= diff;
395
396 if (DrainPower_Timer <= diff)
397 {
400 DrainPower_Timer = urand(40000, 55000); // must cast in 60 sec, or buff/debuff will disappear
401 }
402 else
403 DrainPower_Timer -= diff;
404
405 if (SpiritBolts_Timer <= diff)
406 {
407 if (DrainPower_Timer < 12000) // channel 10 sec
408 SpiritBolts_Timer = 13000; // cast drain power first
409 else
410 {
413 SpiritBolts_Timer = 40000;
414 SiphonSoul_Timer = 10000; // ready to drain
415 PlayerAbility_Timer = 99999;
416 }
417 }
418 else
419 SpiritBolts_Timer -= diff;
420
421 if (SiphonSoul_Timer <= diff)
422 {
423 Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 70, true);
425 if (!target || !trigger)
426 {
428 return;
429 }
430 else
431 {
432 trigger->SetDisplayId(11686);
434 trigger->CastSpell(target, SPELL_SIPHON_SOUL, true);
435 trigger->GetMotionMaster()->MoveChase(me);
436
437 //DoCast(target, SPELL_SIPHON_SOUL, true);
438 //me->SetUInt64Value(UNIT_FIELD_CHANNEL_OBJECT, target->GetGUID());
439 //me->SetUInt32Value(UNIT_CHANNEL_SPELL, SPELL_SIPHON_SOUL);
440
441 PlayerGUID = target->GetGUID();
442 PlayerAbility_Timer = urand(8000, 10000);
443 PlayerClass = target->GetClass() - 1;
444
445 if (PlayerClass == CLASS_DRUID - 1)
447 else if (PlayerClass == CLASS_PRIEST - 1 && target->HasSpell(15473))
448 PlayerClass = CLASS_PRIEST; // shadow priest
449
450 SiphonSoul_Timer = 99999; // buff lasts 30 sec
451 }
452 }
453 else
454 SiphonSoul_Timer -= diff;
455
456 if (PlayerAbility_Timer <= diff)
457 {
458 //Unit* target = ObjectAccessor::GetUnit(*me, PlayerGUID);
459 //if (target && target->IsAlive())
460 //{
461 UseAbility();
462 PlayerAbility_Timer = urand(8000, 10000);
463 //}
464 }
465 else
466 PlayerAbility_Timer -= diff;
467
469 }
470
472 {
473 uint8 random = urand(0, 2);
474 Unit* target = nullptr;
475 switch (PlayerAbility[PlayerClass][random].target)
476 {
478 target = me;
479 break;
481 target = me->GetVictim();
482 break;
484 default:
485 target = SelectTarget(SelectTargetMethod::Random, 0, 100, true);
486 break;
488 target = DoSelectLowestHpFriendly(50.f, 0);
489 break;
491 {
492 std::list<Creature*> templist = DoFindFriendlyMissingBuff(50.f, PlayerAbility[PlayerClass][random].spell);
493 if (!templist.empty())
494 target = *(templist.begin());
495 }
496 break;
497 }
498 if (target)
499 DoCast(target, PlayerAbility[PlayerClass][random].spell, false);
500 }
501 };
502
503 CreatureAI* GetAI(Creature* creature) const override
504 {
505 return GetZulAmanAI<boss_hex_lord_malacrassAI>(creature);
506 }
507};
508
510{
511 public:
512 boss_thurg() : CreatureScript("boss_thurg") { }
513
515 {
517 {
518 Initialize();
519 }
520
522 {
523 bloodlust_timer = 15000;
524 cleave_timer = 10000;
525 }
526
529
530 void Reset() override
531 {
532 Initialize();
533
535 }
536
537 void UpdateAI(uint32 diff) override
538 {
539 if (!UpdateVictim())
540 return;
541
542 if (bloodlust_timer <= diff)
543 {
544 std::list<Creature*> templist = DoFindFriendlyMissingBuff(50, SPELL_BLOODLUST);
545 if (!templist.empty())
546 {
547 if (Unit* target = *(templist.begin()))
548 DoCast(target, SPELL_BLOODLUST, false);
549 }
550 bloodlust_timer = 12000;
551 }
552 else
553 bloodlust_timer -= diff;
554
555 if (cleave_timer <= diff)
556 {
558 cleave_timer = 12000; //3 sec cast
559 }
560 else
561 cleave_timer -= diff;
562
564 }
565 };
566
567 CreatureAI* GetAI(Creature* creature) const override
568 {
569 return GetZulAmanAI<boss_thurgAI>(creature);
570 }
571};
572
574{
575 public:
576 boss_alyson_antille() : CreatureScript("boss_alyson_antille") { }
577
579 {
580 //Holy Priest
582 {
583 Initialize();
584 }
585
587 {
588 flashheal_timer = 2500;
589 dispelmagic_timer = 10000;
590 }
591
594
595 void Reset() override
596 {
597 Initialize();
598
599 //AcquireGUID();
600
602 }
603
604 void AttackStart(Unit* who) override
605 {
606 if (!who)
607 return;
608
609 if (who->isTargetableForAttack())
610 {
611 if (me->Attack(who, false))
612 {
613 me->GetMotionMaster()->MoveChase(who, 20);
614 AddThreat(who, 0.0f);
615 }
616 }
617 }
618
619 void UpdateAI(uint32 diff) override
620 {
621 if (!UpdateVictim())
622 return;
623
624 if (flashheal_timer <= diff)
625 {
626 Unit* target = DoSelectLowestHpFriendly(99, 30000);
627 if (target)
628 {
629 if (target->IsWithinDistInMap(me, 50))
630 DoCast(target, SPELL_FLASH_HEAL, false);
631 else
632 {
633 // bugged
634 //me->GetMotionMaster()->Clear();
635 //me->GetMotionMaster()->MoveChase(target, 20);
636 }
637 }
638 else
639 {
640 if (urand(0, 1))
641 target = DoSelectLowestHpFriendly(50, 0);
642 else
644 if (target)
645 DoCast(target, SPELL_DISPEL_MAGIC, false);
646 }
647 flashheal_timer = 2500;
648 }
649 else
650 flashheal_timer -= diff;
651
652 /*if (dispelmagic_timer <= diff)
653 {
654 if (urand(0, 1))
655 {
656 Unit* target = SelectTarget();
657
658 DoCast(target, SPELL_DISPEL_MAGIC, false);
659 }
660 else
661 me->CastSpell(SelectUnit(SelectTargetMethod::Random, 0), SPELL_DISPEL_MAGIC, false);
662
663 dispelmagic_timer = 12000;
664 }
665 else
666 dispelmagic_timer -= diff;*/
667
669 }
670 };
671
672 CreatureAI* GetAI(Creature* creature) const override
673 {
674 return GetZulAmanAI<boss_alyson_antilleAI>(creature);
675 }
676};
677
679{
680 public:
681 boss_gazakroth() : CreatureScript("boss_gazakroth") { }
682
684 {
686 {
687 Initialize();
688 }
689
691 {
693 }
694
695 void Reset() override
696 {
697 Initialize();
699 }
700
701 void AttackStart(Unit* who) override
702 {
703 AttackStartCaster(who, 20.0f);
704 }
705
706 void UpdateAI(uint32 diff) override
707 {
708 if (!UpdateVictim())
709 return;
710
711 if (firebolt_timer <= diff)
712 {
714 firebolt_timer = 700;
715 }
716 else
717 firebolt_timer -= diff;
718
720 }
721
722 private:
724 };
725
726 CreatureAI* GetAI(Creature* creature) const override
727 {
728 return GetZulAmanAI<boss_gazakrothAI>(creature);
729 }
730};
731
733{
734 public:
735 boss_lord_raadan() : CreatureScript("boss_lord_raadan") { }
736
738 {
740 {
741 Initialize();
742 }
743
745 {
746 flamebreath_timer = 8000;
747 thunderclap_timer = 13000;
748 }
749
752
753 void Reset() override
754 {
755 Initialize();
756
758
759 }
760 void UpdateAI(uint32 diff) override
761 {
762 if (!UpdateVictim())
763 return;
764
765 if (thunderclap_timer <= diff)
766 {
768 thunderclap_timer = 12000;
769 }
770 else
771 thunderclap_timer -= diff;
772
773 if (flamebreath_timer <= diff)
774 {
776 flamebreath_timer = 12000;
777 }
778 else
779 flamebreath_timer -= diff;
780
782 }
783 };
784
785 CreatureAI* GetAI(Creature* creature) const override
786 {
787 return GetZulAmanAI<boss_lord_raadanAI>(creature);
788 }
789};
790
792{
793 public:
794 boss_darkheart() : CreatureScript("boss_darkheart") { }
795
797 {
799 {
800 Initialize();
801 }
802
804 {
805 psychicwail_timer = 8000;
806 }
807
809
810 void Reset() override
811 {
812 Initialize();
814 }
815 void UpdateAI(uint32 diff) override
816 {
817 if (!UpdateVictim())
818 return;
819
820 if (psychicwail_timer <= diff)
821 {
823 psychicwail_timer = 12000;
824 }
825 else
826 psychicwail_timer -= diff;
827
829 }
830 };
831
832 CreatureAI* GetAI(Creature* creature) const override
833 {
834 return GetZulAmanAI<boss_darkheartAI>(creature);
835 }
836};
837
839{
840 public:
841 boss_slither() : CreatureScript("boss_slither") { }
842
844 {
846 {
847 Initialize();
848 }
849
851 {
852 venomspit_timer = 5000;
853 }
854
856
857 void Reset() override
858 {
859 Initialize();
861 }
862
863 void AttackStart(Unit* who) override
864 {
865 if (!who)
866 return;
867
868 if (who->isTargetableForAttack())
869 {
870 if (me->Attack(who, false))
871 {
872 me->GetMotionMaster()->MoveChase(who, 20);
873 AddThreat(who, 0.0f);
874 }
875 }
876 }
877
878 void UpdateAI(uint32 diff) override
879 {
880 if (!UpdateVictim())
881 return;
882
883 if (venomspit_timer <= diff)
884 {
885 if (Unit* victim = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
886 DoCast(victim, SPELL_VENOM_SPIT, false);
887 venomspit_timer = 2500;
888 }
889 else
890 venomspit_timer -= diff;
891
893 }
894 };
895
896 CreatureAI* GetAI(Creature* creature) const override
897 {
898 return GetZulAmanAI<boss_slitherAI>(creature);
899 }
900};
901
903{
904 public:
905 boss_fenstalker() : CreatureScript("boss_fenstalker") { }
906
908 {
910 {
911 Initialize();
912 }
913
915 {
916 volatileinf_timer = 15000;
917 }
918
920
921 void Reset() override
922 {
923 Initialize();
925
926 }
927 void UpdateAI(uint32 diff) override
928 {
929 if (!UpdateVictim())
930 return;
931
932 if (volatileinf_timer <= diff)
933 {
934 // core bug
935 if (me->GetVictim())
937 volatileinf_timer = 12000;
938 }
939 else
940 volatileinf_timer -= diff;
941
943 }
944 };
945
946 CreatureAI* GetAI(Creature* creature) const override
947 {
948 return GetZulAmanAI<boss_fenstalkerAI>(creature);
949 }
950};
951
953{
954 public:
955 boss_koragg() : CreatureScript("boss_koragg") { }
956
958 {
960 {
961 Initialize();
962 }
963
965 {
966 coldstare_timer = 15000;
967 mightyblow_timer = 10000;
968 }
969
972
973 void Reset() override
974 {
975 Initialize();
977
978 }
979 void UpdateAI(uint32 diff) override
980 {
981 if (!UpdateVictim())
982 return;
983
984 if (mightyblow_timer <= diff)
985 {
987 mightyblow_timer = 12000;
988 }
989 if (coldstare_timer <= diff)
990 {
991 if (Unit* victim = SelectTarget(SelectTargetMethod::Random, 0, 100, true))
992 DoCast(victim, SPELL_COLD_STARE, false);
993 coldstare_timer = 12000;
994 }
995
997 }
998 };
999
1000 CreatureAI* GetAI(Creature* creature) const override
1001 {
1002 return GetZulAmanAI<boss_koraggAI>(creature);
1003 }
1004};
1005
1006// 43522 - Unstable Affliction
1008{
1009 public:
1010 spell_hexlord_unstable_affliction() : SpellScriptLoader("spell_hexlord_unstable_affliction") { }
1011
1013 {
1015
1016 bool Validate(SpellInfo const* /*spell*/) override
1017 {
1019 }
1020
1021 void HandleDispel(DispelInfo* dispelInfo)
1022 {
1023 if (Unit* caster = GetCaster())
1024 caster->CastSpell(dispelInfo->GetDispeller(), SPELL_WL_UNSTABLE_AFFL_DISPEL, GetEffect(EFFECT_0));
1025 }
1026
1031 };
1032
1033 AuraScript* GetAuraScript() const override
1034 {
1036 }
1037};
1038
1040{
1042 new boss_thurg();
1043 new boss_gazakroth();
1044 new boss_lord_raadan();
1045 new boss_darkheart();
1046 new boss_slither();
1047 new boss_fenstalker();
1048 new boss_koragg();
1049 new boss_alyson_antille();
1051}
@ IN_MILLISECONDS
Definition Common.h:35
uint8_t uint8
Definition Define.h:135
uint32_t uint32
Definition Define.h:133
@ IN_PROGRESS
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN
Spells
Definition PlayerAI.cpp:32
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:42
@ EFFECT_0
@ CLASS_DRUID
@ CLASS_PRIEST
@ CLASS_NONE
#define AuraDispelFn(F)
@ UNIT_FLAG_UNINTERACTIBLE
@ DEAD
Definition Unit.h:214
Creatures
static float Pos_X[4]
#define POS_Z
#define ORIENT
@ NPC_TEMP_TRIGGER
static PlayerAbilityStruct PlayerAbility[][3]
@ YELL_KILL_TWO
@ YELL_KILL_ONE
@ YELL_AGGRO
@ YELL_SPIRIT_BOLTS
@ YELL_DEATH
@ YELL_DRAIN_POWER
static uint32 const AddEntryList[AddCount]
static uint8 const AddCount
@ SPELL_CLEAVE
@ SPELL_PR_PSYCHIC_SCREAM
@ SPELL_SPIRIT_BOLTS
@ SPELL_WL_UNSTABLE_AFFL_DISPEL
@ SPELL_BLOODLUST
@ SPELL_FLASH_HEAL
@ SPELL_DR_THORNS
@ SPELL_WR_WHIRLWIND
@ SPELL_HU_EXPLOSIVE_TRAP
@ SPELL_MG_FIREBALL
@ SPELL_WR_MORTAL_STRIKE
@ SPELL_SIPHON_SOUL
@ SPELL_PR_MIND_CONTROL
@ SPELL_WL_RAIN_OF_FIRE
@ SPELL_FLAME_BREATH
@ SPELL_PA_HOLY_LIGHT
@ SPELL_PA_CONSECRATION
@ SPELL_DISPEL_MAGIC
@ SPELL_HU_FREEZING_TRAP
@ SPELL_SH_FIRE_NOVA
@ SPELL_SH_HEALING_WAVE
@ SPELL_FIREBOLT
@ SPELL_DR_MOONFIRE
@ SPELL_PR_SW_DEATH
@ SPELL_THUNDERCLAP
@ SPELL_DRAIN_POWER
@ SPELL_WL_CURSE_OF_DOOM
@ SPELL_RO_WOUND_POISON
@ SPELL_RO_BLIND
@ SPELL_COLD_STARE
@ SPELL_WL_UNSTABLE_AFFL
@ SPELL_PR_MIND_BLAST
@ SPELL_MG_ICE_LANCE
@ SPELL_MG_FROSTBOLT
@ SPELL_PA_AVENGING_WRATH
@ SPELL_MG_FROST_NOVA
@ SPELL_SH_CHAIN_LIGHT
@ SPELL_WR_SPELL_REFLECT
@ SPELL_PSYCHIC_WAIL
@ SPELL_PR_PAIN_SUPP
@ SPELL_RO_SLICE_DICE
@ SPELL_DR_LIFEBLOOM
@ SPELL_MIGHTY_BLOW
@ SPELL_HU_SNAKE_TRAP
@ SPELL_VOLATILE_INFECTION
@ SPELL_PR_HEAL
@ SPELL_VENOM_SPIT
#define POS_Y
void AddSC_boss_hex_lord_malacrass()
AbilityTarget
@ ABILITY_TARGET_HEAL
@ ABILITY_TARGET_VICTIM
@ ABILITY_TARGET_ENEMY
@ ABILITY_TARGET_SELF
@ ABILITY_TARGET_BUFF
@ ABILITY_TARGET_SPECIAL
Yells
Unit * GetCaster() const
AuraEffect * GetEffect(uint8 effIndex) const
HookList< AuraDispelHandler > AfterDispel
void JustEngagedWith(Unit *who) override
void DoZoneInCombat(Creature *creature=nullptr)
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:82
virtual void EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
void setDeathState(DeathState s) override
CreatureAI * AI() const
Definition Creature.h:154
WorldObject * GetDispeller() const
Definition Unit.h:404
EncounterState GetBossState(uint32 id) const
void MoveChase(Unit *target, Optional< ChaseRange > dist={}, Optional< ChaseAngle > angle={})
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
void AttackStartCaster(Unit *victim, float dist)
Definition UnitAI.cpp:48
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
virtual void AttackStart(Unit *)
Definition UnitAI.cpp:30
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:106
Definition Unit.h:769
bool isTargetableForAttack(bool checkFakeDeath=true) const
Definition Unit.cpp:8367
void KillSelf(bool durabilityLoss=true)
Definition Unit.h:1023
uint8 GetClass() const
Definition Unit.h:895
void StopMoving(bool force=false)
Definition Unit.cpp:10312
MotionMaster * GetMotionMaster()
Definition Unit.h:1667
bool IsAlive() const
Definition Unit.h:1234
virtual bool HasSpell(uint32) const
Definition Unit.h:1161
Unit * EnsureVictim() const
Definition Unit.h:861
virtual bool UpdatePosition(float x, float y, float z, float ang, bool teleport=false)
Definition Unit.cpp:12890
bool Attack(Unit *victim, bool meleeAttack)
Definition Unit.cpp:5535
virtual void SetDisplayId(uint32 modelId)
Definition Unit.cpp:10407
Unit * GetVictim() const
Definition Unit.h:859
void SetUnitFlag(UnitFlags flags)
Definition Unit.h:954
bool IsWithinDist3d(float x, float y, float z, float dist) const
Definition Object.cpp:1167
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1087
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
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
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
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
AuraScript * GetAuraScript() const override
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void RandomResize(C &container, std::size_t requestedSize)
Definition Containers.h:66
Unit * DoSelectLowestHpFriendly(float range, uint32 minHPDiff=1)
Creature * DoSpawnCreature(uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, Milliseconds despawntime)
std::list< Creature * > DoFindFriendlyMissingBuff(float range, uint32 spellId)
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
void UpdateAI(uint32 diff) override
boss_darkheartAI(Creature *creature)
void UpdateAI(uint32 diff) override
void UpdateAI(uint32 diff) override
boss_gazakrothAI(Creature *creature)
void AttackStart(Unit *who) override
InstanceScript * instance
void UpdateAI(uint32) override
void JustEngagedWith(Unit *) override
void Reset() override
boss_hexlord_addAI(Creature *creature)
boss_koraggAI(Creature *creature)
void UpdateAI(uint32 diff) override
void UpdateAI(uint32 diff) override
boss_slitherAI(Creature *creature)
void AttackStart(Unit *who) override
void UpdateAI(uint32 diff) override
void UpdateAI(uint32 diff) override
boss_thurgAI(Creature *creature)
@ BOSS_HEXLORD
Definition zulaman.h:32