Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_temporus.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_Temporus
8%Complete: 75
9Comment: More abilities need to be 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
25 SPELL_HASTE = 31458,
29 SPELL_REFLECT = 38592 //Not Implemented (Heroic mod)
30};
31
39
41{
42public:
43 boss_temporus() : CreatureScript("boss_temporus") { }
44
45 struct boss_temporusAI : public BossAI
46 {
47 boss_temporusAI(Creature* creature) : BossAI(creature, TYPE_TEMPORUS) { }
48
49 void Reset() OVERRIDE { }
50
51 void EnterCombat(Unit* /*who*/) OVERRIDE
52 {
53 events.ScheduleEvent(EVENT_HASTE, std::rand() % 23000 + 15000);
54 events.ScheduleEvent(EVENT_MORTAL_WOUND, 8000);
55 events.ScheduleEvent(EVENT_WING_BUFFET, std::rand() % 35000 + 25000);
56 if (IsHeroic())
57 events.ScheduleEvent(EVENT_SPELL_REFLECTION, 30000);
58
60 }
61
62 void KilledUnit(Unit* /*victim*/) OVERRIDE
63 {
65 }
66
67 void JustDied(Unit* /*killer*/) OVERRIDE
68 {
70
71 if (instance)
72 instance->SetData(TYPE_RIFT, SPECIAL);
73 }
74
76
77 {
78 //Despawn Time Keeper
79 if (who->GetTypeId() == TypeID::TYPEID_UNIT && who->GetEntry() == NPC_TIME_KEEPER)
80 {
81 if (me->IsWithinDistInMap(who, 20.0f))
82 {
84
85 me->DealDamage(who, who->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
86 }
87 }
88
90 }
91
93 {
94 //Return since we have no target
95 if (!UpdateVictim())
96 return;
97
98 events.Update(diff);
99
100 if (me->HasUnitState(UNIT_STATE_CASTING))
101 return;
102
103 while (uint32 eventId = events.ExecuteEvent())
104 {
105 switch (eventId)
106 {
107 case EVENT_HASTE:
109 events.ScheduleEvent(EVENT_HASTE, std::rand() % 25000 + 20000);
110 break;
113 events.ScheduleEvent(EVENT_MORTAL_WOUND, std::rand() % 20000 + 10000);
114 break;
117 events.ScheduleEvent(EVENT_WING_BUFFET, std::rand() % 30000 + 20000);
118 break;
119 case EVENT_SPELL_REFLECTION: // Only in Heroic
121 events.ScheduleEvent(EVENT_SPELL_REFLECTION, std::rand() % 35000 + 25000);
122 break;
123 default:
124 break;
125 }
126 }
128 }
129 };
130
132 {
133 return new boss_temporusAI(creature);
134 }
135};
136
138{
139 new boss_temporus();
140}
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
Enums
@ SAY_BANISH
@ SAY_SLAY
@ SPELL_REFLECT
#define SAY_DEATH
#define SAY_AGGRO
@ SPELL_WING_BUFFET
@ SAY_DEATH
@ H_SPELL_WING_BUFFET
@ SPELL_WING_BUFFET
@ SAY_BANISH
@ SAY_AGGRO
@ SPELL_HASTE
@ SPELL_REFLECT
@ SAY_SLAY
@ SPELL_MORTAL_WOUND
void AddSC_boss_temporus()
@ EVENT_MORTAL_WOUND
@ EVENT_WING_BUFFET
@ EVENT_SPELL_REFLECTION
@ EVENT_HASTE
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
Definition Unit.h:1367
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool IsHeroic() const
Creature * me
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void EnterCombat(Unit *) OVERRIDE
void MoveInLineOfSight(Unit *who) OVERRIDE
void JustDied(Unit *) OVERRIDE
void KilledUnit(Unit *) OVERRIDE
boss_temporusAI(Creature *creature)
@ NPC_TIME_KEEPER
@ TYPE_TEMPORUS
@ TYPE_RIFT