Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
oculus.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 "ScriptedGossip.h"
9#include "SpellScript.h"
10#include "SpellAuraEffects.h"
11#include "Vehicle.h"
12#include "CombatAI.h"
13#include "oculus.h"
14#include "Player.h"
15
16#define GOSSIP_ITEM_DRAKES "So where do we go from here?"
17#define GOSSIP_ITEM_BELGARISTRASZ1 "I want to fly on the wings of the Red Flight"
18#define GOSSIP_ITEM_BELGARISTRASZ2 "What abilities do Ruby Drakes have?"
19#define GOSSIP_ITEM_VERDISA1 "I want to fly on the wings of the Green Flight"
20#define GOSSIP_ITEM_VERDISA2 "What abilities do Emerald Drakes have?"
21#define GOSSIP_ITEM_ETERNOS1 "I want to fly on the wings of the Bronze Flight"
22#define GOSSIP_ITEM_ETERNOS2 "What abilities do Amber Drakes have?"
23
24#define HAS_ESSENCE(a) ((a)->HasItemCount(ITEM_EMERALD_ESSENCE) || (a)->HasItemCount(ITEM_AMBER_ESSENCE) || (a)->HasItemCount(ITEM_RUBY_ESSENCE))
25
45
47{
48/*Ruby Drake,
49(npc 27756) (item 37860)
50(summoned by spell Ruby Essence = 37860 ---> Call Amber Drake == 49462 ---> Summon 27756)
51*/
52 SPELL_RIDE_RUBY_DRAKE_QUE = 49463, //Apply Aura: Periodic Trigger, Interval: 3 seconds ---> 49464
53 SPELL_RUBY_DRAKE_SADDLE = 49464, //Allows you to ride on the back of an Amber Drake. ---> Dummy
54 SPELL_RUBY_SEARING_WRATH = 50232, //(60 yds) - Instant - Breathes a stream of fire at an enemy dragon, dealing 6800 to 9200 Fire damage and then jumping to additional dragons within 30 yards. Each jump increases the damage by 50%. Affects up to 5 total targets
55 SPELL_RUBY_EVASIVE_AURA = 50248, //Instant - Allows the Ruby Drake to generate Evasive Charges when hit by hostile attacks and spells.
56 SPELL_RUBY_EVASIVE_MANEUVERS = 50240, //Instant - 5 sec. cooldown - Allows your drake to dodge all incoming attacks and spells. Requires Evasive Charges to use. Each attack or spell dodged while this ability is active burns one Evasive Charge. Lasts 30 sec. or until all charges are exhausted.
57 //you do not have acces to until you kill Mage-Lord Urom
58 SPELL_RUBY_MARTYR = 50253, //Instant - 10 sec. cooldown - Redirect all harmful spells cast at friendly drakes to yourself for 10 sec.
59
60/*Amber Drake,
61(npc 27755) (item 37859)
62(summoned by spell Amber Essence = 37859 ---> Call Amber Drake == 49461 ---> Summon 27755)
63*/
64
65 SPELL_RIDE_AMBER_DRAKE_QUE = 49459, //Apply Aura: Periodic Trigger, Interval: 3 seconds ---> 49460
66 SPELL_AMBER_DRAKE_SADDLE = 49460, //Allows you to ride on the back of an Amber Drake. ---> Dummy
67 SPELL_AMBER_SHOCK_LANCE = 49840, //(60 yds) - Instant - Deals 4822 to 5602 Arcane damage and detonates all Shock Charges on an enemy dragon. Damage is increased by 6525 for each detonated.
68 // SPELL_AMBER_STOP_TIME //Instant - 1 min cooldown - Halts the passage of time, freezing all enemy dragons in place for 10 sec. This attack applies 5 Shock Charges to each affected target.
69 //you do not have access to until you kill the Mage-Lord Urom.
70 SPELL_AMBER_TEMPORAL_RIFT = 49592, //(60 yds) - Channeled - Channels a temporal rift on an enemy dragon for 10 sec. While trapped in the rift, all damage done to the target is increased by 100%. In addition, for every 15, 000 damage done to a target affected by Temporal Rift, 1 Shock Charge is generated.
71
72/*Emerald Drake,
73(npc 27692) (item 37815),
74 (summoned by spell Emerald Essence = 37815 ---> Call Emerald Drake == 49345 ---> Summon 27692)
75*/
76 SPELL_RIDE_EMERALD_DRAKE_QUE = 49427, //Apply Aura: Periodic Trigger, Interval: 3 seconds ---> 49346
77 SPELL_EMERALD_DRAKE_SADDLE = 49346, //Allows you to ride on the back of an Amber Drake. ---> Dummy
78 SPELL_EMERALD_LEECHING_POISON = 50328, //(60 yds) - Instant - Poisons the enemy dragon, leeching 1300 to the caster every 2 sec. for 12 sec. Stacks up to 3 times.
79 SPELL_EMERALD_TOUCH_THE_NIGHTMARE = 50341, //(60 yds) - Instant - Consumes 30% of the caster's max health to inflict 25, 000 nature damage to an enemy dragon and reduce the damage it deals by 25% for 30 sec.
80 // you do not have access to until you kill the Mage-Lord Urom
81 SPELL_EMERALD_DREAM_FUNNEL = 50344, //(60 yds) - Channeled - Transfers 5% of the caster's max health to a friendly drake every second for 10 seconds as long as the caster channels.
82};
83
95
97{
98public:
99 npc_verdisa_beglaristrasz_eternos() : CreatureScript("npc_verdisa_beglaristrasz_eternos") { }
100
101 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
102 {
103 player->PlayerTalkClass->ClearMenus();
104 switch (creature->GetEntry())
105 {
106 case NPC_VERDISA: //Verdisa
107 {
108 switch (action)
109 {
110 case GOSSIP_ACTION_INFO_DEF + 1:
111 if (!HAS_ESSENCE(player))
112 {
115 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VERDISA1, creature->GetGUID());
116 }
117 else
118 {
120 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VERDISA2, creature->GetGUID());
121 }
122 break;
123 case GOSSIP_ACTION_INFO_DEF + 2:
124 {
125 ItemPosCountVec dest;
126 uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_EMERALD_ESSENCE, 1);
127 if (msg == EQUIP_ERR_OK)
128 player->StoreNewItem(dest, ITEM_EMERALD_ESSENCE, true);
129 player->CLOSE_GOSSIP_MENU();
130 break;
131 }
132 case GOSSIP_ACTION_INFO_DEF + 3:
133 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_VERDISA3, creature->GetGUID());
134 break;
135 }
136 break;
137 }
138 case NPC_BELGARISTRASZ: //Belgaristrasz
139 {
140 switch (action)
141 {
142 case GOSSIP_ACTION_INFO_DEF + 1:
143 if (!HAS_ESSENCE(player))
144 {
147 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_BELGARISTRASZ1, creature->GetGUID());
148 }
149 else
150 {
152 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_BELGARISTRASZ2, creature->GetGUID());
153 }
154 break;
155 case GOSSIP_ACTION_INFO_DEF + 2:
156 {
157 ItemPosCountVec dest;
158 uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_RUBY_ESSENCE, 1);
159 if (msg == EQUIP_ERR_OK)
160 player->StoreNewItem(dest, ITEM_RUBY_ESSENCE, true);
161 player->CLOSE_GOSSIP_MENU();
162 break;
163 }
164 case GOSSIP_ACTION_INFO_DEF + 3:
165 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_BELGARISTRASZ3, creature->GetGUID());
166 break;
167 }
168 break;
169 }
170 case NPC_ETERNOS: //Eternos
171 {
172 switch (action)
173 {
174 case GOSSIP_ACTION_INFO_DEF + 1:
175 if (!HAS_ESSENCE(player))
176 {
179 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ETERNOS1, creature->GetGUID());
180 }
181 else
182 {
184 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ETERNOS2, creature->GetGUID());
185 }
186 break;
187 case GOSSIP_ACTION_INFO_DEF + 2:
188 {
189 ItemPosCountVec dest;
190 uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_AMBER_ESSENCE, 1);
191 if (msg == EQUIP_ERR_OK)
192 player->StoreNewItem(dest, ITEM_AMBER_ESSENCE, true);
193 player->CLOSE_GOSSIP_MENU();
194 break;
195 }
196 case GOSSIP_ACTION_INFO_DEF + 3:
197 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_ETERNOS3, creature->GetGUID());
198 break;
199 }
200 break;
201 }
202 }
203
204 return true;
205 }
206
207 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
208 {
209 if (creature->IsQuestGiver())
210 player->PrepareQuestMenu(creature->GetGUID());
211
212 if (InstanceScript* instance = creature->GetInstanceScript())
213 {
214 if (instance->GetBossState(DATA_DRAKOS_EVENT) == DONE)
215 {
217 player->SEND_GOSSIP_MENU(GOSSIP_TEXTID_DRAKES, creature->GetGUID());
218 }
219 }
220
221 return true;
222 }
223
225 {
227
229 {
230 if (id)
231 return;
232
233 // When Belgaristraz finish his moving say grateful text
234 if (me->GetEntry() == NPC_BELGARISTRASZ)
236
237 // The gossip flag should activate when Drakos die and not from DB
239 }
240 };
241
243 {
244 return new npc_verdisa_beglaristrasz_eternosAI(creature);
245 }
246};
247
249{
250public:
251 npc_image_belgaristrasz() : CreatureScript("npc_image_belgaristrasz") { }
252
254 {
256
257 void IsSummonedBy(Unit* summoner) OVERRIDE
258 {
259 if (summoner->GetEntry() == NPC_VAROS)
260 {
262 me->DespawnOrUnsummon(60000);
263 }
264 if (summoner->GetEntry() == NPC_UROM)
265 {
266 Talk(SAY_UROM);
267 me->DespawnOrUnsummon(60000);
268 }
269 }
270 };
271
273 {
274 return new npc_image_belgaristraszAI(creature);
275 }
276};
277
279{
280public:
281 npc_ruby_emerald_amber_drake() : CreatureScript("npc_ruby_emerald_amber_drake") { }
282
284 {
286 {
287 instance = creature->GetInstanceScript();
288 }
289
291
298
304
306 {
307 summonerGUID = 0;
308 WelcomeTimer = 4500;
309 WelcomeSequelTimer = 4500;
310 SpecialTimer = 10000;
311 WarningTimer = 25000;
312 TakeOffTimer = 3500;
313
314 WelcomeOff = false;
315 WelcomeSequelOff = false;
316 SpecialOff = false;
317 HealthWarningOff = false;
318 DisableTakeOff = false;
319 }
320
321 void IsSummonedBy(Unit* summoner) OVERRIDE
322 {
323 if (instance->GetBossState(DATA_EREGOS_EVENT) == IN_PROGRESS)
324 if (Creature* eregos = me->FindNearestCreature(NPC_EREGOS, 450.0f, true))
325 {
326 eregos->DespawnOrUnsummon(); // On retail this kills abusive call of drake during engaged Eregos
327 }
328 summonerGUID = summoner->GetGUID();
329 me->SetFacingToObject(summoner);
330 // TO DO: Drake Ques should be casted from vehicle to player, however the way core handle triggered spells from auras break it no matter the conditions. So this change the caster and give the same result until someone fix triggered spells from auras that involve implicit targets or make exception for this case.
331 if (me->GetEntry() == NPC_RUBY_DRAKE_VEHICLE)
332 summoner->CastSpell(summoner, SPELL_RIDE_RUBY_DRAKE_QUE);
333 if (me->GetEntry() == NPC_EMERALD_DRAKE_VEHICLE)
334 summoner->CastSpell(summoner, SPELL_RIDE_EMERALD_DRAKE_QUE);
335 if (me->GetEntry() == NPC_AMBER_DRAKE_VEHICLE)
336 summoner->CastSpell(summoner, SPELL_RIDE_AMBER_DRAKE_QUE);
337 Position pos;
338 summoner->GetPosition(&pos);
339 me->GetMotionMaster()->MovePoint(0, pos);
340 }
341
343 {
344 if (type == POINT_MOTION_TYPE && id == 0)
345 me->SetDisableGravity(false); // Needed this for proper animation after spawn, the summon in air fall to ground bug leave no other option for now, if this isn't used the drake will only walk on move.
346 }
347
349 {
350 if (!(instance->GetBossState(DATA_VAROS_EVENT) == DONE))
351 {
352 if (me->HasAuraType(SPELL_AURA_CONTROL_VEHICLE))
353 {
354 if (!(WelcomeOff))
355 {
356 if (WelcomeTimer <= diff)
357 {
358 Talk(WHISPER_DRAKES_WELCOME, me->GetOwner());
359 WelcomeOff = true;
360 WelcomeSequelOff = true;
361 }
362 else WelcomeTimer -= diff;
363 }
364 }
365 }
366 if (me->HasAuraType(SPELL_AURA_CONTROL_VEHICLE))
367 {
369 {
370 if (WelcomeSequelTimer <= diff)
371 {
372 Talk(WHISPER_DRAKES_ABILITIES, me->GetOwner());
373 WelcomeSequelOff = false;
374 }
375 else WelcomeSequelTimer -= diff;
376 }
377
378 if (instance->GetBossState(DATA_UROM_EVENT) == DONE)
379 {
380 if (!(SpecialOff))
381 {
382 if (SpecialTimer <= diff)
383 {
384 Talk(WHISPER_DRAKES_SPECIAL, me->GetOwner());
385 SpecialOff = true;
386 }
387 else SpecialTimer -= diff;
388 }
389 }
390
391 if (!(HealthWarningOff))
392 {
393 if (me->GetHealthPct() <= 40.0f)
394 {
395 Talk(WHISPER_DRAKES_LOWHEALTH, me->GetOwner());
396 HealthWarningOff = true;
397 }
398 }
399
401 {
402 if (WarningTimer <= diff)
403 {
404 HealthWarningOff = false;
405 WarningTimer = 25000;
406 }
407 else WarningTimer -= diff;
408 }
409 }
410
411 if (!(me->HasAuraType(SPELL_AURA_CONTROL_VEHICLE)))
412 {
413 if (!(DisableTakeOff))
414 {
415 if (TakeOffTimer <= diff)
416 {
417 me->DespawnOrUnsummon(2050);
418 me->SetOrientation(2.5f);
419 me->SetSpeed(MOVE_FLIGHT, 1.0f, true);
421 Position pos;
422 me->GetPosition(&pos);
423 pos.m_positionX += 10.0f;
424 pos.m_positionY += 10.0f;
425 pos.m_positionZ += 12.0f;
426 me->GetMotionMaster()->MovePoint(1, pos);
427 DisableTakeOff = true;
428 }
429 else TakeOffTimer -= diff;
430 }
431 }
432 };
433 };
434
436 {
437 return new npc_ruby_emerald_amber_drakeAI(creature);
438 }
439};
440
442{
443public:
444 spell_gen_stop_time() : SpellScriptLoader("spell_gen_stop_time") { }
445
447 {
449
450 void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
451 {
452 Unit* caster = GetCaster();
453 if (!caster)
454 return;
455 Unit* target = GetTarget();
456 for (uint32 i = 0; i < 5; ++i)
457 caster->CastSpell(target, SPELL_SHOCK_CHARGE, false);
458 }
459
464 };
465
467 {
469 }
470};
471
473{
474public:
475 spell_call_ruby_emerald_amber_drake() : SpellScriptLoader("spell_call_ruby_emerald_amber_drake") { }
476
478 {
480
482 {
483 // Adjust effect summon position
484 WorldLocation summonPos = *GetExplTargetDest();
485 Position offset = {0.0f, 0.0f, 12.0f, 0.0f};
486 summonPos.RelocateOffset(offset);
487 SetExplTargetDest(summonPos);
488 GetHitDest()->RelocateOffset(offset);
489 }
490
491 void ModDestHeight(SpellEffIndex /*effIndex*/)
492 {
493 // Used to cast visual effect at proper position
494 Position offset = {0.0f, 0.0f, 12.0f, 0.0f};
495 const_cast<WorldLocation*>(GetExplTargetDest())->RelocateOffset(offset);
496 }
497
503 };
504
509};
510
511
537
567
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
@ GOSSIP_ICON_CHAT
Definition GossipDef.h:46
@ IN_PROGRESS
@ DONE
@ EQUIP_ERR_OK
Definition Item.h:28
@ POINT_MOTION_TYPE
std::vector< ItemPosCount > ItemPosCountVec
Definition Player.h:777
@ GOSSIP_SENDER_MAIN
@ GOSSIP_ACTION_INFO_DEF
SpellEffIndex
@ EFFECT_0
@ EFFECT_2
@ SPELL_EFFECT_SUMMON
@ SPELL_EFFECT_SCHOOL_DAMAGE
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_CONTROL_VEHICLE
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_MOD_STUN
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
#define SpellEffectFn(F, I, N)
#define AuraEffectCalcAmountFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
@ UNIT_NPC_FLAG_GOSSIP
Definition Unit.h:687
@ NULL_BAG
Definition Unit.h:336
@ NULL_SLOT
Definition Unit.h:337
@ MOVE_FLIGHT
Definition Unit.h:561
@ UNIT_FIELD_NPC_FLAGS
HookList< EffectApplyHandler > AfterEffectApply
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
Unit * GetCaster() const
Unit * GetTarget() const
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
Creature *const me
Definition CreatureAI.h:56
CreatureScript(const char *name)
WorldLocation const * GetExplTargetDest()
void SetExplTargetDest(WorldLocation &loc)
HookList< EffectHandler > OnEffectHit
HookList< EffectHandler > OnEffectHitTarget
WorldLocation * GetHitDest()
void SetHitDamage(int32 damage)
HookList< EffectHandler > OnEffectLaunch
Unit * GetCaster()
SpellScriptLoader(const char *name)
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)
InstanceScript * GetInstanceScript()
Definition Object.cpp:1612
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition oculus.cpp:272
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition oculus.cpp:435
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
Definition oculus.cpp:101
CreatureAI * GetAI(Creature *creature) const OVERRIDE
Definition oculus.cpp:242
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
Definition oculus.cpp:207
SpellScript * GetSpellScript() const OVERRIDE
Definition oculus.cpp:505
void Apply(AuraEffect const *, AuraEffectHandleModes)
Definition oculus.cpp:450
PrepareAuraScript(spell_gen_stop_time_AuraScript)
AuraScript * GetAuraScript() const OVERRIDE
Definition oculus.cpp:466
void HandleEffectCalcAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
Definition oculus.cpp:547
PrepareAuraScript(spell_oculus_dream_funnel_AuraScript)
AuraScript * GetAuraScript() const OVERRIDE
Definition oculus.cpp:562
SpellScript * GetSpellScript() const OVERRIDE
Definition oculus.cpp:532
@ WHISPER_DRAKES_WELCOME
Definition oculus.cpp:90
@ SAY_BELGARISTRASZ
Definition oculus.cpp:88
@ SAY_UROM
Definition oculus.cpp:87
@ SAY_VAROS
Definition oculus.cpp:86
@ WHISPER_DRAKES_LOWHEALTH
Definition oculus.cpp:93
@ SAY_DRAKES_TAKEOFF
Definition oculus.cpp:89
@ WHISPER_DRAKES_ABILITIES
Definition oculus.cpp:91
@ WHISPER_DRAKES_SPECIAL
Definition oculus.cpp:92
#define GOSSIP_ITEM_DRAKES
Definition oculus.cpp:16
Drakes
Definition oculus.cpp:47
@ SPELL_EMERALD_DREAM_FUNNEL
Definition oculus.cpp:81
@ SPELL_RUBY_EVASIVE_MANEUVERS
Definition oculus.cpp:56
@ SPELL_EMERALD_DRAKE_SADDLE
Definition oculus.cpp:77
@ SPELL_RUBY_DRAKE_SADDLE
Definition oculus.cpp:53
@ SPELL_EMERALD_TOUCH_THE_NIGHTMARE
Definition oculus.cpp:79
@ SPELL_RUBY_EVASIVE_AURA
Definition oculus.cpp:55
@ SPELL_RUBY_SEARING_WRATH
Definition oculus.cpp:54
@ SPELL_RIDE_EMERALD_DRAKE_QUE
Definition oculus.cpp:76
@ SPELL_RIDE_AMBER_DRAKE_QUE
Definition oculus.cpp:65
@ SPELL_AMBER_TEMPORAL_RIFT
Definition oculus.cpp:70
@ SPELL_EMERALD_LEECHING_POISON
Definition oculus.cpp:78
@ SPELL_AMBER_DRAKE_SADDLE
Definition oculus.cpp:66
@ SPELL_RUBY_MARTYR
Definition oculus.cpp:58
@ SPELL_AMBER_SHOCK_LANCE
Definition oculus.cpp:67
@ SPELL_RIDE_RUBY_DRAKE_QUE
Definition oculus.cpp:52
#define GOSSIP_ITEM_VERDISA2
Definition oculus.cpp:20
#define GOSSIP_ITEM_BELGARISTRASZ2
Definition oculus.cpp:18
#define GOSSIP_ITEM_ETERNOS1
Definition oculus.cpp:21
GossipNPCs
Definition oculus.cpp:27
@ GOSSIP_TEXTID_BELGARISTRASZ2
Definition oculus.cpp:30
@ GOSSIP_TEXTID_BELGARISTRASZ3
Definition oculus.cpp:31
@ GOSSIP_TEXTID_VERDISA2
Definition oculus.cpp:33
@ GOSSIP_TEXTID_DRAKES
Definition oculus.cpp:28
@ ITEM_RUBY_ESSENCE
Definition oculus.cpp:41
@ ITEM_EMERALD_ESSENCE
Definition oculus.cpp:39
@ GOSSIP_TEXTID_BELGARISTRASZ1
Definition oculus.cpp:29
@ GOSSIP_TEXTID_VERDISA1
Definition oculus.cpp:32
@ ITEM_AMBER_ESSENCE
Definition oculus.cpp:40
@ GOSSIP_TEXTID_ETERNOS2
Definition oculus.cpp:36
@ GOSSIP_TEXTID_ETERNOS3
Definition oculus.cpp:37
@ SPELL_SHOCK_CHARGE
Definition oculus.cpp:43
@ GOSSIP_TEXTID_ETERNOS1
Definition oculus.cpp:35
@ GOSSIP_TEXTID_VERDISA3
Definition oculus.cpp:34
void AddSC_oculus()
Definition oculus.cpp:568
#define GOSSIP_ITEM_VERDISA1
Definition oculus.cpp:19
#define HAS_ESSENCE(a)
Definition oculus.cpp:24
#define GOSSIP_ITEM_ETERNOS2
Definition oculus.cpp:22
#define GOSSIP_ITEM_BELGARISTRASZ1
Definition oculus.cpp:17
@ NPC_AMBER_DRAKE_VEHICLE
Definition oculus.h:37
@ NPC_ETERNOS
Definition oculus.h:40
@ NPC_EMERALD_DRAKE_VEHICLE
Definition oculus.h:36
@ NPC_VERDISA
Definition oculus.h:38
@ NPC_EREGOS
Definition oculus.h:31
@ NPC_BELGARISTRASZ
Definition oculus.h:39
@ NPC_UROM
Definition oculus.h:30
@ NPC_VAROS
Definition oculus.h:29
@ NPC_RUBY_DRAKE_VEHICLE
Definition oculus.h:35
@ DATA_VAROS_EVENT
Definition oculus.h:12
@ DATA_UROM_EVENT
Definition oculus.h:13
@ DATA_DRAKOS_EVENT
Definition oculus.h:11
@ DATA_EREGOS_EVENT
Definition oculus.h:14
float m_positionZ
Definition Object.h:289
float m_positionX
Definition Object.h:287
float m_positionY
Definition Object.h:288
void GetPosition(float &x, float &y) const
Definition Object.h:333
void RelocateOffset(Position const &offset)
Definition Object.cpp:1841
Creature * me
ScriptedAI(Creature *creature)
VehicleAI(Creature *c)
Definition CombatAI.cpp:262
void IsSummonedBy(Unit *summoner) OVERRIDE
Definition oculus.cpp:257
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
Definition oculus.cpp:348
void MovementInform(uint32 type, uint32 id) OVERRIDE
Definition oculus.cpp:342