Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_sartura.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_Sartura
8
SD%Complete: 95
9
SDComment:
10
SDCategory: Temple of Ahn'Qiraj
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
16
enum
Sartura
17
{
18
SAY_AGGRO
= 0,
19
SAY_SLAY
= 1,
20
SAY_DEATH
= 2,
21
22
SPELL_WHIRLWIND
= 26083,
23
SPELL_ENRAGE
= 28747,
//Not sure if right ID.
24
SPELL_ENRAGEHARD
= 28798,
25
26
//Guard Spell
27
SPELL_WHIRLWINDADD
= 26038,
28
SPELL_KNOCKBACK
= 26027
29
};
30
31
class
boss_sartura
:
public
CreatureScript
32
{
33
public
:
34
boss_sartura
() :
CreatureScript
(
"boss_sartura"
) { }
35
36
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
37
{
38
return
new
boss_sarturaAI
(creature);
39
}
40
41
struct
boss_sarturaAI
:
public
ScriptedAI
42
{
43
boss_sarturaAI
(
Creature
* creature) :
ScriptedAI
(creature) { }
44
45
uint32
WhirlWind_Timer
;
46
uint32
WhirlWindRandom_Timer
;
47
uint32
WhirlWindEnd_Timer
;
48
uint32
AggroReset_Timer
;
49
uint32
AggroResetEnd_Timer
;
50
uint32
EnrageHard_Timer
;
51
52
bool
Enraged
;
53
bool
EnragedHard
;
54
bool
WhirlWind
;
55
bool
AggroReset
;
56
57
void
Reset
()
OVERRIDE
58
{
59
WhirlWind_Timer
= 30000;
60
WhirlWindRandom_Timer
= std::rand() % 7000 + 3000;
61
WhirlWindEnd_Timer
= 15000;
62
AggroReset_Timer
= std::rand() % 55000 + 45000;
63
AggroResetEnd_Timer
= 5000;
64
EnrageHard_Timer
= 10*60000;
65
66
WhirlWind
=
false
;
67
AggroReset
=
false
;
68
Enraged
=
false
;
69
EnragedHard
=
false
;
70
}
71
72
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
73
{
74
Talk
(
SAY_AGGRO
);
75
}
76
77
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
78
{
79
Talk
(
SAY_DEATH
);
80
}
81
82
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
83
{
84
Talk
(
SAY_SLAY
);
85
}
86
87
void
UpdateAI
(
uint32
diff)
OVERRIDE
88
{
89
//Return since we have no target
90
if
(!
UpdateVictim
())
91
return
;
92
93
if
(
WhirlWind
)
94
{
95
if
(
WhirlWindRandom_Timer
<= diff)
96
{
97
//Attack random Gamers
98
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1, 100.0f,
true
))
99
{
100
me
->AddThreat(target, 1.0f);
101
me
->TauntApply(target);
102
AttackStart
(target);
103
}
104
WhirlWindRandom_Timer
= std::rand() % 7000 + 3000;
105
}
else
WhirlWindRandom_Timer
-= diff;
106
107
if
(
WhirlWindEnd_Timer
<= diff)
108
{
109
WhirlWind
=
false
;
110
WhirlWind_Timer
= std::rand() % 40000 + 25000;
111
}
else
WhirlWindEnd_Timer
-= diff;
112
}
113
114
if
(!
WhirlWind
)
115
{
116
if
(
WhirlWind_Timer
<= diff)
117
{
118
DoCast
(
me
,
SPELL_WHIRLWIND
);
119
WhirlWind
=
true
;
120
WhirlWindEnd_Timer
= 15000;
121
}
else
WhirlWind_Timer
-= diff;
122
123
if
(
AggroReset_Timer
<= diff)
124
{
125
//Attack random Gamers
126
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1, 100.0f,
true
))
127
{
128
me
->AddThreat(target, 1.0f);
129
me
->TauntApply(target);
130
AttackStart
(target);
131
}
132
AggroReset
=
true
;
133
AggroReset_Timer
= std::rand() % 5000 + 2000;
134
}
else
AggroReset_Timer
-= diff;
135
136
if
(
AggroReset
)
137
{
138
if
(
AggroResetEnd_Timer
<= diff)
139
{
140
AggroReset
=
false
;
141
AggroResetEnd_Timer
= 5000;
142
AggroReset_Timer
= std::rand() % 45000 + 35000;
143
}
else
AggroResetEnd_Timer
-= diff;
144
}
145
146
//If she is 20% enrage
147
if
(!
Enraged
)
148
{
149
if
(!
HealthAbovePct
(20) && !
me
->IsNonMeleeSpellCasted(
false
))
150
{
151
DoCast
(
me
,
SPELL_ENRAGE
);
152
Enraged
=
true
;
153
}
154
}
155
156
//After 10 minutes hard enrage
157
if
(!
EnragedHard
)
158
{
159
if
(
EnrageHard_Timer
<= diff)
160
{
161
DoCast
(
me
,
SPELL_ENRAGEHARD
);
162
EnragedHard
=
true
;
163
}
else
EnrageHard_Timer
-= diff;
164
}
165
166
DoMeleeAttackIfReady
();
167
}
168
}
169
};
170
};
171
172
class
npc_sartura_royal_guard
:
public
CreatureScript
173
{
174
public
:
175
npc_sartura_royal_guard
() :
CreatureScript
(
"npc_sartura_royal_guard"
) { }
176
177
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
178
{
179
return
new
npc_sartura_royal_guardAI
(creature);
180
}
181
182
struct
npc_sartura_royal_guardAI
:
public
ScriptedAI
183
{
184
npc_sartura_royal_guardAI
(
Creature
* creature) :
ScriptedAI
(creature) { }
185
186
uint32
WhirlWind_Timer
;
187
uint32
WhirlWindRandom_Timer
;
188
uint32
WhirlWindEnd_Timer
;
189
uint32
AggroReset_Timer
;
190
uint32
AggroResetEnd_Timer
;
191
uint32
KnockBack_Timer
;
192
193
bool
WhirlWind
;
194
bool
AggroReset
;
195
196
void
Reset
()
OVERRIDE
197
{
198
WhirlWind_Timer
= 30000;
199
WhirlWindRandom_Timer
= std::rand() % 7000 + 3000;
200
WhirlWindEnd_Timer
= 15000;
201
AggroReset_Timer
= std::rand() % 55000 + 45000;
202
AggroResetEnd_Timer
= 5000;
203
KnockBack_Timer
= 10000;
204
205
WhirlWind
=
false
;
206
AggroReset
=
false
;
207
}
208
209
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
210
{
211
}
212
213
void
UpdateAI
(
uint32
diff)
OVERRIDE
214
{
215
//Return since we have no target
216
if
(!
UpdateVictim
())
217
return
;
218
219
if
(!
WhirlWind
&&
WhirlWind_Timer
<= diff)
220
{
221
DoCast
(
me
,
SPELL_WHIRLWINDADD
);
222
WhirlWind
=
true
;
223
WhirlWind_Timer
= std::rand() % 40000 + 25000;
224
WhirlWindEnd_Timer
= 15000;
225
}
else
WhirlWind_Timer
-= diff;
226
227
if
(
WhirlWind
)
228
{
229
if
(
WhirlWindRandom_Timer
<= diff)
230
{
231
//Attack random Gamers
232
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1, 100.0f,
true
))
233
{
234
me
->AddThreat(target, 1.0f);
235
me
->TauntApply(target);
236
AttackStart
(target);
237
}
238
239
WhirlWindRandom_Timer
= std::rand() % 7000 + 3000;
240
}
else
WhirlWindRandom_Timer
-= diff;
241
242
if
(
WhirlWindEnd_Timer
<= diff)
243
{
244
WhirlWind
=
false
;
245
}
else
WhirlWindEnd_Timer
-= diff;
246
}
247
248
if
(!
WhirlWind
)
249
{
250
if
(
AggroReset_Timer
<= diff)
251
{
252
//Attack random Gamers
253
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1, 100.0f,
true
))
254
{
255
me
->AddThreat(target, 1.0f);
256
me
->TauntApply(target);
257
AttackStart
(target);
258
}
259
260
AggroReset
=
true
;
261
AggroReset_Timer
= std::rand() % 5000 + 2000;
262
}
else
AggroReset_Timer
-= diff;
263
264
if
(
KnockBack_Timer
<= diff)
265
{
266
DoCast
(
me
,
SPELL_WHIRLWINDADD
);
267
KnockBack_Timer
= std::rand() % 20000 + 10000;
268
}
else
KnockBack_Timer
-= diff;
269
}
270
271
if
(
AggroReset
)
272
{
273
if
(
AggroResetEnd_Timer
<= diff)
274
{
275
AggroReset
=
false
;
276
AggroResetEnd_Timer
= 5000;
277
AggroReset_Timer
= std::rand() % 40000 + 30000;
278
}
else
AggroResetEnd_Timer
-= diff;
279
}
280
281
DoMeleeAttackIfReady
();
282
}
283
};
284
};
285
286
void
AddSC_boss_sartura
()
287
{
288
new
boss_sartura
();
289
new
npc_sartura_royal_guard
();
290
}
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
ScriptMgr.h
ScriptedCreature.h
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
SPELL_ENRAGE
@ SPELL_ENRAGE
Definition
alterac_valley.cpp:14
SPELL_WHIRLWIND
@ SPELL_WHIRLWIND
Definition
alterac_valley.cpp:15
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
SPELL_KNOCKBACK
@ SPELL_KNOCKBACK
Definition
boss_broodlord_lashlayer.cpp:21
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
Sartura
Sartura
Definition
boss_sartura.cpp:17
SAY_DEATH
@ SAY_DEATH
Definition
boss_sartura.cpp:20
SPELL_ENRAGE
@ SPELL_ENRAGE
Definition
boss_sartura.cpp:23
SPELL_WHIRLWINDADD
@ SPELL_WHIRLWINDADD
Definition
boss_sartura.cpp:27
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_sartura.cpp:18
SPELL_ENRAGEHARD
@ SPELL_ENRAGEHARD
Definition
boss_sartura.cpp:24
SAY_SLAY
@ SAY_SLAY
Definition
boss_sartura.cpp:19
SPELL_WHIRLWIND
@ SPELL_WHIRLWIND
Definition
boss_sartura.cpp:22
AddSC_boss_sartura
void AddSC_boss_sartura()
Definition
boss_sartura.cpp:286
CreatureAI
Definition
CreatureAI.h:54
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
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
boss_sartura
Definition
boss_sartura.cpp:32
boss_sartura::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_sartura.cpp:36
boss_sartura::boss_sartura
boss_sartura()
Definition
boss_sartura.cpp:34
npc_sartura_royal_guard
Definition
boss_sartura.cpp:173
npc_sartura_royal_guard::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_sartura.cpp:177
npc_sartura_royal_guard::npc_sartura_royal_guard
npc_sartura_royal_guard()
Definition
boss_sartura.cpp:175
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthAbovePct
bool HealthAbovePct(uint32 pct) const
Definition
ScriptedCreature.h:251
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
ScriptedAI::AttackStart
void AttackStart(Unit *) OVERRIDE
Definition
ScriptedCreature.cpp:118
boss_sartura::boss_sarturaAI
Definition
boss_sartura.cpp:42
boss_sartura::boss_sarturaAI::AggroResetEnd_Timer
uint32 AggroResetEnd_Timer
Definition
boss_sartura.cpp:49
boss_sartura::boss_sarturaAI::boss_sarturaAI
boss_sarturaAI(Creature *creature)
Definition
boss_sartura.cpp:43
boss_sartura::boss_sarturaAI::Reset
void Reset() OVERRIDE
Definition
boss_sartura.cpp:57
boss_sartura::boss_sarturaAI::EnragedHard
bool EnragedHard
Definition
boss_sartura.cpp:53
boss_sartura::boss_sarturaAI::WhirlWindEnd_Timer
uint32 WhirlWindEnd_Timer
Definition
boss_sartura.cpp:47
boss_sartura::boss_sarturaAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_sartura.cpp:87
boss_sartura::boss_sarturaAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_sartura.cpp:82
boss_sartura::boss_sarturaAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_sartura.cpp:72
boss_sartura::boss_sarturaAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_sartura.cpp:77
boss_sartura::boss_sarturaAI::EnrageHard_Timer
uint32 EnrageHard_Timer
Definition
boss_sartura.cpp:50
boss_sartura::boss_sarturaAI::Enraged
bool Enraged
Definition
boss_sartura.cpp:52
boss_sartura::boss_sarturaAI::AggroReset
bool AggroReset
Definition
boss_sartura.cpp:55
boss_sartura::boss_sarturaAI::AggroReset_Timer
uint32 AggroReset_Timer
Definition
boss_sartura.cpp:48
boss_sartura::boss_sarturaAI::WhirlWindRandom_Timer
uint32 WhirlWindRandom_Timer
Definition
boss_sartura.cpp:46
boss_sartura::boss_sarturaAI::WhirlWind_Timer
uint32 WhirlWind_Timer
Definition
boss_sartura.cpp:45
boss_sartura::boss_sarturaAI::WhirlWind
bool WhirlWind
Definition
boss_sartura.cpp:54
npc_sartura_royal_guard::npc_sartura_royal_guardAI
Definition
boss_sartura.cpp:183
npc_sartura_royal_guard::npc_sartura_royal_guardAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_sartura.cpp:209
npc_sartura_royal_guard::npc_sartura_royal_guardAI::WhirlWind_Timer
uint32 WhirlWind_Timer
Definition
boss_sartura.cpp:186
npc_sartura_royal_guard::npc_sartura_royal_guardAI::AggroReset_Timer
uint32 AggroReset_Timer
Definition
boss_sartura.cpp:189
npc_sartura_royal_guard::npc_sartura_royal_guardAI::WhirlWindEnd_Timer
uint32 WhirlWindEnd_Timer
Definition
boss_sartura.cpp:188
npc_sartura_royal_guard::npc_sartura_royal_guardAI::AggroReset
bool AggroReset
Definition
boss_sartura.cpp:194
npc_sartura_royal_guard::npc_sartura_royal_guardAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_sartura.cpp:213
npc_sartura_royal_guard::npc_sartura_royal_guardAI::WhirlWind
bool WhirlWind
Definition
boss_sartura.cpp:193
npc_sartura_royal_guard::npc_sartura_royal_guardAI::AggroResetEnd_Timer
uint32 AggroResetEnd_Timer
Definition
boss_sartura.cpp:190
npc_sartura_royal_guard::npc_sartura_royal_guardAI::KnockBack_Timer
uint32 KnockBack_Timer
Definition
boss_sartura.cpp:191
npc_sartura_royal_guard::npc_sartura_royal_guardAI::WhirlWindRandom_Timer
uint32 WhirlWindRandom_Timer
Definition
boss_sartura.cpp:187
npc_sartura_royal_guard::npc_sartura_royal_guardAI::Reset
void Reset() OVERRIDE
Definition
boss_sartura.cpp:196
npc_sartura_royal_guard::npc_sartura_royal_guardAI::npc_sartura_royal_guardAI
npc_sartura_royal_guardAI(Creature *creature)
Definition
boss_sartura.cpp:184
src
server
scripts
Kalimdor
TempleOfAhnQiraj
boss_sartura.cpp
Generated on
for Project SkyFire Core by
1.17.0