209 {1877.670288f, 842.280273f, 43.333591f},
210 {1877.338867f, 834.615356f, 38.762287f},
211 {1872.161011f, 823.854309f, 38.645401f},
212 {1864.860474f, 815.787170f, 38.784843f},
213 {1858.953735f, 810.048950f, 44.008759f},
214 {1843.707153f, 805.807739f, 44.135197f}
220 {1902.561401f, 853.334656f, 47.106117f},
221 {1895.486084f, 855.376404f, 44.334591f},
222 {1882.805176f, 854.993286f, 43.333591f},
223 {1877.670288f, 842.280273f, 43.333591f},
224 {1877.338867f, 834.615356f, 38.762287f},
225 {1872.161011f, 823.854309f, 38.645401f},
226 {1864.860474f, 815.787170f, 38.784843f},
227 {1858.953735f, 810.048950f, 44.008759f},
228 {1843.707153f, 805.807739f, 44.135197f}
234 {1929.392212f, 837.614990f, 47.136166f},
235 {1928.290649f, 824.750427f, 45.474411f},
236 {1915.544922f, 826.919373f, 38.642811f},
237 {1900.933960f, 818.855652f, 38.801647f},
238 {1886.810547f, 813.536621f, 38.490490f},
239 {1869.079712f, 808.701538f, 38.689003f},
240 {1860.843384f, 806.645020f, 44.008789f},
241 {1843.707153f, 805.807739f, 44.135197f}
247 {1934.049438f, 815.778503f, 52.408699f},
248 {1928.290649f, 824.750427f, 45.474411f},
249 {1915.544922f, 826.919373f, 38.642811f},
250 {1900.933960f, 818.855652f, 38.801647f},
251 {1886.810547f, 813.536621f, 38.490490f},
252 {1869.079712f, 808.701538f, 38.689003f},
253 {1860.843384f, 806.645020f, 44.008789f},
254 {1843.707153f, 805.807739f, 44.135197f}
260 {1921.658447f, 761.657043f, 50.866741f},
261 {1910.559814f, 755.780457f, 47.701447f},
262 {1896.664673f, 752.920898f, 47.667004f},
263 {1887.398804f, 763.633240f, 47.666851f},
264 {1879.020386f, 775.396973f, 38.705990f},
265 {1872.439087f, 782.568604f, 38.808292f},
266 {1863.573364f, 791.173584f, 38.743660f},
267 {1857.811890f, 796.765564f, 43.950329f},
268 {1845.577759f, 800.681152f, 44.104248f}
274 {1887.398804f, 763.633240f, 47.666851f},
275 {1879.020386f, 775.396973f, 38.705990f},
276 {1872.439087f, 782.568604f, 38.808292f},
277 {1863.573364f, 791.173584f, 38.743660f},
278 {1857.811890f, 796.765564f, 43.950329f},
279 {1845.577759f, 800.681152f, 44.104248f}
285 {1888.861084f, 805.074768f, 38.375790f},
286 {1869.793823f, 804.135804f, 38.647018f},
287 {1861.541504f, 804.149780f, 43.968292f},
288 {1843.567017f, 804.288208f, 44.139091f}
294 { 1843.567017f, 804.288208f, 44.139091f }
299 { 1886.251f, 803.0743f, 38.42326f },
300 { 1885.71f, 799.8929f, 38.37241f },
301 { 1889.505f, 762.3288f, 47.66684f },
302 { 1894.542f, 742.1829f, 47.66684f },
303 { 1894.603f, 739.9231f, 47.66684f },
308 { 1886.251f, 803.0743f, 38.42326f },
309 { 1881.047f, 829.6866f, 38.64856f },
310 { 1877.585f, 844.6685f, 38.49014f },
311 { 1876.085f, 851.6685f, 42.99014f },
312 { 1873.747f, 864.1373f, 43.33349f }
317 { 1886.251f, 803.0743f, 38.42326f },
318 { 1888.672f, 801.2348f, 38.42305f },
319 { 1901.987f, 793.3254f, 38.65126f }
324 { 1886.251f, 803.0743f, 38.42326f },
325 { 1867.925f, 778.8035f, 38.64702f },
326 { 1853.304f, 759.0161f, 38.65761f }
331 { 1886.251f, 803.0743f, 38.42326f },
332 { 1889.096f, 810.0487f, 38.43871f },
333 { 1896.547f, 823.5473f, 38.72863f },
334 { 1906.666f, 842.3111f, 38.63351f }
339 { 1886.251f, 803.0743f, 38.42326f },
340 { 1889.69f, 807.0032f, 38.39914f },
341 { 1906.91f, 818.2574f, 38.86596f },
342 { 1929.03f, 824.2713f, 46.09165f },
343 { 1928.441f, 842.8891f, 47.15078f },
344 { 1927.454f, 851.6091f, 47.19094f },
345 { 1927.947f, 852.2986f, 47.19637f }
350 { 1829.142f, 798.219f, 44.36212f, 0.122173f },
351 { 1820.12f, 803.916f, 44.36466f, 0.0f },
352 { 1816.185f, 804.0629f, 44.44799f, 3.176499f },
353 { 1827.886f, 804.0555f, 44.36467f, 0.0f }
374 std::list<Creature*> guardList;
378 guard->Respawn(
true);
379 guard->SetVisible(
true);
381 guard->AI()->EnterEvadeMode();
445 me->GetMotionMaster()->MovePoint(0, SinclariPositions[0]);
446 task.Repeat(Seconds(1));
449 me->HandleEmoteCommand(EMOTE_ONESHOT_USE_STANDING);
450 me->GetMap()->SummonCreature(NPC_DEFENSE_SYSTEM, DefenseSystemLocation);
451 task.Repeat(Seconds(3));
454 me->SetFacingTo(SinclariPositions[0].GetOrientation());
455 Talk(SAY_SINCLARI_INTRO_1);
457 task.Schedule(Seconds(1), [this](TaskContext )
459 std::list<Creature*> guardList;
460 me->GetCreatureListWithEntryInGrid(guardList, NPC_VIOLET_HOLD_GUARD, 100.0f);
461 for (Creature* guard : guardList)
463 if (!guard->IsAlive())
465 guard->SetReactState(REACT_PASSIVE);
466 guard->SetWalk(false);
467 guard->GetMotionMaster()->MovePoint(0, GuardsMovePosition);
483 std::list<Creature*> guardList;
486 guard->SetVisible(
false);
538 _summons.Summon(summon);
543 _summons.Despawn(summon);
801 uint32 entry = RAND(NPC_AZURE_INVADER_1, NPC_AZURE_MAGE_SLAYER_1, NPC_AZURE_BINDER_1);
802 DoSummon(entry, me, 2.0f, 20s, TEMPSUMMON_DEAD_DESPAWN);
881 AddWaypoint(i, path[i].GetPositionX() +
irand(-1, 1), path[i].GetPositionY() +
irand(-1, 1), path[i].GetPositionZ(), 0, 0s,
true);
899 destroyDoorCheck.
Repeat();
First const & RAND(First const &first, Second const &second, Rest const &... rest)
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds 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 *)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
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 MoveSmoothPath(uint32 pointId, Position const *pathPoints, size_t pathSize, bool walk=false, bool fly=false)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
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(std::chrono::duration< Rep, Period > time, TaskScheduler::task_handler_t task)
TaskContext & Repeat(std::chrono::duration< Rep, Period > duration)
TaskScheduler::repeated_t GetRepeatCounter() const
Returns the repeat counter which increases every time the task is repeated.
TaskScheduler & CancelAll()
TaskScheduler & Schedule(std::chrono::duration< Rep, Period > time, task_handler_t task)
TaskScheduler & Update(success_t const &callback=nullptr)
TaskScheduler & SetValidator(P &&predicate)
Sets a validator which is asked if tasks are allowed to be executed.
virtual void SetData(uint32, uint32)
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[PortalIntroPositionsSize]
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 StartSmoothPath(Position const (&path)[N])
InstanceScript * _instance
void MovementInform(uint32 type, uint32 pointId) override
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
Position const SaboteurLavanthorPath[]
@ DATA_PORTAL_PERIODIC_TICK
@ SAY_SINCLARI_ELITE_SQUAD
@ SAY_SINCLARI_PORTAL_KEEPER
@ SAY_SINCLARI_PORTAL_GUARDIAN
@ GOSSIP_MENU_START_ENCOUNTER
Position const FourthPortalWPs[]
Position 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
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
@ SPELL_SHIELD_DISRUPTION
@ SPELL_PRISON_DOOR_SEAL_WEAKEN
@ SPELL_DESTROY_DOOR_SEAL
Position const SaboteurIchoronPath[]
Position const SixthPortalWPs[]
Position const SinclariPositions[]
Position const SaboteurMoraggPath[]
Position const FirstPortalWPs[]
Position const DefaultPortalWPs[]
@ SPELL_ARCANE_EMPOWERMENT
Position const FifthPortalWPs[]
Position const ThirdPortalWPs[]
Position const SaboteurZuramatPath[]
Position const GuardsMovePosition
@ SPELL_WHIRLWIND_OF_STEEL
Position const SaboteurXevozzPath[]
@ DATA_START_BOSS_ENCOUNTER
#define RegisterVioletHoldCreatureAI(ai_name)
uint8 constexpr PortalIntroCount
#define RegisterVioletHoldGameObjectAI(ai_name)
@ NPC_TELEPORTATION_PORTAL_INTRO