Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
boss_chrono_lord_deja.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
/*
7
Name: Boss_Chrono_Lord_Deja
8
%Complete: 65
9
Comment: All abilities not implemented
10
Category: Caverns of Time, The Black Morass
11
*/
12
13
#include "
ScriptMgr.h
"
14
#include "
ScriptedCreature.h
"
15
#include "
the_black_morass.h
"
16
17
enum
Enums
18
{
19
SAY_ENTER
= 0,
20
SAY_AGGRO
= 1,
21
SAY_BANISH
= 2,
22
SAY_SLAY
= 3,
23
SAY_DEATH
= 4,
24
25
SPELL_ARCANE_BLAST
= 31457,
26
H_SPELL_ARCANE_BLAST
= 38538,
27
SPELL_ARCANE_DISCHARGE
= 31472,
28
H_SPELL_ARCANE_DISCHARGE
= 38539,
29
SPELL_TIME_LAPSE
= 31467,
30
SPELL_ATTRACTION
= 38540
//Not Implemented (Heroic mode)
31
};
32
33
enum
Events
34
{
35
EVENT_ARCANE_BLAST
= 1,
36
EVENT_TIME_LAPSE
= 2,
37
EVENT_ARCANE_DISCHARGE
= 3,
38
EVENT_ATTRACTION
= 4
39
};
40
41
class
boss_chrono_lord_deja
:
public
CreatureScript
42
{
43
public
:
44
boss_chrono_lord_deja
() :
CreatureScript
(
"boss_chrono_lord_deja"
) { }
45
46
struct
boss_chrono_lord_dejaAI
:
public
BossAI
47
{
48
boss_chrono_lord_dejaAI
(
Creature
* creature) :
BossAI
(creature,
TYPE_CRONO_LORD_DEJA
) { }
49
50
void
Reset
()
OVERRIDE
{ }
51
52
void
EnterCombat
(
Unit
*
/*who*/
)
OVERRIDE
53
{
54
events
.ScheduleEvent(
EVENT_ARCANE_BLAST
, std::rand() % 23000 + 18000);
55
events
.ScheduleEvent(
EVENT_TIME_LAPSE
, std::rand() % 15000 + 10000);
56
events
.ScheduleEvent(
EVENT_ARCANE_DISCHARGE
, std::rand() % 30000 + 20000);
57
if
(
IsHeroic
())
58
events
.ScheduleEvent(
EVENT_ATTRACTION
, std::rand() % 35000 + 25000);
59
60
Talk
(
SAY_AGGRO
);
61
}
62
63
void
MoveInLineOfSight
(
Unit
* who)
OVERRIDE
64
65
{
66
//Despawn Time Keeper
67
if
(who->GetTypeId() ==
TypeID::TYPEID_UNIT
&& who->GetEntry() ==
NPC_TIME_KEEPER
)
68
{
69
if
(
me
->IsWithinDistInMap(who, 20.0f))
70
{
71
Talk
(
SAY_BANISH
);
72
me
->DealDamage(who, who->GetHealth(), NULL,
DIRECT_DAMAGE
,
SPELL_SCHOOL_MASK_NORMAL
, NULL,
false
);
73
}
74
}
75
76
ScriptedAI::MoveInLineOfSight
(who);
77
}
78
79
void
KilledUnit
(
Unit
*
/*victim*/
)
OVERRIDE
80
{
81
Talk
(
SAY_SLAY
);
82
}
83
84
void
JustDied
(
Unit
*
/*killer*/
)
OVERRIDE
85
{
86
Talk
(
SAY_DEATH
);
87
88
if
(
instance
)
89
instance
->SetData(
TYPE_RIFT
,
SPECIAL
);
90
}
91
92
void
UpdateAI
(
uint32
diff)
OVERRIDE
93
{
94
if
(!
UpdateVictim
())
95
return
;
96
97
if
(
me
->HasUnitState(
UNIT_STATE_CASTING
))
98
return
;
99
100
events
.Update(diff);
101
102
while
(
uint32
eventId =
events
.ExecuteEvent())
103
{
104
switch
(eventId)
105
{
106
case
EVENT_ARCANE_BLAST
:
107
DoCastVictim
(
SPELL_ARCANE_BLAST
);
108
events
.ScheduleEvent(
EVENT_ARCANE_BLAST
, std::rand() % 25000 + 15000);
109
break
;
110
case
EVENT_TIME_LAPSE
:
111
Talk
(
SAY_BANISH
);
112
DoCast
(
me
,
SPELL_TIME_LAPSE
);
113
events
.ScheduleEvent(
EVENT_TIME_LAPSE
, std::rand() % 25000 + 15000);
114
break
;
115
case
EVENT_ARCANE_DISCHARGE
:
116
if
(
Unit
* target =
SelectTarget
(
SELECT_TARGET_RANDOM
, 0))
117
DoCast
(target,
SPELL_ARCANE_DISCHARGE
);
118
events
.ScheduleEvent(
EVENT_ARCANE_DISCHARGE
, std::rand() % 30000 + 20000);
119
break
;
120
case
EVENT_ATTRACTION
:
// Only in Heroic
121
DoCast
(
me
,
SPELL_ATTRACTION
);
122
events
.ScheduleEvent(
EVENT_ATTRACTION
, std::rand() % 35000 + 25000);
123
break
;
124
default
:
125
break
;
126
}
127
}
128
129
DoMeleeAttackIfReady
();
130
}
131
};
132
133
CreatureAI
*
GetAI
(
Creature
* creature)
const
OVERRIDE
134
{
135
return
new
boss_chrono_lord_dejaAI
(creature);
136
}
137
};
138
139
void
AddSC_boss_chrono_lord_deja
()
140
{
141
new
boss_chrono_lord_deja
();
142
}
uint32
std::uint32_t uint32
Definition
Define.h:77
OVERRIDE
#define OVERRIDE
Definition
Define.h:60
SPECIAL
@ SPECIAL
Definition
InstanceScript.h:50
TypeID::TYPEID_UNIT
@ TYPEID_UNIT
Definition
Object.h:54
ScriptMgr.h
ScriptedCreature.h
SPELL_SCHOOL_MASK_NORMAL
@ SPELL_SCHOOL_MASK_NORMAL
Definition
SharedDefines.h:270
UNIT_STATE_CASTING
@ UNIT_STATE_CASTING
Definition
Unit.h:527
DIRECT_DAMAGE
@ DIRECT_DAMAGE
Definition
Unit.h:614
SELECT_TARGET_RANDOM
@ SELECT_TARGET_RANDOM
Definition
UnitAI.h:23
Events
Events
Definition
alterac_valley.cpp:40
Enums
Enums
Definition
boss_aeonus.cpp:18
SAY_BANISH
@ SAY_BANISH
Definition
boss_aeonus.cpp:21
SAY_SLAY
@ SAY_SLAY
Definition
boss_alizabal.cpp:20
SAY_ENTER
@ SAY_ENTER
Definition
boss_captain_skarloc.cpp:23
SAY_DEATH
@ SAY_DEATH
Definition
boss_chrono_lord_deja.cpp:23
H_SPELL_ARCANE_BLAST
@ H_SPELL_ARCANE_BLAST
Definition
boss_chrono_lord_deja.cpp:26
SAY_BANISH
@ SAY_BANISH
Definition
boss_chrono_lord_deja.cpp:21
SPELL_ATTRACTION
@ SPELL_ATTRACTION
Definition
boss_chrono_lord_deja.cpp:30
SAY_AGGRO
@ SAY_AGGRO
Definition
boss_chrono_lord_deja.cpp:20
SPELL_ARCANE_DISCHARGE
@ SPELL_ARCANE_DISCHARGE
Definition
boss_chrono_lord_deja.cpp:27
SAY_SLAY
@ SAY_SLAY
Definition
boss_chrono_lord_deja.cpp:22
SPELL_TIME_LAPSE
@ SPELL_TIME_LAPSE
Definition
boss_chrono_lord_deja.cpp:29
H_SPELL_ARCANE_DISCHARGE
@ H_SPELL_ARCANE_DISCHARGE
Definition
boss_chrono_lord_deja.cpp:28
SPELL_ARCANE_BLAST
@ SPELL_ARCANE_BLAST
Definition
boss_chrono_lord_deja.cpp:25
AddSC_boss_chrono_lord_deja
void AddSC_boss_chrono_lord_deja()
Definition
boss_chrono_lord_deja.cpp:139
EVENT_ATTRACTION
@ EVENT_ATTRACTION
Definition
boss_chrono_lord_deja.cpp:38
EVENT_ARCANE_BLAST
@ EVENT_ARCANE_BLAST
Definition
boss_chrono_lord_deja.cpp:35
EVENT_TIME_LAPSE
@ EVENT_TIME_LAPSE
Definition
boss_chrono_lord_deja.cpp:36
EVENT_ARCANE_DISCHARGE
@ EVENT_ARCANE_DISCHARGE
Definition
boss_chrono_lord_deja.cpp:37
SAY_DEATH
#define SAY_DEATH
Definition
boss_commander_kolurg.cpp:30
SAY_AGGRO
#define SAY_AGGRO
Definition
boss_commander_kolurg.cpp:28
BossAI::instance
InstanceScript *const instance
Definition
ScriptedCreature.h:383
BossAI::events
EventMap events
Definition
ScriptedCreature.h:439
BossAI::BossAI
BossAI(Creature *creature, uint32 bossId)
Definition
ScriptedCreature.cpp:456
CreatureAI
Definition
CreatureAI.h:54
CreatureAI::MoveInLineOfSight
virtual void MoveInLineOfSight(Unit *)
Definition
CreatureAI.cpp:114
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
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
Unit
Definition
Unit.h:1367
boss_chrono_lord_deja
Definition
boss_chrono_lord_deja.cpp:42
boss_chrono_lord_deja::GetAI
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition
boss_chrono_lord_deja.cpp:133
boss_chrono_lord_deja::boss_chrono_lord_deja
boss_chrono_lord_deja()
Definition
boss_chrono_lord_deja.cpp:44
ScriptedAI::IsHeroic
bool IsHeroic() const
Definition
ScriptedCreature.h:279
ScriptedAI::me
Creature * me
Definition
ScriptedCreature.h:182
boss_chrono_lord_deja::boss_chrono_lord_dejaAI
Definition
boss_chrono_lord_deja.cpp:47
boss_chrono_lord_deja::boss_chrono_lord_dejaAI::MoveInLineOfSight
void MoveInLineOfSight(Unit *who) OVERRIDE
Definition
boss_chrono_lord_deja.cpp:63
boss_chrono_lord_deja::boss_chrono_lord_dejaAI::Reset
void Reset() OVERRIDE
Definition
boss_chrono_lord_deja.cpp:50
boss_chrono_lord_deja::boss_chrono_lord_dejaAI::boss_chrono_lord_dejaAI
boss_chrono_lord_dejaAI(Creature *creature)
Definition
boss_chrono_lord_deja.cpp:48
boss_chrono_lord_deja::boss_chrono_lord_dejaAI::KilledUnit
void KilledUnit(Unit *) OVERRIDE
Definition
boss_chrono_lord_deja.cpp:79
boss_chrono_lord_deja::boss_chrono_lord_dejaAI::UpdateAI
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition
boss_chrono_lord_deja.cpp:92
boss_chrono_lord_deja::boss_chrono_lord_dejaAI::EnterCombat
void EnterCombat(Unit *) OVERRIDE
Definition
boss_chrono_lord_deja.cpp:52
boss_chrono_lord_deja::boss_chrono_lord_dejaAI::JustDied
void JustDied(Unit *) OVERRIDE
Definition
boss_chrono_lord_deja.cpp:84
the_black_morass.h
NPC_TIME_KEEPER
@ NPC_TIME_KEEPER
Definition
the_black_morass.h:40
TYPE_CRONO_LORD_DEJA
@ TYPE_CRONO_LORD_DEJA
Definition
the_black_morass.h:17
TYPE_RIFT
@ TYPE_RIFT
Definition
the_black_morass.h:14
src
server
scripts
Kalimdor
CavernsOfTime
TheBlackMorass
boss_chrono_lord_deja.cpp
Generated on
for Project SkyFire Core by
1.17.0