Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_curator.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_Curator
8
SD%Complete: 100
9
SDComment:
10
SDCategory: Karazhan
11
EndScriptData */
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
16
enum
Curator
17
{
18
SAY_AGGRO
= 0,
19
SAY_SUMMON
= 1,
20
SAY_EVOCATE
= 2,
21
SAY_ENRAGE
= 3,
22
SAY_KILL
= 4,
23
SAY_DEATH
= 5,
24
25
//Flare spell info
26
SPELL_ASTRAL_FLARE_PASSIVE
= 30234,
//Visual effect + Flare damage
27
28
//Curator spell info
29
SPELL_HATEFUL_BOLT
= 30383,
30
SPELL_EVOCATION
= 30254,
31
SPELL_ENRAGE
= 30403,
//Arcane Infusion: Transforms Curator and adds damage.
32
SPELL_BERSERK
= 26662,
33
};
34
35
36
37
38
class
boss_curator
:
public
CreatureScript
39
{
40
public
:
41
boss_curator
() :
CreatureScript
(
"boss_curator"
) { }
42
43
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
44
{
45
return
new
boss_curatorAI
(creature);
46
}
47
48
struct
boss_curatorAI
:
public
ScriptedAI
49
{
50
boss_curatorAI
(
Creature
* creature) :
ScriptedAI
(creature) { }
51
52
uint32
AddTimer
;
53
uint32
HatefulBoltTimer
;
54
uint32
BerserkTimer
;
55
56
bool
Enraged
;
57
bool
Evocating
;
58
59
void
Reset
()
OVERRIDE
60
{
61
AddTimer
= 10000;
62
HatefulBoltTimer
= 15000;
//This time may be wrong
63
BerserkTimer
= 720000;
//12 minutes
64
Enraged
=
false
;
65
Evocating
=
false
;
66
67
me
->ApplySpellImmune(0,
IMMUNITY_DAMAGE
,
SPELL_SCHOOL_MASK_ARCANE
,
true
);
68
}
69
70
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
71
{
72
Talk
(
SAY_KILL
);
73
}
74
75
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
76
{
77
Talk
(
SAY_DEATH
);
78
}
79
80
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
81
{
82
Talk
(
SAY_AGGRO
);
83
}
84
85
void
UpdateAI
(
uint32
diff)
OVERRIDE
86
{
87
if
(!
UpdateVictim
())
88
return
;
89
90
//always decrease BerserkTimer
91
if
(
BerserkTimer
<= diff)
92
{
93
//if evocate, then break evocate
94
if
(
Evocating
)
95
{
96
if
(
me
->HasAura(
SPELL_EVOCATION
))
97
me
->RemoveAurasDueToSpell(
SPELL_EVOCATION
);
98
99
Evocating
=
false
;
100
}
101
102
//may not be correct SAY (generic hard enrage)
103
Talk
(
SAY_ENRAGE
);
104
105
me
->InterruptNonMeleeSpells(
true
);
106
DoCast
(
me
,
SPELL_BERSERK
);
107
108
//don't know if he's supposed to do summon/evocate after hard enrage (probably not)
109
Enraged
=
true
;
110
}
else
BerserkTimer
-= diff;
111
112
if
(
Evocating
)
113
{
114
//not supposed to do anything while evocate
115
if
(
me
->HasAura(
SPELL_EVOCATION
))
116
return
;
117
else
118
Evocating
=
false
;
119
}
120
121
if
(!
Enraged
)
122
{
123
if
(
AddTimer
<= diff)
124
{
125
//Summon Astral Flare
126
Creature
* AstralFlare =
DoSpawnCreature
(17096,
float
(rand()%37),
float
(rand()%37), 0, 0,
TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
, 5000);
127
Unit
* target = NULL;
128
target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0);
129
130
if
(AstralFlare && target)
131
{
132
AstralFlare->
CastSpell
(AstralFlare,
SPELL_ASTRAL_FLARE_PASSIVE
,
false
);
133
AstralFlare->
AI
()->
AttackStart
(target);
134
}
135
136
//Reduce Mana by 10% of max health
137
if
(
int32
mana =
me
->GetMaxPower(
POWER_MANA
))
138
{
139
mana /= 10;
140
me
->ModifyPower(
POWER_MANA
, -mana);
141
142
//if this get's us below 10%, then we evocate (the 10th should be summoned now)
143
if
(
me
->GetPower(
POWER_MANA
)*100 /
me
->GetMaxPower(
POWER_MANA
) < 10)
144
{
145
Talk
(
SAY_EVOCATE
);
146
me
->InterruptNonMeleeSpells(
false
);
147
DoCast
(
me
,
SPELL_EVOCATION
);
148
Evocating
=
true
;
149
//no AddTimer cooldown, this will make first flare appear instantly after evocate end, like expected
150
return
;
151
}
152
else
153
{
154
if
((std::rand() % 1) == 0)
155
{
156
Talk
(
SAY_SUMMON
);
157
}
158
}
159
}
160
161
AddTimer
= 10000;
162
}
else
AddTimer
-= diff;
163
164
if
(!
HealthAbovePct
(15))
165
{
166
Enraged
=
true
;
167
DoCast
(
me
,
SPELL_ENRAGE
);
168
Talk
(
SAY_ENRAGE
);
169
}
170
}
171
172
if
(
HatefulBoltTimer
<= diff)
173
{
174
if
(
Enraged
)
175
HatefulBoltTimer
= 7000;
176
else
177
HatefulBoltTimer
= 15000;
178
179
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_TOPAGGRO
, 1))
180
DoCast
(target,
SPELL_HATEFUL_BOLT
);
181
}
else
HatefulBoltTimer
-= diff;
182
183
DoMeleeAttackIfReady
();
184
}
185
};
186
};
187
188
void
AddSC_boss_curator
()
189
{
190
new
boss_curator
();
191
}
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
TempSummonType::TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
Definition
Object.h:71
ScriptMgr.h
ScriptedCreature.h
POWER_MANA
@ POWER_MANA
Definition
SharedDefines.h:215
IMMUNITY_DAMAGE
@ IMMUNITY_DAMAGE
Definition
SharedDefines.h:1599
SPELL_SCHOOL_MASK_ARCANE
@ SPELL_SCHOOL_MASK_ARCANE
Definition
SharedDefines.h:276
SELECT_TARGET_TOPAGGRO
@ SELECT_TARGET_TOPAGGRO
Definition
UnitAI.h:24
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
SPELL_ENRAGE
@ SPELL_ENRAGE
Definition
alterac_valley.cpp:14
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
SAY_KILL
#define SAY_KILL
Definition
boss_commander_kolurg.cpp:29
Curator
Curator
Definition
boss_curator.cpp:17
SAY_DEATH
@ SAY_DEATH
Definition
boss_curator.cpp:23
SPELL_ASTRAL_FLARE_PASSIVE
@ SPELL_ASTRAL_FLARE_PASSIVE
Definition
boss_curator.cpp:26
SPELL_ENRAGE
@ SPELL_ENRAGE
Definition
boss_curator.cpp:31
SAY_EVOCATE
@ SAY_EVOCATE
Definition
boss_curator.cpp:20
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_curator.cpp:18
SAY_KILL
@ SAY_KILL
Definition
boss_curator.cpp:22
SPELL_EVOCATION
@ SPELL_EVOCATION
Definition
boss_curator.cpp:30
SPELL_HATEFUL_BOLT
@ SPELL_HATEFUL_BOLT
Definition
boss_curator.cpp:29
SAY_ENRAGE
@ SAY_ENRAGE
Definition
boss_curator.cpp:21
SAY_SUMMON
@ SAY_SUMMON
Definition
boss_curator.cpp:19
SPELL_BERSERK
@ SPELL_BERSERK
Definition
boss_curator.cpp:32
AddSC_boss_curator
void AddSC_boss_curator()
Definition
boss_curator.cpp:188
SPELL_BERSERK
#define SPELL_BERSERK
Definition
boss_four_horsemen.cpp:62
SAY_SUMMON
@ SAY_SUMMON
Definition
boss_urok_doomhowl.cpp:19
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
Creature::AI
CreatureAI * AI() const
Definition
Creature.h:483
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::SelectTarget
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition
UnitAI.cpp:66
UnitAI::AttackStart
virtual void AttackStart(Unit *)
Definition
UnitAI.cpp:16
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
boss_curator
Definition
boss_curator.cpp:39
boss_curator::boss_curator
boss_curator()
Definition
boss_curator.cpp:41
boss_curator::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_curator.cpp:43
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
ScriptedAI::HealthAbovePct
bool HealthAbovePct(uint32 pct) const
Definition
ScriptedCreature.h:251
ScriptedAI::DoSpawnCreature
Creature * DoSpawnCreature(uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, TempSummonType type, uint32 despawntime)
Definition
ScriptedCreature.cpp:178
ScriptedAI::ScriptedAI
ScriptedAI(Creature *creature)
Definition
ScriptedCreature.cpp:85
boss_curator::boss_curatorAI
Definition
boss_curator.cpp:49
boss_curator::boss_curatorAI::boss_curatorAI
boss_curatorAI(Creature *creature)
Definition
boss_curator.cpp:50
boss_curator::boss_curatorAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_curator.cpp:70
boss_curator::boss_curatorAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_curator.cpp:75
boss_curator::boss_curatorAI::Evocating
bool Evocating
Definition
boss_curator.cpp:57
boss_curator::boss_curatorAI::AddTimer
uint32 AddTimer
Definition
boss_curator.cpp:52
boss_curator::boss_curatorAI::Enraged
bool Enraged
Definition
boss_curator.cpp:56
boss_curator::boss_curatorAI::BerserkTimer
uint32 BerserkTimer
Definition
boss_curator.cpp:54
boss_curator::boss_curatorAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_curator.cpp:85
boss_curator::boss_curatorAI::Reset
void Reset() OVERRIDE
Definition
boss_curator.cpp:59
boss_curator::boss_curatorAI::HatefulBoltTimer
uint32 HatefulBoltTimer
Definition
boss_curator.cpp:53
boss_curator::boss_curatorAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_curator.cpp:80
src
server
scripts
EasternKingdoms
Karazhan
boss_curator.cpp
Generated on
for Project SkyFire Core by
1.17.0