Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_warlord_najentus.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
7
SDName: Boss_Warlord_Najentus
8
SD%Complete: 95
9
SDComment:
10
SDCategory: Black Temple
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
black_temple.h
"
16
#include "
Player.h
"
17
#include "
SpellInfo.h
"
18
19
enum
Yells
20
{
21
SAY_AGGRO
= 0,
22
SAY_NEEDLE
= 1,
23
SAY_SLAY
= 2,
24
SAY_SPECIAL
= 3,
25
SAY_ENRAGE
= 4,
26
SAY_DEATH
= 5
27
};
28
29
enum
Spells
30
{
31
SPELL_NEEDLE_SPINE
= 39992,
32
SPELL_TIDAL_BURST
= 39878,
33
SPELL_TIDAL_SHIELD
= 39872,
34
SPELL_IMPALING_SPINE
= 39837,
35
SPELL_CREATE_NAJENTUS_SPINE
= 39956,
36
SPELL_HURL_SPINE
= 39948,
37
SPELL_BERSERK
= 26662
38
};
39
40
enum
GameObjects
41
{
42
GOBJECT_SPINE
= 185584
43
};
44
45
enum
Events
46
{
47
EVENT_BERSERK
= 1,
48
EVENT_YELL
= 2,
49
EVENT_NEEDLE
= 3,
50
EVENT_SPINE
= 4,
51
EVENT_SHIELD
= 5
52
};
53
54
enum
Misc
55
{
56
GCD_CAST
= 1,
57
GCD_YELL
= 2
58
};
59
60
class
boss_najentus
:
public
CreatureScript
61
{
62
public
:
63
boss_najentus
() :
CreatureScript
(
"boss_najentus"
) { }
64
65
struct
boss_najentusAI
:
public
ScriptedAI
66
{
67
boss_najentusAI
(
Creature
* creature) :
ScriptedAI
(creature)
68
{
69
instance
= creature->
GetInstanceScript
();
70
SpineTargetGUID
= 0;
71
}
72
73
void
Reset
()
OVERRIDE
74
{
75
events
.Reset();
76
77
SpineTargetGUID
= 0;
78
79
if
(
instance
)
80
instance
->SetBossState(
DATA_HIGH_WARLORD_NAJENTUS
,
NOT_STARTED
);
81
}
82
83
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
84
{
85
Talk
(
SAY_SLAY
);
86
events
.DelayEvents(5000,
GCD_YELL
);
87
}
88
89
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
90
{
91
if
(
instance
)
92
instance
->SetBossState(
DATA_HIGH_WARLORD_NAJENTUS
,
DONE
);
93
94
Talk
(
SAY_DEATH
);
95
}
96
97
void
SpellHit
(
Unit
*
/*caster*/
,
const
SpellInfo
* spell)
OVERRIDE
98
{
99
if
(spell->Id ==
SPELL_HURL_SPINE
&&
me
->HasAura(
SPELL_TIDAL_SHIELD
))
100
{
101
me
->RemoveAurasDueToSpell(
SPELL_TIDAL_SHIELD
);
102
DoCast
(
me
,
SPELL_TIDAL_BURST
,
true
);
103
ResetTimer
();
104
}
105
}
106
107
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
108
{
109
if
(
instance
)
110
instance
->SetBossState(
DATA_HIGH_WARLORD_NAJENTUS
,
IN_PROGRESS
);
111
112
Talk
(
SAY_AGGRO
);
113
DoZoneInCombat
();
114
events
.ScheduleEvent(
EVENT_BERSERK
, 480000,
GCD_CAST
);
115
events
.ScheduleEvent(
EVENT_YELL
, 45000 + (rand()%76)*1000,
GCD_YELL
);
116
ResetTimer
();
117
}
118
119
bool
RemoveImpalingSpine
()
120
{
121
if
(!
SpineTargetGUID
)
122
return
false
;
123
124
Unit
* target =
Unit::GetUnit
(*
me
,
SpineTargetGUID
);
125
if
(target && target->
HasAura
(
SPELL_IMPALING_SPINE
))
126
target->
RemoveAurasDueToSpell
(
SPELL_IMPALING_SPINE
);
127
SpineTargetGUID
=0;
128
return
true
;
129
}
130
131
void
ResetTimer
(
uint32
inc = 0)
132
{
133
events
.RescheduleEvent(
EVENT_NEEDLE
, 10000 + inc,
GCD_CAST
);
134
events
.RescheduleEvent(
EVENT_SPINE
, 20000 + inc,
GCD_CAST
);
135
events
.RescheduleEvent(
EVENT_SHIELD
, 60000 + inc);
136
}
137
138
void
UpdateAI
(
uint32
diff)
OVERRIDE
139
{
140
if
(!
UpdateVictim
())
141
return
;
142
143
events
.Update(diff);
144
145
while
(
uint32
eventId =
events
.ExecuteEvent())
146
{
147
switch
(eventId)
148
{
149
case
EVENT_SHIELD
:
150
DoCast
(
me
,
SPELL_TIDAL_SHIELD
,
true
);
151
ResetTimer
(45000);
152
break
;
153
case
EVENT_BERSERK
:
154
Talk
(
SAY_ENRAGE
);
155
DoCast
(
me
,
SPELL_BERSERK
,
true
);
156
events
.DelayEvents(15000,
GCD_YELL
);
157
break
;
158
case
EVENT_SPINE
:
159
{
160
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1);
161
if
(!target) target =
me
->GetVictim();
162
if
(target)
163
{
164
DoCast
(target,
SPELL_IMPALING_SPINE
,
true
);
165
SpineTargetGUID
= target->
GetGUID
();
166
//must let target summon, otherwise you cannot click the spine
167
target->
SummonGameObject
(
GOBJECT_SPINE
, target->
GetPositionX
(), target->
GetPositionY
(), target->
GetPositionZ
(),
me
->GetOrientation(), 0, 0, 0, 0, 30);
168
Talk
(
SAY_NEEDLE
);
169
events
.DelayEvents(1500,
GCD_CAST
);
170
events
.DelayEvents(15000,
GCD_YELL
);
171
}
172
events
.ScheduleEvent(
EVENT_SPINE
, 21000,
GCD_CAST
);
173
return
;
174
}
175
case
EVENT_NEEDLE
:
176
{
177
//DoCast(me, SPELL_NEEDLE_SPINE, true);
178
std::list<Unit*> targets;
179
SelectTargetList
(targets, 3,
SELECT_TARGET_RANDOM
, 80,
true
);
180
for
(std::list<Unit*>::const_iterator i = targets.begin(); i != targets.end(); ++i)
181
DoCast
(*i, 39835,
true
);
182
events
.ScheduleEvent(
EVENT_NEEDLE
, std::rand() % 25000 + 15000,
GCD_CAST
);
183
events
.DelayEvents(1500,
GCD_CAST
);
184
return
;
185
}
186
case
EVENT_YELL
:
187
Talk
(
SAY_SPECIAL
);
188
events
.ScheduleEvent(
EVENT_YELL
, std::rand() % 100000 + 25000,
GCD_YELL
);
189
events
.DelayEvents(15000,
GCD_YELL
);
190
break
;
191
}
192
}
193
194
DoMeleeAttackIfReady
();
195
}
196
private
:
197
InstanceScript
*
instance
;
198
EventMap
events
;
199
200
uint64
SpineTargetGUID
;
201
};
202
203
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
204
{
205
return
new
boss_najentusAI
(creature);
206
}
207
};
208
209
class
go_najentus_spine
:
public
GameObjectScript
210
{
211
public
:
212
go_najentus_spine
() :
GameObjectScript
(
"go_najentus_spine"
) { }
213
214
bool
OnGossipHello
(
Player
* player,
GameObject
* go)
OVERRIDE
215
{
216
if
(
InstanceScript
* instance = go->GetInstanceScript())
217
if
(
Creature
* Najentus =
ObjectAccessor::GetCreature
(*go, instance->GetData64(
DATA_HIGH_WARLORD_NAJENTUS
)))
218
if
(
CAST_AI
(
boss_najentus::boss_najentusAI
, Najentus->AI())->RemoveImpalingSpine())
219
{
220
player->CastSpell(player,
SPELL_CREATE_NAJENTUS_SPINE
,
true
);
221
go->Delete();
222
}
223
return
true
;
224
}
225
};
226
227
void
AddSC_boss_najentus
()
228
{
229
new
boss_najentus
();
230
new
go_najentus_spine
();
231
}
Spells
Spells
Definition
BattlegroundIC.h:645
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
uint64
std::uint64_t uint64
Definition
Define.h:76
IN_PROGRESS
@ IN_PROGRESS
Definition
InstanceScript.h:47
DONE
@ DONE
Definition
InstanceScript.h:49
NOT_STARTED
@ NOT_STARTED
Definition
InstanceScript.h:46
Player.h
ScriptMgr.h
ScriptedCreature.h
CAST_AI
#define CAST_AI(a, b)
Definition
ScriptedCreature.h:14
SpellInfo.h
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
Events
Events
Definition
alterac_valley.cpp:40
black_temple.h
DATA_HIGH_WARLORD_NAJENTUS
@ DATA_HIGH_WARLORD_NAJENTUS
Definition
black_temple.h:16
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SAY_ENRAGE
@ SAY_ENRAGE
Definition
boss_curator.cpp:21
EVENT_SHIELD
@ EVENT_SHIELD
Definition
boss_faction_champions.cpp:220
SPELL_BERSERK
#define SPELL_BERSERK
Definition
boss_four_horsemen.cpp:62
SAY_SPECIAL
@ SAY_SPECIAL
Definition
boss_majordomo_executus.cpp:25
Misc
Misc
Definition
boss_occuthar.cpp:37
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_occuthar.cpp:31
GOBJECT_SPINE
@ GOBJECT_SPINE
Definition
boss_warlord_najentus.cpp:42
GCD_CAST
@ GCD_CAST
Definition
boss_warlord_najentus.cpp:56
GCD_YELL
@ GCD_YELL
Definition
boss_warlord_najentus.cpp:57
SAY_DEATH
@ SAY_DEATH
Definition
boss_warlord_najentus.cpp:26
SAY_NEEDLE
@ SAY_NEEDLE
Definition
boss_warlord_najentus.cpp:22
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_warlord_najentus.cpp:21
SAY_SPECIAL
@ SAY_SPECIAL
Definition
boss_warlord_najentus.cpp:24
SAY_SLAY
@ SAY_SLAY
Definition
boss_warlord_najentus.cpp:23
SAY_ENRAGE
@ SAY_ENRAGE
Definition
boss_warlord_najentus.cpp:25
SPELL_HURL_SPINE
@ SPELL_HURL_SPINE
Definition
boss_warlord_najentus.cpp:36
SPELL_IMPALING_SPINE
@ SPELL_IMPALING_SPINE
Definition
boss_warlord_najentus.cpp:34
SPELL_NEEDLE_SPINE
@ SPELL_NEEDLE_SPINE
Definition
boss_warlord_najentus.cpp:31
SPELL_CREATE_NAJENTUS_SPINE
@ SPELL_CREATE_NAJENTUS_SPINE
Definition
boss_warlord_najentus.cpp:35
SPELL_TIDAL_SHIELD
@ SPELL_TIDAL_SHIELD
Definition
boss_warlord_najentus.cpp:33
SPELL_BERSERK
@ SPELL_BERSERK
Definition
boss_warlord_najentus.cpp:37
SPELL_TIDAL_BURST
@ SPELL_TIDAL_BURST
Definition
boss_warlord_najentus.cpp:32
EVENT_SPINE
@ EVENT_SPINE
Definition
boss_warlord_najentus.cpp:50
EVENT_SHIELD
@ EVENT_SHIELD
Definition
boss_warlord_najentus.cpp:51
EVENT_YELL
@ EVENT_YELL
Definition
boss_warlord_najentus.cpp:48
EVENT_NEEDLE
@ EVENT_NEEDLE
Definition
boss_warlord_najentus.cpp:49
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_warlord_najentus.cpp:47
AddSC_boss_najentus
void AddSC_boss_najentus()
Definition
boss_warlord_najentus.cpp:227
GCD_CAST
#define GCD_CAST
Definition
chapter1.cpp:23
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::DoZoneInCombat
void DoZoneInCombat(Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
Definition
CreatureAI.cpp:33
CreatureAI::Talk
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
Definition
CreatureAI.cpp:28
CreatureAI::UpdateVictim
bool UpdateVictim()
Definition
CreatureAI.cpp:192
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
EventMap
Definition
CreatureAIImpl.h:304
GameObject
Definition
GameObject.h:629
GameObjectScript::GameObjectScript
GameObjectScript(const char *name)
Definition
ScriptMgr.cpp:1442
InstanceScript
Definition
InstanceScript.h:123
ObjectAccessor::GetCreature
static Creature * GetCreature(WorldObject const &u, uint64 guid)
Definition
ObjectAccessor.cpp:209
Object::GetGUID
uint64 GetGUID() const
Definition
Object.h:119
Player
Definition
Player.h:1289
SpellInfo
Definition
SpellInfo.h:158
UnitAI::SelectTargetList
void SelectTargetList(std::list< Unit * > &targetList, uint32 num, SelectAggroTarget targetType, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition
UnitAI.cpp:71
UnitAI::DoMeleeAttackIfReady
void DoMeleeAttackIfReady()
Definition
UnitAI.cpp:28
UnitAI::DoCast
void DoCast(uint32 spellId)
Definition
UnitAI.cpp:110
UnitAI::SelectTarget
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition
UnitAI.cpp:66
Unit
Definition
Unit.h:1367
Unit::RemoveAurasDueToSpell
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition
UnitAuraState.cpp:532
Unit::HasAura
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
Definition
UnitAuraState.cpp:1182
Unit::GetUnit
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4895
WorldObject::GetInstanceScript
InstanceScript * GetInstanceScript()
Definition
Object.cpp:1612
WorldObject::SummonGameObject
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime)
Definition
Object.cpp:2729
boss_najentus
Definition
boss_warlord_najentus.cpp:61
boss_najentus::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_warlord_najentus.cpp:203
boss_najentus::boss_najentus
boss_najentus()
Definition
boss_warlord_najentus.cpp:63
go_najentus_spine
Definition
boss_warlord_najentus.cpp:210
go_najentus_spine::go_najentus_spine
go_najentus_spine()
Definition
boss_warlord_najentus.cpp:212
go_najentus_spine::OnGossipHello
bool OnGossipHello(Player *player, GameObject *go) OVERRIDE
Definition
boss_warlord_najentus.cpp:214
GameObjects
GameObjects
Definition
instance_blackrock_depths.cpp:30
Position::GetPositionZ
float GetPositionZ() const
Definition
Object.h:330
Position::GetPositionX
float GetPositionX() const
Definition
Object.h:328
Position::GetPositionY
float GetPositionY() const
Definition
Object.h:329
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
Yells
Definition
boss_illidan.cpp:256
boss_najentus::boss_najentusAI
Definition
boss_warlord_najentus.cpp:66
boss_najentus::boss_najentusAI::boss_najentusAI
boss_najentusAI(Creature *creature)
Definition
boss_warlord_najentus.cpp:67
boss_najentus::boss_najentusAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_warlord_najentus.cpp:89
boss_najentus::boss_najentusAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_warlord_najentus.cpp:83
boss_najentus::boss_najentusAI::events
EventMap events
Definition
boss_warlord_najentus.cpp:198
boss_najentus::boss_najentusAI::instance
InstanceScript * instance
Definition
boss_warlord_najentus.cpp:197
boss_najentus::boss_najentusAI::RemoveImpalingSpine
bool RemoveImpalingSpine()
Definition
boss_warlord_najentus.cpp:119
boss_najentus::boss_najentusAI::SpineTargetGUID
uint64 SpineTargetGUID
Definition
boss_warlord_najentus.cpp:200
boss_najentus::boss_najentusAI::ResetTimer
void ResetTimer(uint32 inc=0)
Definition
boss_warlord_najentus.cpp:131
boss_najentus::boss_najentusAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_warlord_najentus.cpp:138
boss_najentus::boss_najentusAI::SpellHit
void SpellHit(Unit *, const SpellInfo *spell) OVERRIDE
Definition
boss_warlord_najentus.cpp:97
boss_najentus::boss_najentusAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_warlord_najentus.cpp:107
boss_najentus::boss_najentusAI::Reset
void Reset() OVERRIDE
Definition
boss_warlord_najentus.cpp:73
src
server
scripts
Outland
BlackTemple
boss_warlord_najentus.cpp
Generated on
for Project SkyFire Core by
1.17.0