Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_murmur.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_Murmur
8
SD%Complete: 90
9
SDComment: Timers may be incorrect
10
SDCategory: Auchindoun, Shadow Labyrinth
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
SpellScript.h
"
16
#include "
shadow_labyrinth.h
"
17
18
enum
Murmur
19
{
20
// Spell
21
SPELL_RESONANCE
= 33657,
22
SPELL_MAGNETIC_PULL
= 33689,
23
SPELL_SONIC_SHOCK
= 38797,
24
SPELL_THUNDERING_STORM
= 39365,
25
SPELL_SONIC_BOOM_CAST
= 33923,
26
SPELL_SONIC_BOOM_EFFECT
= 33666,
27
SPELL_MURMURS_TOUCH
= 33711,
28
// Text
29
EMOTE_SONIC_BOOM
= 0
30
};
31
32
enum
Events
33
{
34
EVENT_SONIC_BOOM
= 1,
35
EVENT_MURMURS_TOUCH
= 2,
36
EVENT_RESONANCE
= 3,
37
EVENT_MAGNETIC_PULL
= 4,
38
EVENT_THUNDERING_STORM
= 5,
39
EVENT_SONIC_SHOCK
= 6
40
};
41
42
class
boss_murmur
:
public
CreatureScript
43
{
44
public
:
45
boss_murmur
() :
CreatureScript
(
"boss_murmur"
) { }
46
47
struct
boss_murmurAI
:
public
BossAI
48
{
49
boss_murmurAI
(
Creature
* creature) :
BossAI
(creature,
DATA_MURMUR
)
50
{
51
SetCombatMovement
(
false
);
52
}
53
54
void
Reset
()
OVERRIDE
55
{
56
_Reset
();
57
events
.ScheduleEvent(
EVENT_SONIC_BOOM
, 30000);
58
events
.ScheduleEvent(
EVENT_MURMURS_TOUCH
, std::rand() % 20000 + 8000);
59
events
.ScheduleEvent(
EVENT_RESONANCE
, 5000);
60
events
.ScheduleEvent(
EVENT_MAGNETIC_PULL
, std::rand() % 30000 + 15000);
61
if
(
IsHeroic
())
62
{
63
events
.ScheduleEvent(
EVENT_THUNDERING_STORM
, 15000);
64
events
.ScheduleEvent(
EVENT_SONIC_SHOCK
, 10000);
65
}
66
67
// database should have `RegenHealth`=0 to prevent regen
68
uint32
hp =
me
->CountPctFromMaxHealth(40);
69
if
(hp)
70
me
->SetHealth(hp);
71
me
->ResetPlayerDamageReq();
72
}
73
74
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
75
{
76
_EnterCombat
();
77
}
78
79
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
80
{
81
_JustDied
();
82
}
83
84
void
UpdateAI
(
uint32
diff)
OVERRIDE
85
{
86
if
(!
UpdateVictim
())
87
return
;
88
89
events
.Update(diff);
90
91
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
92
return
;
93
94
while
(
uint32
eventId =
events
.ExecuteEvent())
95
{
96
switch
(eventId)
97
{
98
case
EVENT_SONIC_BOOM
:
99
Talk
(
EMOTE_SONIC_BOOM
);
100
DoCast
(
me
,
SPELL_SONIC_BOOM_CAST
);
101
events
.ScheduleEvent(
EVENT_SONIC_BOOM
, 30000);
102
events
.ScheduleEvent(
EVENT_RESONANCE
, 1500);
103
break
;
104
case
EVENT_MURMURS_TOUCH
:
105
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 80.0f,
true
))
106
DoCast
(target,
SPELL_MURMURS_TOUCH
);
107
events
.ScheduleEvent(
EVENT_MURMURS_TOUCH
, std::rand() % 35000 + 25000);
108
break
;
109
case
EVENT_RESONANCE
:
110
if
(!(
me
->IsWithinMeleeRange(
me
->GetVictim())))
111
{
112
DoCast
(
me
,
SPELL_RESONANCE
);
113
events
.ScheduleEvent(
EVENT_RESONANCE
, 5000);
114
}
115
break
;
116
case
EVENT_MAGNETIC_PULL
:
117
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 0.0f,
true
))
118
{
119
DoCast
(target,
SPELL_MAGNETIC_PULL
);
120
events
.ScheduleEvent(
EVENT_MAGNETIC_PULL
, std::rand() % 30000 + 15000);
121
break
;
122
}
123
events
.ScheduleEvent(
EVENT_MAGNETIC_PULL
, 500);
124
break
;
125
case
EVENT_THUNDERING_STORM
:
126
DoCastAOE
(
SPELL_THUNDERING_STORM
,
true
);
127
events
.ScheduleEvent(
EVENT_THUNDERING_STORM
, 15000);
128
break
;
129
case
EVENT_SONIC_SHOCK
:
130
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0, 20.0f,
false
))
131
DoCast
(target,
SPELL_SONIC_SHOCK
);
132
events
.ScheduleEvent(
EVENT_SONIC_SHOCK
, std::rand() % 20000 + 10000);
133
break
;
134
}
135
}
136
137
// Select nearest most aggro target if top aggro too far
138
if
(!
me
->isAttackReady())
139
return
;
140
141
if
(!
me
->IsWithinMeleeRange(
me
->GetVictim()))
142
{
143
ThreatContainer::StorageType
threatlist =
me
->getThreatManager().getThreatList();
144
for
(ThreatContainer::StorageType::const_iterator i = threatlist.begin(); i != threatlist.end(); ++i)
145
if
(
Unit
* target =
ObjectAccessor::GetUnit
(*
me
, (*i)->getUnitGuid()))
146
if
(
me
->IsWithinMeleeRange(target))
147
{
148
me
->TauntApply(target);
149
break
;
150
}
151
}
152
153
DoMeleeAttackIfReady
();
154
}
155
};
156
157
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
158
{
159
return
GetShadowLabyrinthAI<boss_murmurAI>
(creature);
160
}
161
};
162
163
// 33923, 38796 - Sonic Boom
164
class
spell_murmur_sonic_boom
:
public
SpellScriptLoader
165
{
166
public
:
167
spell_murmur_sonic_boom
() :
SpellScriptLoader
(
"spell_murmur_sonic_boom"
) { }
168
169
class
spell_murmur_sonic_boom_SpellScript
:
public
SpellScript
170
{
171
PrepareSpellScript
(
spell_murmur_sonic_boom_SpellScript
);
172
173
bool
Validate
(
SpellInfo
const
*
/*spellInfo*/
)
OVERRIDE
174
{
175
if
(!
sSpellMgr
->GetSpellInfo(
SPELL_SONIC_BOOM_EFFECT
))
176
return
false
;
177
return
true
;
178
}
179
180
void
HandleEffect
(
SpellEffIndex
/*effIndex*/
)
181
{
182
GetCaster
()->
CastSpell
((
Unit
*)NULL,
SPELL_SONIC_BOOM_EFFECT
,
true
);
183
}
184
185
void
Register
()
OVERRIDE
186
{
187
OnEffectHit
+=
SpellEffectFn
(
spell_murmur_sonic_boom_SpellScript::HandleEffect
,
EFFECT_0
,
SPELL_EFFECT_DUMMY
);
188
}
189
};
190
191
SpellScript
*
GetSpellScript
() const
OVERRIDE
192
{
193
return
new
spell_murmur_sonic_boom_SpellScript
();
194
}
195
};
196
197
// 33666, 38795 - Sonic Boom Effect
198
class
spell_murmur_sonic_boom_effect
:
public
SpellScriptLoader
199
{
200
public
:
201
spell_murmur_sonic_boom_effect
() :
SpellScriptLoader
(
"spell_murmur_sonic_boom_effect"
) { }
202
203
class
spell_murmur_sonic_boom_effect_SpellScript
:
public
SpellScript
204
{
205
PrepareSpellScript
(
spell_murmur_sonic_boom_effect_SpellScript
);
206
207
void
CalcDamage
()
208
{
209
if
(
Unit
* target =
GetHitUnit
())
210
SetHitDamage
(target->CountPctFromMaxHealth(80));
211
}
212
213
void
Register
()
OVERRIDE
214
{
215
OnHit
+=
SpellHitFn
(
spell_murmur_sonic_boom_effect_SpellScript::CalcDamage
);
216
}
217
};
218
219
SpellScript
*
GetSpellScript
() const
OVERRIDE
220
{
221
return
new
spell_murmur_sonic_boom_effect_SpellScript
();
222
}
223
};
224
225
class
ThunderingStormCheck
226
{
227
public
:
228
ThunderingStormCheck
(
WorldObject
* source) :
_source
(source) { }
229
230
bool
operator()
(
WorldObject
* obj)
231
{
232
float
distSq =
_source
->GetExactDist2dSq(obj);
233
return
distSq < (25.0f * 25.0f) || distSq > (100.0f * 100.0f);
234
}
235
236
private
:
237
WorldObject
const
*
_source
;
238
};
239
240
// 39365 - Thundering Storm
241
class
spell_murmur_thundering_storm
:
public
SpellScriptLoader
242
{
243
public
:
244
spell_murmur_thundering_storm
() :
SpellScriptLoader
(
"spell_murmur_thundering_storm"
) { }
245
246
class
spell_murmur_thundering_storm_SpellScript
:
public
SpellScript
247
{
248
PrepareSpellScript
(
spell_murmur_thundering_storm_SpellScript
);
249
250
void
FilterTarget
(std::list<WorldObject*>& targets)
251
{
252
targets.remove_if(
ThunderingStormCheck
(
GetCaster
()));
253
}
254
255
void
Register
()
OVERRIDE
256
{
257
OnObjectAreaTargetSelect
+=
SpellObjectAreaTargetSelectFn
(
spell_murmur_thundering_storm_SpellScript::FilterTarget
,
EFFECT_0
,
TARGET_UNIT_SRC_AREA_ENEMY
);
258
}
259
};
260
261
SpellScript
*
GetSpellScript
() const
OVERRIDE
262
{
263
return
new
spell_murmur_thundering_storm_SpellScript
();
264
}
265
};
266
267
void
AddSC_boss_murmur
()
268
{
269
new
boss_murmur
();
270
new
spell_murmur_sonic_boom
();
271
new
spell_murmur_sonic_boom_effect
();
272
new
spell_murmur_thundering_storm
();
273
}
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
ScriptMgr.h
ScriptedCreature.h
SpellEffIndex
SpellEffIndex
Definition
SharedDefines.h:17
EFFECT_0
@ EFFECT_0
Definition
SharedDefines.h:18
SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_DUMMY
Definition
SharedDefines.h:891
TARGET_UNIT_SRC_AREA_ENEMY
@ TARGET_UNIT_SRC_AREA_ENEMY
Definition
SharedDefines.h:1621
sSpellMgr
#define sSpellMgr
Definition
SpellMgr.h:744
SpellScript.h
SpellEffectFn
#define SpellEffectFn(F, I, N)
Definition
SpellScript.h:269
SpellObjectAreaTargetSelectFn
#define SpellObjectAreaTargetSelectFn(F, I, N)
Definition
SpellScript.h:283
SpellHitFn
#define SpellHitFn(F)
Definition
SpellScript.h:278
UNIT_STATE_CASTING
@ UNIT_STATE_CASTING
Definition
Unit.h:527
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
Events
Events
Definition
alterac_valley.cpp:40
Murmur
Murmur
Definition
boss_murmur.cpp:19
SPELL_MURMURS_TOUCH
@ SPELL_MURMURS_TOUCH
Definition
boss_murmur.cpp:27
SPELL_MAGNETIC_PULL
@ SPELL_MAGNETIC_PULL
Definition
boss_murmur.cpp:22
SPELL_THUNDERING_STORM
@ SPELL_THUNDERING_STORM
Definition
boss_murmur.cpp:24
SPELL_RESONANCE
@ SPELL_RESONANCE
Definition
boss_murmur.cpp:21
SPELL_SONIC_BOOM_CAST
@ SPELL_SONIC_BOOM_CAST
Definition
boss_murmur.cpp:25
SPELL_SONIC_BOOM_EFFECT
@ SPELL_SONIC_BOOM_EFFECT
Definition
boss_murmur.cpp:26
EMOTE_SONIC_BOOM
@ EMOTE_SONIC_BOOM
Definition
boss_murmur.cpp:29
SPELL_SONIC_SHOCK
@ SPELL_SONIC_SHOCK
Definition
boss_murmur.cpp:23
AddSC_boss_murmur
void AddSC_boss_murmur()
Definition
boss_murmur.cpp:267
EVENT_MAGNETIC_PULL
@ EVENT_MAGNETIC_PULL
Definition
boss_murmur.cpp:37
EVENT_SONIC_BOOM
@ EVENT_SONIC_BOOM
Definition
boss_murmur.cpp:34
EVENT_MURMURS_TOUCH
@ EVENT_MURMURS_TOUCH
Definition
boss_murmur.cpp:35
EVENT_SONIC_SHOCK
@ EVENT_SONIC_SHOCK
Definition
boss_murmur.cpp:39
EVENT_THUNDERING_STORM
@ EVENT_THUNDERING_STORM
Definition
boss_murmur.cpp:38
EVENT_RESONANCE
@ EVENT_RESONANCE
Definition
boss_murmur.cpp:36
SPELL_MAGNETIC_PULL
@ SPELL_MAGNETIC_PULL
Definition
boss_thaddius.cpp:24
BossAI::events
EventMap events
Definition
ScriptedCreature.h:439
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
BossAI::_JustDied
void _JustDied()
Definition
ScriptedCreature.cpp:474
BossAI::_Reset
void _Reset()
Definition
ScriptedCreature.cpp:462
BossAI::_EnterCombat
void _EnterCombat()
Definition
ScriptedCreature.cpp:485
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
ObjectAccessor::GetUnit
static Unit * GetUnit(WorldObject const &, uint64 guid)
Definition
ObjectAccessor.cpp:204
SpellInfo
Definition
SpellInfo.h:158
SpellScript
Definition
SpellScript.h:139
SpellScript::OnHit
HookList< HitHandler > OnHit
Definition
SpellScript.h:274
SpellScript::OnEffectHit
HookList< EffectHandler > OnEffectHit
Definition
SpellScript.h:267
SpellScript::GetHitUnit
Unit * GetHitUnit()
Definition
SpellScript.cpp:399
SpellScript::SetHitDamage
void SetHitDamage(int32 damage)
Definition
SpellScript.cpp:475
SpellScript::GetCaster
Unit * GetCaster()
Definition
SpellScript.cpp:352
SpellScript::OnObjectAreaTargetSelect
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Definition
SpellScript.h:282
SpellScriptLoader::SpellScriptLoader
SpellScriptLoader(const char *name)
Definition
ScriptMgr.cpp:1372
ThreatContainer::StorageType
std::list< HostileReference * > StorageType
Definition
ThreatManager.h:127
ThunderingStormCheck
Definition
boss_murmur.cpp:226
ThunderingStormCheck::operator()
bool operator()(WorldObject *obj)
Definition
boss_murmur.cpp:230
ThunderingStormCheck::_source
WorldObject const * _source
Definition
boss_murmur.cpp:237
ThunderingStormCheck::ThunderingStormCheck
ThunderingStormCheck(WorldObject *source)
Definition
boss_murmur.cpp:228
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::DoCastAOE
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:176
Unit
Definition
Unit.h:1367
Unit::CastSpell
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
Definition
UnitCombat.cpp:324
WorldObject
Definition
Object.h:610
boss_murmur
Definition
boss_murmur.cpp:43
boss_murmur::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_murmur.cpp:157
boss_murmur::boss_murmur
boss_murmur()
Definition
boss_murmur.cpp:45
spell_murmur_sonic_boom::spell_murmur_sonic_boom_SpellScript
Definition
boss_murmur.cpp:170
spell_murmur_sonic_boom::spell_murmur_sonic_boom_SpellScript::Register
void Register() OVERRIDE
Definition
boss_murmur.cpp:185
spell_murmur_sonic_boom::spell_murmur_sonic_boom_SpellScript::PrepareSpellScript
PrepareSpellScript(spell_murmur_sonic_boom_SpellScript)
spell_murmur_sonic_boom::spell_murmur_sonic_boom_SpellScript::HandleEffect
void HandleEffect(SpellEffIndex)
Definition
boss_murmur.cpp:180
spell_murmur_sonic_boom::spell_murmur_sonic_boom_SpellScript::Validate
bool Validate(SpellInfo const *) OVERRIDE
Definition
boss_murmur.cpp:173
spell_murmur_sonic_boom_effect::spell_murmur_sonic_boom_effect_SpellScript
Definition
boss_murmur.cpp:204
spell_murmur_sonic_boom_effect::spell_murmur_sonic_boom_effect_SpellScript::Register
void Register() OVERRIDE
Definition
boss_murmur.cpp:213
spell_murmur_sonic_boom_effect::spell_murmur_sonic_boom_effect_SpellScript::CalcDamage
void CalcDamage()
Definition
boss_murmur.cpp:207
spell_murmur_sonic_boom_effect::spell_murmur_sonic_boom_effect_SpellScript::PrepareSpellScript
PrepareSpellScript(spell_murmur_sonic_boom_effect_SpellScript)
spell_murmur_sonic_boom_effect
Definition
boss_murmur.cpp:199
spell_murmur_sonic_boom_effect::GetSpellScript
SpellScript * GetSpellScript() const OVERRIDE
Definition
boss_murmur.cpp:219
spell_murmur_sonic_boom_effect::spell_murmur_sonic_boom_effect
spell_murmur_sonic_boom_effect()
Definition
boss_murmur.cpp:201
spell_murmur_sonic_boom
Definition
boss_murmur.cpp:165
spell_murmur_sonic_boom::GetSpellScript
SpellScript * GetSpellScript() const OVERRIDE
Definition
boss_murmur.cpp:191
spell_murmur_sonic_boom::spell_murmur_sonic_boom
spell_murmur_sonic_boom()
Definition
boss_murmur.cpp:167
spell_murmur_thundering_storm::spell_murmur_thundering_storm_SpellScript
Definition
boss_murmur.cpp:247
spell_murmur_thundering_storm::spell_murmur_thundering_storm_SpellScript::PrepareSpellScript
PrepareSpellScript(spell_murmur_thundering_storm_SpellScript)
spell_murmur_thundering_storm::spell_murmur_thundering_storm_SpellScript::FilterTarget
void FilterTarget(std::list< WorldObject * > &targets)
Definition
boss_murmur.cpp:250
spell_murmur_thundering_storm::spell_murmur_thundering_storm_SpellScript::Register
void Register() OVERRIDE
Definition
boss_murmur.cpp:255
spell_murmur_thundering_storm
Definition
boss_murmur.cpp:242
spell_murmur_thundering_storm::spell_murmur_thundering_storm
spell_murmur_thundering_storm()
Definition
boss_murmur.cpp:244
spell_murmur_thundering_storm::GetSpellScript
SpellScript * GetSpellScript() const OVERRIDE
Definition
boss_murmur.cpp:261
shadow_labyrinth.h
GetShadowLabyrinthAI
AI * GetShadowLabyrinthAI(Creature *creature)
Definition
shadow_labyrinth.h:45
DATA_MURMUR
@ DATA_MURMUR
Definition
shadow_labyrinth.h:19
ScriptedAI::IsHeroic
bool IsHeroic() const
Definition
ScriptedCreature.h:279
ScriptedAI::SetCombatMovement
void SetCombatMovement(bool allowMovement)
Definition
ScriptedCreature.cpp:394
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
boss_murmur::boss_murmurAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_murmur.cpp:79
boss_murmur::boss_murmurAI::boss_murmurAI
boss_murmurAI(Creature *creature)
Definition
boss_murmur.cpp:49
boss_murmur::boss_murmurAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_murmur.cpp:84
boss_murmur::boss_murmurAI::Reset
void Reset() OVERRIDE
Definition
boss_murmur.cpp:54
boss_murmur::boss_murmurAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_murmur.cpp:74
src
server
scripts
Outland
Auchindoun
ShadowLabyrinth
boss_murmur.cpp
Generated on
for Project SkyFire Core by
1.17.0