Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_grobbulus.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 "
naxxramas.h
"
9
#include "
SpellInfo.h
"
10
11
enum
Spells
12
{
13
SPELL_BOMBARD_SLIME
= 28280,
14
SPELL_POISON_CLOUD
= 28240,
15
SPELL_MUTATING_INJECTION
= 28169,
16
SPELL_SLIME_SPRAY
= 28157,
17
H_SPELL_SLIME_SPRAY
= 54364,
18
SPELL_BERSERK
= 26662,
19
SPELL_POISON_CLOUD_ADD
= 59116
20
};
21
22
enum
Events
23
{
24
EVENT_BERSERK
= 1,
25
EVENT_CLOUD
= 2,
26
EVENT_INJECT
= 3,
27
EVENT_SPRAY
= 4
28
};
29
30
enum
CreatureId
31
{
32
NPC_FALLOUT_SLIME
= 16290
33
};
34
35
class
boss_grobbulus
:
public
CreatureScript
36
{
37
public
:
38
boss_grobbulus
() :
CreatureScript
(
"boss_grobbulus"
) { }
39
40
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
41
{
42
return
new
boss_grobbulusAI
(creature);
43
}
44
45
struct
boss_grobbulusAI
:
public
BossAI
46
{
47
boss_grobbulusAI
(
Creature
* creature) :
BossAI
(creature,
BOSS_GROBBULUS
)
48
{
49
me
->ApplySpellImmune(0,
IMMUNITY_ID
,
SPELL_POISON_CLOUD_ADD
,
true
);
50
}
51
52
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
53
{
54
_EnterCombat
();
55
events
.ScheduleEvent(
EVENT_CLOUD
, 15000);
56
events
.ScheduleEvent(
EVENT_INJECT
, 20000);
57
events
.ScheduleEvent(
EVENT_SPRAY
, 15000+rand()%15000);
//not sure
58
events
.ScheduleEvent(
EVENT_BERSERK
, 12*60000);
59
}
60
61
void
SpellHitTarget
(
Unit
* target,
const
SpellInfo
* spell)
OVERRIDE
62
{
63
if
(spell->Id ==
uint32
(
SPELL_SLIME_SPRAY
))
64
{
65
if
(
TempSummon
* slime =
me
->SummonCreature(
NPC_FALLOUT_SLIME
, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0,
TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
, 0))
66
DoZoneInCombat
(slime);
67
}
68
}
69
70
void
UpdateAI
(
uint32
diff)
OVERRIDE
71
{
72
if
(!
UpdateVictim
())
73
return
;
74
75
events
.Update(diff);
76
77
while
(
uint32
eventId =
events
.ExecuteEvent())
78
{
79
switch
(eventId)
80
{
81
case
EVENT_CLOUD
:
82
DoCastAOE
(
SPELL_POISON_CLOUD
);
83
events
.ScheduleEvent(
EVENT_CLOUD
, 15000);
84
return
;
85
case
EVENT_BERSERK
:
86
DoCastAOE
(
SPELL_BERSERK
);
87
return
;
88
case
EVENT_SPRAY
:
89
DoCastAOE
(
SPELL_SLIME_SPRAY
);
90
events
.ScheduleEvent(
EVENT_SPRAY
, 15000+rand()%15000);
91
return
;
92
case
EVENT_INJECT
:
93
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 1))
94
if
(!target->HasAura(
SPELL_MUTATING_INJECTION
))
95
DoCast
(target,
SPELL_MUTATING_INJECTION
);
96
events
.ScheduleEvent(
EVENT_INJECT
, 8000 +
uint32
(120 *
me
->GetHealthPct()));
97
return
;
98
}
99
}
100
DoMeleeAttackIfReady
();
101
}
102
};
103
};
104
105
class
npc_grobbulus_poison_cloud
:
public
CreatureScript
106
{
107
public
:
108
npc_grobbulus_poison_cloud
() :
CreatureScript
(
"npc_grobbulus_poison_cloud"
) { }
109
110
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
111
{
112
return
new
npc_grobbulus_poison_cloudAI
(creature);
113
}
114
115
struct
npc_grobbulus_poison_cloudAI
:
public
ScriptedAI
116
{
117
npc_grobbulus_poison_cloudAI
(
Creature
* creature) :
ScriptedAI
(creature)
118
{
119
SetCombatMovement
(
false
);
120
}
121
122
uint32
Cloud_Timer
;
123
124
void
Reset
()
OVERRIDE
125
{
126
Cloud_Timer
= 1000;
127
me
->SetFlag(
UNIT_FIELD_FLAGS
,
UNIT_FLAG_NON_ATTACKABLE
);
128
}
129
130
void
UpdateAI
(
uint32
diff)
OVERRIDE
131
{
132
if
(
Cloud_Timer
<= diff)
133
{
134
DoCast
(
me
,
SPELL_POISON_CLOUD_ADD
);
135
Cloud_Timer
= 10000;
136
}
else
Cloud_Timer
-= diff;
137
}
138
};
139
};
140
141
void
AddSC_boss_grobbulus
()
142
{
143
new
boss_grobbulus
();
144
new
npc_grobbulus_poison_cloud
();
145
}
Spells
Spells
Definition
BattlegroundIC.h:645
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
Definition
Object.h:71
ScriptMgr.h
ScriptedCreature.h
IMMUNITY_ID
@ IMMUNITY_ID
Definition
SharedDefines.h:1602
SpellInfo.h
UNIT_FLAG_NON_ATTACKABLE
@ UNIT_FLAG_NON_ATTACKABLE
Definition
Unit.h:626
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
UNIT_FIELD_FLAGS
@ UNIT_FIELD_FLAGS
Definition
UpdateFields.h:82
Events
Events
Definition
alterac_valley.cpp:40
SPELL_POISON_CLOUD
@ SPELL_POISON_CLOUD
Definition
boss_aku_mai.cpp:12
SPELL_BERSERK
#define SPELL_BERSERK
Definition
boss_four_horsemen.cpp:62
H_SPELL_SLIME_SPRAY
@ H_SPELL_SLIME_SPRAY
Definition
boss_grobbulus.cpp:17
SPELL_BOMBARD_SLIME
@ SPELL_BOMBARD_SLIME
Definition
boss_grobbulus.cpp:13
SPELL_POISON_CLOUD_ADD
@ SPELL_POISON_CLOUD_ADD
Definition
boss_grobbulus.cpp:19
SPELL_MUTATING_INJECTION
@ SPELL_MUTATING_INJECTION
Definition
boss_grobbulus.cpp:15
SPELL_SLIME_SPRAY
@ SPELL_SLIME_SPRAY
Definition
boss_grobbulus.cpp:16
SPELL_BERSERK
@ SPELL_BERSERK
Definition
boss_grobbulus.cpp:18
SPELL_POISON_CLOUD
@ SPELL_POISON_CLOUD
Definition
boss_grobbulus.cpp:14
NPC_FALLOUT_SLIME
@ NPC_FALLOUT_SLIME
Definition
boss_grobbulus.cpp:32
AddSC_boss_grobbulus
void AddSC_boss_grobbulus()
Definition
boss_grobbulus.cpp:141
EVENT_CLOUD
@ EVENT_CLOUD
Definition
boss_grobbulus.cpp:25
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_grobbulus.cpp:24
EVENT_INJECT
@ EVENT_INJECT
Definition
boss_grobbulus.cpp:26
EVENT_SPRAY
@ EVENT_SPRAY
Definition
boss_grobbulus.cpp:27
EVENT_SPRAY
@ EVENT_SPRAY
Definition
boss_northrend_beasts.cpp:118
EVENT_BERSERK
@ EVENT_BERSERK
Definition
boss_occuthar.cpp:31
CreatureId
CreatureId
Definition
boss_ramstein_the_gorger.cpp:24
SPELL_SLIME_SPRAY
@ SPELL_SLIME_SPRAY
Definition
boss_rotface.cpp:35
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::DoZoneInCombat
void DoZoneInCombat(Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
Definition
CreatureAI.cpp:33
CreatureAI::UpdateVictim
bool UpdateVictim()
Definition
CreatureAI.cpp:192
Creature
Definition
Creature.h:427
CreatureScript::CreatureScript
CreatureScript(const char *name)
Definition
ScriptMgr.cpp:1436
SpellInfo
Definition
SpellInfo.h:158
TempSummon
Definition
TemporarySummon.h:27
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
boss_grobbulus
Definition
boss_grobbulus.cpp:36
boss_grobbulus::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_grobbulus.cpp:40
boss_grobbulus::boss_grobbulus
boss_grobbulus()
Definition
boss_grobbulus.cpp:38
npc_grobbulus_poison_cloud
Definition
boss_grobbulus.cpp:106
npc_grobbulus_poison_cloud::npc_grobbulus_poison_cloud
npc_grobbulus_poison_cloud()
Definition
boss_grobbulus.cpp:108
npc_grobbulus_poison_cloud::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_grobbulus.cpp:110
naxxramas.h
BOSS_GROBBULUS
@ BOSS_GROBBULUS
Definition
naxxramas.h:20
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_grobbulus::boss_grobbulusAI
Definition
boss_grobbulus.cpp:46
boss_grobbulus::boss_grobbulusAI::SpellHitTarget
void SpellHitTarget(Unit *target, const SpellInfo *spell) OVERRIDE
Definition
boss_grobbulus.cpp:61
boss_grobbulus::boss_grobbulusAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_grobbulus.cpp:70
boss_grobbulus::boss_grobbulusAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_grobbulus.cpp:52
boss_grobbulus::boss_grobbulusAI::boss_grobbulusAI
boss_grobbulusAI(Creature *creature)
Definition
boss_grobbulus.cpp:47
npc_grobbulus_poison_cloud::npc_grobbulus_poison_cloudAI
Definition
boss_grobbulus.cpp:116
npc_grobbulus_poison_cloud::npc_grobbulus_poison_cloudAI::Cloud_Timer
uint32 Cloud_Timer
Definition
boss_grobbulus.cpp:122
npc_grobbulus_poison_cloud::npc_grobbulus_poison_cloudAI::npc_grobbulus_poison_cloudAI
npc_grobbulus_poison_cloudAI(Creature *creature)
Definition
boss_grobbulus.cpp:117
npc_grobbulus_poison_cloud::npc_grobbulus_poison_cloudAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_grobbulus.cpp:130
npc_grobbulus_poison_cloud::npc_grobbulus_poison_cloudAI::Reset
void Reset() OVERRIDE
Definition
boss_grobbulus.cpp:124
src
server
scripts
Northrend
Naxxramas
boss_grobbulus.cpp
Generated on
for Project SkyFire Core by
1.17.0