Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_supremus.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_Supremus
8
SD%Complete: 95
9
SDComment: Need to implement molten punch
10
SDCategory: Black Temple
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
PassiveAI.h
"
16
#include "
black_temple.h
"
17
18
enum
Supremus
19
{
20
EMOTE_NEW_TARGET
= 0,
21
EMOTE_PUNCH_GROUND
= 1,
22
EMOTE_GROUND_CRACK
= 2,
23
24
//Spells
25
SPELL_MOLTEN_PUNCH
= 40126,
26
SPELL_HATEFUL_STRIKE
= 41926,
27
SPELL_MOLTEN_FLAME
= 40980,
28
SPELL_VOLCANIC_ERUPTION
= 40117,
29
SPELL_VOLCANIC_SUMMON
= 40276,
30
SPELL_BERSERK
= 45078,
31
32
CREATURE_VOLCANO
= 23085,
33
CREATURE_STALKER
= 23095,
34
35
PHASE_STRIKE
= 1,
36
PHASE_CHASE
= 2,
37
38
EVENT_BERSERK
= 1,
39
EVENT_SWITCH_PHASE
= 2,
40
EVENT_FLAME
= 3,
41
EVENT_VOLCANO
= 4,
42
EVENT_SWITCH_TARGET
= 5,
43
EVENT_HATEFUL_STRIKE
= 6,
44
45
GCD_CAST
= 1
46
};
47
48
class
molten_flame
:
public
CreatureScript
49
{
50
public
:
51
molten_flame
() :
CreatureScript
(
"molten_flame"
) { }
52
53
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
54
{
55
return
new
molten_flameAI
(creature);
56
}
57
58
struct
molten_flameAI
:
public
NullCreatureAI
59
{
60
molten_flameAI
(
Creature
* creature) :
NullCreatureAI
(creature) { }
61
62
void
InitializeAI
()
OVERRIDE
63
{
64
float
x, y, z;
65
me
->GetNearPoint(
me
, x, y, z, 1, 100,
float
(
M_PI
*2*
rand_norm
()));
66
me
->GetMotionMaster()->MovePoint(0, x, y, z);
67
me
->SetVisible(
false
);
68
me
->CastSpell(
me
,
SPELL_MOLTEN_FLAME
,
true
);
69
}
70
};
71
};
72
73
class
boss_supremus
:
public
CreatureScript
74
{
75
public
:
76
boss_supremus
() :
CreatureScript
(
"boss_supremus"
) { }
77
78
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
79
{
80
return
new
boss_supremusAI
(creature);
81
}
82
83
struct
boss_supremusAI
:
public
ScriptedAI
84
{
85
boss_supremusAI
(
Creature
* creature) :
ScriptedAI
(creature),
summons
(
me
)
86
{
87
instance
= creature->
GetInstanceScript
();
88
}
89
90
InstanceScript
*
instance
;
91
EventMap
events
;
92
SummonList
summons
;
93
uint32
phase
;
94
95
void
Reset
()
OVERRIDE
96
{
97
if
(
instance
)
98
{
99
if
(
me
->IsAlive())
100
instance
->SetBossState(
DATA_SUPREMUS
,
NOT_STARTED
);
101
}
102
103
phase
= 0;
104
105
events
.Reset();
106
summons
.DespawnAll();
107
}
108
109
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
110
{
111
if
(
instance
)
112
instance
->SetBossState(
DATA_SUPREMUS
,
IN_PROGRESS
);
113
114
ChangePhase
();
115
events
.ScheduleEvent(
EVENT_BERSERK
, 900000,
GCD_CAST
);
116
events
.ScheduleEvent(
EVENT_FLAME
, 20000,
GCD_CAST
);
117
}
118
119
void
ChangePhase
()
120
{
121
if
(!
phase
||
phase
==
PHASE_CHASE
)
122
{
123
phase
=
PHASE_STRIKE
;
124
DummyEntryCheckPredicate
pred;
125
summons
.DoAction(
EVENT_VOLCANO
, pred);
126
events
.ScheduleEvent(
EVENT_HATEFUL_STRIKE
, 5000,
GCD_CAST
,
PHASE_STRIKE
);
127
me
->SetSpeed(
MOVE_RUN
, 1.2f);
128
me
->ApplySpellImmune(0,
IMMUNITY_STATE
,
SPELL_AURA_MOD_TAUNT
,
false
);
129
me
->ApplySpellImmune(0,
IMMUNITY_EFFECT
,
SPELL_EFFECT_ATTACK_ME
,
false
);
130
}
131
else
132
{
133
phase
=
PHASE_CHASE
;
134
events
.ScheduleEvent(
EVENT_VOLCANO
, 5000,
GCD_CAST
,
PHASE_CHASE
);
135
events
.ScheduleEvent(
EVENT_SWITCH_TARGET
, 10000, 0,
PHASE_CHASE
);
136
me
->SetSpeed(
MOVE_RUN
, 0.9f);
137
me
->ApplySpellImmune(0,
IMMUNITY_STATE
,
SPELL_AURA_MOD_TAUNT
,
true
);
138
me
->ApplySpellImmune(0,
IMMUNITY_EFFECT
,
SPELL_EFFECT_ATTACK_ME
,
true
);
139
}
140
DoResetThreat
();
141
DoZoneInCombat
();
142
events
.SetPhase(
phase
);
143
events
.ScheduleEvent(
EVENT_SWITCH_PHASE
, 60000,
GCD_CAST
);
144
}
145
146
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
147
{
148
if
(
instance
)
149
instance
->SetBossState(
DATA_SUPREMUS
,
DONE
);
150
151
summons
.DespawnAll();
152
}
153
154
void
JustSummoned
(
Creature
* summon)
OVERRIDE
155
{
156
summons
.Summon(summon);
157
}
158
159
void
SummonedCreatureDespawn
(
Creature
* summon)
OVERRIDE
160
{
161
summons
.Despawn(summon);
162
}
163
164
Unit
*
CalculateHatefulStrikeTarget
()
165
{
166
uint32
health = 0;
167
Unit
* target = NULL;
168
169
ThreatContainer::StorageType
const
&threatlist =
me
->getThreatManager().getThreatList();
170
ThreatContainer::StorageType::const_iterator i = threatlist.begin();
171
for
(i = threatlist.begin(); i != threatlist.end(); ++i)
172
{
173
Unit
* unit =
Unit::GetUnit
(*
me
, (*i)->getUnitGuid());
174
if
(unit &&
me
->IsWithinMeleeRange(unit))
175
{
176
if
(unit->
GetHealth
() > health)
177
{
178
health = unit->
GetHealth
();
179
target = unit;
180
}
181
}
182
}
183
184
return
target;
185
}
186
187
void
UpdateAI
(
uint32
diff)
OVERRIDE
188
{
189
if
(!
UpdateVictim
())
190
return
;
191
192
events
.Update(diff);
193
194
while
(
uint32
eventId =
events
.ExecuteEvent())
195
{
196
switch
(eventId)
197
{
198
case
EVENT_BERSERK
:
199
DoCast
(
me
,
SPELL_BERSERK
,
true
);
200
break
;
201
case
EVENT_FLAME
:
202
DoCast
(
me
,
SPELL_MOLTEN_PUNCH
);
203
events
.DelayEvents(1500,
GCD_CAST
);
204
events
.ScheduleEvent(
EVENT_FLAME
, 20000,
GCD_CAST
);
205
break
;
206
case
EVENT_HATEFUL_STRIKE
:
207
if
(
Unit
* target =
CalculateHatefulStrikeTarget
())
208
DoCast
(target,
SPELL_HATEFUL_STRIKE
);
209
events
.DelayEvents(1000,
GCD_CAST
);
210
events
.ScheduleEvent(
EVENT_HATEFUL_STRIKE
, 5000,
GCD_CAST
,
PHASE_STRIKE
);
211
break
;
212
case
EVENT_SWITCH_TARGET
:
213
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1, 100,
true
))
214
{
215
DoResetThreat
();
216
me
->AddThreat(target, 5000000.0f);
217
Talk
(
EMOTE_NEW_TARGET
);
218
}
219
events
.ScheduleEvent(
EVENT_SWITCH_TARGET
, 10000, 0,
PHASE_CHASE
);
220
break
;
221
case
EVENT_VOLCANO
:
222
{
223
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 999,
true
);
224
if
(!target) target =
me
->GetVictim();
225
if
(target)
226
{
227
//DoCast(target, SPELL_VOLCANIC_SUMMON);//movement bugged
228
me
->SummonCreature(
CREATURE_VOLCANO
, target->
GetPositionX
(), target->
GetPositionY
(), target->
GetPositionZ
(), 0,
TempSummonType::TEMPSUMMON_TIMED_DESPAWN
, 30000);
229
Talk
(
EMOTE_GROUND_CRACK
);
230
events
.DelayEvents(1500,
GCD_CAST
);
231
}
232
events
.ScheduleEvent(
EVENT_VOLCANO
, 10000,
GCD_CAST
,
PHASE_CHASE
);
233
return
;
234
}
235
case
EVENT_SWITCH_PHASE
:
236
ChangePhase
();
237
break
;
238
}
239
}
240
241
DoMeleeAttackIfReady
();
242
}
243
};
244
};
245
246
class
npc_volcano
:
public
CreatureScript
247
{
248
public
:
249
npc_volcano
() :
CreatureScript
(
"npc_volcano"
) { }
250
251
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
252
{
253
return
new
npc_volcanoAI
(creature);
254
}
255
256
struct
npc_volcanoAI
:
public
ScriptedAI
257
{
258
npc_volcanoAI
(
Creature
* creature) :
ScriptedAI
(creature)
259
{
260
SetCombatMovement
(
false
);
261
}
262
263
void
Reset
()
OVERRIDE
264
{
265
me
->SetFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NON_ATTACKABLE
);
266
me
->SetFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NOT_SELECTABLE
);
267
//DoCast(me, SPELL_VOLCANIC_ERUPTION);
268
me
->SetReactState(
REACT_PASSIVE
);
269
wait
= 3000;
270
}
271
uint32
wait
;
272
273
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
{ }
274
275
void
MoveInLineOfSight
(
Unit
*
/*who*/
)
OVERRIDE
{ }
276
277
278
void
DoAction
(
int32
/*info*/
)
OVERRIDE
279
{
280
me
->RemoveAura(
SPELL_VOLCANIC_ERUPTION
);
281
}
282
283
void
UpdateAI
(
uint32
diff)
OVERRIDE
284
{
285
if
(
wait
<= diff)
//wait 3secs before casting
286
{
287
DoCast
(
me
,
SPELL_VOLCANIC_ERUPTION
);
288
wait
= 60000;
289
}
290
else
wait
-= diff;
291
}
292
};
293
};
294
295
void
AddSC_boss_supremus
()
296
{
297
new
boss_supremus
();
298
new
molten_flame
();
299
new
npc_volcano
();
300
}
M_PI
#define M_PI
Definition
Common.h:192
int32
std::int32_t int32
Definition
Define.h:73
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
IN_PROGRESS
@ IN_PROGRESS
Definition
InstanceScript.h:47
DONE
@ DONE
Definition
InstanceScript.h:49
NOT_STARTED
@ NOT_STARTED
Definition
InstanceScript.h:46
TempSummonType::TEMPSUMMON_TIMED_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN
Definition
Object.h:70
PassiveAI.h
ScriptMgr.h
ScriptedCreature.h
SPELL_EFFECT_ATTACK_ME
@ SPELL_EFFECT_ATTACK_ME
Definition
SharedDefines.h:1002
IMMUNITY_STATE
@ IMMUNITY_STATE
Definition
SharedDefines.h:1597
IMMUNITY_EFFECT
@ IMMUNITY_EFFECT
Definition
SharedDefines.h:1596
SPELL_AURA_MOD_TAUNT
@ SPELL_AURA_MOD_TAUNT
Definition
SpellAuraDefines.h:58
MOVE_RUN
@ MOVE_RUN
Definition
Unit.h:556
REACT_PASSIVE
@ REACT_PASSIVE
Definition
Unit.h:1156
UNIT_FLAG_NON_ATTACKABLE
@ UNIT_FLAG_NON_ATTACKABLE
Definition
Unit.h:626
UNIT_FLAG_NOT_SELECTABLE
@ UNIT_FLAG_NOT_SELECTABLE
Definition
Unit.h:650
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
UNIT_FIELD_FLAGS
@ UNIT_FIELD_FLAGS
Definition
UpdateFields.h:82
rand_norm
double rand_norm(void)
Definition
Util.cpp:50
black_temple.h
DATA_SUPREMUS
@ DATA_SUPREMUS
Definition
black_temple.h:17
SPELL_BERSERK
#define SPELL_BERSERK
Definition
boss_four_horsemen.cpp:62
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_occuthar.cpp:31
SPELL_HATEFUL_STRIKE
@ SPELL_HATEFUL_STRIKE
Definition
boss_patchwerk.cpp:12
EVENT_FLAME
@ EVENT_FLAME
Definition
boss_razorscale.cpp:114
Supremus
Supremus
Definition
boss_supremus.cpp:19
EVENT_VOLCANO
@ EVENT_VOLCANO
Definition
boss_supremus.cpp:41
EMOTE_PUNCH_GROUND
@ EMOTE_PUNCH_GROUND
Definition
boss_supremus.cpp:21
CREATURE_VOLCANO
@ CREATURE_VOLCANO
Definition
boss_supremus.cpp:32
SPELL_VOLCANIC_ERUPTION
@ SPELL_VOLCANIC_ERUPTION
Definition
boss_supremus.cpp:28
EVENT_FLAME
@ EVENT_FLAME
Definition
boss_supremus.cpp:40
SPELL_MOLTEN_FLAME
@ SPELL_MOLTEN_FLAME
Definition
boss_supremus.cpp:27
CREATURE_STALKER
@ CREATURE_STALKER
Definition
boss_supremus.cpp:33
EVENT_SWITCH_TARGET
@ EVENT_SWITCH_TARGET
Definition
boss_supremus.cpp:42
GCD_CAST
@ GCD_CAST
Definition
boss_supremus.cpp:45
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_supremus.cpp:38
EVENT_SWITCH_PHASE
@ EVENT_SWITCH_PHASE
Definition
boss_supremus.cpp:39
SPELL_HATEFUL_STRIKE
@ SPELL_HATEFUL_STRIKE
Definition
boss_supremus.cpp:26
SPELL_VOLCANIC_SUMMON
@ SPELL_VOLCANIC_SUMMON
Definition
boss_supremus.cpp:29
EMOTE_NEW_TARGET
@ EMOTE_NEW_TARGET
Definition
boss_supremus.cpp:20
SPELL_MOLTEN_PUNCH
@ SPELL_MOLTEN_PUNCH
Definition
boss_supremus.cpp:25
PHASE_CHASE
@ PHASE_CHASE
Definition
boss_supremus.cpp:36
SPELL_BERSERK
@ SPELL_BERSERK
Definition
boss_supremus.cpp:30
EVENT_HATEFUL_STRIKE
@ EVENT_HATEFUL_STRIKE
Definition
boss_supremus.cpp:43
EMOTE_GROUND_CRACK
@ EMOTE_GROUND_CRACK
Definition
boss_supremus.cpp:22
PHASE_STRIKE
@ PHASE_STRIKE
Definition
boss_supremus.cpp:35
AddSC_boss_supremus
void AddSC_boss_supremus()
Definition
boss_supremus.cpp:295
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
CreatureAI::me
Creature *const me
Definition
CreatureAI.h:56
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
DummyEntryCheckPredicate
Definition
ScriptedCreature.h:124
EventMap
Definition
CreatureAIImpl.h:304
InstanceScript
Definition
InstanceScript.h:123
NullCreatureAI::NullCreatureAI
NullCreatureAI(Creature *c)
Definition
PassiveAI.cpp:12
SummonList
Definition
ScriptedCreature.h:19
ThreatContainer::StorageType
std::list< HostileReference * > StorageType
Definition
ThreatManager.h:127
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::GetHealth
uint32 GetHealth() const
Definition
Unit.h:1600
Unit::GetUnit
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4895
WorldObject::GetInstanceScript
InstanceScript * GetInstanceScript()
Definition
Object.cpp:1612
boss_supremus
Definition
boss_supremus.cpp:74
boss_supremus::boss_supremus
boss_supremus()
Definition
boss_supremus.cpp:76
boss_supremus::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_supremus.cpp:78
molten_flame
Definition
boss_supremus.cpp:49
molten_flame::molten_flame
molten_flame()
Definition
boss_supremus.cpp:51
molten_flame::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_supremus.cpp:53
npc_volcano
Definition
boss_supremus.cpp:247
npc_volcano::npc_volcano
npc_volcano()
Definition
boss_supremus.cpp:249
npc_volcano::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_supremus.cpp:251
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::DoResetThreat
void DoResetThreat()
Definition
ScriptedCreature.cpp:260
ScriptedAI::SetCombatMovement
void SetCombatMovement(bool allowMovement)
Definition
ScriptedCreature.cpp:394
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
boss_supremus::boss_supremusAI
Definition
boss_supremus.cpp:84
boss_supremus::boss_supremusAI::instance
InstanceScript * instance
Definition
boss_supremus.cpp:90
boss_supremus::boss_supremusAI::summons
SummonList summons
Definition
boss_supremus.cpp:92
boss_supremus::boss_supremusAI::JustSummoned
void JustSummoned(Creature *summon) OVERRIDE
Definition
boss_supremus.cpp:154
boss_supremus::boss_supremusAI::boss_supremusAI
boss_supremusAI(Creature *creature)
Definition
boss_supremus.cpp:85
boss_supremus::boss_supremusAI::phase
uint32 phase
Definition
boss_supremus.cpp:93
boss_supremus::boss_supremusAI::SummonedCreatureDespawn
void SummonedCreatureDespawn(Creature *summon) OVERRIDE
Definition
boss_supremus.cpp:159
boss_supremus::boss_supremusAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_supremus.cpp:109
boss_supremus::boss_supremusAI::CalculateHatefulStrikeTarget
Unit * CalculateHatefulStrikeTarget()
Definition
boss_supremus.cpp:164
boss_supremus::boss_supremusAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_supremus.cpp:146
boss_supremus::boss_supremusAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_supremus.cpp:187
boss_supremus::boss_supremusAI::Reset
void Reset() OVERRIDE
Definition
boss_supremus.cpp:95
boss_supremus::boss_supremusAI::ChangePhase
void ChangePhase()
Definition
boss_supremus.cpp:119
boss_supremus::boss_supremusAI::events
EventMap events
Definition
boss_supremus.cpp:91
molten_flame::molten_flameAI
Definition
boss_supremus.cpp:59
molten_flame::molten_flameAI::molten_flameAI
molten_flameAI(Creature *creature)
Definition
boss_supremus.cpp:60
molten_flame::molten_flameAI::InitializeAI
void InitializeAI() OVERRIDE
Definition
boss_supremus.cpp:62
npc_volcano::npc_volcanoAI
Definition
boss_supremus.cpp:257
npc_volcano::npc_volcanoAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_supremus.cpp:273
npc_volcano::npc_volcanoAI::DoAction
void DoAction(int32) OVERRIDE
Definition
boss_supremus.cpp:278
npc_volcano::npc_volcanoAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *) OVERRIDE
Definition
boss_supremus.cpp:275
npc_volcano::npc_volcanoAI::npc_volcanoAI
npc_volcanoAI(Creature *creature)
Definition
boss_supremus.cpp:258
npc_volcano::npc_volcanoAI::Reset
void Reset() OVERRIDE
Definition
boss_supremus.cpp:263
npc_volcano::npc_volcanoAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_supremus.cpp:283
npc_volcano::npc_volcanoAI::wait
uint32 wait
Definition
boss_supremus.cpp:271
src
server
scripts
Outland
BlackTemple
boss_supremus.cpp
Generated on
for Project SkyFire Core by
1.17.0