210 {1877.670288f, 842.280273f, 43.333591f},
211 {1877.338867f, 834.615356f, 38.762287f},
212 {1872.161011f, 823.854309f, 38.645401f},
213 {1864.860474f, 815.787170f, 38.784843f},
214 {1858.953735f, 810.048950f, 44.008759f},
215 {1843.707153f, 805.807739f, 44.135197f}
221 {1902.561401f, 853.334656f, 47.106117f},
222 {1895.486084f, 855.376404f, 44.334591f},
223 {1882.805176f, 854.993286f, 43.333591f},
224 {1877.670288f, 842.280273f, 43.333591f},
225 {1877.338867f, 834.615356f, 38.762287f},
226 {1872.161011f, 823.854309f, 38.645401f},
227 {1864.860474f, 815.787170f, 38.784843f},
228 {1858.953735f, 810.048950f, 44.008759f},
229 {1843.707153f, 805.807739f, 44.135197f}
235 {1929.392212f, 837.614990f, 47.136166f},
236 {1928.290649f, 824.750427f, 45.474411f},
237 {1915.544922f, 826.919373f, 38.642811f},
238 {1900.933960f, 818.855652f, 38.801647f},
239 {1886.810547f, 813.536621f, 38.490490f},
240 {1869.079712f, 808.701538f, 38.689003f},
241 {1860.843384f, 806.645020f, 44.008789f},
242 {1843.707153f, 805.807739f, 44.135197f}
248 {1934.049438f, 815.778503f, 52.408699f},
249 {1928.290649f, 824.750427f, 45.474411f},
250 {1915.544922f, 826.919373f, 38.642811f},
251 {1900.933960f, 818.855652f, 38.801647f},
252 {1886.810547f, 813.536621f, 38.490490f},
253 {1869.079712f, 808.701538f, 38.689003f},
254 {1860.843384f, 806.645020f, 44.008789f},
255 {1843.707153f, 805.807739f, 44.135197f}
261 {1921.658447f, 761.657043f, 50.866741f},
262 {1910.559814f, 755.780457f, 47.701447f},
263 {1896.664673f, 752.920898f, 47.667004f},
264 {1887.398804f, 763.633240f, 47.666851f},
265 {1879.020386f, 775.396973f, 38.705990f},
266 {1872.439087f, 782.568604f, 38.808292f},
267 {1863.573364f, 791.173584f, 38.743660f},
268 {1857.811890f, 796.765564f, 43.950329f},
269 {1845.577759f, 800.681152f, 44.104248f}
275 {1887.398804f, 763.633240f, 47.666851f},
276 {1879.020386f, 775.396973f, 38.705990f},
277 {1872.439087f, 782.568604f, 38.808292f},
278 {1863.573364f, 791.173584f, 38.743660f},
279 {1857.811890f, 796.765564f, 43.950329f},
280 {1845.577759f, 800.681152f, 44.104248f}
286 {1888.861084f, 805.074768f, 38.375790f},
287 {1869.793823f, 804.135804f, 38.647018f},
288 {1861.541504f, 804.149780f, 43.968292f},
289 {1843.567017f, 804.288208f, 44.139091f}
295 { 1843.567017f, 804.288208f, 44.139091f }
302 { 0, 1886.251f, 803.0743f, 38.42326f },
303 { 1, 1885.71f, 799.8929f, 38.37241f },
304 { 2, 1889.505f, 762.3288f, 47.66684f },
305 { 3, 1894.542f, 742.1829f, 47.66684f },
306 { 4, 1894.603f, 739.9231f, 47.66684f }
315 { 0, 1886.251f, 803.0743f, 38.42326f },
316 { 1, 1881.047f, 829.6866f, 38.64856f },
317 { 2, 1877.585f, 844.6685f, 43.33349f },
318 { 3, 1876.085f, 851.6685f, 42.99014f },
319 { 4, 1873.747f, 864.1373f, 43.33349f }
328 { 0, 1886.251f, 803.0743f, 38.42326f },
329 { 1, 1888.672f, 801.2348f, 38.42305f },
330 { 2, 1901.987f, 793.3254f, 38.65126f }
339 { 0, 1886.251f, 803.0743f, 38.42326f },
340 { 1, 1867.925f, 778.8035f, 38.64702f },
341 { 2, 1853.304f, 759.0161f, 38.65761f }
350 { 0, 1886.251f, 803.0743f, 38.42326f },
351 { 1, 1889.096f, 810.0487f, 38.43871f },
352 { 2, 1896.547f, 823.5473f, 38.72863f },
353 { 3, 1906.666f, 842.3111f, 38.63351f }
362 { 0, 1886.251f, 803.0743f, 38.42326f },
363 { 1, 1889.69f, 807.0032f, 38.39914f },
364 { 2, 1906.91f, 818.2574f, 38.86596f },
365 { 3, 1929.03f, 824.2713f, 46.09165f },
366 { 4, 1928.441f, 842.8891f, 47.15078f },
367 { 5, 1927.454f, 851.6091f, 47.19094f },
368 { 6, 1927.947f, 852.2986f, 47.19637f }
375 { 1829.142f, 798.219f, 44.36212f, 0.122173f },
376 { 1820.12f, 803.916f, 44.36466f, 0.0f },
377 { 1816.185f, 804.0629f, 44.44799f, 3.176499f },
378 { 1827.886f, 804.0555f, 44.36467f, 0.0f }
399 std::list<Creature*> guardList;
403 guard->Respawn(
true);
404 guard->SetVisible(
true);
406 guard->AI()->EnterEvadeMode();
470 me->GetMotionMaster()->MovePoint(0, SinclariPositions[0]);
471 task.Repeat(Seconds(1));
474 me->HandleEmoteCommand(EMOTE_ONESHOT_USE_STANDING);
475 me->GetMap()->SummonCreature(NPC_DEFENSE_SYSTEM, DefenseSystemLocation);
476 task.Repeat(Seconds(3));
479 me->SetFacingTo(SinclariPositions[0].GetOrientation());
480 Talk(SAY_SINCLARI_INTRO_1);
482 task.Schedule(Seconds(1), [this](TaskContext const& )
484 std::list<Creature*> guardList;
485 me->GetCreatureListWithEntryInGrid(guardList, NPC_VIOLET_HOLD_GUARD, 100.0f);
486 for (Creature* guard : guardList)
488 if (!guard->IsAlive())
490 guard->SetReactState(REACT_PASSIVE);
491 guard->SetWalk(false);
492 guard->GetMotionMaster()->MovePoint(0, GuardsMovePosition);
508 std::list<Creature*> guardList;
511 guard->SetVisible(
false);
563 _summons.Summon(summon);
568 _summons.Despawn(summon);
820 uint32 entry = RAND(NPC_AZURE_INVADER_1, NPC_AZURE_MAGE_SLAYER_1, NPC_AZURE_BINDER_1);
821 DoSummon(entry, me, 2.0f, 20s, TEMPSUMMON_DEAD_DESPAWN);
900 AddWaypoint(i, path[i].GetPositionX() +
irand(-1, 1), path[i].GetPositionY() +
irand(-1, 1), path[i].GetPositionZ(), 0, {},
true);
918 destroyDoorCheck.
Repeat();
First const & RAND(First const &first, Second const &second, Rest const &... rest)
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::seconds Seconds
Seconds shorthand typedef.
@ TEMPSUMMON_DEAD_DESPAWN
@ TEMPSUMMON_MANUAL_DESPAWN
int32 irand(int32 min, int32 max)
uint32 urand(uint32 min, uint32 max)
#define RegisterSpellScript(spell_script)
@ EMOTE_ONESHOT_TALK_NO_SHEATHE
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
#define SpellEffectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
uint32 GetTickNumber() const
void PreventDefaultAction()
HookList< EffectPeriodicHandler > OnEffectPeriodic
Unit * GetUnitOwner() const
virtual void JustEngagedWith(Unit *)
virtual void JustSummoned(Creature *)
virtual void SummonedCreatureDespawn(Creature *)
Creature * DoSummon(uint32 entry, Position const &pos, Milliseconds despawnTime=30s, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
void SetHomePosition(float x, float y, float z, float o)
bool HasReactState(ReactStates state) const
void SetReactState(ReactStates st)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
Creature * GetCreature(uint32 type)
GameObject * GetGameObject(uint32 type)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={}, Optional< MovementFadeObject > fadeObject={}, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
void MovePath(uint32 pathId, bool repeatable, Optional< Milliseconds > duration={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< std::pair< Milliseconds, Milliseconds > > waitTimeRangeAtPathEnd={}, Optional< float > wanderDistanceAtPathEnds={}, Optional< bool > followPathBackwardsFromEndToStart={}, Optional< bool > exactSplinePath={}, bool generatePath=true, Optional< MovementFadeObject > fadeObject={}, Scripting::v2::ActionResultSetter< MovementStopReason > &&scriptResult={})
void SendPreparedGossip(WorldObject *source)
void PrepareGossipMenu(WorldObject *source, uint32 menuId, bool showQuests=false)
std::unique_ptr< PlayerMenu > PlayerTalkClass
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
void Despawn(Creature const *summon)
void Summon(Creature const *summon)
TaskContext & Schedule(TaskScheduler::duration_t time, TaskScheduler::task_handler_t task)
TaskScheduler::repeated_t GetRepeatCounter() const
Returns the repeat counter which increases every time the task is repeated.
TaskContext & Repeat(TaskScheduler::duration_t duration)
TaskScheduler & CancelAll()
TaskScheduler & Schedule(duration_t time, task_handler_t task)
TaskScheduler & SetValidator(P &&predicate)
Sets a validator which is asked if tasks are allowed to be executed.
TaskScheduler & Update()
Update the scheduler to the current time.
virtual void SetData(uint32 id, uint32 value)
virtual void InitializeAI()
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
void CastStop(uint32 except_spellid=0)
MotionMaster * GetMotionMaster()
void RemoveNpcFlag(NPCFlags flags)
void SetNpcFlag(NPCFlags flags)
void SetFacingTo(float const ori, bool force=true)
bool HasUnitState(const uint32 f) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void HandleEmoteCommand(Emote emoteId, Player *target=nullptr, Trinity::IteratorPair< int32 const * > spellVisualKitIds={}, int32 sequenceVariation=0)
InstanceScript * GetInstanceScript() const
void GetCreatureListWithEntryInGrid(Container &creatureContainer, uint32 entry, float maxSearchRange=250.0f) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
virtual uint32 GetData(uint32) const
virtual void SetData(uint32, uint32)
void PeriodicTick(AuraEffect const *)
InstanceScript * _instance
void PeriodicTick(AuraEffect const *aurEff)
bool Validate(SpellInfo const *) override
void HandleScript(SpellEffIndex)
Position const PortalIntroPositions[]
void Start(bool isActiveAttacker=true, ObjectGuid playerGUID=ObjectGuid::Empty, Quest const *quest=nullptr, bool instantRespawn=false, bool canLoopPath=false)
void AddWaypoint(uint32 id, float x, float y, float z, bool run)
void SetDespawnAtEnd(bool despawn)
go_activation_crystal(GameObject *go)
bool OnGossipHello(Player *player) override
npc_azure_binder(Creature *creature)
void ScheduledTasks() override
void ScheduledTasks() override
npc_azure_captain(Creature *creature)
npc_azure_invader(Creature *creature)
void ScheduledTasks() override
void ScheduledTasks() override
npc_azure_mage_slayer(Creature *creature)
npc_azure_raider(Creature *creature)
void ScheduledTasks() override
npc_azure_saboteur(Creature *creature)
void WaypointPathEnded(uint32, uint32 pathId) override
InstanceScript * _instance
void UpdateAI(uint32 diff) override
void ScheduledTasks() override
npc_azure_sorceror(Creature *creature)
npc_azure_spellbreaker(Creature *creature)
void ScheduledTasks() override
void ScheduledTasks() override
npc_azure_stalker(Creature *creature)
bool OnGossipHello(Player *player) override
void JustSummoned(Creature *summon) override
bool OnGossipSelect(Player *player, uint32 menuId, uint32 gossipListId) override
InstanceScript * _instance
void DoAction(int32 actionId) override
npc_sinclari_vh(Creature *creature)
void UpdateAI(uint32 diff) override
void SummonedCreatureDespawn(Creature *summon) override
void UpdateAI(uint32 diff) override
npc_violet_hold_defense_system(Creature *creature)
void SummonedCreatureDies(Creature *summon, Unit *) override
npc_violet_hold_teleportation_portal_commonAI(Creature *creature)
void JustSummoned(Creature *summon) override
void JustEngagedWith(Unit *) override
void UpdateAI(uint32 diff) override
void MoveInLineOfSight(Unit *) override
InstanceScript * _instance
void SetData(uint32 type, uint32 data) override
virtual void ScheduleTasks()
void InitializeAI() override
void ScheduleTasks() override
npc_violet_hold_teleportation_portal_elite(Creature *creature)
void SummonedCreatureDies(Creature *summon, Unit *killer) override
npc_violet_hold_teleportation_portal_intro(Creature *creature)
void ScheduleTasks() override
void InitializeAI() override
void SummonedCreatureDies(Creature *summon, Unit *killer) override
npc_violet_hold_teleportation_portal(Creature *creature)
void SetData(uint32 type, uint32 data) override
void WaypointReached(uint32 waypointId, uint32) override
void UpdateEscortAI(uint32 diff) override
Position const * GetPathAndInitLastWaypointFrom(Position const (&path)[N])
void JustEngagedWith(Unit *who) override
virtual void ScheduledTasks()
violet_hold_trashAI(Creature *creature)
InstanceScript * _instance
void SetData(uint32 type, uint32 data) override
@ SPELL_ARCANE_LIGHTNING_DUMMY
@ SPELL_ARCANE_LIGHTNING_DAMAGE
@ SPELL_ARCANE_LIGHTNING_INSTAKILL
@ DATA_PORTAL_PERIODIC_TICK
@ SAY_SINCLARI_ELITE_SQUAD
@ SAY_SINCLARI_PORTAL_KEEPER
@ SAY_SINCLARI_PORTAL_GUARDIAN
@ GOSSIP_MENU_START_ENCOUNTER
Position const FourthPortalWPs[]
static WaypointPath const SaboteurXevozzPath
static WaypointPath const SaboteurErekemPath
@ SPELL_PORTAL_CHANNEL_TRIGGER
@ SPELL_SUMMON_AZURE_CAPTAIN
@ SPELL_SUMMON_PORTAL_EFFECT_2
@ SPELL_SUMMON_AZURE_INVADER
@ SPELL_SUMMON_AZURE_SORCEROR_2
@ SPELL_SUMMON_PORTAL_KEEPER
@ SPELL_TELEPORT_PLAYER_EFFECT
@ SPELL_SUMMON_PORTAL_GUARDIAN_2
@ SPELL_SUMMON_AZURE_INVADER_2
@ SPELL_SUMMON_AZURE_SPELLBREAKER_2
@ SPELL_SUMMON_AZURE_MAGE_SLAYER_2
@ SPELL_SUMMON_PORTAL_KEEPER_2
@ SPELL_PORTAL_READY_PRIMER
@ SPELL_SUMMON_AZURE_SPELLBREAKER
@ SPELL_SUMMON_VETERAN_MAGE_HUNTER
@ SPELL_SUMMON_AZURE_MAGE_SLAYER
@ SPELL_SUMMON_PORTAL_EFFECT_1
@ SPELL_CRYSTAL_ACTIVATION
@ SPELL_SUMMON_AZURE_BINDER_2
@ SPELL_SUMMON_PORTAL_GUARDIAN
@ SPELL_SUMMON_PORTAL_EFFECT_4
@ SPELL_SUMMON_AZURE_STALKER
@ SPELL_CLOSE_PORTAL_TRIGGER
@ SPELL_SUMMON_PORTAL_EFFECT_5
@ SPELL_SUMMON_AZURE_SORCEROR
@ SPELL_SUMMON_AZURE_RAIDER_2
@ SPELL_SUMMON_AZURE_BINDER
@ SPELL_SUMMON_AZURE_RAIDER
@ SPELL_ATTACK_VIOLET_HOLD_GUARD
@ SPELL_CLOSE_PORTAL_EFFECT
@ SPELL_SUMMON_PORTAL_EFFECT_3
static WaypointPath const SaboteurZuramatPath
Position const SecondPortalSecondWPs[]
Position const SecondPortalFirstWPs[]
@ NPC_AZURE_SPELLBREAKER_2
@ NPC_VETERAN_MAGE_HUNTER
@ NPC_AZURE_MAGE_SLAYER_2
@ NPC_AZURE_MAGE_SLAYER_1
@ NPC_AZURE_SPELLBREAKER_1
@ NPC_AZURE_SPELLBREAKER_3
@ NPC_AZURE_MAGE_SLAYER_3
static WaypointPath const SaboteurMoraggPath
@ SPELL_SHIELD_DISRUPTION
@ SPELL_PRISON_DOOR_SEAL_WEAKEN
@ SPELL_DESTROY_DOOR_SEAL
Position const SixthPortalWPs[]
Position const SinclariPositions[]
Position const FirstPortalWPs[]
Position const DefaultPortalWPs[]
@ SPELL_ARCANE_EMPOWERMENT
Position const FifthPortalWPs[]
Position const ThirdPortalWPs[]
static WaypointPath const SaboteurIchoronPath
static WaypointPath const SaboteurLavanthorPath
Position const GuardsMovePosition
@ SPELL_WHIRLWIND_OF_STEEL
@ DATA_START_BOSS_ENCOUNTER
#define RegisterVioletHoldCreatureAI(ai_name)
uint8 constexpr PortalIntroCount
#define RegisterVioletHoldGameObjectAI(ai_name)
@ NPC_TELEPORTATION_PORTAL_INTRO