Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_moam.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
#include "
ScriptMgr.h
"
7
#include "
ScriptedCreature.h
"
8
#include "
ruins_of_ahnqiraj.h
"
9
10
enum
Texts
11
{
12
EMOTE_AGGRO
= 0,
13
EMOTE_MANA_FULL
= 1
14
};
15
16
enum
Spells
17
{
18
SPELL_TRAMPLE
= 15550,
19
SPELL_DRAIN_MANA
= 25671,
20
SPELL_ARCANE_ERUPTION
= 25672,
21
SPELL_SUMMON_MANA_FIEND_1
= 25681,
// TARGET_DEST_CASTER_FRONT
22
SPELL_SUMMON_MANA_FIEND_2
= 25682,
// TARGET_DEST_CASTER_LEFT
23
SPELL_SUMMON_MANA_FIEND_3
= 25683,
// TARGET_DEST_CASTER_RIGHT
24
SPELL_ENERGIZE
= 25685
25
};
26
27
enum
Events
28
{
29
EVENT_TRAMPLE
= 1,
30
EVENT_DRAIN_MANA
= 2,
31
EVENT_STONE_PHASE
= 3,
32
EVENT_STONE_PHASE_END
= 4,
33
EVENT_WIDE_SLASH
= 5,
34
};
35
36
enum
Actions
37
{
38
ACTION_STONE_PHASE_START
= 1,
39
ACTION_STONE_PHASE_END
= 2,
40
};
41
42
class
boss_moam
:
public
CreatureScript
43
{
44
public
:
45
boss_moam
() :
CreatureScript
(
"boss_moam"
) { }
46
47
struct
boss_moamAI
:
public
BossAI
48
{
49
boss_moamAI
(
Creature
* creature) :
BossAI
(creature,
DATA_MOAM
)
50
{
51
}
52
53
void
Reset
()
OVERRIDE
54
{
55
_Reset
();
56
me
->SetPower(
POWER_MANA
, 0);
57
_isStonePhase
=
false
;
58
events
.ScheduleEvent(
EVENT_STONE_PHASE
, 90000);
59
//events.ScheduleEvent(EVENT_WIDE_SLASH, 11000);
60
}
61
62
void
DamageTaken
(
Unit
*
/*attacker*/
,
uint32
&
/*damage*/
)
OVERRIDE
63
{
64
if
(!
_isStonePhase
&&
HealthBelowPct
(45))
65
{
66
_isStonePhase
=
true
;
67
DoAction
(
ACTION_STONE_PHASE_START
);
68
}
69
}
70
71
void
DoAction
(
int32
action)
OVERRIDE
72
{
73
switch
(action)
74
{
75
case
ACTION_STONE_PHASE_END
:
76
{
77
me
->RemoveAurasDueToSpell(
SPELL_ENERGIZE
);
78
events
.ScheduleEvent(
EVENT_STONE_PHASE
, 90000);
79
_isStonePhase
=
false
;
80
break
;
81
}
82
case
ACTION_STONE_PHASE_START
:
83
{
84
DoCast
(
me
,
SPELL_SUMMON_MANA_FIEND_1
);
85
DoCast
(
me
,
SPELL_SUMMON_MANA_FIEND_2
);
86
DoCast
(
me
,
SPELL_SUMMON_MANA_FIEND_3
);
87
DoCast
(
me
,
SPELL_ENERGIZE
);
88
events
.ScheduleEvent(
EVENT_STONE_PHASE_END
, 90000);
89
break
;
90
}
91
default
:
92
break
;
93
}
94
}
95
96
void
UpdateAI
(
uint32
diff)
OVERRIDE
97
{
98
if
(!
UpdateVictim
())
99
return
;
100
101
events
.Update(diff);
102
103
if
(
me
->GetPower(
POWER_MANA
) ==
me
->GetMaxPower(
POWER_MANA
))
104
{
105
if
(
_isStonePhase
)
106
DoAction
(
ACTION_STONE_PHASE_END
);
107
DoCastAOE
(
SPELL_ARCANE_ERUPTION
);
108
me
->SetPower(
POWER_MANA
, 0);
109
}
110
111
if
(
_isStonePhase
)
112
{
113
if
(
events
.ExecuteEvent() ==
EVENT_STONE_PHASE_END
)
114
DoAction
(
ACTION_STONE_PHASE_END
);
115
return
;
116
}
117
118
// Messing up mana-drain channel
119
//if (me->HasUnitState(UNIT_STATE_CASTING))
120
// return;
121
122
while
(
uint32
eventId =
events
.ExecuteEvent())
123
{
124
switch
(eventId)
125
{
126
case
EVENT_STONE_PHASE
:
127
DoAction
(
ACTION_STONE_PHASE_START
);
128
break
;
129
case
EVENT_DRAIN_MANA
:
130
{
131
std::list<Unit*> targetList;
132
{
133
const
std::list<HostileReference*>& threatlist =
me
->getThreatManager().getThreatList();
134
for
(std::list<HostileReference*>::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
135
if
((*itr)->getTarget()->GetTypeId() ==
TypeID::TYPEID_PLAYER
&& (*itr)->getTarget()->getPowerType() ==
POWER_MANA
)
136
targetList.push_back((*itr)->getTarget());
137
}
138
139
Skyfire::Containers::RandomResizeList
(targetList, 5);
140
141
for
(std::list<Unit*>::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
142
DoCast
(*itr,
SPELL_DRAIN_MANA
);
143
144
events
.ScheduleEvent(
EVENT_DRAIN_MANA
, std::rand() % 15000 + 5000);
145
break
;
146
}
/*
147
case EVENT_WIDE_SLASH:
148
DoCast(me, SPELL_WIDE_SLASH);
149
events.ScheduleEvent(EVENT_WIDE_SLASH, 11000);
150
break;
151
case EVENT_TRASH:
152
DoCast(me, SPELL_TRASH);
153
events.ScheduleEvent(EVENT_WIDE_SLASH, 16000);
154
break;*/
155
default
:
156
break
;
157
}
158
}
159
160
DoMeleeAttackIfReady
();
161
}
162
private
:
163
bool
_isStonePhase
;
164
};
165
166
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
167
{
168
return
new
boss_moamAI
(creature);
169
}
170
};
171
172
void
AddSC_boss_moam
()
173
{
174
new
boss_moam
();
175
}
Actions
Actions
Definition
BattlegroundIC.h:186
Spells
Spells
Definition
BattlegroundIC.h:645
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
TypeID::TYPEID_PLAYER
@ TYPEID_PLAYER
Definition
Object.h:55
ScriptMgr.h
ScriptedCreature.h
POWER_MANA
@ POWER_MANA
Definition
SharedDefines.h:215
Events
Events
Definition
alterac_valley.cpp:40
Texts
Texts
Definition
boss_alizabal.cpp:13
EVENT_WIDE_SLASH
@ EVENT_WIDE_SLASH
Definition
boss_kurinnaxx.cpp:27
ACTION_STONE_PHASE_START
@ ACTION_STONE_PHASE_START
Definition
boss_moam.cpp:38
ACTION_STONE_PHASE_END
@ ACTION_STONE_PHASE_END
Definition
boss_moam.cpp:39
SPELL_ARCANE_ERUPTION
@ SPELL_ARCANE_ERUPTION
Definition
boss_moam.cpp:20
SPELL_SUMMON_MANA_FIEND_3
@ SPELL_SUMMON_MANA_FIEND_3
Definition
boss_moam.cpp:23
SPELL_ENERGIZE
@ SPELL_ENERGIZE
Definition
boss_moam.cpp:24
SPELL_DRAIN_MANA
@ SPELL_DRAIN_MANA
Definition
boss_moam.cpp:19
SPELL_SUMMON_MANA_FIEND_2
@ SPELL_SUMMON_MANA_FIEND_2
Definition
boss_moam.cpp:22
SPELL_SUMMON_MANA_FIEND_1
@ SPELL_SUMMON_MANA_FIEND_1
Definition
boss_moam.cpp:21
AddSC_boss_moam
void AddSC_boss_moam()
Definition
boss_moam.cpp:172
EMOTE_AGGRO
@ EMOTE_AGGRO
Definition
boss_moam.cpp:12
EMOTE_MANA_FULL
@ EMOTE_MANA_FULL
Definition
boss_moam.cpp:13
EVENT_STONE_PHASE_END
@ EVENT_STONE_PHASE_END
Definition
boss_moam.cpp:32
EVENT_STONE_PHASE
@ EVENT_STONE_PHASE
Definition
boss_moam.cpp:31
EVENT_DRAIN_MANA
@ EVENT_DRAIN_MANA
Definition
boss_moam.cpp:30
EVENT_TRAMPLE
@ EVENT_TRAMPLE
Definition
boss_moam.cpp:29
SPELL_TRAMPLE
@ SPELL_TRAMPLE
Definition
boss_ramstein_the_gorger.cpp:19
SPELL_DRAIN_MANA
@ SPELL_DRAIN_MANA
Definition
boss_selin_fireheart.cpp:39
BossAI::events
EventMap events
Definition
ScriptedCreature.h:439
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
BossAI::_Reset
void _Reset()
Definition
ScriptedCreature.cpp:462
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
UnitAI::DoMeleeAttackIfReady
void DoMeleeAttackIfReady()
Definition
UnitAI.cpp:28
UnitAI::DoCast
void DoCast(uint32 spellId)
Definition
UnitAI.cpp:110
UnitAI::DoCastAOE
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:176
Unit
Definition
Unit.h:1367
boss_moam
Definition
boss_moam.cpp:43
boss_moam::boss_moam
boss_moam()
Definition
boss_moam.cpp:45
boss_moam::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_moam.cpp:166
Skyfire::Containers::RandomResizeList
void RandomResizeList(std::list< T > &list, uint32 size)
Definition
Containers.h:19
ruins_of_ahnqiraj.h
DATA_MOAM
@ DATA_MOAM
Definition
ruins_of_ahnqiraj.h:13
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthBelowPct
bool HealthBelowPct(uint32 pct) const
Definition
ScriptedCreature.h:247
boss_moam::boss_moamAI
Definition
boss_moam.cpp:48
boss_moam::boss_moamAI::_isStonePhase
bool _isStonePhase
Definition
boss_moam.cpp:163
boss_moam::boss_moamAI::DamageTaken
void DamageTaken(Unit *, uint32 &) OVERRIDE
Definition
boss_moam.cpp:62
boss_moam::boss_moamAI::Reset
void Reset() OVERRIDE
Definition
boss_moam.cpp:53
boss_moam::boss_moamAI::DoAction
void DoAction(int32 action) OVERRIDE
Definition
boss_moam.cpp:71
boss_moam::boss_moamAI::boss_moamAI
boss_moamAI(Creature *creature)
Definition
boss_moam.cpp:49
boss_moam::boss_moamAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_moam.cpp:96
src
server
scripts
Kalimdor
RuinsOfAhnQiraj
boss_moam.cpp
Generated on
for Project SkyFire Core by
1.17.0