TrinityCore
oculus.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "ScriptMgr.h"
19#include "CombatAI.h"
20#include "InstanceScript.h"
21#include "MotionMaster.h"
22#include "ObjectAccessor.h"
23#include "oculus.h"
24#include "Player.h"
25#include "ScriptedCreature.h"
26#include "ScriptedGossip.h"
27#include "SpellAuraEffects.h"
28#include "SpellScript.h"
29
31{
35
36 SPELL_CREATE_EMERALD_ESSENCE = 49382, // no effects in spell_dbc
37 SPELL_CREATE_AMBER_ESSENCE = 49447, // no effects in spell_dbc
38 SPELL_CREATE_RUBY_ESSENCE = 49450, // no effects in spell_dbc
41 ITEM_RUBY_ESSENCE = 37860
42};
43
45{
46/*
47 * Ruby Drake (27756)
48 * (summoned by spell Ruby Essence (37860) --> Call Amber Drake (49462) --> Summon 27756)
49 */
50 SPELL_RIDE_RUBY_DRAKE_QUE = 49463, // Apply Aura: Periodic Trigger, Interval: 3 seconds --> 49464
51 SPELL_RUBY_DRAKE_SADDLE = 49464, // Allows you to ride on the back of an Amber Drake. --> Dummy
52 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
53 SPELL_RUBY_EVASIVE_AURA = 50248, // Instant - Allows the Ruby Drake to generate Evasive Charges when hit by hostile attacks and spells.
55 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.
56 // you do not have access to until you kill the Mage-Lord Urom
57 SPELL_RUBY_MARTYR = 50253, // Instant - 10 sec. cooldown - Redirect all harmful spells cast at friendly drakes to yourself for 10 sec.
58
59/*
60 * Amber Drake (27755)
61 * (summoned by spell Amber Essence (37859) --> Call Amber Drake (49461) --> Summon 27755)
62 */
63 SPELL_RIDE_AMBER_DRAKE_QUE = 49459, // Apply Aura: Periodic Trigger, Interval: 3 seconds --> 49460
64 SPELL_AMBER_DRAKE_SADDLE = 49460, // Allows you to ride on the back of an Amber Drake. --> Dummy
66 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.
67 SPELL_AMBER_STOP_TIME = 49838, // 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.
68 // you do not have access to until you kill the Mage-Lord Urom.
69 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.
70
71/*
72 * Emerald Drake (27692)
73 * (summoned by spell Emerald Essence (37815) --> Call Emerald Drake (49345) --> Summon 27692)
74 */
75 SPELL_RIDE_EMERALD_DRAKE_QUE = 49427, // Apply Aura: Periodic Trigger, Interval: 3 seconds --> 49346
76 SPELL_EMERALD_DRAKE_SADDLE = 49346, // Allows you to ride on the back of an Amber Drake. --> Dummy
77 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.
78 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.
79 // you do not have access to until you kill the Mage-Lord Urom
80 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.
81/*
82 * All Drakes
83 * GPS System
84 */
85 SPELL_GPS = 53389,
86
87 // Misc
90};
91
93{
101
103{
117 WHISPER_GPS_END = 10
119
121{
123
124 void StoreEssence(Player* player, uint32 itemId)
125 {
127 uint32 count = 1;
128 ItemPosCountVec dest;
129 uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, count);
130 if (msg == EQUIP_ERR_OK)
131 if (Item* item = player->StoreNewItem(dest, itemId, true))
132 player->SendNewItem(item, count, true, true);
133 }
134
135 void RemoveEssence(Player* player, uint32 itemId)
136 {
137 player->DestroyItemCount(itemId, 1, true, false);
138 }
139
140 bool OnGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
141 {
142 switch (menuId)
143 {
145 if (gossipListId >= 1 && gossipListId <= 3)
146 {
147 if (gossipListId == 2)
149 else if (gossipListId == 3)
151
153 break;
154 }
155 return false;
157 if (gossipListId >= 1 && gossipListId <= 3)
158 {
159 if (gossipListId == 2)
161 else if (gossipListId == 3)
163
165 break;
166 }
167 return false;
169 if (gossipListId <= 2)
170 {
171 if (gossipListId == 1)
173 else if (gossipListId == 2)
175
177 break;
178 }
179 return false;
180 default:
181 return false;
182 }
183 player->PlayerTalkClass->SendCloseGossip();
184 return false;
185 }
186
187 void MovementInform(uint32 /*type*/, uint32 id) override
188 {
189 if (id != POINT_MOVE_OUT)
190 return;
191
192 // When Belgaristraz finish his moving say grateful text
193 if (me->GetEntry() == NPC_BELGARISTRASZ)
195
196 // The gossip flag should activate when Drakos die and not from DB
198 }
199};
200
202{
203 npc_image_belgaristrasz(Creature* creature) : ScriptedAI(creature) { }
204
205 void IsSummonedBy(WorldObject* summoner) override
206 {
207 if (summoner->GetEntry() == NPC_VAROS)
208 {
210 me->DespawnOrUnsummon(60s);
211 }
212
213 if (summoner->GetEntry() == NPC_UROM)
214 {
215 Talk(SAY_UROM);
216 me->DespawnOrUnsummon(60s);
217 }
218 }
219};
220
222{
224 {
225 Initialize();
226 _instance = creature->GetInstanceScript();
227 }
228
230 {
231 _healthWarning = true;
232 }
233
234 void Reset() override
235 {
236 _events.Reset();
237 Initialize();
238 }
239
240 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
241 {
242 if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID()))
243 if (spellInfo->Id == SPELL_GPS)
244 {
246 Talk(WHISPER_GPS_END, creator);
247 else if (_instance->GetBossState(DATA_UROM) == DONE)
248 Talk(WHISPER_GPS_EREGOS, creator);
250 Talk(WHISPER_GPS_UROM, creator);
252 Talk(WHISPER_GPS_VAROS, creator);
257 }
258 }
259
260 void IsSummonedBy(WorldObject* summoner) override
261 {
263 if (Creature* eregos = me->FindNearestCreature(NPC_EREGOS, 450.0f, true))
264 eregos->DespawnOrUnsummon(); // On retail this kills abusive call of drake during engaged Eregos
265
266 me->SetFacingToObject(summoner);
267
268 switch (me->GetEntry())
269 {
271 me->CastSpell(summoner, SPELL_RIDE_RUBY_DRAKE_QUE, true);
272 break;
274 me->CastSpell(summoner, SPELL_RIDE_EMERALD_DRAKE_QUE, true);
275 break;
277 me->CastSpell(summoner, SPELL_RIDE_AMBER_DRAKE_QUE, true);
278 break;
279 default:
280 return;
281 }
282
283 Position pos = summoner->GetPosition();
285 }
286
287 void MovementInform(uint32 type, uint32 id) override
288 {
289 if (type == POINT_MOTION_TYPE && id == POINT_LAND)
290 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.
291 }
292
293 void PassengerBoarded(Unit* passenger, int8 /*seatId*/, bool apply) override
294 {
295 if (passenger->GetTypeId() != TYPEID_PLAYER)
296 return;
297
298 if (apply)
299 {
302
303 else if (_instance->GetBossState(DATA_UROM) == DONE)
305 }
306 else
307 {
308 _events.Reset();
310 }
311 }
312
313 void UpdateAI(uint32 diff) override
314 {
315 if (_healthWarning)
316 {
317 if (me->GetHealthPct() <= 40.0f)
319 }
320
321 _events.Update(diff);
322
323 while (uint32 eventId = _events.ExecuteEvent())
324 {
325 switch (eventId)
326 {
327 case EVENT_WELCOME:
328 if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID()))
331 break;
332 case EVENT_ABILITIES:
333 if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID()))
335 break;
337 if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID()))
339 break;
340 case EVENT_LOW_HEALTH:
341 if (Unit* creator = ObjectAccessor::GetUnit(*me, me->GetCreatorGUID()))
343 _healthWarning = false;
345 break;
347 _healthWarning = true;
348 break;
349 case EVENT_TAKE_OFF:
350 {
351 me->DespawnOrUnsummon(2050ms);
352 me->SetOrientation(2.5f);
355 Position pos = me->GetPosition();
356 Position offset = { 10.0f, 10.0f, 12.0f, 0.0f };
357 pos.RelocateOffset(offset);
358 me->SetDisableGravity(true);
360 break;
361 }
362 default:
363 break;
364 }
365 }
366 };
367
368private:
372};
373
374// 49345 - Call Emerald Drake
375// 49461 - Call Amber Drake
376// 49462 - Call Ruby Drake
378{
380 {
381 // Adjust effect summon position
382 Position const offset = { 0.0f, 0.0f, 12.0f, 0.0f };
383 dest.RelocateOffset(offset);
384 }
385
386 void Register() override
387 {
389 }
390};
391
392// 49427 - Ride Emerald Drake Que
393// 49459 - Ride Amber Drake Que
394// 49463 - Ride Ruby Drake Que
396{
397 void HandlePeriodic(AuraEffect const* aurEff)
398 {
399 // caster of the triggered spell is wrong for an unknown reason, handle it here correctly
401 if (Unit* caster = GetCaster())
402 GetTarget()->CastSpell(caster, aurEff->GetSpellEffectInfo().TriggerSpell, true);
403 }
404
405 void Register() override
406 {
408 }
409};
410
411// 50240 - Evasive Maneuvers
413{
414 bool Validate(SpellInfo const* /*spellInfo*/) override
415 {
417 }
418
419 void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
420 {
424 Remove();
425 }
426
427 void Register() override
428 {
430 }
431};
432
433// 49840 - Shock Lance
435{
436 bool Validate(SpellInfo const* /*spellInfo*/) override
437 {
439 }
440
441 void CalculateDamage(Unit const* victim, int32& /*damage*/, int32& flatMod, float& /*pctMod*/) const
442 {
443 if (AuraEffect const* shockCharges = victim->GetAuraEffect(SPELL_AMBER_SHOCK_CHARGE, EFFECT_0, GetCaster()->GetGUID()))
444 {
445 flatMod += shockCharges->GetAmount();
446 shockCharges->GetBase()->Remove(AURA_REMOVE_BY_ENEMY_SPELL);
447 }
448 }
449
450 void Register() override
451 {
453 }
454};
455
456// 49838 - Stop Time
458{
459 bool Validate(SpellInfo const* /*spellInfo*/) override
460 {
462 }
463
464 void Apply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
465 {
466 Unit* caster = GetCaster();
467 if (!caster)
468 return;
469
470 Unit* target = GetTarget();
471 for (uint32 i = 0; i < 5; ++i)
472 caster->CastSpell(target, SPELL_AMBER_SHOCK_CHARGE, true);
473 }
474
475 void Register() override
476 {
478 }
479};
480
481// 49592 - Temporal Rift
483{
484 bool Validate(SpellInfo const* /*spellInfo*/) override
485 {
487 }
488
489 void HandleProc(AuraEffect* aurEff, ProcEventInfo& eventInfo)
490 {
492 DamageInfo* damageInfo = eventInfo.GetDamageInfo();
493 if (!damageInfo || !damageInfo->GetDamage())
494 return;
495
496 int32 amount = aurEff->GetAmount() + damageInfo->GetDamage();
497 if (amount >= 15000)
498 {
499 if (Unit* caster = GetCaster())
500 caster->CastSpell(GetTarget(), SPELL_AMBER_SHOCK_CHARGE, true);
501 amount -= 15000;
502 }
503
504 const_cast<AuraEffect*>(aurEff)->SetAmount(amount);
505 }
506
507 void Register() override
508 {
510 }
511};
512
513// 50341 - Touch the Nightmare
515{
517 {
518 SetHitDamage(int32(GetCaster()->CountPctFromMaxHealth(30)));
519 }
520
521 void Register() override
522 {
524 }
525};
526
527// 50344 - Dream Funnel
529{
530 void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& canBeRecalculated)
531 {
532 if (Unit* caster = GetCaster())
533 amount = int32(caster->CountPctFromMaxHealth(5));
534
535 canBeRecalculated = false;
536 }
537
538 void Register() override
539 {
542 }
543};
544
546{
558}
uint8_t uint8
Definition: Define.h:144
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint32_t uint32
Definition: Define.h:142
@ IN_PROGRESS
@ DONE
@ EQUIP_ERR_OK
Definition: ItemDefines.h:26
@ POINT_MOTION_TYPE
@ TYPEID_PLAYER
Definition: ObjectGuid.h:41
std::vector< ItemPosCount > ItemPosCountVec
Definition: Player.h:750
#define RegisterSpellScript(spell_script)
Definition: ScriptMgr.h:1369
SpellEffIndex
Definition: SharedDefines.h:29
@ EFFECT_0
Definition: SharedDefines.h:30
@ EFFECT_2
Definition: SharedDefines.h:32
@ TARGET_DEST_CASTER_FRONT
@ SPELL_EFFECT_SCHOOL_DAMAGE
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
@ AURA_REMOVE_BY_ENEMY_SPELL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PROC_TRIGGER_SPELL
@ SPELL_AURA_PERIODIC_HEAL
@ SPELL_AURA_DUMMY
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ SPELL_AURA_MOD_STUN
#define AuraEffectProcFn(F, I, N)
Definition: SpellScript.h:2160
#define SpellEffectFn(F, I, N)
Definition: SpellScript.h:842
#define AuraEffectCalcAmountFn(F, I, N)
Definition: SpellScript.h:2058
#define AuraEffectPeriodicFn(F, I, N)
Definition: SpellScript.h:2046
#define SpellCalcDamageFn(F)
Definition: SpellScript.h:879
#define SpellDestinationTargetSelectFn(F, I, N)
Definition: SpellScript.h:874
#define AuraEffectApplyFn(F, I, N, M)
Definition: SpellScript.h:2029
@ MOVE_FLIGHT
Definition: UnitDefines.h:123
@ UNIT_NPC_FLAG_GOSSIP
Definition: UnitDefines.h:297
@ NULL_BAG
Definition: Unit.h:62
@ NULL_SLOT
Definition: Unit.h:63
Says
SpellEffectInfo const & GetSpellEffectInfo() const
int32 GetAmount() const
void PreventDefaultAction()
HookList< EffectPeriodicHandler > OnEffectPeriodic
Definition: SpellScript.h:2045
HookList< EffectApplyHandler > AfterEffectApply
Definition: SpellScript.h:2028
HookList< EffectCalcAmountHandler > DoEffectCalcAmount
Definition: SpellScript.h:2057
Unit * GetCaster() const
Unit * GetTarget() const
void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
HookList< EffectProcHandler > OnEffectProc
Definition: SpellScript.h:2155
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:56
Creature *const me
Definition: CreatureAI.h:61
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Definition: Creature.cpp:2415
uint32 GetDamage() const
Definition: Unit.h:446
uint32 ExecuteEvent()
Definition: EventMap.cpp:73
void Update(uint32 time)
Definition: EventMap.h:56
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
Definition: EventMap.cpp:36
void Reset()
Definition: EventMap.cpp:21
EncounterState GetBossState(uint32 id) const
Definition: Item.h:170
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
TypeID GetTypeId() const
Definition: Object.h:173
uint32 GetEntry() const
Definition: Object.h:161
Item * StoreNewItem(ItemPosCountVec const &pos, uint32 itemId, bool update, ItemRandomBonusListId randomBonusListId=0, GuidSet const &allowedLooters=GuidSet(), ItemContext context=ItemContext::NONE, std::vector< int32 > const *bonusListIDs=nullptr, bool addToCollection=true)
Definition: Player.cpp:11537
uint32 DestroyItemCount(uint32 item, uint32 count, bool update, bool unequip_check=false)
Definition: Player.cpp:12281
InventoryResult CanStoreNewItem(uint8 bag, uint8 slot, ItemPosCountVec &dest, uint32 item, uint32 count, uint32 *no_space_count=nullptr) const
Definition: Player.cpp:10032
std::unique_ptr< PlayerMenu > PlayerTalkClass
Definition: Player.h:2380
void SendNewItem(Item *item, uint32 quantity, bool received, bool created, bool broadcast=false, uint32 dungeonEncounterId=0)
Definition: Player.cpp:13990
DamageInfo * GetDamageInfo() const
Definition: Unit.h:505
uint32 TriggerSpell
Definition: SpellInfo.h:237
uint32 const Id
Definition: SpellInfo.h:325
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Definition: SpellScript.h:162
HookList< DamageAndHealingCalcHandler > CalcDamage
Definition: SpellScript.h:878
Unit * GetCaster() const
HookList< DestinationTargetSelectHandler > OnDestinationTargetSelect
Definition: SpellScript.h:873
HookList< EffectHandler > OnEffectHitTarget
Definition: SpellScript.h:840
void SetHitDamage(int32 damage)
Definition: Unit.h:627
float GetHealthPct() const
Definition: Unit.h:784
MotionMaster * GetMotionMaster()
Definition: Unit.h:1652
void SetFacingToObject(WorldObject const *object, bool force=true)
Definition: Unit.cpp:12671
AuraEffect * GetAuraEffect(uint32 spellId, uint8 effIndex, ObjectGuid casterGUID=ObjectGuid::Empty) const
Definition: Unit.cpp:4464
bool SetDisableGravity(bool disable, bool updateAnimTier=true)
Definition: Unit.cpp:12725
ObjectGuid GetCreatorGUID() const override
Definition: Unit.h:1172
void SetNpcFlag(NPCFlags flags)
Definition: Unit.h:982
void RemoveAuraFromStack(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT, uint16 num=1)
Definition: Unit.cpp:3847
void SetSpeedRate(UnitMoveType mtype, float rate)
Definition: Unit.cpp:8525
InstanceScript * GetInstanceScript() const
Definition: Object.cpp:1042
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition: Object.cpp:2896
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition: Object.cpp:2148
virtual uint32 GetData(uint32) const
Definition: ZoneScript.h:91
void SetDest(SpellDestination &dest)
Definition: oculus.cpp:379
void Register() override
Definition: oculus.cpp:538
void HandleEffectCalcAmount(AuraEffect const *, int32 &amount, bool &canBeRecalculated)
Definition: oculus.cpp:530
void HandleProc(AuraEffect *, ProcEventInfo &)
Definition: oculus.cpp:419
void Register() override
Definition: oculus.cpp:427
bool Validate(SpellInfo const *) override
Definition: oculus.cpp:414
void HandlePeriodic(AuraEffect const *aurEff)
Definition: oculus.cpp:397
void Register() override
Definition: oculus.cpp:450
bool Validate(SpellInfo const *) override
Definition: oculus.cpp:436
void CalculateDamage(Unit const *victim, int32 &, int32 &flatMod, float &) const
Definition: oculus.cpp:441
void Register() override
Definition: oculus.cpp:475
void Apply(AuraEffect const *, AuraEffectHandleModes)
Definition: oculus.cpp:464
bool Validate(SpellInfo const *) override
Definition: oculus.cpp:459
bool Validate(SpellInfo const *) override
Definition: oculus.cpp:484
void HandleProc(AuraEffect *aurEff, ProcEventInfo &eventInfo)
Definition: oculus.cpp:489
void Register() override
Definition: oculus.cpp:507
void HandleDamageCalc(SpellEffIndex)
Definition: oculus.cpp:516
void apply(T *val)
Definition: ByteConverter.h:41
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
DrakeEvents
Definition: oculus.cpp:93
@ EVENT_ABILITIES
Definition: oculus.cpp:95
@ EVENT_TAKE_OFF
Definition: oculus.cpp:99
@ EVENT_WELCOME
Definition: oculus.cpp:94
@ EVENT_LOW_HEALTH
Definition: oculus.cpp:97
@ EVENT_SPECIAL_ATTACK
Definition: oculus.cpp:96
@ EVENT_RESET_LOW_HEALTH
Definition: oculus.cpp:98
@ WHISPER_GPS_EREGOS
Definition: oculus.cpp:116
@ WHISPER_DRAKES_WELCOME
Definition: oculus.cpp:108
@ SAY_BELGARISTRASZ
Definition: oculus.cpp:106
@ SAY_UROM
Definition: oculus.cpp:105
@ WHISPER_GPS_1_CONSTRUCT
Definition: oculus.cpp:113
@ WHISPER_GPS_10_CONSTRUCTS
Definition: oculus.cpp:112
@ SAY_VAROS
Definition: oculus.cpp:104
@ WHISPER_DRAKES_LOWHEALTH
Definition: oculus.cpp:111
@ SAY_DRAKES_TAKEOFF
Definition: oculus.cpp:107
@ WHISPER_GPS_END
Definition: oculus.cpp:117
@ WHISPER_GPS_VAROS
Definition: oculus.cpp:114
@ WHISPER_GPS_UROM
Definition: oculus.cpp:115
@ WHISPER_DRAKES_ABILITIES
Definition: oculus.cpp:109
@ WHISPER_DRAKES_SPECIAL
Definition: oculus.cpp:110
Drakes
Definition: oculus.cpp:45
@ SPELL_AMBER_SHOCK_CHARGE
Definition: oculus.cpp:65
@ SPELL_EMERALD_DREAM_FUNNEL
Definition: oculus.cpp:80
@ SPELL_RUBY_EVASIVE_MANEUVERS
Definition: oculus.cpp:55
@ SPELL_EMERALD_DRAKE_SADDLE
Definition: oculus.cpp:76
@ SPELL_RUBY_DRAKE_SADDLE
Definition: oculus.cpp:51
@ SPELL_EMERALD_TOUCH_THE_NIGHTMARE
Definition: oculus.cpp:78
@ SPELL_RUBY_EVASIVE_AURA
Definition: oculus.cpp:53
@ POINT_TAKE_OFF
Definition: oculus.cpp:89
@ SPELL_RUBY_SEARING_WRATH
Definition: oculus.cpp:52
@ SPELL_RIDE_EMERALD_DRAKE_QUE
Definition: oculus.cpp:75
@ SPELL_RUBY_EVASIVE_CHARGES
Definition: oculus.cpp:54
@ POINT_LAND
Definition: oculus.cpp:88
@ SPELL_RIDE_AMBER_DRAKE_QUE
Definition: oculus.cpp:63
@ SPELL_AMBER_TEMPORAL_RIFT
Definition: oculus.cpp:69
@ SPELL_EMERALD_LEECHING_POISON
Definition: oculus.cpp:77
@ SPELL_AMBER_STOP_TIME
Definition: oculus.cpp:67
@ SPELL_GPS
Definition: oculus.cpp:85
@ SPELL_AMBER_DRAKE_SADDLE
Definition: oculus.cpp:64
@ SPELL_RUBY_MARTYR
Definition: oculus.cpp:57
@ SPELL_AMBER_SHOCK_LANCE
Definition: oculus.cpp:66
@ SPELL_RIDE_RUBY_DRAKE_QUE
Definition: oculus.cpp:50
GossipNPCs
Definition: oculus.cpp:31
@ SPELL_CREATE_AMBER_ESSENCE
Definition: oculus.cpp:37
@ SPELL_CREATE_RUBY_ESSENCE
Definition: oculus.cpp:38
@ GOSSIP_MENU_VERDISA
Definition: oculus.cpp:32
@ ITEM_RUBY_ESSENCE
Definition: oculus.cpp:41
@ ITEM_EMERALD_ESSENCE
Definition: oculus.cpp:39
@ ITEM_AMBER_ESSENCE
Definition: oculus.cpp:40
@ SPELL_CREATE_EMERALD_ESSENCE
Definition: oculus.cpp:36
@ GOSSIP_MENU_ETERNOS
Definition: oculus.cpp:33
@ GOSSIP_MENU_BELGARISTRASZ
Definition: oculus.cpp:34
void AddSC_oculus()
Definition: oculus.cpp:545
@ DATA_VAROS
Definition: oculus.h:32
@ DATA_EREGOS
Definition: oculus.h:34
@ DATA_UROM
Definition: oculus.h:33
@ DATA_CONSTRUCTS
Definition: oculus.h:36
@ POINT_MOVE_OUT
Definition: oculus.h:107
@ NPC_AMBER_DRAKE_VEHICLE
Definition: oculus.h:50
@ NPC_EMERALD_DRAKE_VEHICLE
Definition: oculus.h:49
@ NPC_EREGOS
Definition: oculus.h:44
@ NPC_BELGARISTRASZ
Definition: oculus.h:52
@ NPC_UROM
Definition: oculus.h:43
@ NPC_VAROS
Definition: oculus.h:42
@ NPC_RUBY_DRAKE_VEHICLE
Definition: oculus.h:48
@ KILL_NO_CONSTRUCT
Definition: oculus.h:100
@ KILL_ONE_CONSTRUCT
Definition: oculus.h:101
@ KILL_MORE_CONSTRUCT
Definition: oculus.h:102
#define RegisterOculusCreatureAI(ai_name)
Definition: oculus.h:116
constexpr void SetOrientation(float orientation)
Definition: Position.h:71
constexpr void GetPosition(float &x, float &y) const
Definition: Position.h:81
void RelocateOffset(Position const &offset)
Definition: Position.cpp:34
void RelocateOffset(Position const &offset)
Definition: Spell.cpp:122
void IsSummonedBy(WorldObject *summoner) override
Definition: oculus.cpp:205
npc_image_belgaristrasz(Creature *creature)
Definition: oculus.cpp:203
InstanceScript * _instance
Definition: oculus.cpp:369
npc_ruby_emerald_amber_drake(Creature *creature)
Definition: oculus.cpp:223
void MovementInform(uint32 type, uint32 id) override
Definition: oculus.cpp:287
void UpdateAI(uint32 diff) override
Definition: oculus.cpp:313
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
Definition: oculus.cpp:240
void IsSummonedBy(WorldObject *summoner) override
Definition: oculus.cpp:260
void PassengerBoarded(Unit *passenger, int8, bool apply) override
== Fields =======================================
Definition: oculus.cpp:293
void Reset() override
Definition: oculus.cpp:234
npc_verdisa_beglaristrasz_eternos(Creature *creature)
Definition: oculus.cpp:122
void MovementInform(uint32, uint32 id) override
Definition: oculus.cpp:187
void StoreEssence(Player *player, uint32 itemId)
Definition: oculus.cpp:124
bool OnGossipSelect(Player *player, uint32 menuId, uint32 gossipListId) override
Definition: oculus.cpp:140
void RemoveEssence(Player *player, uint32 itemId)
Definition: oculus.cpp:135