Project SkyFire Core
SkyFire 5.4.8 server core API documentation
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/*
7Name: Boss_Chrono_Lord_Deja
8%Complete: 65
9Comment: All abilities not implemented
10Category: Caverns of Time, The Black Morass
11*/
12
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15#include "the_black_morass.h"
16
18{
24
30 SPELL_ATTRACTION = 38540 //Not Implemented (Heroic mode)
31};
32
40
42{
43public:
44 boss_chrono_lord_deja() : CreatureScript("boss_chrono_lord_deja") { }
45
47 {
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
61 }
62
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 {
72 me->DealDamage(who, who->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
73 }
74 }
75
77 }
78
79 void KilledUnit(Unit* /*victim*/) OVERRIDE
80 {
82 }
83
84 void JustDied(Unit* /*killer*/) OVERRIDE
85 {
87
88 if (instance)
89 instance->SetData(TYPE_RIFT, SPECIAL);
90 }
91
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 {
108 events.ScheduleEvent(EVENT_ARCANE_BLAST, std::rand() % 25000 + 15000);
109 break;
110 case EVENT_TIME_LAPSE:
113 events.ScheduleEvent(EVENT_TIME_LAPSE, std::rand() % 25000 + 15000);
114 break;
116 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
118 events.ScheduleEvent(EVENT_ARCANE_DISCHARGE, std::rand() % 30000 + 20000);
119 break;
120 case EVENT_ATTRACTION: // Only in Heroic
122 events.ScheduleEvent(EVENT_ATTRACTION, std::rand() % 35000 + 25000);
123 break;
124 default:
125 break;
126 }
127 }
128
130 }
131 };
132
134 {
135 return new boss_chrono_lord_dejaAI(creature);
136 }
137};
138
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ SPECIAL
@ TYPEID_UNIT
Definition Object.h:54
@ SPELL_SCHOOL_MASK_NORMAL
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ DIRECT_DAMAGE
Definition Unit.h:614
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
Enums
@ SAY_BANISH
@ SAY_SLAY
@ H_SPELL_ARCANE_BLAST
@ SPELL_ARCANE_DISCHARGE
@ H_SPELL_ARCANE_DISCHARGE
@ SPELL_ARCANE_BLAST
void AddSC_boss_chrono_lord_deja()
@ EVENT_ARCANE_BLAST
@ EVENT_ARCANE_DISCHARGE
#define SAY_DEATH
#define SAY_AGGRO
InstanceScript *const instance
EventMap events
BossAI(Creature *creature, uint32 bossId)
virtual void MoveInLineOfSight(Unit *)
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureScript(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
Definition UnitAI.cpp:66
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool IsHeroic() const
Creature * me
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
@ NPC_TIME_KEEPER
@ TYPE_CRONO_LORD_DEJA
@ TYPE_RIFT