Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_maexxna.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 "
PassiveAI.h
"
9
#include "
naxxramas.h
"
10
11
enum
Spells
12
{
13
SPELL_WEB_WRAP
= 28622,
14
SPELL_WEB_SPRAY_10
= 29484,
15
SPELL_WEB_SPRAY_25
= 54125,
16
SPELL_POISON_SHOCK_10
= 28741,
17
SPELL_POISON_SHOCK_25
= 54122,
18
SPELL_NECROTIC_POISON_10
= 28776,
19
SPELL_NECROTIC_POISON_25
= 54121,
20
SPELL_FRENZY_10
= 54123,
21
SPELL_FRENZY_25
= 54124,
22
};
23
24
enum
Creatures
25
{
26
NPC_WEB_WRAP
= 16486,
27
NPC_SPIDERLING
= 17055,
28
};
29
30
#define MAX_POS_WRAP 3
31
const
Position
PosWrap
[
MAX_POS_WRAP
] =
32
{
33
{3546.796f, -3869.082f, 296.450f, 0.0f},
34
{3531.271f, -3847.424f, 299.450f, 0.0f},
35
{3497.067f, -3843.384f, 302.384f, 0.0f},
36
};
37
38
enum
Events
39
{
40
EVENT_NONE
,
41
EVENT_SPRAY
,
42
EVENT_SHOCK
,
43
EVENT_POISON
,
44
EVENT_WRAP
,
45
EVENT_SUMMON
,
46
EVENT_FRENZY
,
47
};
48
49
class
boss_maexxna
:
public
CreatureScript
50
{
51
public
:
52
boss_maexxna
() :
CreatureScript
(
"boss_maexxna"
) { }
53
54
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
55
{
56
return
new
boss_maexxnaAI
(creature);
57
}
58
59
struct
boss_maexxnaAI
:
public
BossAI
60
{
61
boss_maexxnaAI
(
Creature
* creature) :
BossAI
(creature,
BOSS_MAEXXNA
) { }
62
63
bool
enraged
;
64
65
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
66
{
67
_EnterCombat
();
68
enraged
=
false
;
69
events
.ScheduleEvent(
EVENT_WRAP
, 20000);
70
events
.ScheduleEvent(
EVENT_SPRAY
, 40000);
71
events
.ScheduleEvent(
EVENT_SHOCK
, std::rand() % 10000 + 5000);
72
events
.ScheduleEvent(
EVENT_POISON
, std::rand() % 15000 + 10000);
73
events
.ScheduleEvent(
EVENT_SUMMON
, 30000);
74
}
75
76
void
UpdateAI
(
uint32
diff)
OVERRIDE
77
{
78
if
(!
UpdateVictim
() || !
CheckInRoom
())
79
return
;
80
81
if
(!
enraged
&&
HealthBelowPct
(30))
82
{
83
enraged
=
true
;
84
events
.ScheduleEvent(
EVENT_FRENZY
, 0);
// will be cast immediately
85
}
86
87
events
.Update(diff);
88
89
while
(
uint32
eventId =
events
.ExecuteEvent())
90
{
91
switch
(eventId)
92
{
93
case
EVENT_WRAP
:
95
for
(
uint8
i = 0; i <
RAID_MODE
(1, 2); ++i)
96
{
97
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1, 0,
true
, -
SPELL_WEB_WRAP
))
98
{
99
target->RemoveAura(
RAID_MODE
(
SPELL_WEB_SPRAY_10
,
SPELL_WEB_SPRAY_25
));
100
uint8
pos = rand()%
MAX_POS_WRAP
;
101
target->GetMotionMaster()->MoveJump(
PosWrap
[pos].GetPositionX(),
PosWrap
[pos].GetPositionY(),
PosWrap
[pos].GetPositionZ(), 20, 20);
102
if
(
Creature
* wrap =
DoSummon
(
NPC_WEB_WRAP
,
PosWrap
[pos], 0,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
))
103
wrap->AI()->SetGUID(target->GetGUID());
104
}
105
}
106
events
.ScheduleEvent(
EVENT_WRAP
, 40000);
107
break
;
108
case
EVENT_SPRAY
:
109
DoCastAOE
(
RAID_MODE
(
SPELL_WEB_SPRAY_10
,
SPELL_WEB_SPRAY_25
));
110
events
.ScheduleEvent(
EVENT_SPRAY
, 40000);
111
break
;
112
case
EVENT_SHOCK
:
113
DoCastAOE
(
RAID_MODE
(
SPELL_POISON_SHOCK_10
,
SPELL_POISON_SHOCK_25
));
114
events
.ScheduleEvent(
EVENT_SHOCK
, std::rand() % 20000 + 10000);
115
break
;
116
case
EVENT_POISON
:
117
DoCastVictim
(
RAID_MODE
(
SPELL_NECROTIC_POISON_10
,
SPELL_NECROTIC_POISON_25
));
118
events
.ScheduleEvent(
EVENT_POISON
, std::rand() % 20000 + 10000);
119
break
;
120
case
EVENT_FRENZY
:
121
DoCast
(
me
,
RAID_MODE
(
SPELL_FRENZY_10
,
SPELL_FRENZY_25
),
true
);
122
events
.ScheduleEvent(
EVENT_FRENZY
, 600000);
123
break
;
124
case
EVENT_SUMMON
:
126
uint8
amount = std::rand() % 10 + 8;
127
for
(
uint8
i = 0; i < amount; ++i)
128
DoSummon
(
NPC_SPIDERLING
,
me
, 0, 30000,
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
);
129
events
.ScheduleEvent(
EVENT_SUMMON
, 40000);
130
break
;
131
}
132
}
133
134
DoMeleeAttackIfReady
();
135
}
136
};
137
};
138
139
class
npc_webwrap
:
public
CreatureScript
140
{
141
public
:
142
npc_webwrap
() :
CreatureScript
(
"npc_webwrap"
) { }
143
144
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
145
{
146
return
new
npc_webwrapAI
(creature);
147
}
148
149
struct
npc_webwrapAI
:
public
NullCreatureAI
150
{
151
npc_webwrapAI
(
Creature
* creature) :
NullCreatureAI
(creature),
victimGUID
(0) { }
152
153
uint64
victimGUID
;
154
155
void
SetGUID
(
uint64
guid,
int32
/*param*/
)
OVERRIDE
156
{
157
victimGUID
= guid;
158
if
(
me
->m_spells[0] &&
victimGUID
)
159
if
(
Unit
* victim =
Unit::GetUnit
(*
me
,
victimGUID
))
160
victim->CastSpell(victim,
me
->m_spells[0],
true
, NULL, NULL,
me
->GetGUID());
161
}
162
163
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
164
{
165
if
(
me
->m_spells[0] &&
victimGUID
)
166
if
(
Unit
* victim =
Unit::GetUnit
(*
me
,
victimGUID
))
167
victim->RemoveAurasDueToSpell(
me
->m_spells[0],
me
->GetGUID());
168
}
169
};
170
};
171
172
void
AddSC_boss_maexxna
()
173
{
174
new
boss_maexxna
();
175
new
npc_webwrap
();
176
}
Spells
Spells
Definition
BattlegroundIC.h:645
int32
std::int32_t int32
Definition
Define.h:73
uint8
std::uint8_t uint8
Definition
Define.h:79
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
uint64
std::uint64_t uint64
Definition
Define.h:76
TempSummonType::TEMPSUMMON_CORPSE_DESPAWN
@ TEMPSUMMON_CORPSE_DESPAWN
Definition
Object.h:72
PassiveAI.h
ScriptMgr.h
ScriptedCreature.h
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
Creatures
Creatures
Definition
alterac_valley.cpp:28
Events
Events
Definition
alterac_valley.cpp:40
EVENT_POISON
@ EVENT_POISON
Definition
boss_faerlina.cpp:35
EVENT_NONE
@ EVENT_NONE
Definition
boss_felmyst.cpp:84
EVENT_FRENZY
@ EVENT_FRENZY
Definition
boss_gizrul_the_slavener.cpp:27
EVENT_SUMMON
@ EVENT_SUMMON
Definition
boss_gluth.cpp:37
SPELL_WEB_WRAP
@ SPELL_WEB_WRAP
Definition
boss_krikthir_the_gatewatcher.cpp:36
NPC_WEB_WRAP
@ NPC_WEB_WRAP
Definition
boss_maexxna.cpp:26
NPC_SPIDERLING
@ NPC_SPIDERLING
Definition
boss_maexxna.cpp:27
MAX_POS_WRAP
#define MAX_POS_WRAP
Definition
boss_maexxna.cpp:30
SPELL_FRENZY_10
@ SPELL_FRENZY_10
Definition
boss_maexxna.cpp:20
SPELL_POISON_SHOCK_25
@ SPELL_POISON_SHOCK_25
Definition
boss_maexxna.cpp:17
SPELL_WEB_SPRAY_25
@ SPELL_WEB_SPRAY_25
Definition
boss_maexxna.cpp:15
SPELL_NECROTIC_POISON_25
@ SPELL_NECROTIC_POISON_25
Definition
boss_maexxna.cpp:19
SPELL_WEB_WRAP
@ SPELL_WEB_WRAP
Definition
boss_maexxna.cpp:13
SPELL_NECROTIC_POISON_10
@ SPELL_NECROTIC_POISON_10
Definition
boss_maexxna.cpp:18
SPELL_FRENZY_25
@ SPELL_FRENZY_25
Definition
boss_maexxna.cpp:21
SPELL_WEB_SPRAY_10
@ SPELL_WEB_SPRAY_10
Definition
boss_maexxna.cpp:14
SPELL_POISON_SHOCK_10
@ SPELL_POISON_SHOCK_10
Definition
boss_maexxna.cpp:16
AddSC_boss_maexxna
void AddSC_boss_maexxna()
Definition
boss_maexxna.cpp:172
PosWrap
const Position PosWrap[MAX_POS_WRAP]
Definition
boss_maexxna.cpp:31
EVENT_SHOCK
@ EVENT_SHOCK
Definition
boss_maexxna.cpp:42
EVENT_WRAP
@ EVENT_WRAP
Definition
boss_maexxna.cpp:44
EVENT_SPRAY
@ EVENT_SPRAY
Definition
boss_maexxna.cpp:41
EVENT_FRENZY
@ EVENT_FRENZY
Definition
boss_maexxna.cpp:46
EVENT_SUMMON
@ EVENT_SUMMON
Definition
boss_maexxna.cpp:45
EVENT_POISON
@ EVENT_POISON
Definition
boss_maexxna.cpp:43
EVENT_SPRAY
@ EVENT_SPRAY
Definition
boss_northrend_beasts.cpp:118
BossAI::CheckInRoom
bool CheckInRoom()
Definition
ScriptedCreature.h:427
BossAI::events
EventMap events
Definition
ScriptedCreature.h:439
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
BossAI::_EnterCombat
void _EnterCombat()
Definition
ScriptedCreature.cpp:485
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::DoSummon
Creature * DoSummon(uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TempSummonType::TEMPSUMMON_CORPSE_TIMED_DESPAWN)
Definition
CreatureAI.cpp:235
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
NullCreatureAI::NullCreatureAI
NullCreatureAI(Creature *c)
Definition
PassiveAI.cpp:12
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
UnitAI::DoCastAOE
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition
UnitAI.cpp:176
Unit
Definition
Unit.h:1367
Unit::GetUnit
static Unit * GetUnit(WorldObject &object, uint64 guid)
Definition
Unit.cpp:4895
boss_maexxna
Definition
boss_maexxna.cpp:50
boss_maexxna::boss_maexxna
boss_maexxna()
Definition
boss_maexxna.cpp:52
boss_maexxna::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_maexxna.cpp:54
npc_webwrap
Definition
boss_maexxna.cpp:140
npc_webwrap::npc_webwrap
npc_webwrap()
Definition
boss_maexxna.cpp:142
npc_webwrap::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_maexxna.cpp:144
naxxramas.h
BOSS_MAEXXNA
@ BOSS_MAEXXNA
Definition
naxxramas.h:15
Position
Definition
Object.h:274
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthBelowPct
bool HealthBelowPct(uint32 pct) const
Definition
ScriptedCreature.h:247
ScriptedAI::RAID_MODE
const T & RAID_MODE(const T &normal10, const T &normal25) const
Definition
ScriptedCreature.h:310
boss_maexxna::boss_maexxnaAI
Definition
boss_maexxna.cpp:60
boss_maexxna::boss_maexxnaAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_maexxna.cpp:65
boss_maexxna::boss_maexxnaAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_maexxna.cpp:76
boss_maexxna::boss_maexxnaAI::boss_maexxnaAI
boss_maexxnaAI(Creature *creature)
Definition
boss_maexxna.cpp:61
boss_maexxna::boss_maexxnaAI::enraged
bool enraged
Definition
boss_maexxna.cpp:63
npc_webwrap::npc_webwrapAI
Definition
boss_maexxna.cpp:150
npc_webwrap::npc_webwrapAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_maexxna.cpp:163
npc_webwrap::npc_webwrapAI::SetGUID
void SetGUID(uint64 guid, int32) OVERRIDE
Definition
boss_maexxna.cpp:155
npc_webwrap::npc_webwrapAI::victimGUID
uint64 victimGUID
Definition
boss_maexxna.cpp:153
npc_webwrap::npc_webwrapAI::npc_webwrapAI
npc_webwrapAI(Creature *creature)
Definition
boss_maexxna.cpp:151
src
server
scripts
Northrend
Naxxramas
boss_maexxna.cpp
Generated on
for Project SkyFire Core by
1.17.0