TrinityCore
chapter1.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#include "CreatureAIImpl.h"
19#include "ScriptMgr.h"
20#include "CharmInfo.h"
21#include "CombatAI.h"
22#include "CreatureTextMgr.h"
23#include "G3DPosition.hpp"
24#include "GameObject.h"
25#include "GameObjectAI.h"
26#include "Log.h"
27#include "Map.h"
28#include "MotionMaster.h"
29#include "MoveSplineInit.h"
30#include "ObjectAccessor.h"
31#include "ObjectMgr.h"
32#include "PassiveAI.h"
33#include "Player.h"
34#include "ScriptedCreature.h"
35#include "ScriptedGossip.h"
36#include "SpellMgr.h"
37#include "SpellScript.h"
38#include "SpellInfo.h"
39#include "TemporarySummon.h"
40#include "Vehicle.h"
41
42/*######
43##Quest 12848
44######*/
45
46#define GCD_CAST 1
47
49{
52
57
60
65};
66
68{
74};
75
77{
78 191577,
79 191580,
80 191581,
81 191582,
82 191583,
83 191584,
84 191585,
85 191586,
86 191587,
87 191588,
88 191589,
89 191590
90};
91
93{
94 29519,
95 29520,
96 29565,
97 29566,
98 29567
99};
100
102{
103public:
104 npc_unworthy_initiate() : CreatureScript("npc_unworthy_initiate") { }
105
107 {
109 {
110 Initialize();
114
115 wait_timer = 0;
116 anchorX = 0.f;
117 anchorY = 0.f;
118 }
119
121 {
124 }
125
131
133
134 void Reset() override
135 {
136 Initialize();
137 events.Reset();
139 me->SetImmuneToPC(true);
141 me->LoadEquipment(0, true);
142 }
143
144 void JustEngagedWith(Unit* /*who*/) override
145 {
150 }
151
152 void MovementInform(uint32 type, uint32 id) override
153 {
154 if (type != POINT_MOTION_TYPE)
155 return;
156
157 if (id == 1)
158 {
159 wait_timer = 5000;
160 me->LoadEquipment(1);
162
164 Talk(SAY_EVENT_ATTACK, starter);
165
167 }
168 }
169
170 void EventStart(Creature* anchor, Player* target)
171 {
172 wait_timer = 5000;
174
177
178 float z;
179 anchor->GetContactPoint(me, anchorX, anchorY, z, 1.0f);
180
181 playerGUID = target->GetGUID();
182 Talk(SAY_EVENT_START, target);
183 }
184
185 void UpdateAI(uint32 diff) override
186 {
187 switch (phase)
188 {
189 case PHASE_CHAINED:
190 if (!anchorGUID)
191 {
192 if (Creature* anchor = me->FindNearestCreature(29521, 30))
193 {
194 anchor->AI()->SetGUID(me->GetGUID());
195 anchor->CastSpell(me, SPELL_SOUL_PRISON_CHAIN, true);
196 anchorGUID = anchor->GetGUID();
197 }
198 else
199 TC_LOG_ERROR("scripts", "npc_unworthy_initiateAI: unable to find anchor!");
200
201 float dist = 99.0f;
202 GameObject* prison = nullptr;
203
204 for (uint8 i = 0; i < 12; ++i)
205 {
206 if (GameObject* temp_prison = me->FindNearestGameObject(acherus_soul_prison[i], 30))
207 {
208 if (me->IsWithinDist(temp_prison, dist, false))
209 {
210 dist = me->GetDistance2d(temp_prison);
211 prison = temp_prison;
212 }
213 }
214 }
215
216 if (prison)
217 prison->ResetDoorOrButton();
218 else
219 TC_LOG_ERROR("scripts", "npc_unworthy_initiateAI: unable to find prison!");
220 }
221 break;
222 case PHASE_TO_EQUIP:
223 if (wait_timer)
224 {
225 if (wait_timer > diff)
226 wait_timer -= diff;
227 else
228 {
230 //TC_LOG_DEBUG("scripts", "npc_unworthy_initiateAI: move to {} {} {}", anchorX, anchorY, me->GetPositionZ());
232 wait_timer = 0;
233 }
234 }
235 break;
236 case PHASE_TO_ATTACK:
237 if (wait_timer)
238 {
239 if (wait_timer > diff)
240 wait_timer -= diff;
241 else
242 {
244 me->SetImmuneToPC(false);
247
249 AttackStart(target);
250 wait_timer = 0;
251 }
252 }
253 break;
254 case PHASE_ATTACKING:
255 if (!UpdateVictim())
256 return;
257
258 events.Update(diff);
259
260 while (uint32 eventId = events.ExecuteEvent())
261 {
262 switch (eventId)
263 {
264 case EVENT_ICY_TOUCH:
268 break;
273 break;
278 break;
279 case EVENT_DEATH_COIL:
283 break;
284 }
285 }
286 break;
287 default:
288 break;
289 }
290 }
291 };
292
293 CreatureAI* GetAI(Creature* creature) const override
294 {
295 return new npc_unworthy_initiateAI(creature);
296 }
297};
298
300{
301public:
302 npc_unworthy_initiate_anchor() : CreatureScript("npc_unworthy_initiate_anchor") { }
303
304 CreatureAI* GetAI(Creature* creature) const override
305 {
306 return new npc_unworthy_initiate_anchorAI(creature);
307 }
308
310 {
312
314
315 void SetGUID(ObjectGuid const& guid, int32 /*id*/) override
316 {
317 prisonerGUID = guid;
318 }
319
320 ObjectGuid GetGUID(int32 /*id*/) const override
321 {
322 return prisonerGUID;
323 }
324 };
325};
326
328{
329 public:
330 go_acherus_soul_prison() : GameObjectScript("go_acherus_soul_prison") { }
331
333 {
335
336 bool OnGossipHello(Player* player) override
337 {
338 if (Creature* anchor = me->FindNearestCreature(29521, 15))
339 {
340 ObjectGuid prisonerGUID = anchor->AI()->GetGUID();
341 if (!prisonerGUID.IsEmpty())
342 if (Creature* prisoner = ObjectAccessor::GetCreature(*player, prisonerGUID))
343 ENSURE_AI(npc_unworthy_initiate::npc_unworthy_initiateAI, prisoner->AI())->EventStart(anchor, player);
344 }
345
346 return false;
347 }
348 };
349
350 GameObjectAI* GetAI(GameObject* go) const override
351 {
352 return new go_acherus_soul_prisonAI(go);
353 }
354};
355
356// 51519 - Death Knight Initiate Visual
358{
360 {
361 Creature* target = GetHitCreature();
362 if (!target)
363 return;
364
365 uint32 spellId;
366 switch (target->GetDisplayId())
367 {
368 case 25369: spellId = 51552; break; // bloodelf female
369 case 25373: spellId = 51551; break; // bloodelf male
370 case 25363: spellId = 51542; break; // draenei female
371 case 25357: spellId = 51541; break; // draenei male
372 case 25361: spellId = 51537; break; // dwarf female
373 case 25356: spellId = 51538; break; // dwarf male
374 case 25372: spellId = 51550; break; // forsaken female
375 case 25367: spellId = 51549; break; // forsaken male
376 case 25362: spellId = 51540; break; // gnome female
377 case 25359: spellId = 51539; break; // gnome male
378 case 25355: spellId = 51534; break; // human female
379 case 25354: spellId = 51520; break; // human male
380 case 25360: spellId = 51536; break; // nightelf female
381 case 25358: spellId = 51535; break; // nightelf male
382 case 25368: spellId = 51544; break; // orc female
383 case 25364: spellId = 51543; break; // orc male
384 case 25371: spellId = 51548; break; // tauren female
385 case 25366: spellId = 51547; break; // tauren male
386 case 25370: spellId = 51545; break; // troll female
387 case 25365: spellId = 51546; break; // troll male
388 default: return;
389 }
390
391 target->CastSpell(target, spellId, GetSpell());
392 target->LoadEquipment();
393 }
394
395 void Register() override
396 {
398 }
399};
400
401/*######
402## npc_eye_of_acherus
403######*/
404
406{
412
417
420
423
424static constexpr uint8 const EyeOfAcherusPathSize = 4;
426{
427 { 2361.21f, -5660.45f, 496.744f },
428 { 2341.571f, -5672.797f, 538.3942f },
429 { 1957.4f, -5844.1f, 273.867f },
430 { 1758.01f, -5876.79f, 166.867f }
431};
432
434{
436 {
437 creature->SetDisplayFromModel(0);
438 creature->SetReactState(REACT_PASSIVE);
439 if (creature->GetCharmInfo())
441 }
442
443 void InitializeAI() override
444 {
448 }
449
450 void OnCharmed(bool apply) override
451 {
452 if (!apply)
453 {
456 }
457 }
458
459 void UpdateAI(uint32 diff) override
460 {
461 _events.Update(diff);
462
463 while (uint32 eventId = _events.ExecuteEvent())
464 {
465 switch (eventId)
466 {
468 if (Unit* owner = me->GetCharmerOrOwner())
471 break;
472 case EVENT_UNROOT:
476 break;
478 {
479 std::function<void(Movement::MoveSplineInit&)> initializer = [=, me = me](Movement::MoveSplineInit& init)
480 {
482 init.MovebyPath(path);
483 init.SetFly();
484 if (Unit* owner = me->GetCharmerOrOwner())
485 init.SetVelocity(owner->GetSpeed(MOVE_RUN));
486 };
487
489 break;
490 }
495 if (Unit* owner = me->GetCharmerOrOwner())
497 break;
498 default:
499 break;
500 }
501 }
502 }
503
504 void MovementInform(uint32 movementType, uint32 pointId) override
505 {
506 if (movementType != POINT_MOTION_TYPE)
507 return;
508
509 switch (pointId)
510 {
511 case POINT_NEW_AVALON:
514 break;
515 default:
516 break;
517 }
518 }
519
520private:
522};
523
524/*######
525## npc_death_knight_initiate
526######*/
527
529{
530 SPELL_DUEL = 52996,
531 //SPELL_DUEL_TRIGGERED = 52990,
535};
536
538{
540};
541
543{
546
548{
557};
558
560{
561public:
562 npc_death_knight_initiate() : CreatureScript("npc_death_knight_initiate") { }
563
565 {
567 {
568 Initialize();
569 }
570
572 {
574 m_uiDuelTimer = 5000;
575 m_bIsDuelInProgress = false;
576 lose = false;
577 }
578
579 bool lose;
583
584 void Reset() override
585 {
586 Initialize();
587
591 }
592
593 void SpellHit(WorldObject* caster, SpellInfo const* spellInfo) override
594 {
595 if (!m_bIsDuelInProgress && spellInfo->Id == SPELL_DUEL)
596 {
597 m_uiDuelerGUID = caster->GetGUID();
598 Talk(SAY_DUEL, caster);
599 m_bIsDuelInProgress = true;
600 }
601 }
602
603 void DamageTaken(Unit* pDoneBy, uint32 &uiDamage, DamageEffectType /*damageType*/, SpellInfo const* /*spellInfo = nullptr*/) override
604 {
605 if (m_bIsDuelInProgress && pDoneBy && pDoneBy->IsControlledByPlayer())
606 {
607 if (pDoneBy->GetGUID() != m_uiDuelerGUID && pDoneBy->GetOwnerGUID() != m_uiDuelerGUID) // other players cannot help
608 uiDamage = 0;
609 else if (uiDamage >= me->GetHealth())
610 {
611 uiDamage = 0;
612
613 if (!lose)
614 {
615 pDoneBy->RemoveGameObject(SPELL_DUEL_FLAG, true);
616 pDoneBy->AttackStop();
617 me->CastSpell(pDoneBy, SPELL_DUEL_VICTORY, true);
618 lose = true;
619 me->CastSpell(me, SPELL_GROVEL, true);
621 }
622 }
623 }
624 }
625
626 void UpdateAI(uint32 uiDiff) override
627 {
628 if (!UpdateVictim())
629 {
631 {
632 if (m_uiDuelTimer <= uiDiff)
633 {
635
637 AttackStart(unit);
638 }
639 else
640 m_uiDuelTimer -= uiDiff;
641 }
642 return;
643 }
644
646 {
647 if (lose)
648 {
649 if (!me->HasAura(SPELL_GROVEL))
651 return;
652 }
654 {
655 me->EnsureVictim()->CastSpell(me->GetVictim(), SPELL_GROVEL, true); // beg
658 return;
659 }
660 }
661
663
664 CombatAI::UpdateAI(uiDiff);
665 }
666
667 bool OnGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
668 {
669 uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
670 ClearGossipMenuFor(player);
671 if (action == GOSSIP_ACTION_INFO_DEF)
672 {
673 CloseGossipMenuFor(player);
674
675 if (player->IsInCombat() || me->IsInCombat())
676 return true;
677
679 return true;
680
681 me->SetImmuneToPC(false);
683
684 player->CastSpell(me, SPELL_DUEL, false);
685 player->CastSpell(player, SPELL_DUEL_FLAG, true);
686 }
687 return true;
688 }
689
690 bool OnGossipHello(Player* player) override
691 {
692 uint32 gossipMenuId = player->GetGossipMenuForSource(me);
693 InitGossipMenuFor(player, gossipMenuId);
695 {
696 if (player->HealthBelowPct(10))
697 return true;
698
699 if (player->IsInCombat() || me->IsInCombat())
700 return true;
701
703 SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
704 }
705 return true;
706 }
707
708 void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
709 {
710 switch (pathId)
711 {
721 break;
722 default:
723 break;
724 }
725 }
726 };
727
728 CreatureAI* GetAI(Creature* creature) const override
729 {
730 return new npc_death_knight_initiateAI(creature);
731 }
732};
733
734/*######
735## npc_dark_rider_of_acherus
736######*/
737
739{
741
745
746 SPELL_DESPAWN_HORSE = 52267
748
750{
752
753 void JustAppeared() override
754 {
755 if (TempSummon* summon = me->ToTempSummon())
756 _horseGUID = summon->GetSummonerGUID();
757
759 }
760
761 void Reset() override
762 {
763 _events.Reset();
764 }
765
766 void UpdateAI(uint32 diff) override
767 {
768 _events.Update(diff);
769
770 while (uint32 eventId = _events.ExecuteEvent())
771 {
772 switch (eventId)
773 {
777 me->GetMotionMaster()->MoveChase(horse);
779 break;
783 DoCast(horse, SPELL_DESPAWN_HORSE, true);
785 break;
786 case EVENT_END_SCRIPT:
788 break;
789 default:
790 break;
791 }
792 }
793 }
794
795 void SpellHitTarget(WorldObject* target, SpellInfo const* spellInfo) override
796 {
797 if (spellInfo->Id == SPELL_DESPAWN_HORSE && target->GetGUID() == _horseGUID)
798 if (Creature* creature = target->ToCreature())
799 creature->DespawnOrUnsummon(2s);
800 }
801
802private:
805};
806
807/*######
808## npc_salanar_the_horseman
809######*/
810
812{
821
823{
824public:
825 npc_salanar_the_horseman() : CreatureScript("npc_salanar_the_horseman") { }
826
828 {
830
831 void MoveInLineOfSight(Unit* who) override
832 {
834
835 if (who->GetTypeId() == TYPEID_UNIT && who->IsVehicle() && me->IsWithinDistInMap(who, 5.0f))
836 {
837 if (Unit* charmer = who->GetCharmer())
838 {
839 if (Player* player = charmer->ToPlayer())
840 {
841 if (player->GetQuestStatus(QUEST_INTO_REALM_OF_SHADOWS) == QUEST_STATUS_INCOMPLETE)
842 {
843 player->GroupEventHappens(QUEST_INTO_REALM_OF_SHADOWS, me);
845 charmer->RemoveAurasDueToSpell(SPELL_EFFECT_OVERTAKE);
846 if (Creature* creature = who->ToCreature())
847 {
848 creature->DespawnOrUnsummon();
849 //creature->Respawn(true);
850 }
851 }
852
853 player->RemoveAurasDueToSpell(SPELL_REALM_OF_SHADOWS);
854 }
855 }
856 }
857 }
858 };
859
860 CreatureAI* GetAI(Creature* creature) const override
861 {
862 return new npc_salanar_the_horsemanAI(creature);
863 }
864};
865
867{
868 SEAT_ID_0 = 0
870
871// 52265 - Repo
873{
874 void AfterApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
875 {
876 Creature* creature = GetTarget()->ToCreature();
877 if (!creature)
878 return;
879
880 if (Vehicle* vehicleKit = creature->GetVehicleKit())
881 if (Unit* passenger = vehicleKit->GetPassenger(SEAT_ID_0))
882 GetCaster()->EngageWithTarget(passenger);
883
884 creature->DespawnOrUnsummon(1s);
885 }
886
887 void Register() override
888 {
890 }
891};
892
893// 52264 - Deliver Stolen Horse
895{
896 bool Validate(SpellInfo const* /*spellInfo*/) override
897 {
899 }
900
902 {
903 Unit* target = GetHitUnit();
905
906 Unit* caster = GetCaster();
910
911 caster->CastSpell(caster, SPELL_CALL_DARK_RIDER, true);
912 }
913
914 void Register() override
915 {
917 }
918};
919
920/*######
921## npc_ros_dark_rider
922######*/
923
925{
926public:
927 npc_ros_dark_rider() : CreatureScript("npc_ros_dark_rider") { }
928
929 CreatureAI* GetAI(Creature* creature) const override
930 {
931 return new npc_ros_dark_riderAI(creature);
932 }
933
935 {
936 npc_ros_dark_riderAI(Creature* creature) : ScriptedAI(creature) { }
937
938 void JustEngagedWith(Unit* /*who*/) override
939 {
940 me->ExitVehicle();
941 }
942
943 void Reset() override
944 {
945 Creature* deathcharger = me->FindNearestCreature(28782, 30);
946 if (!deathcharger)
947 return;
948
949 deathcharger->RestoreFaction();
951 deathcharger->SetUninteractible(true);
952 if (!me->GetVehicle() && deathcharger->IsVehicle() && deathcharger->GetVehicleKit()->HasEmptySeat(0))
953 me->EnterVehicle(deathcharger);
954 }
955
956 void JustDied(Unit* killer) override
957 {
958 Creature* deathcharger = me->FindNearestCreature(28782, 30);
959 if (!deathcharger || !killer)
960 return;
961
962 if (killer->GetTypeId() == TYPEID_PLAYER && deathcharger->GetTypeId() == TYPEID_UNIT && deathcharger->IsVehicle())
963 {
965 deathcharger->SetUninteractible(false);
967 }
968 }
969 };
970
971};
972
973// correct way: 52312 52314 52555 ...
975{
977
978 NPC_GHOULS = 28845,
979 NPC_GHOSTS = 28846,
980};
981
983{
984public:
985 npc_dkc1_gothik() : CreatureScript("npc_dkc1_gothik") { }
986
987 CreatureAI* GetAI(Creature* creature) const override
988 {
989 return new npc_dkc1_gothikAI(creature);
990 }
991
993 {
994 npc_dkc1_gothikAI(Creature* creature) : ScriptedAI(creature) { }
995
996 void MoveInLineOfSight(Unit* who) override
997
998 {
1000
1001 if (who->GetEntry() == NPC_GHOULS && me->IsWithinDistInMap(who, 10.0f))
1002 {
1003 if (Unit* owner = who->GetOwner())
1004 {
1005 if (Player* player = owner->ToPlayer())
1006 {
1007 Creature* creature = who->ToCreature();
1008 if (player->GetQuestStatus(12698) == QUEST_STATUS_INCOMPLETE)
1009 creature->CastSpell(owner, 52517, true);
1010
1012 // stand next to Gothik and be commanded into the pit
1013 // and dig into the ground.
1014 creature->DespawnOrUnsummon();
1015
1016 if (player->GetQuestStatus(12698) == QUEST_STATUS_COMPLETE)
1017 owner->RemoveAllMinionsByEntry(NPC_GHOSTS);
1018 }
1019 }
1020 }
1021 }
1022 };
1023
1024};
1025
1027{
1029 {
1031 }
1032
1033 void JustAppeared() override
1034 {
1036
1037 if (urand(0, 1))
1038 if (Unit* owner = me->GetOwner())
1039 Talk(SAY_LINE_0, owner);
1040 }
1041
1042 void FindMinions(Unit* owner)
1043 {
1044 std::list<TempSummon*> MinionList;
1045 owner->GetAllMinionsByEntry(MinionList, NPC_GHOULS);
1046
1047 if (!MinionList.empty())
1048 {
1049 for (Creature* creature : MinionList)
1050 {
1051 if (creature->GetOwner()->GetGUID() == me->GetOwner()->GetGUID())
1052 {
1053 if (creature->IsInCombat() && creature->getAttackerForHelper())
1054 {
1055 AttackStart(creature->getAttackerForHelper());
1056 }
1057 }
1058 }
1059 }
1060 }
1061
1062 void UpdateAI(uint32 /*diff*/) override
1063 {
1064 if (!me->IsInCombat())
1065 {
1066 if (Unit* owner = me->GetOwner())
1067 {
1068 Player* plrOwner = owner->ToPlayer();
1069 if (plrOwner && plrOwner->IsInCombat())
1070 {
1071 Unit* newTarget = plrOwner->getAttackerForHelper();
1072 if (newTarget && newTarget->GetEntry() == NPC_GHOSTS)
1073 AttackStart(newTarget);
1074 else
1075 FindMinions(owner);
1076 }
1077 }
1078 }
1079
1080 if (!UpdateVictim())
1081 return;
1082 }
1083
1084 bool CanAIAttack(Unit const* target) const override
1085 {
1086 return target->GetEntry() == NPC_GHOSTS;
1087 }
1088};
1089
1091{
1093 SPELL_GHOST_TRANSFORM = 52505
1095
1096// 52479 - Gift of the Harvester
1098{
1099 bool Validate(SpellInfo const* /*spell*/) override
1100 {
1101 return ValidateSpellInfo(
1102 {
1105 });
1106 }
1107
1109 {
1110 Unit* originalCaster = GetOriginalCaster();
1111 Unit* target = GetHitUnit();
1112
1113 if (originalCaster && target)
1114 originalCaster->CastSpell(target, RAND(SPELL_GHOUL_TRANFORM, SPELL_GHOST_TRANSFORM), true);
1115 }
1116
1117 void Register() override
1118 {
1120 }
1121};
1122
1123/*######
1124## Quest 12842: Runeforging: Preparation For Battle
1125######*/
1126
1128{
1130 QUEST_RUNEFORGING = 12842
1132
1133/* 53343 - Rune of Razorice
1134 53344 - Rune of the Fallen Crusader
1135 62158 - Rune of the Stoneskin Gargoyle
1136 326805 - Rune of Sanguination
1137 326855 - Rune of Spellwarding
1138 326911 - Rune of Hysteria
1139 326977 - Rune of Unending Thirst
1140 327082 - Rune of the Apocalypse */
1142{
1143 bool Validate(SpellInfo const* /*spellInfo*/) override
1144 {
1146 sObjectMgr->GetQuestTemplate(QUEST_RUNEFORGING);
1147 }
1148
1149 void HandleDummy(SpellEffIndex /*effIndex*/)
1150 {
1151 if (Player* caster = GetCaster()->ToPlayer())
1152 if (caster->GetQuestStatus(QUEST_RUNEFORGING) == QUEST_STATUS_INCOMPLETE)
1153 caster->CastSpell(caster, SPELL_RUNEFORGING_CREDIT);
1154 }
1155
1156 void Register() override
1157 {
1159 }
1160};
1161
1163{
1205};
1206
1207// 29102 - Hearthglen Crusader
1208// 29103 - Tirisfal Crusader
1210{
1212 {
1213 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(creature->m_spells[0], creature->GetMap()->GetDifficultyID());
1214 if (!spellInfo)
1215 return;
1216
1217 _minimumRange = spellInfo->GetMinRange(false);
1218
1219 if (!_minimumRange)
1221 creature->m_CombatDistance = spellInfo->GetMaxRange(false);
1222 creature->m_SightDistance = creature->m_CombatDistance;
1223 }
1224
1225 void AttackStart(Unit* who) override
1226 {
1227 if (!who)
1228 return;
1229
1231 {
1232 if (me->Attack(who, true) && !who->IsFlying())
1233 me->GetMotionMaster()->MoveChase(who);
1234 }
1235 else
1236 {
1237 if (me->Attack(who, false) && !who->IsFlying())
1239 }
1240
1241 if (who->IsFlying())
1243 }
1244
1245 void UpdateAI(uint32 /*diff*/) override
1246 {
1247 if (!UpdateVictim())
1248 return;
1249
1252 }
1253
1254 void WaypointPathEnded(uint32 /*nodeId*/, uint32 pathId) override
1255 {
1256 switch (pathId)
1257 {
1299 me->DespawnOrUnsummon(1s);
1300 break;
1301 default:
1302 break;
1303 }
1304 }
1305
1306private:
1308};
1309
1311{
1322 new npc_ros_dark_rider();
1323 new npc_dkc1_gothik();
1328}
First const & RAND(First const &first, Second const &second, Rest const &... rest)
uint8_t uint8
Definition: Define.h:144
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
#define TC_LOG_ERROR(filterType__,...)
Definition: Log.h:165
@ MOTION_PRIORITY_NORMAL
@ POINT_MOTION_TYPE
#define MELEE_RANGE
Definition: ObjectDefines.h:45
@ TYPEID_UNIT
Definition: ObjectGuid.h:40
@ TYPEID_PLAYER
Definition: ObjectGuid.h:41
#define sObjectMgr
Definition: ObjectMgr.h:1946
@ QUEST_STATUS_INCOMPLETE
Definition: QuestDef.h:145
@ QUEST_STATUS_COMPLETE
Definition: QuestDef.h:143
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:42
#define RegisterCreatureAI(ai_name)
Definition: ScriptMgr.h:1380
#define RegisterSpellScript(spell_script)
Definition: ScriptMgr.h:1369
void AddGossipItemFor(Player *player, GossipOptionNpc optionNpc, std::string text, uint32 sender, uint32 action)
void SendGossipMenuFor(Player *player, uint32 npcTextID, ObjectGuid const &guid)
void ClearGossipMenuFor(Player *player)
void InitGossipMenuFor(Player *player, uint32 menuId)
void CloseGossipMenuFor(Player *player)
@ GOSSIP_SENDER_MAIN
@ GOSSIP_ACTION_INFO_DEF
SpellEffIndex
Definition: SharedDefines.h:29
@ EFFECT_1
Definition: SharedDefines.h:31
@ EFFECT_0
Definition: SharedDefines.h:30
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_KILL_CREDIT2
@ FACTION_SCARLET_CRUSADE_2
@ FACTION_UNDEAD_SCOURGE_2
@ FACTION_FRIENDLY
@ FACTION_MONSTER
@ FACTION_CREATURE
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_DUMMY
#define sSpellMgr
Definition: SpellMgr.h:849
#define SpellEffectFn(F, I, N)
Definition: SpellScript.h:842
#define AuraEffectApplyFn(F, I, N, M)
Definition: SpellScript.h:2029
#define ENSURE_AI(a, b)
Definition: UnitAI.h:29
@ MOVE_RUN
Definition: UnitDefines.h:118
@ REACT_DEFENSIVE
Definition: UnitDefines.h:507
@ REACT_PASSIVE
Definition: UnitDefines.h:506
@ REACT_AGGRESSIVE
Definition: UnitDefines.h:508
@ UNIT_STAND_STATE_KNEEL
Definition: UnitDefines.h:50
@ UNIT_STAND_STATE_STAND
Definition: UnitDefines.h:42
@ UNIT_NPC_FLAG_SPELLCLICK
Definition: UnitDefines.h:321
DamageEffectType
Definition: UnitDefines.h:131
@ UNIT_FLAG_CAN_SWIM
Definition: UnitDefines.h:159
static constexpr uint8 const EyeOfAcherusPathSize
Definition: chapter1.cpp:424
Says_VBM
Definition: chapter1.cpp:538
@ SAY_DUEL
Definition: chapter1.cpp:539
GiftOfTheHarvester
Definition: chapter1.cpp:1091
@ SPELL_GHOUL_TRANFORM
Definition: chapter1.cpp:1092
@ SPELL_GHOST_TRANSFORM
Definition: chapter1.cpp:1093
HorseSeats
Definition: chapter1.cpp:867
@ SEAT_ID_0
Definition: chapter1.cpp:868
#define GCD_CAST
Definition: chapter1.cpp:46
void AddSC_the_scarlet_enclave_c1()
Definition: chapter1.cpp:1310
Paths_VBN
Definition: chapter1.cpp:548
@ PATH_DEATH_KNIGHT_INITIATE3
Definition: chapter1.cpp:551
@ PATH_DEATH_KNIGHT_INITIATE8
Definition: chapter1.cpp:556
@ PATH_DEATH_KNIGHT_INITIATE4
Definition: chapter1.cpp:552
@ PATH_DEATH_KNIGHT_INITIATE7
Definition: chapter1.cpp:555
@ PATH_DEATH_KNIGHT_INITIATE5
Definition: chapter1.cpp:553
@ PATH_DEATH_KNIGHT_INITIATE6
Definition: chapter1.cpp:554
@ PATH_DEATH_KNIGHT_INITIATE2
Definition: chapter1.cpp:550
@ PATH_DEATH_KNIGHT_INITIATE
Definition: chapter1.cpp:549
Misc_VBN
Definition: chapter1.cpp:543
@ QUEST_DEATH_CHALLENGE
Definition: chapter1.cpp:544
Spells_DKI
Definition: chapter1.cpp:529
@ SPELL_DUEL_FLAG
Definition: chapter1.cpp:533
@ SPELL_GROVEL
Definition: chapter1.cpp:534
@ SPELL_DUEL
Definition: chapter1.cpp:530
@ SPELL_DUEL_VICTORY
Definition: chapter1.cpp:532
Runeforging
Definition: chapter1.cpp:1128
@ QUEST_RUNEFORGING
Definition: chapter1.cpp:1130
@ SPELL_RUNEFORGING_CREDIT
Definition: chapter1.cpp:1129
SalanarTheHorseman
Definition: chapter1.cpp:812
@ SALANAR_SAY
Definition: chapter1.cpp:813
@ SPELL_EFFECT_STOLEN_HORSE
Definition: chapter1.cpp:815
@ QUEST_INTO_REALM_OF_SHADOWS
Definition: chapter1.cpp:814
@ SPELL_REALM_OF_SHADOWS
Definition: chapter1.cpp:819
@ SPELL_DELIVER_STOLEN_HORSE
Definition: chapter1.cpp:816
@ SPELL_CALL_DARK_RIDER
Definition: chapter1.cpp:817
@ SPELL_EFFECT_OVERTAKE
Definition: chapter1.cpp:818
UnworthyInitiatePhase
Definition: chapter1.cpp:68
@ PHASE_TO_ATTACK
Definition: chapter1.cpp:72
@ PHASE_EQUIPING
Definition: chapter1.cpp:71
@ PHASE_TO_EQUIP
Definition: chapter1.cpp:70
@ PHASE_CHAINED
Definition: chapter1.cpp:69
@ PHASE_ATTACKING
Definition: chapter1.cpp:73
TheGiftThatKeepsOnGiving
Definition: chapter1.cpp:975
@ SAY_LINE_0
Definition: chapter1.cpp:976
@ NPC_GHOSTS
Definition: chapter1.cpp:979
@ NPC_GHOULS
Definition: chapter1.cpp:978
EyeOfAcherusMisc
Definition: chapter1.cpp:406
@ SPELL_EYE_OF_ACHERUS_VISUAL
Definition: chapter1.cpp:408
@ SAY_LAUNCH_TOWARDS_DESTINATION
Definition: chapter1.cpp:418
@ EVENT_GRANT_CONTROL
Definition: chapter1.cpp:416
@ SPELL_THE_EYE_OF_ACHERUS
Definition: chapter1.cpp:407
@ EVENT_LAUNCH_TOWARDS_DESTINATION
Definition: chapter1.cpp:415
@ SPELL_ROOT_SELF
Definition: chapter1.cpp:411
@ EVENT_ANNOUNCE_LAUNCH_TO_DESTINATION
Definition: chapter1.cpp:413
@ SAY_EYE_UNDER_CONTROL
Definition: chapter1.cpp:419
@ SPELL_EYE_OF_ACHERUS_FLIGHT_BOOST
Definition: chapter1.cpp:409
@ SPELL_EYE_OF_ACHERUS_FLIGHT
Definition: chapter1.cpp:410
@ POINT_NEW_AVALON
Definition: chapter1.cpp:421
@ EVENT_UNROOT
Definition: chapter1.cpp:414
G3D::Vector3 const EyeOfAcherusPath[EyeOfAcherusPathSize]
Definition: chapter1.cpp:425
uint32 acherus_soul_prison[12]
Definition: chapter1.cpp:76
uint32 acherus_unworthy_initiate[5]
Definition: chapter1.cpp:92
DarkRiderOfAcherus
Definition: chapter1.cpp:739
@ SAY_DARK_RIDER
Definition: chapter1.cpp:740
@ SPELL_DESPAWN_HORSE
Definition: chapter1.cpp:746
@ EVENT_DESPAWN_HORSE
Definition: chapter1.cpp:743
@ EVENT_START_MOVING
Definition: chapter1.cpp:742
@ EVENT_END_SCRIPT
Definition: chapter1.cpp:744
HearthglenCrusaderPaths
Definition: chapter1.cpp:1163
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN12
Definition: chapter1.cpp:1175
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN3
Definition: chapter1.cpp:1166
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN16
Definition: chapter1.cpp:1179
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN26
Definition: chapter1.cpp:1189
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN15
Definition: chapter1.cpp:1178
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN28
Definition: chapter1.cpp:1191
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN29
Definition: chapter1.cpp:1192
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN
Definition: chapter1.cpp:1164
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN17
Definition: chapter1.cpp:1180
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN24
Definition: chapter1.cpp:1187
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN6
Definition: chapter1.cpp:1169
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN8
Definition: chapter1.cpp:1171
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN34
Definition: chapter1.cpp:1197
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN22
Definition: chapter1.cpp:1185
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN30
Definition: chapter1.cpp:1193
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN7
Definition: chapter1.cpp:1170
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN31
Definition: chapter1.cpp:1194
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN25
Definition: chapter1.cpp:1188
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN5
Definition: chapter1.cpp:1168
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN11
Definition: chapter1.cpp:1174
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN10
Definition: chapter1.cpp:1173
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN41
Definition: chapter1.cpp:1204
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN14
Definition: chapter1.cpp:1177
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN33
Definition: chapter1.cpp:1196
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN20
Definition: chapter1.cpp:1183
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN19
Definition: chapter1.cpp:1182
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN4
Definition: chapter1.cpp:1167
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN18
Definition: chapter1.cpp:1181
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN37
Definition: chapter1.cpp:1200
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN21
Definition: chapter1.cpp:1184
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN9
Definition: chapter1.cpp:1172
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN39
Definition: chapter1.cpp:1202
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN36
Definition: chapter1.cpp:1199
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN27
Definition: chapter1.cpp:1190
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN40
Definition: chapter1.cpp:1203
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN32
Definition: chapter1.cpp:1195
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN13
Definition: chapter1.cpp:1176
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN38
Definition: chapter1.cpp:1201
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN2
Definition: chapter1.cpp:1165
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN23
Definition: chapter1.cpp:1186
@ PATH_HEARTHGLEN_CRUSADER_DESPAWN35
Definition: chapter1.cpp:1198
UnworthyInitiate
Definition: chapter1.cpp:49
@ SPELL_DEATH_COIL
Definition: chapter1.cpp:56
@ SPELL_PLAGUE_STRIKE
Definition: chapter1.cpp:54
@ EVENT_PLAGUE_STRIKE
Definition: chapter1.cpp:62
@ SPELL_BLOOD_STRIKE
Definition: chapter1.cpp:55
@ SAY_EVENT_START
Definition: chapter1.cpp:58
@ SAY_EVENT_ATTACK
Definition: chapter1.cpp:59
@ SPELL_DK_INITIATE_VISUAL
Definition: chapter1.cpp:51
@ EVENT_ICY_TOUCH
Definition: chapter1.cpp:61
@ EVENT_BLOOD_STRIKE
Definition: chapter1.cpp:63
@ SPELL_ICY_TOUCH
Definition: chapter1.cpp:53
@ SPELL_SOUL_PRISON_CHAIN
Definition: chapter1.cpp:50
@ EVENT_DEATH_COIL
Definition: chapter1.cpp:64
HookList< EffectApplyHandler > AfterEffectApply
Definition: SpellScript.h:2028
Unit * GetCaster() const
Unit * GetTarget() const
void Reset() override
Definition: CombatAI.cpp:62
void UpdateAI(uint32 diff) override
Definition: CombatAI.cpp:91
virtual void MoveInLineOfSight(Unit *)
Definition: CreatureAI.cpp:122
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
Definition: CreatureAI.cpp:219
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:56
virtual void JustAppeared()
Definition: CreatureAI.cpp:194
bool UpdateVictim()
Definition: CreatureAI.cpp:245
void AttackStart(Unit *victim) override
== Triggered Actions Requested ==================
Definition: CreatureAI.cpp:328
Creature *const me
Definition: CreatureAI.h:61
int8 GetOriginalEquipmentId() const
Definition: Creature.h:240
void SetImmuneToPC(bool apply) override
Definition: Creature.h:170
uint32 m_spells[MAX_CREATURE_SPELLS]
Definition: Creature.h:302
void LoadEquipment(int8 id=1, bool force=false)
Definition: Creature.cpp:1946
void SetDisplayFromModel(uint32 modelIdx)
Definition: Creature.cpp:3413
void SetReactState(ReactStates st)
Definition: Creature.h:160
float m_SightDistance
Definition: Creature.h:412
void SetCurrentEquipmentId(uint8 id)
Definition: Creature.h:242
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Definition: Creature.cpp:2415
float m_CombatDistance
Definition: Creature.h:412
void SetTarget(ObjectGuid const &guid) override
Definition: Creature.cpp:3419
void ExitVehicle(Position const *exitPosition=nullptr) override
Definition: Creature.cpp:3676
uint8 GetCurrentEquipmentId() const
Definition: Creature.h:241
uint32 ExecuteEvent()
Definition: EventMap.cpp:73
void Update(uint32 time)
Definition: EventMap.h:56
void DelayEvents(Milliseconds delay)
Definition: EventMap.cpp:96
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition: EventMap.cpp:36
void Reset()
Definition: EventMap.cpp:21
GameObject *const me
Definition: GameObjectAI.h:50
void ResetDoorOrButton()
Difficulty GetDifficultyID() const
Definition: Map.h:324
void LaunchMoveSpline(std::function< void(Movement::MoveSplineInit &init)> &&initializer, uint32 id=0, MovementGeneratorPriority priority=MOTION_PRIORITY_NORMAL, MovementGeneratorType type=EFFECT_MOTION_TYPE)
void MoveChase(Unit *target, Optional< ChaseRange > dist={}, Optional< ChaseAngle > angle={})
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
bool IsEmpty() const
Definition: ObjectGuid.h:319
void Clear()
Definition: ObjectGuid.h:286
static Creature * ToCreature(Object *o)
Definition: Object.h:219
TypeID GetTypeId() const
Definition: Object.h:173
uint32 GetEntry() const
Definition: Object.h:161
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:159
static Player * ToPlayer(Object *o)
Definition: Object.h:213
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition: Player.cpp:16050
uint32 GetGossipTextId(uint32 menuId, WorldObject *source)
Definition: Player.cpp:14367
std::unique_ptr< PlayerMenu > PlayerTalkClass
Definition: Player.h:2380
uint32 GetGossipMenuForSource(WorldObject const *source) const
Definition: Player.cpp:14389
float GetMaxRange(bool positive=false, WorldObject *caster=nullptr, Spell *spell=nullptr) const
Definition: SpellInfo.cpp:3768
uint32 const Id
Definition: SpellInfo.h:325
float GetMinRange(bool positive=false) const
Definition: SpellInfo.cpp:3761
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Definition: SpellScript.h:162
Creature * GetHitCreature() const
Unit * GetCaster() const
HookList< EffectHandler > OnEffectHit
Definition: SpellScript.h:839
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
Definition: SpellScript.h:840
Spell * GetSpell() const
Definition: SpellScript.h:987
Unit * GetOriginalCaster() const
bool DoSpellAttackIfReady(uint32 spellId)
Definition: UnitAI.cpp:61
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition: UnitAI.h:159
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition: UnitAI.cpp:180
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:89
Definition: Unit.h:627
void EnterVehicle(Unit *base, int8 seatId=-1)
Definition: Unit.cpp:12118
bool IsVehicle() const
Definition: Unit.h:743
Vehicle * GetVehicle() const
Definition: Unit.h:1713
void RemoveGameObject(GameObject *gameObj, bool del)
Definition: Unit.cpp:5238
void SetStandState(UnitStandStateType state, uint32 animKitID=0)
Definition: Unit.cpp:10100
void RestoreFaction()
Definition: Unit.cpp:11417
bool IsWithinCombatRange(Unit const *obj, float dist2compare) const
Definition: Unit.cpp:635
void SetFaction(uint32 faction) override
Definition: Unit.h:859
ObjectGuid GetOwnerGUID() const override
Definition: Unit.h:1170
Unit * GetCharmer() const
Definition: Unit.h:1188
Unit * getAttackerForHelper() const
Definition: Unit.cpp:5647
MotionMaster * GetMotionMaster()
Definition: Unit.h:1652
bool IsFullHealth() const
Definition: Unit.h:779
void RemoveNpcFlag(NPCFlags flags)
Definition: Unit.h:983
TempSummon * ToTempSummon()
Definition: Unit.h:1756
CharmInfo * GetCharmInfo()
Definition: Unit.h:1221
void SetUninteractible(bool apply)
Definition: Unit.cpp:8147
Unit * EnsureVictim() const
Definition: Unit.h:717
Unit * GetCharmerOrOwner() const
Definition: Unit.h:1200
uint32 GetDisplayId() const
Definition: Unit.h:1567
bool HealthBelowPct(int32 pct) const
Definition: Unit.h:780
bool Attack(Unit *victim, bool meleeAttack)
Definition: Unit.cpp:5670
uint64 GetHealth() const
Definition: Unit.h:776
void SetNpcFlag(NPCFlags flags)
Definition: Unit.h:982
void EngageWithTarget(Unit *who)
Definition: Unit.cpp:8077
void GetAllMinionsByEntry(std::list< TempSummon * > &Minions, uint32 entry)
Definition: Unit.cpp:6235
Unit * GetVictim() const
Definition: Unit.h:715
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition: Unit.cpp:4664
bool IsControlledByPlayer() const
Definition: Unit.h:1193
void SetUnitFlag(UnitFlags flags)
Definition: Unit.h:833
bool IsFlying() const
Definition: Unit.h:1735
Vehicle * GetVehicleKit() const
Definition: Unit.h:1711
bool AttackStop()
Definition: Unit.cpp:5781
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:3831
bool IsInCombat() const
Definition: Unit.h:1043
void RemoveUnitFlag(UnitFlags flags)
Definition: Unit.h:834
bool HasEmptySeat(int8 seatId) const
Checks if vehicle's seat specified by 'seatId' is empty.
Definition: Vehicle.cpp:270
GameObject * FindNearestGameObject(uint32 entry, float range, bool spawnedOnly=true) const
Definition: Object.cpp:2170
Map * GetMap() const
Definition: Object.h:624
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
Unit * GetOwner() const
Definition: Object.cpp:2229
float GetDistance2d(WorldObject const *obj) const
Definition: Object.cpp:1096
void GetContactPoint(WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
Definition: Object.cpp:3430
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition: Object.cpp:2148
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition: Object.cpp:1147
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition: Object.cpp:1142
GameObjectAI * GetAI(GameObject *go) const override
Definition: chapter1.cpp:350
CreatureAI * GetAI(Creature *creature) const override
Definition: chapter1.cpp:728
CreatureAI * GetAI(Creature *creature) const override
Definition: chapter1.cpp:987
CreatureAI * GetAI(Creature *creature) const override
Definition: chapter1.cpp:929
CreatureAI * GetAI(Creature *creature) const override
Definition: chapter1.cpp:860
CreatureAI * GetAI(Creature *creature) const override
Definition: chapter1.cpp:304
CreatureAI * GetAI(Creature *creature) const override
Definition: chapter1.cpp:293
bool Validate(SpellInfo const *) override
Definition: chapter1.cpp:1143
void HandleDummy(SpellEffIndex)
Definition: chapter1.cpp:1149
void HandleScriptEffect(SpellEffIndex)
Definition: chapter1.cpp:359
void HandleScriptEffect(SpellEffIndex)
Definition: chapter1.cpp:901
void Register() override
Definition: chapter1.cpp:914
bool Validate(SpellInfo const *) override
Definition: chapter1.cpp:896
void HandleScriptEffect(SpellEffIndex)
Definition: chapter1.cpp:1108
bool Validate(SpellInfo const *) override
Definition: chapter1.cpp:1099
void Register() override
Definition: chapter1.cpp:1117
void AfterApply(AuraEffect const *, AuraEffectHandleModes)
Definition: chapter1.cpp:874
void Register() override
Definition: chapter1.cpp:887
void apply(T *val)
Definition: ByteConverter.h:41
std::vector< Vector3 > PointsArray
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
void InitPossessCreateSpells()
Definition: CharmInfo.cpp:74
constexpr float GetPositionZ() const
Definition: Position.h:78
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
bool OnGossipHello(Player *player) override
Definition: chapter1.cpp:336
void UpdateAI(uint32 diff) override
Definition: chapter1.cpp:766
npc_dark_rider_of_acherus(Creature *creature)
Definition: chapter1.cpp:751
void Reset() override
Definition: chapter1.cpp:761
void JustAppeared() override
Definition: chapter1.cpp:753
void SpellHitTarget(WorldObject *target, SpellInfo const *spellInfo) override
Definition: chapter1.cpp:795
void DamageTaken(Unit *pDoneBy, uint32 &uiDamage, DamageEffectType, SpellInfo const *) override
Definition: chapter1.cpp:603
bool OnGossipSelect(Player *player, uint32, uint32 gossipListId) override
Definition: chapter1.cpp:667
void SpellHit(WorldObject *caster, SpellInfo const *spellInfo) override
Definition: chapter1.cpp:593
void WaypointPathEnded(uint32, uint32 pathId) override
Definition: chapter1.cpp:708
npc_dkc1_gothikAI(Creature *creature)
Definition: chapter1.cpp:994
void MoveInLineOfSight(Unit *who) override
Definition: chapter1.cpp:996
void UpdateAI(uint32 diff) override
Definition: chapter1.cpp:459
npc_eye_of_acherus(Creature *creature)
Definition: chapter1.cpp:435
void MovementInform(uint32 movementType, uint32 pointId) override
Definition: chapter1.cpp:504
void OnCharmed(bool apply) override
Definition: chapter1.cpp:450
void InitializeAI() override
Definition: chapter1.cpp:443
void WaypointPathEnded(uint32, uint32 pathId) override
Definition: chapter1.cpp:1254
npc_hearthglen_crusader(Creature *creature)
Definition: chapter1.cpp:1211
void UpdateAI(uint32) override
Definition: chapter1.cpp:1245
void AttackStart(Unit *who) override
== Triggered Actions Requested ==================
Definition: chapter1.cpp:1225
void JustEngagedWith(Unit *) override
Definition: chapter1.cpp:938
npc_ros_dark_riderAI(Creature *creature)
Definition: chapter1.cpp:936
void JustDied(Unit *killer) override
Definition: chapter1.cpp:956
bool CanAIAttack(Unit const *target) const override
Definition: chapter1.cpp:1084
void UpdateAI(uint32) override
Definition: chapter1.cpp:1062
npc_scarlet_ghoul(Creature *creature)
Definition: chapter1.cpp:1028
void JustAppeared() override
Definition: chapter1.cpp:1033
void FindMinions(Unit *owner)
Definition: chapter1.cpp:1042
void EventStart(Creature *anchor, Player *target)
Definition: chapter1.cpp:170
void MovementInform(uint32 type, uint32 id) override
Definition: chapter1.cpp:152
void SetGUID(ObjectGuid const &guid, int32) override
Definition: chapter1.cpp:315