Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
boss_saviana_ragefire.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#include "ScriptMgr.h"
7#include "ScriptedCreature.h"
8#include "ruby_sanctum.h"
9
11{
12 SAY_AGGRO = 0, // You will sssuffer for this intrusion! (17528)
13 SAY_CONFLAGRATION = 1, // Burn in the master's flame! (17532)
14 EMOTE_ENRAGED = 2, // %s becomes enraged!
15 SAY_KILL = 3, // Halion will be pleased. (17530) - As it should be.... (17529)
16};
17
19{
22 SPELL_CONFLAGRATION_2 = 74454, // Unknown dummy effect
23 SPELL_ENRAGE = 78722,
25};
26
39
47
48enum Misc
49{
51};
52
53Position const SavianaRagefireFlyOutPos = {3155.51f, 683.844f, 95.0f, 4.69f};
54Position const SavianaRagefireFlyInPos = {3151.07f, 636.443f, 79.540f, 4.69f};
55Position const SavianaRagefireLandPos = {3151.07f, 636.443f, 78.649f, 4.69f};
56
58{
59 public:
60 boss_saviana_ragefire() : CreatureScript("boss_saviana_ragefire") { }
61
63 {
67
69 {
70 _Reset();
71 me->SetReactState(REACT_AGGRESSIVE);
72 }
73
74 void EnterCombat(Unit* /*who*/) OVERRIDE
75 {
78 events.Reset();
79 events.ScheduleEvent(EVENT_ENRAGE, 20000, EVENT_GROUP_LAND_PHASE);
81 events.ScheduleEvent(EVENT_FLIGHT, 60000);
82 }
83
84 void JustDied(Unit* /*killer*/) OVERRIDE
85 {
86 _JustDied();
87 me->PlayDirectSound(SOUND_ID_DEATH);
88 }
89
91 {
92 if (type != POINT_MOTION_TYPE && type != EFFECT_MOTION_TYPE)
93 return;
94
95 switch (point)
96 {
97 case POINT_FLIGHT:
98 events.ScheduleEvent(EVENT_CONFLAGRATION, 1000);
100 break;
101 case POINT_LAND:
102 events.ScheduleEvent(EVENT_LAND_GROUND, 1);
103 break;
105 me->SetCanFly(false);
106 me->SetDisableGravity(false);
108 me->SetReactState(REACT_AGGRESSIVE);
109 DoStartMovement(me->GetVictim());
110 break;
111 case POINT_TAKEOFF:
112 events.ScheduleEvent(EVENT_AIR_MOVEMENT, 1);
113 break;
114 default:
115 break;
116 }
117 }
118
120 {
122 me->SetCanFly(false);
123 me->SetDisableGravity(false);
124 }
125
127 {
128 if (victim->GetTypeId() == TypeID::TYPEID_PLAYER)
129 Talk(SAY_KILL);
130 }
131
133 {
134 if (!UpdateVictim())
135 return;
136
137 events.Update(diff);
138
139 if (me->HasUnitState(UNIT_STATE_CASTING))
140 return;
141
142 while (uint32 eventId = events.ExecuteEvent())
143 {
144 switch (eventId)
145 {
146 case EVENT_FLIGHT:
147 {
148 me->SetCanFly(true);
149 me->SetDisableGravity(true);
151 me->SetReactState(REACT_PASSIVE);
152 me->AttackStop();
153 Position pos;
154 pos.Relocate(me);
155 pos.m_positionZ += 10.0f;
156 me->GetMotionMaster()->MoveTakeoff(POINT_TAKEOFF, pos);
157 events.ScheduleEvent(EVENT_FLIGHT, 50000);
158 events.DelayEvents(12500, EVENT_GROUP_LAND_PHASE);
159 break;
160 }
163 break;
164 case EVENT_ENRAGE:
167 events.ScheduleEvent(EVENT_ENRAGE, std::rand() % 20000 + 15000, EVENT_GROUP_LAND_PHASE);
168 break;
171 events.ScheduleEvent(EVENT_FLAME_BREATH, std::rand() % 30000 + 20000, EVENT_GROUP_LAND_PHASE);
172 break;
174 me->GetMotionMaster()->MovePoint(POINT_FLIGHT, SavianaRagefireFlyOutPos);
175 break;
177 me->GetMotionMaster()->MoveLand(POINT_LAND_GROUND, SavianaRagefireLandPos);
178 break;
179 default:
180 break;
181 }
182 }
183
185 }
186 };
187
189 {
191 }
192};
193
195{
196 public:
198
199 bool operator()(WorldObject* unit) const
200 {
201 return unit->GetTypeId() != TypeID::TYPEID_PLAYER;
202 }
203};
204
241
269
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ POINT_MOTION_TYPE
@ EFFECT_MOTION_TYPE
@ TYPEID_PLAYER
Definition Object.h:55
SpellEffIndex
@ EFFECT_0
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ TARGET_UNIT_SRC_AREA_ENEMY
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
@ UNIT_BYTE1_FLAG_HOVER
Definition Unit.h:189
@ UNIT_BYTE1_FLAG_ALWAYS_STAND
Definition Unit.h:188
@ UNIT_STATE_CASTING
Definition Unit.h:527
@ REACT_PASSIVE
Definition Unit.h:1156
@ REACT_AGGRESSIVE
Definition Unit.h:1158
@ UNIT_FIELD_ANIM_TIER
@ SPELL_ENRAGE
@ EVENT_ENRAGE
#define SAY_AGGRO
#define SAY_KILL
@ EVENT_FLIGHT
@ EVENT_FLAME_BREATH
Definition boss_gyth.cpp:31
@ SPELL_FLAME_BREATH
@ EVENT_CONFLAGRATION
@ SPELL_CONFLAGRATION
void AddSC_boss_saviana_ragefire()
Position const SavianaRagefireFlyInPos
@ SPELL_CONFLAGRATION_2
@ SPELL_CONFLAGRATION
@ SPELL_FLAME_BREATH
@ SPELL_FLAME_BEACON
Position const SavianaRagefireFlyOutPos
@ POINT_LAND_GROUND
Position const SavianaRagefireLandPos
@ SAY_CONFLAGRATION
@ EVENT_FLAME_BREATH
@ EVENT_AIR_MOVEMENT
@ EVENT_GROUP_LAND_PHASE
@ EVENT_LAND_GROUND
@ EVENT_CONFLAGRATION
void _JustReachedHome()
EventMap events
BossAI(Creature *creature, uint32 bossId)
void _EnterCombat()
bool operator()(WorldObject *unit) const
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
CreatureScript(const char *name)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
TypeID GetTypeId() const
Definition Object.h:131
void PreventHitDefaultEffect(SpellEffIndex effIndex)
HookList< EffectHandler > OnEffectHitTarget
Unit * GetHitUnit()
int32 GetEffectValue()
Unit * GetCaster()
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
SpellScriptLoader(const char *name)
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCast(uint32 spellId)
Definition UnitAI.cpp:110
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
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)
MotionMaster * GetMotionMaster()
Definition Unit.h:2605
CreatureAI * GetAI(Creature *creature) const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
void RandomResizeList(std::list< T > &list, uint32 size)
Definition Containers.h:19
CreatureAI * GetRubySanctumAI(Creature *creature)
@ DATA_SAVIANA_RAGEFIRE
float m_positionZ
Definition Object.h:289
void Relocate(float x, float y)
Definition Object.h:302
Creature * me
void DoStartMovement(Unit *target, float distance=0.0f, float angle=0.0f)
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void MovementInform(uint32 type, uint32 point) OVERRIDE