Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_sulfuron_harbinger.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_Sulfuron_Harbringer
8
SD%Complete: 80
9
SDComment: Adds NYI
10
SDCategory: Molten Core
11
EndScriptData */
12
13
#include "
ObjectMgr.h
"
14
#include "
ScriptMgr.h
"
15
#include "
ScriptedCreature.h
"
16
#include "
molten_core.h
"
17
18
enum
Spells
19
{
20
// Sulfuron Harbringer
21
SPELL_DARK_STRIKE
= 19777,
22
SPELL_DEMORALIZING_SHOUT
= 19778,
23
SPELL_INSPIRE
= 19779,
24
SPELL_KNOCKDOWN
= 19780,
25
SPELL_FLAMESPEAR
= 19781,
26
27
// Adds
28
SPELL_HEAL
= 19775,
29
SPELL_SHADOWWORDPAIN
= 19776,
30
SPELL_IMMOLATE
= 20294,
31
};
32
33
enum
Events
34
{
35
EVENT_DARK_STRIKE
= 1,
36
EVENT_DEMORALIZING_SHOUT
= 2,
37
EVENT_INSPIRE
= 3,
38
EVENT_KNOCKDOWN
= 4,
39
EVENT_FLAMESPEAR
= 5,
40
41
EVENT_HEAL
= 6,
42
EVENT_SHADOW_WORD_PAIN
= 7,
43
EVENT_IMMOLATE
= 8,
44
};
45
46
class
boss_sulfuron
:
public
CreatureScript
47
{
48
public
:
49
boss_sulfuron
() :
CreatureScript
(
"boss_sulfuron"
) { }
50
51
struct
boss_sulfuronAI
:
public
BossAI
52
{
53
boss_sulfuronAI
(
Creature
* creature) :
BossAI
(creature,
BOSS_SULFURON_HARBINGER
)
54
{
55
}
56
57
void
EnterCombat
(
Unit
* victim)
OVERRIDE
58
{
59
BossAI::EnterCombat
(victim);
60
events
.ScheduleEvent(
EVENT_DARK_STRIKE
, 10000);
61
events
.ScheduleEvent(
EVENT_DEMORALIZING_SHOUT
, 15000);
62
events
.ScheduleEvent(
EVENT_INSPIRE
, 13000);
63
events
.ScheduleEvent(
EVENT_KNOCKDOWN
, 6000);
64
events
.ScheduleEvent(
EVENT_FLAMESPEAR
, 2000);
65
}
66
67
void
UpdateAI
(
uint32
diff)
OVERRIDE
68
{
69
if
(!
UpdateVictim
())
70
return
;
71
72
events
.Update(diff);
73
74
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
75
return
;
76
77
while
(
uint32
eventId =
events
.ExecuteEvent())
78
{
79
switch
(eventId)
80
{
81
case
EVENT_DARK_STRIKE
:
82
DoCast
(
me
,
SPELL_DARK_STRIKE
);
83
events
.ScheduleEvent(
EVENT_DARK_STRIKE
, std::rand() % 18000 + 15000);
84
break
;
85
case
EVENT_DEMORALIZING_SHOUT
:
86
DoCastVictim
(
SPELL_DEMORALIZING_SHOUT
);
87
events
.ScheduleEvent(
EVENT_DEMORALIZING_SHOUT
, std::rand() % 20000 + 15000);
88
break
;
89
case
EVENT_INSPIRE
:
90
{
91
std::list<Creature*> healers =
DoFindFriendlyMissingBuff
(45.0f,
SPELL_INSPIRE
);
92
if
(!healers.empty())
93
DoCast
(
Skyfire::Containers::SelectRandomContainerElement
(healers),
SPELL_INSPIRE
);
94
95
DoCast
(
me
,
SPELL_INSPIRE
);
96
events
.ScheduleEvent(
EVENT_INSPIRE
, std::rand() % 26000 + 20000);
97
break
;
98
}
99
case
EVENT_KNOCKDOWN
:
100
DoCastVictim
(
SPELL_KNOCKDOWN
);
101
events
.ScheduleEvent(
EVENT_KNOCKDOWN
, std::rand() % 15000 + 12000);
102
break
;
103
case
EVENT_FLAMESPEAR
:
104
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 0.0f,
true
))
105
DoCast
(target,
SPELL_FLAMESPEAR
);
106
events
.ScheduleEvent(
EVENT_FLAMESPEAR
, std::rand() % 16000 + 12000);
107
break
;
108
default
:
109
break
;
110
}
111
}
112
113
DoMeleeAttackIfReady
();
114
}
115
};
116
117
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
118
{
119
return
new
boss_sulfuronAI
(creature);
120
}
121
};
122
123
class
npc_flamewaker_priest
:
public
CreatureScript
124
{
125
public
:
126
npc_flamewaker_priest
() :
CreatureScript
(
"npc_flamewaker_priest"
) { }
127
128
struct
npc_flamewaker_priestAI
:
public
ScriptedAI
129
{
130
npc_flamewaker_priestAI
(
Creature
* creature) :
ScriptedAI
(creature)
131
{
132
}
133
134
void
Reset
()
OVERRIDE
135
{
136
events
.Reset();
137
}
138
139
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
140
{
141
events
.Reset();
142
}
143
144
void
EnterCombat
(
Unit
* victim)
OVERRIDE
145
{
146
ScriptedAI::EnterCombat
(victim);
147
events
.ScheduleEvent(
EVENT_HEAL
, std::rand() % 30000 + 15000);
148
events
.ScheduleEvent(
EVENT_SHADOW_WORD_PAIN
, 2000);
149
events
.ScheduleEvent(
EVENT_IMMOLATE
, 8000);
150
}
151
152
void
UpdateAI
(
uint32
diff)
OVERRIDE
153
{
154
if
(!
UpdateVictim
())
155
return
;
156
157
events
.Update(diff);
158
159
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
160
return
;
161
162
while
(
uint32
eventId =
events
.ExecuteEvent())
163
{
164
switch
(eventId)
165
{
166
case
EVENT_HEAL
:
167
if
(
Unit
* target =
DoSelectLowestHpFriendly
(60.0f, 1))
168
DoCast
(target,
SPELL_HEAL
);
169
events
.ScheduleEvent(
EVENT_HEAL
, std::rand() % 20000 + 15000);
170
break
;
171
case
EVENT_SHADOW_WORD_PAIN
:
172
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 0.0f,
true
, -
SPELL_SHADOWWORDPAIN
))
173
DoCast
(target,
SPELL_SHADOWWORDPAIN
);
174
events
.ScheduleEvent(
EVENT_SHADOW_WORD_PAIN
, std::rand() % 26000 + 18000);
175
break
;
176
case
EVENT_IMMOLATE
:
177
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 0.0f,
true
, -
SPELL_IMMOLATE
))
178
DoCast
(target,
SPELL_IMMOLATE
);
179
events
.ScheduleEvent(
EVENT_IMMOLATE
, std::rand() % 25000 + 15000);
180
break
;
181
default
:
182
break
;
183
}
184
}
185
186
DoMeleeAttackIfReady
();
187
}
188
189
private
:
190
EventMap
events
;
191
};
192
193
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
194
{
195
return
new
npc_flamewaker_priestAI
(creature);
196
}
197
};
198
199
void
AddSC_boss_sulfuron
()
200
{
201
new
boss_sulfuron
();
202
new
npc_flamewaker_priest
();
203
}
Spells
Spells
Definition
BattlegroundIC.h:645
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
ObjectMgr.h
ScriptMgr.h
ScriptedCreature.h
UNIT_STATE_CASTING
@ UNIT_STATE_CASTING
Definition
Unit.h:527
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
SPELL_DEMORALIZING_SHOUT
@ SPELL_DEMORALIZING_SHOUT
Definition
alterac_valley.cpp:13
Events
Events
Definition
alterac_valley.cpp:40
EVENT_DEMORALIZING_SHOUT
@ EVENT_DEMORALIZING_SHOUT
Definition
alterac_valley.cpp:43
SPELL_KNOCKDOWN
@ SPELL_KNOCKDOWN
Definition
boss_drekthar.cpp:13
SPELL_SHADOWWORDPAIN
@ SPELL_SHADOWWORDPAIN
Definition
boss_high_interrogator_gerstahn.cpp:11
SPELL_HEAL
@ SPELL_HEAL
Definition
boss_moira_bronzebeard.cpp:11
AddSC_boss_sulfuron
void AddSC_boss_sulfuron()
Definition
boss_sulfuron_harbinger.cpp:199
SPELL_INSPIRE
@ SPELL_INSPIRE
Definition
boss_sulfuron_harbinger.cpp:23
SPELL_SHADOWWORDPAIN
@ SPELL_SHADOWWORDPAIN
Definition
boss_sulfuron_harbinger.cpp:29
SPELL_HEAL
@ SPELL_HEAL
Definition
boss_sulfuron_harbinger.cpp:28
SPELL_DEMORALIZING_SHOUT
@ SPELL_DEMORALIZING_SHOUT
Definition
boss_sulfuron_harbinger.cpp:22
SPELL_IMMOLATE
@ SPELL_IMMOLATE
Definition
boss_sulfuron_harbinger.cpp:30
SPELL_KNOCKDOWN
@ SPELL_KNOCKDOWN
Definition
boss_sulfuron_harbinger.cpp:24
SPELL_FLAMESPEAR
@ SPELL_FLAMESPEAR
Definition
boss_sulfuron_harbinger.cpp:25
SPELL_DARK_STRIKE
@ SPELL_DARK_STRIKE
Definition
boss_sulfuron_harbinger.cpp:21
EVENT_IMMOLATE
@ EVENT_IMMOLATE
Definition
boss_sulfuron_harbinger.cpp:43
EVENT_SHADOW_WORD_PAIN
@ EVENT_SHADOW_WORD_PAIN
Definition
boss_sulfuron_harbinger.cpp:42
EVENT_DARK_STRIKE
@ EVENT_DARK_STRIKE
Definition
boss_sulfuron_harbinger.cpp:35
EVENT_KNOCKDOWN
@ EVENT_KNOCKDOWN
Definition
boss_sulfuron_harbinger.cpp:38
EVENT_INSPIRE
@ EVENT_INSPIRE
Definition
boss_sulfuron_harbinger.cpp:37
EVENT_HEAL
@ EVENT_HEAL
Definition
boss_sulfuron_harbinger.cpp:41
EVENT_FLAMESPEAR
@ EVENT_FLAMESPEAR
Definition
boss_sulfuron_harbinger.cpp:39
EVENT_DEMORALIZING_SHOUT
@ EVENT_DEMORALIZING_SHOUT
Definition
boss_sulfuron_harbinger.cpp:36
EVENT_IMMOLATE
@ EVENT_IMMOLATE
Definition
boss_the_beast.cpp:20
SPELL_IMMOLATE
@ SPELL_IMMOLATE
Definition
boss_tomb_of_seven.cpp:83
BossAI::events
EventMap events
Definition
ScriptedCreature.h:439
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
BossAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
ScriptedCreature.h:404
CreatureAI
Definition
CreatureAI.h:54
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
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
UnitAI::DoCastVictim
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:168
Unit
Definition
Unit.h:1367
boss_sulfuron
Definition
boss_sulfuron_harbinger.cpp:47
boss_sulfuron::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_sulfuron_harbinger.cpp:117
boss_sulfuron::boss_sulfuron
boss_sulfuron()
Definition
boss_sulfuron_harbinger.cpp:49
npc_flamewaker_priest
Definition
boss_sulfuron_harbinger.cpp:124
npc_flamewaker_priest::npc_flamewaker_priest
npc_flamewaker_priest()
Definition
boss_sulfuron_harbinger.cpp:126
npc_flamewaker_priest::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_sulfuron_harbinger.cpp:193
molten_core.h
BOSS_SULFURON_HARBINGER
@ BOSS_SULFURON_HARBINGER
Definition
molten_core.h:17
Skyfire::Containers::SelectRandomContainerElement
C::value_type const & SelectRandomContainerElement(C const &container)
Definition
Containers.h:48
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::DoSelectLowestHpFriendly
Unit * DoSelectLowestHpFriendly(float range, uint32 minHPDiff=1)
Definition
ScriptedCreature.cpp:329
ScriptedAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
ScriptedCreature.h:195
ScriptedAI::DoFindFriendlyMissingBuff
std::list< Creature * > DoFindFriendlyMissingBuff(float range, uint32 spellId)
Definition
ScriptedCreature.cpp:349
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
boss_sulfuron::boss_sulfuronAI
Definition
boss_sulfuron_harbinger.cpp:52
boss_sulfuron::boss_sulfuronAI::EnterCombat
void EnterCombat(Unit *victim) OVERRIDE
Definition
boss_sulfuron_harbinger.cpp:57
boss_sulfuron::boss_sulfuronAI::boss_sulfuronAI
boss_sulfuronAI(Creature *creature)
Definition
boss_sulfuron_harbinger.cpp:53
boss_sulfuron::boss_sulfuronAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_sulfuron_harbinger.cpp:67
npc_flamewaker_priest::npc_flamewaker_priestAI
Definition
boss_sulfuron_harbinger.cpp:129
npc_flamewaker_priest::npc_flamewaker_priestAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_sulfuron_harbinger.cpp:139
npc_flamewaker_priest::npc_flamewaker_priestAI::Reset
void Reset() OVERRIDE
Definition
boss_sulfuron_harbinger.cpp:134
npc_flamewaker_priest::npc_flamewaker_priestAI::events
EventMap events
Definition
boss_sulfuron_harbinger.cpp:190
npc_flamewaker_priest::npc_flamewaker_priestAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_sulfuron_harbinger.cpp:152
npc_flamewaker_priest::npc_flamewaker_priestAI::npc_flamewaker_priestAI
npc_flamewaker_priestAI(Creature *creature)
Definition
boss_sulfuron_harbinger.cpp:130
npc_flamewaker_priest::npc_flamewaker_priestAI::EnterCombat
void EnterCombat(Unit *victim) OVERRIDE
Definition
boss_sulfuron_harbinger.cpp:144
src
server
scripts
EasternKingdoms
BlackrockMountain
MoltenCore
boss_sulfuron_harbinger.cpp
Generated on
for Project SkyFire Core by
1.17.0