Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_shazzrah.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
7SDName: Boss_Shazzrah
8SD%Complete: 75
9SDComment: Teleport NYI
10SDCategory: Molten Core
11EndScriptData */
12
13#include "ObjectMgr.h"
14#include "ScriptMgr.h"
15#include "ScriptedCreature.h"
16#include "molten_core.h"
17
25
34
36{
37 public:
38 boss_shazzrah() : CreatureScript("boss_shazzrah") { }
39
40 struct boss_shazzrahAI : public BossAI
41 {
43 {
44 }
45
47 {
48 BossAI::EnterCombat(target);
49 events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, 6000);
50 events.ScheduleEvent(EVENT_SHAZZRAH_CURSE, 10000);
51 events.ScheduleEvent(EVENT_MAGIC_GROUNDING, 24000);
52 events.ScheduleEvent(EVENT_COUNTERSPELL, 15000);
53 events.ScheduleEvent(EVENT_BLINK, 30000);
54 }
55
57 {
58 if (!UpdateVictim())
59 return;
60
61 events.Update(diff);
62
63 if (me->HasUnitState(UNIT_STATE_CASTING))
64 return;
65
66 while (uint32 eventId = events.ExecuteEvent())
67 {
68 switch (eventId)
69 {
72 events.ScheduleEvent(EVENT_ARCANE_EXPLOSION, std::rand() % 9000 + 5000);
73 break;
75 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true, -EVENT_SHAZZRAH_CURSE))
77 events.ScheduleEvent(EVENT_SHAZZRAH_CURSE, std::rand() % 30000 + 25000);
78 break;
81 events.ScheduleEvent(EVENT_MAGIC_GROUNDING, 35000);
82 break;
85 events.ScheduleEvent(EVENT_COUNTERSPELL, std::rand() % 20000 + 16000);
86 break;
87 case EVENT_BLINK:
88 // Teleporting him to a random player and casting Arcane Explosion after that.
89 // Blink is not working cause of LoS System we need to do this hardcoded.
90 if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1, 100.0f, true))
91 {
92 DoTeleportTo(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ());
95 }
96 events.ScheduleEvent(EVENT_BLINK, 45000);
97 break;
98 default:
99 break;
100 }
101 }
102
104 }
105 };
106
108 {
109 return new boss_shazzrahAI(creature);
110 }
111};
112
114{
115 new boss_shazzrah();
116}
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ SELECT_TARGET_RANDOM
Definition UnitAI.h:23
@ SPELL_ARCANE_EXPLOSION
void AddSC_boss_shazzrah()
@ SPELL_COUNTERSPELL
@ SPELL_ARCANE_EXPLOSION
@ SPELL_MAGIC_GROUNDING
@ SPELL_SHAZZRAH_CURSE
@ EVENT_BLINK
@ EVENT_COUNTERSPELL
@ EVENT_ARCANE_EXPLOSION
@ EVENT_SHAZZRAH_CURSE
@ EVENT_MAGIC_GROUNDING
EventMap events
BossAI(Creature *creature, uint32 bossId)
void EnterCombat(Unit *) OVERRIDE
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
@ BOSS_SHAZZRAH
Definition molten_core.h:15
Creature * me
void DoTeleportTo(float x, float y, float z, uint32 time=0)
void EnterCombat(Unit *target) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
boss_shazzrahAI(Creature *creature)