Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
pet_dk.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/*
7 * Ordered alphabetically using scriptname.
8 * Scriptnames of files in this file should be prefixed with "npc_pet_dk_".
9 */
10
11#include "ScriptMgr.h"
12#include "ScriptedCreature.h"
13#include "CombatAI.h"
14#include "Cell.h"
15#include "CellImpl.h"
16#include "GridNotifiers.h"
17#include "GridNotifiersImpl.h"
18
26
28{
29 public:
30 npc_pet_dk_ebon_gargoyle() : CreatureScript("npc_pet_dk_ebon_gargoyle") { }
31
33 {
34 npc_pet_dk_ebon_gargoyleAI(Creature* creature) : CasterAI(creature) { }
35
37 {
39 uint64 ownerGuid = me->GetOwnerGUID();
40 if (!ownerGuid)
41 return;
42
43 // Not needed to be despawned now
44 _despawnTimer = 0;
45 // Find victim of Summon Gargoyle spell
46 std::list<Unit*> targets;
49 me->VisitNearbyObject(30.0f, searcher);
50 for (std::list<Unit*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
51 if ((*iter)->GetAura(SPELL_DK_SUMMON_GARGOYLE_1, ownerGuid))
52 {
53 me->Attack((*iter), false);
54 break;
55 }
56 }
57
58 void JustDied(Unit* /*killer*/) OVERRIDE
59 {
60 // Stop Feeding Gargoyle when it dies
61 if (Unit* owner = me->GetOwner())
62 owner->RemoveAurasDueToSpell(SPELL_DK_SUMMON_GARGOYLE_2);
63 }
64
65 // Fly away when dismissed
66 void SpellHit(Unit* source, SpellInfo const* spell) OVERRIDE
67 {
68 if (spell->Id != SPELL_DK_DISMISS_GARGOYLE || !me->IsAlive())
69 return;
70
71 Unit* owner = me->GetOwner();
72 if (!owner || owner != source)
73 return;
74
75 // Stop Fighting
76 me->ApplyModFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE, true);
77
78 // Sanctuary
79 me->CastSpell(me, SPELL_DK_SANCTUARY, true);
80 me->SetReactState(REACT_PASSIVE);
81
83 // Fly Away
84 me->SetCanFly(true);
85 me->SetSpeed(MOVE_FLIGHT, 0.75f, true);
86 me->SetSpeed(MOVE_RUN, 0.75f, true);
87 float x = me->GetPositionX() + 20 * std::cos(me->GetOrientation());
88 float y = me->GetPositionY() + 20 * std::sin(me->GetOrientation());
89 float z = me->GetPositionZ() + 40;
90 me->GetMotionMaster()->Clear(false);
91 me->GetMotionMaster()->MovePoint(0, x, y, z);
92
93 // Despawn as soon as possible
95 }
96
98 {
99 if (_despawnTimer > 0)
100 {
101 if (_despawnTimer > diff)
102 _despawnTimer -= diff;
103 else
104 me->DespawnOrUnsummon();
105 return;
106 }
107
108 CasterAI::UpdateAI(diff);
109 }
110
111 private:
113 };
114
116 {
117 return new npc_pet_dk_ebon_gargoyleAI(creature);
118 }
119};
120
@ IN_MILLISECONDS
Definition Common.h:125
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
@ MOVE_FLIGHT
Definition Unit.h:561
@ MOVE_RUN
Definition Unit.h:556
@ REACT_PASSIVE
Definition Unit.h:1156
@ UNIT_FLAG_NON_ATTACKABLE
Definition Unit.h:626
@ UNIT_FIELD_FLAGS
void InitializeAI() OVERRIDE
Definition CombatAI.cpp:111
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition CombatAI.cpp:147
CasterAI(Creature *c)
Definition CombatAI.h:46
Creature *const me
Definition CreatureAI.h:56
CreatureScript(const char *name)
Definition Unit.h:1367
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition pet_dk.cpp:115
DeathKnightSpells
Definition pet_dk.cpp:20
@ SPELL_DK_SUMMON_GARGOYLE_2
Definition pet_dk.cpp:22
@ SPELL_DK_SUMMON_GARGOYLE_1
Definition pet_dk.cpp:21
@ SPELL_DK_SANCTUARY
Definition pet_dk.cpp:24
@ SPELL_DK_DISMISS_GARGOYLE
Definition pet_dk.cpp:23
void AddSC_deathknight_pet_scripts()
Definition pet_dk.cpp:121
void SpellHit(Unit *source, SpellInfo const *spell) OVERRIDE
Definition pet_dk.cpp:66
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition pet_dk.cpp:97