AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
npc_thrall_bfu::npc_thrall_bfuAI Struct Reference
Inheritance diagram for npc_thrall_bfu::npc_thrall_bfuAI:
npc_escortAI ScriptedAI CreatureAI UnitAI

Public Member Functions

 npc_thrall_bfuAI (Creature *creature)
 
void EnterEvadeMode (EvadeReason) override
 
void Reset () override
 
void JustSummoned (Creature *summoned) override
 
void SummonedCreatureDies (Creature *summon, Unit *) override
 
void UpdateWorldState (Map *map, uint32 id, uint32 state)
 
void SetHoldState (bool bOnHold)
 
void JumpToNextStep (uint32 uiTimer)
 
void FollowThrall ()
 
void ActivateValimathrasPortal ()
 
void SpawnWave (uint32 waveId)
 
void WaypointReached (uint32 waypointId) override
 
bool CanAIAttack (Unit const *victim) const override
 
void UpdateAI (uint32 diff) override
 
- Public Member Functions inherited from npc_escortAI
 npc_escortAI (Creature *creature)
 
 ~npc_escortAI () override
 
void AttackStart (Unit *who) override
 
void MoveInLineOfSight (Unit *who) override
 
void JustDied (Unit *) override
 
void JustRespawned () override
 
void ReturnToLastPoint ()
 
void EnterEvadeMode (EvadeReason=EVADE_REASON_OTHER) override
 
void UpdateAI (uint32 diff) override
 
virtual void UpdateEscortAI (uint32 diff)
 
void MovementInform (uint32, uint32) override
 
void AddWaypoint (uint32 id, float x, float y, float z, uint32 waitTime=0)
 
bool SetNextWaypoint (uint32 pointId, float x, float y, float z, float orientation)
 
bool SetNextWaypoint (uint32 pointId, bool setPosition=true)
 
bool GetWaypointPosition (uint32 pointId, float &x, float &y, float &z)
 
void GenerateWaypointArray (Movement::PointsArray *points)
 
virtual void WaypointReached (uint32 pointId)=0
 
virtual void WaypointStart (uint32)
 
void Start (bool isActiveAttacker=true, bool run=false, ObjectGuid playerGUID=ObjectGuid::Empty, Quest const *quest=nullptr, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=true)
 
void SetRun (bool on=true)
 
void SetEscortPaused (bool on)
 
bool HasEscortState (uint32 escortState)
 
bool IsEscorted () override
 
void SetMaxPlayerDistance (float newMax)
 
float GetMaxPlayerDistance ()
 
void SetDespawnAtEnd (bool despawn)
 
void SetDespawnAtFar (bool despawn)
 
bool GetAttack ()
 
void SetCanAttack (bool attack)
 
ObjectGuid GetEventStarterGUID ()
 
void AddEscortState (uint32 escortState)
 
void RemoveEscortState (uint32 escortState)
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
 ~ScriptedAI () override
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask) override
 
void UpdateAI (uint32 diff) override
 
void JustDied (Unit *) override
 
void KilledUnit (Unit *) override
 
void JustSummoned (Creature *) override
 
void SummonedCreatureDespawn (Creature *) override
 
void SpellHit (Unit *, SpellInfo const *) override
 
void SpellHitTarget (Unit *, SpellInfo const *) override
 
void MovementInform (uint32, uint32) override
 
void OnPossess (bool)
 
bool IsInRoom (const Position *pos, Axis axis, bool above)
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged.
 
void AttackStart (Unit *) override
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoCastSpell (Unit *target, SpellInfo const *spellInfo, bool triggered=false)
 
void DoPlaySoundToSet (WorldObject *source, uint32 soundId)
 
void DoPlayMusic (uint32 soundId, bool zone)
 
void DoAddThreat (Unit *unit, float amount)
 
void DoModifyThreatByPercent (Unit *unit, int32 pct)
 
void DoResetThreat (Unit *unit)
 
void DoResetThreatList ()
 
float DoGetThreat (Unit *unit)
 
void DoTeleportPlayer (Unit *unit, float x, float y, float z, float o)
 
void DoTeleportAll (float x, float y, float z, float o)
 
UnitDoSelectLowestHpFriendly (float range, uint32 minHPDiff=1)
 
std::list< Creature * > DoFindFriendlyCC (float range)
 
std::list< Creature * > DoFindFriendlyMissingBuff (float range, uint32 spellId)
 
PlayerGetPlayerAtMinimumRange (float minRange)
 
CreatureDoSpawnCreature (uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, uint32 despawntime)
 
bool IsUniqueTimedEventDone (uint32 id) const
 
void SetUniqueTimedEventDone (uint32 id)
 
void ResetUniqueTimedEvent (uint32 id)
 
void ClearUniqueTimedEventsDone ()
 
void ScheduleTimedEvent (Milliseconds timerMin, Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0s, uint32 uniqueId=0)
 
void ScheduleTimedEvent (Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0s, uint32 uniqueId=0)
 
void ScheduleUniqueTimedEvent (Milliseconds timer, std::function< void()> exec, uint32 uniqueId)
 
bool HealthBelowPct (uint32 pct) const
 
bool HealthAbovePct (uint32 pct) const
 
SpellInfo const * SelectSpell (Unit *target, uint32 school, uint32 mechanic, SelectTargetType targets, uint32 powerCostMin, uint32 powerCostMax, float rangeMin, float rangeMax, SelectEffect effect)
 
void SetEquipmentSlots (bool loadDefault, int32 mainHand=EQUIP_NO_CHANGE, int32 offHand=EQUIP_NO_CHANGE, int32 ranged=EQUIP_NO_CHANGE)
 
void SetCombatMovement (bool allowMovement)
 
bool IsCombatMovementAllowed () const
 
virtual bool CheckEvadeIfOutOfCombatArea () const
 
bool IsHeroic () const
 
Difficulty GetDifficulty () const
 
bool Is25ManRaid () const
 
template<class T >
const T & DUNGEON_MODE (const T &normal5, const T &heroic10) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25, const T &heroic10, const T &heroic25) const
 
PlayerSelectTargetFromPlayerList (float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr, Milliseconds delay=0s)
 Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
 
void Talk (uint8 id, Milliseconds delay)
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
virtual void JustEngagedWith (Unit *)
 Called for reaction when initially engaged.
 
virtual void JustDied (Unit *)
 
virtual void KilledUnit (Unit *)
 
virtual void JustSummoned (Creature *)
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDespawn (Creature *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void SummonedCreatureDespawnAll ()
 
virtual void SpellHit (Unit *, SpellInfo const *)
 
virtual void SpellHitTarget (Unit *, SpellInfo const *)
 
virtual void AttackedBy (Unit *)
 
virtual bool IsEscorted ()
 
virtual void JustRespawned ()
 
virtual void MovementInform (uint32, uint32)
 
virtual void PathEndReached (uint32)
 
void OnCharmed (bool apply) override
 
virtual void JustReachedHome ()
 
void DoZoneInCombat (Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *)
 
virtual void OwnerAttacked (Unit *)
 
virtual void CorpseRemoved (uint32 &)
 == Triggered Actions Requested ==================
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields =======================================
 
virtual bool BeforeSpellClick (Unit *)
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual bool CanAlwaysBeDetectable (WorldObject const *)
 
virtual void PetStopAttack ()
 
virtual bool CheckInRoom ()
 
CreatureBoundary const * GetBoundary () const
 
void SetBoundary (CreatureBoundary const *boundary, bool negativeBoundaries=false)
 
bool IsInBoundary (Position const *who=nullptr) const
 
virtual void CalculateThreat (Unit *, float &, SpellInfo const *)
 
virtual bool OnTeleportUnreacheablePlayer (Player *)
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual bool CanAIAttack (Unit const *) const
 
virtual void AttackStart (Unit *)
 
virtual void UpdateAI (uint32)=0
 
virtual void InitializeAI ()
 
virtual void Reset ()
 
virtual void OnCharmed (bool apply)=0
 
virtual void DoAction (int32)
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual void SetGUID (ObjectGuid, int32=0)
 
virtual ObjectGuid GetGUID (int32=0) const
 
UnitSelectTarget (SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
UnitSelectTarget (SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
virtual void JustEnteredCombat (Unit *)
 Called when the unit enters combat (NOTE: Creature engage logic should NOT be here, but in JustEngagedWith, which happens once threat is established!)
 
virtual void JustExitedCombat ()
 Called when the unit leaves combat.
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType)
 
virtual void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 
virtual void HealReceived (Unit *, uint32 &)
 
virtual void OnPowerUpdate (Powers, int32, int32, uint32)
 
virtual void HealDone (Unit *, uint32 &)
 
virtual void OnCalculateMeleeDamageReceived (uint32 &, Unit *)
 
virtual void OnCalculateSpellDamageReceived (int32 &, Unit *)
 
virtual void OnCalculatePeriodicTickReceived (uint32 &, Unit *)
 
void AttackStartCaster (Unit *victim, float dist)
 
SpellCastResult DoAddAuraToAllHostilePlayers (uint32 spellid)
 
SpellCastResult DoCast (uint32 spellId)
 
SpellCastResult DoCast (Unit *victim, uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastSelf (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastToAllHostilePlayers (uint32 spellid, bool triggered=false)
 
SpellCastResult DoCastVictim (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastAOE (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastRandomTarget (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 
SpellCastResult DoCastMaxThreat (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 Cast spell on the max threat target, which may not always be the current victim.
 
float DoGetSpellMaxRange (uint32 spellId, bool positive=false)
 
void DoMeleeAttackIfReady ()
 
bool DoSpellAttackIfReady (uint32 spell)
 
void DoSpellAttackToRandomTargetIfReady (uint32 spell, uint32 threatTablePosition=0, float dist=0.f, bool playerOnly=true)
 
virtual void SummonMovementInform (Creature *, uint32, uint32)
 
virtual void sGossipHello (Player *)
 
virtual void sGossipSelect (Player *, uint32, uint32)
 
virtual void sGossipSelectCode (Player *, uint32, uint32, char const *)
 
virtual void sQuestAccept (Player *, Quest const *)
 
virtual void sQuestSelect (Player *, Quest const *)
 
virtual void sQuestComplete (Player *, Quest const *)
 
virtual void sQuestReward (Player *, Quest const *, uint32)
 
virtual void sOnGameEvent (bool, uint16)
 
virtual std::string GetDebugInfo () const
 

Public Attributes

bool bStepping
 
bool EnableAttack
 
uint32 step
 
uint32 phaseTimer
 
ObjectGuid sylvanasfollowGUID
 
ObjectGuid allianceForcesGUID [ALLIANCE_FORCE_MAXCOUNT]
 
ObjectGuid ValimathrasGUID
 
ObjectGuid ValimathrasPortalGUID
 
ObjectGuid WrynnGUID
 
ObjectGuid JainaGUID
 
ObjectGuid SaurfangGUID
 
GuidVector hordeGuardsGUID
 
EventMap _events
 
- Public Attributes inherited from ScriptedAI
Creatureme
 
bool IsFleeing
 

Additional Inherited Members

- Public Types inherited from ScriptedAI
enum class  Axis {
  AXIS_X ,
  AXIS_Y
}
 
- Public Types inherited from CreatureAI
enum  EvadeReason {
  EVADE_REASON_NO_HOSTILES ,
  EVADE_REASON_BOUNDARY ,
  EVADE_REASON_SEQUENCE_BREAK ,
  EVADE_REASON_NO_PATH ,
  EVADE_REASON_OTHER
}
 
- Static Public Member Functions inherited from CreatureAI
static bool IsInBounds (CreatureBoundary const &boundary, Position const *who)
 
- Static Public Member Functions inherited from UnitAI
static void FillAISpellInfo ()
 
- Static Public Attributes inherited from UnitAI
static AISpellInfoTypeAISpellInfo
 
- Protected Member Functions inherited from npc_escortAI
PlayerGetPlayerForEscort ()
 
- Protected Member Functions inherited from CreatureAI
bool UpdateVictim ()
 
bool UpdateVictimWithGaze ()
 
void SetGazeOn (Unit *target)
 
CreatureDoSummon (uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummon (uint32 entry, WorldObject *obj, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummonFlyer (uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
virtual void MoveInLineOfSight (Unit *)
 
bool _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
- Protected Attributes inherited from CreatureAI
Creature *const me
 
EventMap events
 
TaskScheduler scheduler
 
CreatureBoundary const * _boundary
 
bool _negateBoundary
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Detailed Description

Constructor & Destructor Documentation

◆ npc_thrall_bfuAI()

npc_thrall_bfu::npc_thrall_bfuAI::npc_thrall_bfuAI ( Creature creature)
inline
2328 : npc_escortAI(creature)
2329 {
2330 hordeGuardsGUID.clear();
2331 }
Definition: ScriptedEscortAI.h:53
GuidVector hordeGuardsGUID
Definition: zone_undercity.cpp:2346

References hordeGuardsGUID.

Member Function Documentation

◆ ActivateValimathrasPortal()

void npc_thrall_bfu::npc_thrall_bfuAI::ActivateValimathrasPortal ( )
inline
2569 {
2570 if (Creature* portal = me->FindNearestCreature(NPC_VARIMATHRAS_PORTAL, 500.0f))
2571 {
2572 portal->SummonCreature(NPC_LEGION_OVERLORD, ThrallSpawn[81].x + rand32() % 5, ThrallSpawn[81].y + rand32() % 5, ThrallSpawn[81].z, TEMPSUMMON_DEAD_DESPAWN);
2573 portal->DespawnOrUnsummon();
2574 }
2575 }
uint32 rand32()
Definition: Random.cpp:72
@ TEMPSUMMON_DEAD_DESPAWN
Definition: Object.h:48
@ NPC_LEGION_OVERLORD
Definition: zone_undercity.cpp:696
@ NPC_VARIMATHRAS_PORTAL
Definition: zone_undercity.cpp:641
static LocationXYZO ThrallSpawn[]
Definition: zone_undercity.cpp:810
Creature * me
Definition: ScriptedCreature.h:282
Definition: Creature.h:46
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition: Object.cpp:2434

References WorldObject::FindNearestCreature(), ScriptedAI::me, NPC_LEGION_OVERLORD, NPC_VARIMATHRAS_PORTAL, rand32(), TEMPSUMMON_DEAD_DESPAWN, and ThrallSpawn.

Referenced by UpdateAI().

◆ CanAIAttack()

bool npc_thrall_bfu::npc_thrall_bfuAI::CanAIAttack ( Unit const *  victim) const
inlineoverridevirtual

Reimplemented from UnitAI.

2946 {
2947 return victim->GetEntry() != NPC_BLIGHT_SLINGER;
2948 }
@ NPC_BLIGHT_SLINGER
Definition: zone_undercity.cpp:693

References Object::GetEntry(), and NPC_BLIGHT_SLINGER.

◆ EnterEvadeMode()

void npc_thrall_bfu::npc_thrall_bfuAI::EnterEvadeMode ( EvadeReason  )
inlineoverridevirtual

Reimplemented from npc_escortAI.

2351 {
2354 me->CombatStop(true);
2355 me->SetLootRecipient(nullptr);
2356
2358 {
2361 }
2362 else
2363 {
2365 Reset();
2366 }
2367 }
@ STATE_ESCORT_ESCORTING
Definition: ScriptedEscortAI.h:47
@ STATE_ESCORT_RETURNING
Definition: ScriptedEscortAI.h:48
@ SPELL_HEROIC_VANGUARD
Definition: zone_undercity.cpp:517
bool HasEscortState(uint32 escortState)
Definition: ScriptedEscortAI.h:98
void AddEscortState(uint32 escortState)
Definition: ScriptedEscortAI.h:110
void ReturnToLastPoint()
Definition: ScriptedEscortAI.cpp:193
void ClearAllThreat()
Definition: ThreatMgr.cpp:417
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition: Creature.cpp:1258
void CombatStop(bool includingCast=false)
Definition: Unit.cpp:10440
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:4722
MotionMaster * GetMotionMaster()
Definition: Unit.h:2276
ThreatMgr & GetThreatMgr()
Definition: Unit.h:2159
void MoveTargetedHome(bool walk=false)
Definition: MotionMaster.cpp:252
void Reset() override
Definition: zone_undercity.cpp:2369

References npc_escortAI::AddEscortState(), ThreatMgr::ClearAllThreat(), Unit::CombatStop(), Unit::GetMotionMaster(), Unit::GetThreatMgr(), npc_escortAI::HasEscortState(), ScriptedAI::me, MotionMaster::MoveTargetedHome(), Unit::RemoveAura(), Reset(), npc_escortAI::ReturnToLastPoint(), Creature::SetLootRecipient(), SPELL_HEROIC_VANGUARD, STATE_ESCORT_ESCORTING, and STATE_ESCORT_RETURNING.

◆ FollowThrall()

void npc_thrall_bfu::npc_thrall_bfuAI::FollowThrall ( )
inline
2557 {
2559 {
2560 sylvanas->GetMotionMaster()->Clear();
2561 sylvanas->SetImmuneToAll(false);
2562 sylvanas->SetReactState(REACT_AGGRESSIVE);
2563 sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
2564 sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
2565 }
2566 }
@ REACT_AGGRESSIVE
Definition: Unit.h:1037
@ FACTION_ESCORT_N_NEUTRAL_ACTIVE
Definition: ScriptSystem.h:37
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:213
ObjectGuid sylvanasfollowGUID
Definition: zone_undercity.cpp:2339

References FACTION_ESCORT_N_NEUTRAL_ACTIVE, ObjectAccessor::GetCreature(), ScriptedAI::me, REACT_AGGRESSIVE, and sylvanasfollowGUID.

Referenced by SummonedCreatureDies(), and UpdateAI().

◆ JumpToNextStep()

void npc_thrall_bfu::npc_thrall_bfuAI::JumpToNextStep ( uint32  uiTimer)
inline
2551 {
2552 phaseTimer = uiTimer;
2553 ++step;
2554 }
uint32 phaseTimer
Definition: zone_undercity.cpp:2337
uint32 step
Definition: zone_undercity.cpp:2336

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

void npc_thrall_bfu::npc_thrall_bfuAI::JustSummoned ( Creature summoned)
inlineoverridevirtual

Reimplemented from ScriptedAI.

2430 {
2431 switch (summoned->GetEntry())
2432 {
2434 summoned->AI()->AttackStart(me);
2435 break;
2439 break;
2442 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2444 break;
2445 case NPC_CAVE_DUMMY:
2447 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2449 summoned->AddAura(SPELL_CYCLONE_FALL, summoned);
2450 break;
2452 case NPC_DOCTOR_H:
2453 case NPC_CHEMIST_H:
2456 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2458 if (!EnableAttack)
2459 summoned->SetFaction(FACTION_FRIENDLY);
2460 summoned->AddThreat(me, 100.0f);
2461 me->AddThreat(summoned, 100.0f);
2462 summoned->AI()->AttackStart(me);
2463 break;
2464 case NPC_LEGION_INVADER:
2467 case NPC_DREADLORD:
2468 case NPC_BETRAYER_H:
2469 case NPC_FELBEAST_H:
2472 summoned->AddThreat(me, 100.0f);
2473 me->AddThreat(summoned, 100.0f);
2474 summoned->AI()->AttackStart(me);
2475 break;
2476 default:
2477 break;
2478 }
2479 }
@ UNIT_NPC_EMOTESTATE
Definition: UpdateFields.h:140
@ UNIT_FLAG_NOT_SELECTABLE
Definition: Unit.h:473
@ NPC_DOCTOR_H
Definition: zone_undercity.cpp:691
@ NPC_BETRAYER_H
Definition: zone_undercity.cpp:688
@ NPC_DREADLORD
Definition: zone_undercity.cpp:672
@ NPC_FELBEAST_H
Definition: zone_undercity.cpp:686
@ NPC_LEGION_DREADWHISPER
Definition: zone_undercity.cpp:698
@ NPC_CHEMIST_H
Definition: zone_undercity.cpp:689
@ NPC_LEGION_INVADER
Definition: zone_undercity.cpp:697
@ NPC_TREACHEROUS_GUARDIAN_H
Definition: zone_undercity.cpp:684
@ NPC_FELGUARD_MORADEUR
Definition: zone_undercity.cpp:695
@ SPELL_SYLVANAS_BUFF
Definition: zone_undercity.cpp:563
@ NPC_BLIGHT_ABBERATION
Definition: zone_undercity.cpp:536
@ NPC_CAVE_DUMMY
Definition: zone_undercity.cpp:531
@ NPC_WARSONG_BATTLEGUARD
Definition: zone_undercity.cpp:527
@ SPELL_CYCLONE_FALL
Definition: zone_undercity.cpp:503
@ SPELL_THRALL_BUFF
Definition: zone_undercity.cpp:497
@ EMOTE_STATE_READY2H
Definition: SharedDefines.h:1970
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition: SharedDefines.h:922
@ SPELL_EFFECT_KNOCK_BACK
Definition: SharedDefines.h:876
@ IMMUNITY_EFFECT
Definition: SharedDefines.h:1394
@ IMMUNITY_ID
Definition: SharedDefines.h:1400
@ FACTION_FRIENDLY
Definition: SharedDefines.h:201
virtual void AttackStart(Unit *)
Definition: UnitAI.cpp:27
CreatureAI * AI() const
Definition: Creature.h:136
uint32 GetEntry() const
Definition: Object.h:109
void SetUInt32Value(uint16 index, uint32 value)
Definition: Object.cpp:650
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition: Unit.cpp:13383
void SetFaction(uint32 faction)
Definition: Unit.cpp:10064
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition: Unit.cpp:14639
Aura * AddAura(uint32 spellId, Unit *target)
Definition: Unit.cpp:19127
void SetUnitFlag(UnitFlags flags)
Definition: Unit.h:1495
bool EnableAttack
Definition: zone_undercity.cpp:2334

References Unit::AddAura(), Unit::AddThreat(), Creature::AI(), Unit::ApplySpellImmune(), UnitAI::AttackStart(), EMOTE_STATE_READY2H, EnableAttack, FACTION_FRIENDLY, Object::GetEntry(), IMMUNITY_EFFECT, IMMUNITY_ID, ScriptedAI::me, NPC_BETRAYER_H, NPC_BLIGHT_ABBERATION, NPC_CAVE_DUMMY, NPC_CHEMIST_H, NPC_DOCTOR_H, NPC_DREADLORD, NPC_FELBEAST_H, NPC_FELGUARD_MORADEUR, NPC_LEGION_DREADWHISPER, NPC_LEGION_INVADER, NPC_TREACHEROUS_GUARDIAN_H, NPC_VARIMATHRAS_PORTAL, NPC_WARSONG_BATTLEGUARD, Unit::SetFaction(), Object::SetUInt32Value(), Unit::SetUnitFlag(), SPELL_CYCLONE_FALL, SPELL_EFFECT_KNOCK_BACK, SPELL_EFFECT_KNOCK_BACK_DEST, SPELL_SYLVANAS_BUFF, SPELL_THRALL_BUFF, UNIT_FLAG_NOT_SELECTABLE, and UNIT_NPC_EMOTESTATE.

◆ Reset()

void npc_thrall_bfu::npc_thrall_bfuAI::Reset ( )
inlineoverridevirtual

Reimplemented from ScriptedAI.

2370 {
2372 {
2375 me->SetCorpseDelay(1);
2376 me->SetRespawnTime(1);
2379
2380 bStepping = false;
2381 EnableAttack = false;
2382 step = 0;
2383 phaseTimer = 0;
2390
2392 {
2393 valimathras->DespawnOrUnsummon();
2395 }
2396
2398 {
2399 valimathrasportal->DespawnOrUnsummon();
2401 }
2402
2404 {
2405 wrynn->DespawnOrUnsummon();
2406 WrynnGUID.Clear();
2407 }
2408
2410 {
2411 jaina->DespawnOrUnsummon();
2412 JainaGUID.Clear();
2413 }
2414
2416 {
2417 saurfang->DespawnOrUnsummon();
2419 }
2420
2421 for (ObjectGuid const& guid : hordeGuardsGUID)
2422 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
2423 temp->DespawnOrUnsummon();
2424
2425 hordeGuardsGUID.clear();
2426 }
2427 }
@ UNIT_STAND_STATE_STAND
Definition: Unit.h:53
@ UNIT_NPC_FLAG_GOSSIP
Definition: Unit.h:516
@ EVENT_CHAIN_LIGHTNING
Definition: zone_undercity.cpp:520
@ EVENT_THRALL_BUFF
Definition: zone_undercity.cpp:524
@ EVENT_AGGRO_SYLVANAS
Definition: zone_undercity.cpp:523
@ MODEL_WHITE_WULF
Definition: zone_undercity.cpp:544
@ EVENT_THUNDER
Definition: zone_undercity.cpp:522
@ EVENT_LAVA_BURST
Definition: zone_undercity.cpp:521
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group=0, uint32 phase=0)
Definition: EventMap.cpp:56
void SetRespawnTime(uint32 respawn)
Definition: Creature.cpp:3675
void SetCorpseDelay(uint32 delay)
Definition: Creature.h:72
Definition: ObjectGuid.h:120
void Clear()
Definition: ObjectGuid.h:140
void Mount(uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
Definition: Unit.cpp:13459
void SetNpcFlag(NPCFlags flags)
Definition: Unit.h:1661
void SetStandState(uint8 state)
Definition: Unit.cpp:16994
bool bStepping
Definition: zone_undercity.cpp:2333
ObjectGuid ValimathrasGUID
Definition: zone_undercity.cpp:2341
ObjectGuid ValimathrasPortalGUID
Definition: zone_undercity.cpp:2342
ObjectGuid SaurfangGUID
Definition: zone_undercity.cpp:2345
ObjectGuid JainaGUID
Definition: zone_undercity.cpp:2344
EventMap _events
Definition: zone_undercity.cpp:2348
ObjectGuid WrynnGUID
Definition: zone_undercity.cpp:2343

References _events, Unit::ApplySpellImmune(), bStepping, ObjectGuid::Clear(), EnableAttack, EVENT_AGGRO_SYLVANAS, EVENT_CHAIN_LIGHTNING, EVENT_LAVA_BURST, EVENT_THRALL_BUFF, EVENT_THUNDER, ObjectAccessor::GetCreature(), npc_escortAI::HasEscortState(), hordeGuardsGUID, IMMUNITY_ID, JainaGUID, ScriptedAI::me, MODEL_WHITE_WULF, Unit::Mount(), phaseTimer, SaurfangGUID, EventMap::ScheduleEvent(), Creature::SetCorpseDelay(), Unit::SetNpcFlag(), Creature::SetRespawnTime(), Unit::SetStandState(), SPELL_SYLVANAS_BUFF, STATE_ESCORT_ESCORTING, step, sylvanasfollowGUID, UNIT_NPC_FLAG_GOSSIP, UNIT_STAND_STATE_STAND, ValimathrasGUID, ValimathrasPortalGUID, and WrynnGUID.

Referenced by EnterEvadeMode().

◆ SetHoldState()

void npc_thrall_bfu::npc_thrall_bfuAI::SetHoldState ( bool  bOnHold)
inline
2546 {
2547 SetEscortPaused(bOnHold);
2548 }
void SetEscortPaused(bool on)
Definition: ScriptedEscortAI.cpp:523

References npc_escortAI::SetEscortPaused().

Referenced by WaypointReached().

◆ SpawnWave()

void npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave ( uint32  waveId)
inline
2578 {
2579 switch (waveId)
2580 {
2581 case 0: // Vortex
2583 whirlwind1->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 10, false);
2585 whirlwind2->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 100, false);
2586 break;
2587 case 1:
2588 // BATTLING_COURTYARD Initial Spawn
2589 for (uint8 i = 0; i < 3; ++i)
2591 for (uint8 i = 0; i < 9; ++i)
2593 for (uint8 i = 0; i < 6; ++i)
2595 for (uint8 i = 0; i < 4; ++i)
2597 break;
2598 case 2:
2599 // Valimathras
2601 {
2602 ValimathrasGUID = temp->GetGUID();
2603 temp->SetImmuneToAll(true);
2604 }
2605 break;
2606 case 3:
2608 ValimathrasPortalGUID = temp->GetGUID();
2609 break;
2610 case 4:
2611 // COURTYARD_FIGHT Spawns
2612 for (uint8 i = 0; i < WAVE_COURTYARD_FIGHT; ++i)
2613 {
2614 switch (urand(0, 2))
2615 {
2616 case 0:
2618 break;
2619 case 1:
2621 break;
2622 case 2:
2624 break;
2625 }
2626 }
2627 break;
2628 case 5:
2629 // Bossspawn 1
2631 {
2632 temp->GetMotionMaster()->MoveJump(ThrallSpawn[62].x, ThrallSpawn[62].y, ThrallSpawn[62].z, 10.0f, 20.0f, 0);
2633 temp->AddThreat(me, 100.0f);
2634 me->AddThreat(temp, 100.0f);
2635 temp->AI()->AttackStart(me);
2636 }
2637 break;
2638 case 6:
2639 // COURTYARD_DONE Spawn
2641 {
2642 hordeGuardsGUID.push_back(temp->GetGUID());
2643 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
2644 }
2646 {
2647 hordeGuardsGUID.push_back(temp->GetGUID());
2648 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
2649 }
2651 {
2652 hordeGuardsGUID.push_back(temp->GetGUID());
2653 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
2654 }
2656 {
2657 hordeGuardsGUID.push_back(temp->GetGUID());
2658 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
2659 }
2660 for (uint8 i = 0; i < 2; ++i)
2662 hordeGuardsGUID.push_back(temp->GetGUID());
2663 break;
2664 case 7:
2665 for (uint8 i = 0; i < 9; ++i)
2667 break;
2668 case 8:
2669 for (uint8 i = 0; i < 2; ++i)
2671 hordeGuardsGUID.push_back(temp->GetGUID());
2672 break;
2673 case 9:
2674 // Top of Undercity - Attacktrashpack
2675 for (uint8 i = 0; i < 3; ++i)
2676 {
2677 switch (urand(0, 2))
2678 {
2679 case 0:
2681 break;
2682 case 1:
2684 break;
2685 case 2:
2687 break;
2688 }
2689 }
2690 break;
2691 case 10:
2692 // Top of Undercity - Attacktrashpack
2693 for (uint8 i = 0; i < 3; ++i)
2694 {
2695 switch (urand(0, 1))
2696 {
2697 case 0:
2699 break;
2700 case 1:
2702 break;
2703 }
2704 }
2705 break;
2706 case 11:
2707 // Bottom of Undercity - Attacktrashpack
2708 for (uint8 i = 0; i < 3; ++i)
2709 {
2710 switch (urand(0, 1))
2711 {
2712 case 0:
2714 break;
2715 case 1:
2717 break;
2718 }
2719 }
2720 break;
2721 case 12:
2722 // Valimathras 2
2724 {
2725 ValimathrasGUID = temp->GetGUID();
2726 temp->SetImmuneToAll(true);
2727 }
2728 break;
2729 case 13:
2731 ValimathrasPortalGUID = temp->GetGUID();
2732 break;
2733 // NPC_KHANOK - Inner Sunktum Spawn Left
2734 case 14:
2735 for (uint8 i = 0; i < 4; ++i)
2736 {
2737 switch (urand(0, 6))
2738 {
2739 case 0:
2741 break;
2742 case 1:
2744 break;
2745 case 2:
2747 break;
2748 case 3:
2750 break;
2751 case 4:
2753 break;
2754 case 5:
2756 break;
2757 case 6:
2759 break;
2760 }
2761 }
2762 break;
2763 // NPC_KHANOK - Inner Sunktum Spawn Right
2764 case 15:
2765 for (uint8 i = 0; i < 4; ++i)
2766 {
2767 switch (urand(0, 6))
2768 {
2769 case 0:
2771 break;
2772 case 1:
2774 break;
2775 case 2:
2777 break;
2778 case 3:
2780 break;
2781 case 4:
2783 break;
2784 case 5:
2786 break;
2787 case 6:
2789 break;
2790 }
2791 }
2792 break;
2793 // NPC_KHANOK - Inner Sunktum Spawn Top
2794 case 16:
2796 break;
2797 // NPC_KHANOK - Inner Sunktum Spawn Middle
2798 case 17:
2800 break;
2801 case 18:
2803 {
2804 hordeGuardsGUID.push_back(temp->GetGUID());
2805 temp->AI()->Talk(SAY_FOR_THE_HORDE);
2806 temp->GetMotionMaster()->MovePath(NPC_WARSONG_BATTLEGUARD * 100, false);
2807 }
2808 break;
2809 // Valimathras Room Preparation
2810 case 19:
2811 for (uint8 i = 0; i < 3; ++i)
2812 me->SummonGameObject(GO_BLOCKED_PASSAGE, ThrallSpawn[i + 70].x, ThrallSpawn[i + 70].y, ThrallSpawn[70].z, ThrallSpawn[i + 70].o, 0.0f, 0.0f, 0.0f, 0.0f, 120 * IN_MILLISECONDS);
2813 // Valimathras BossSpawn
2815 {
2816 ValimathrasGUID = temp->GetGUID();
2817 temp->SetImmuneToAll(true);
2818 temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
2819 temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
2820 temp->AI()->Talk(SAY_CLOSE_DOOR);
2821 }
2822 for (uint8 i = 0; i < 6; ++i)
2823 {
2825 temp->CastSpell(me, SPELL_VALIMATHRAS_PORTAL);
2826 }
2827 break;
2828 case 20:
2829 for (uint8 i = 0; i < 3; ++i)
2830 {
2831 switch (urand(0, 1))
2832 {
2833 case 0:
2835 break;
2836 case 1:
2838 break;
2839 }
2840 }
2841 break;
2842 case 21:
2843 for (uint8 i = 0; i < 3; ++i)
2844 {
2845 switch (urand(0, 1))
2846 {
2847 case 0:
2849 break;
2850 case 1:
2852 break;
2853 }
2854 }
2855 break;
2856 }
2857 }
constexpr auto IN_MILLISECONDS
Definition: Common.h:55
std::uint8_t uint8
Definition: Define.h:110
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:44
@ TEMPSUMMON_MANUAL_DESPAWN
Definition: Object.h:49
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition: Object.h:42
@ NPC_DOOMGUARD_PILLARGER
Definition: zone_undercity.cpp:692
@ SAY_FOR_THE_HORDE
Definition: zone_undercity.cpp:703
@ NPC_KHANOK
Definition: zone_undercity.cpp:634
@ WAVE_COURTYARD_FIGHT
Definition: zone_undercity.cpp:721
@ NPC_VARIMATHRAS
Definition: zone_undercity.cpp:640
@ SPELL_VALIMATHRAS_PORTAL
Definition: zone_undercity.cpp:659
@ SPELL_OPENING_LEGION_PORTALS
Definition: zone_undercity.cpp:666
@ SPELL_AURA_OF_VARIMATHRAS
Definition: zone_undercity.cpp:664
@ SAY_CLOSE_DOOR
Definition: zone_undercity.cpp:649
@ GO_BLOCKED_PASSAGE
Definition: zone_undercity.cpp:539
@ NPC_VORTEX
Definition: zone_undercity.cpp:528
@ NPC_WHIRLWIND
Definition: zone_undercity.cpp:530
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition: Object.cpp:2343
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
Definition: Object.cpp:2357
Definition: Unit.h:1302
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition: MotionMaster.h:227
float o
Definition: zone_undercity.cpp:753
float y
Definition: zone_undercity.cpp:753
float x
Definition: zone_undercity.cpp:753
float z
Definition: zone_undercity.cpp:753

References Unit::AddThreat(), Unit::GetMotionMaster(), GO_BLOCKED_PASSAGE, hordeGuardsGUID, IN_MILLISECONDS, ScriptedAI::me, MotionMaster::MoveJump(), NPC_BETRAYER_H, NPC_BLIGHT_ABBERATION, NPC_BLIGHT_SLINGER, NPC_CAVE_DUMMY, NPC_CHEMIST_H, NPC_DOCTOR_H, NPC_DOOMGUARD_PILLARGER, NPC_DREADLORD, NPC_FELBEAST_H, NPC_FELGUARD_MORADEUR, NPC_KHANOK, NPC_LEGION_DREADWHISPER, NPC_LEGION_INVADER, NPC_TREACHEROUS_GUARDIAN_H, NPC_VARIMATHRAS, NPC_VARIMATHRAS_PORTAL, NPC_VORTEX, NPC_WARSONG_BATTLEGUARD, NPC_WHIRLWIND, LocationXYZO::o, rand32(), SAY_CLOSE_DOOR, SAY_FOR_THE_HORDE, SPELL_AURA_OF_VARIMATHRAS, SPELL_OPENING_LEGION_PORTALS, SPELL_VALIMATHRAS_PORTAL, WorldObject::SummonCreature(), WorldObject::SummonGameObject(), TEMPSUMMON_DEAD_DESPAWN, TEMPSUMMON_MANUAL_DESPAWN, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, ThrallSpawn, urand(), ValimathrasGUID, ValimathrasPortalGUID, WAVE_COURTYARD_FIGHT, LocationXYZO::x, LocationXYZO::y, and LocationXYZO::z.

Referenced by UpdateAI().

◆ SummonedCreatureDies()

void npc_thrall_bfu::npc_thrall_bfuAI::SummonedCreatureDies ( Creature summon,
Unit  
)
inlineoverridevirtual

Reimplemented from CreatureAI.

2482 {
2483 switch (summon->GetEntry())
2484 {
2488 bStepping = true;
2489 break;
2490 case NPC_KHANOK:
2491 {
2494 FollowThrall();
2495 SetEscortPaused(false);
2496 std::list<Creature*> SanktumList;
2498 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DREADLORD, 1000.0f);
2500 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DOCTOR_H, 1000.0f);
2501 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_CHEMIST_H, 1000.0f);
2502 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_BETRAYER_H, 1000.0f);
2503 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_FELBEAST_H, 1000.0f);
2505 if (!SanktumList.empty())
2506 for (std::list<Creature*>::iterator itr = SanktumList.begin(); itr != SanktumList.end(); itr++)
2507 (*itr)->DespawnOrUnsummon();
2508 break;
2509 }
2510 case NPC_VARIMATHRAS:
2511 {
2514 std::list<Creature*> ThroneList;
2519 if (!ThroneList.empty())
2520 for (std::list<Creature*>::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++)
2521 (*itr)->DespawnOrUnsummon();
2522 SetEscortPaused(false);
2523 SetRun(false);
2524 break;
2525 }
2526 default:
2527 break;
2528 }
2529 }
@ WORLD_STATE_COURTYARD_DONE_H
Definition: zone_undercity.cpp:742
@ WORLD_STATE_INNER_SANKTUM_FIGHT_H
Definition: zone_undercity.cpp:743
@ WORLD_STATE_ROYAL_QUARTER_FIGHT_H
Definition: zone_undercity.cpp:747
@ WORLD_STATE_COURTYARD_FIGHT_H
Definition: zone_undercity.cpp:741
@ WORLD_STATE_ROYAL_QUARTER_DONE_H
Definition: zone_undercity.cpp:748
@ WORLD_STATE_INNER_SANKTUM_DONE_H
Definition: zone_undercity.cpp:744
void SetRun(bool on=true)
Definition: ScriptedEscortAI.cpp:428
Map * GetMap() const
Definition: Object.h:517
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition: Object.cpp:2488
void FollowThrall()
Definition: zone_undercity.cpp:2556
void UpdateWorldState(Map *map, uint32 id, uint32 state)
Definition: zone_undercity.cpp:2531

References bStepping, FollowThrall(), WorldObject::GetCreatureListWithEntryInGrid(), Object::GetEntry(), WorldObject::GetMap(), ScriptedAI::me, NPC_BETRAYER_H, NPC_BLIGHT_ABBERATION, NPC_CHEMIST_H, NPC_DOCTOR_H, NPC_DOOMGUARD_PILLARGER, NPC_DREADLORD, NPC_FELBEAST_H, NPC_FELGUARD_MORADEUR, NPC_KHANOK, NPC_LEGION_DREADWHISPER, NPC_LEGION_INVADER, NPC_LEGION_OVERLORD, NPC_TREACHEROUS_GUARDIAN_H, NPC_VARIMATHRAS, NPC_VARIMATHRAS_PORTAL, npc_escortAI::SetEscortPaused(), npc_escortAI::SetRun(), UpdateWorldState(), WORLD_STATE_COURTYARD_DONE_H, WORLD_STATE_COURTYARD_FIGHT_H, WORLD_STATE_INNER_SANKTUM_DONE_H, WORLD_STATE_INNER_SANKTUM_FIGHT_H, WORLD_STATE_ROYAL_QUARTER_DONE_H, and WORLD_STATE_ROYAL_QUARTER_FIGHT_H.

◆ UpdateAI()

void npc_thrall_bfu::npc_thrall_bfuAI::UpdateAI ( uint32  diff)
inlineoverridevirtual

Reimplemented from npc_escortAI.

2951 {
2953
2954 if (bStepping)
2955 {
2956 if (phaseTimer <= diff)
2957 {
2958 switch (step)
2959 {
2960 //Preparation
2961 case 0:
2962 me->setActive(true);
2964 break;
2965 case 1:
2969 break;
2970 case 2:
2973 break;
2974 case 3:
2975 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2976 guard->AI()->Talk(SAY_BURN_UC);
2978 break;
2979 case 4:
2980 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2981 guard->AI()->Talk(SAY_PUTRESS_ANGER);
2983 break;
2984 case 5:
2987 break;
2988 case 6:
2991 break;
2992 case 7:
2995 break;
2996 case 8:
2999 break;
3000 case 9:
3003 break;
3004 case 10:
3007 break;
3008 // Start Event
3009 case 11:
3013 SetEscortPaused(false);
3014 bStepping = false;
3015 JumpToNextStep(0);
3016 SetRun(true);
3018 {
3019 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 100, false);
3020 sylvanas->setActive(true);
3021 }
3022 break;
3023 case 12:
3024 me->Dismount();
3026 break;
3027 case 13:
3029 sylvanas->Dismount();
3031 break;
3032 case 14:
3035 break;
3036 case 15:
3038 SpawnWave(0);
3040 break;
3041 case 16:
3042 {
3043 std::list<Creature*> PlagueList;
3045 if (!PlagueList.empty())
3046 for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
3047 (*itr)->DespawnOrUnsummon();
3048 SetEscortPaused(false);
3049 SetRun(false);
3051 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 1000, false);
3053 break;
3054 }
3055 case 17:
3056 bStepping = false;
3057 JumpToNextStep(0);
3058 break;
3059 case 18:
3060 SpawnWave(1);
3063 break;
3064 case 19:
3065 {
3066 SpawnWave(2);
3068 break;
3069 }
3070 case 20:
3072 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_0);
3074 break;
3075 case 21:
3077 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_1);
3079 break;
3080 case 22:
3082 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_2);
3084 break;
3085 case 23:
3086 SpawnWave(3);
3088 break;
3089 case 24:
3091 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3093 break;
3094 case 25:
3096 {
3097 valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
3098 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3099 }
3101 valimathrasportal->DespawnOrUnsummon(6 * IN_MILLISECONDS);
3103 break;
3104 case 26:
3105 {
3108 std::list<Creature*> HelperList;
3110 if (!HelperList.empty())
3111 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3112 (*itr)->DespawnOrUnsummon();
3114 break;
3115 }
3116 // Start COURTYARD_FIGHT
3117 case 27:
3118 FollowThrall();
3119 SetEscortPaused(false);
3120 bStepping = false;
3121 SetRun(true);
3125 JumpToNextStep(0);
3126 break;
3127 case 28:
3128 {
3129 EnableAttack = true;
3131 std::list<Creature*> HostileEndList;
3133 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_DOCTOR_H, 1000.0f);
3134 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_CHEMIST_H, 1000.0f);
3135 if (!HostileEndList.empty())
3136 for (std::list<Creature*>::iterator itr = HostileEndList.begin(); itr != HostileEndList.end(); itr++) (*itr)->SetFaction(FACTION_MONSTER);
3137 SpawnWave(4);
3139 break;
3140 }
3141 case 29:
3142 SpawnWave(4);
3144 break;
3145 case 30:
3146 SpawnWave(4);
3148 break;
3149 case 31:
3150 SpawnWave(4);
3152 break;
3153 case 32:
3154 SpawnWave(4);
3156 break;
3157 case 33:
3158 SpawnWave(4);
3160 break;
3161 case 34:
3162 SpawnWave(4);
3164 break;
3165 case 35:
3166 SpawnWave(4);
3168 break;
3169 case 36:
3170 SpawnWave(4);
3172 break;
3173 case 37:
3174 SpawnWave(4);
3176 break;
3177 case 38:
3178 SpawnWave(4);
3180 break;
3181 case 39:
3182 SpawnWave(4);
3184 break;
3185 case 40:
3186 SpawnWave(4);
3188 break;
3189 case 41:
3190 SpawnWave(4);
3192 break;
3193 case 42:
3194 SpawnWave(4);
3196 break;
3197 case 43:
3198 SpawnWave(4);
3200 break;
3201 case 44:
3202 SpawnWave(4);
3204 break;
3205 case 45:
3206 SpawnWave(5);
3207 bStepping = false;
3209 break;
3210 // End COURTYARD_FIGHT
3211 case 46:
3212 {
3213 FollowThrall();
3214 std::list<Creature*> HostileList;
3216 me->GetCreatureListWithEntryInGrid(HostileList, NPC_DOCTOR_H, 1000.0f);
3217 me->GetCreatureListWithEntryInGrid(HostileList, NPC_CHEMIST_H, 1000.0f);
3219 if (!HostileList.empty())
3220 for (std::list<Creature*>::iterator itr = HostileList.begin(); itr != HostileList.end(); itr++)
3221 (*itr)->DespawnOrUnsummon();
3222 for (uint8 i = 0; i < 7; ++i)
3223 me->SummonGameObject(GO_HORDE_BANNER, ThrallSpawn[i + 37].x, ThrallSpawn[i + 37].y, ThrallSpawn[i + 37].z, ThrallSpawn[i + 37].o, 0.0f, 0.0f, 0.0f, 0.0f, 120 * IN_MILLISECONDS);
3224 SpawnWave(6);
3225 SetEscortPaused(false);
3226 bStepping = false;
3227 SetRun(false);
3229 break;
3230 }
3231 case 47:
3234 break;
3235 case 48:
3236 SetEscortPaused(false);
3237 bStepping = false;
3239 break;
3240 // Elevator Event
3241 case 49:
3244 break;
3245 case 50:
3247 sylvanas->AI()->Talk(SYLVANAS_SAY_ELEVATOR_1);
3249 break;
3250 case 51:
3253 SpawnWave(7);
3255 break;
3256 case 52:
3259 break;
3260 case 53:
3261 SpawnWave(8);
3262 me->GetMotionMaster()->MoveJump(ThrallSpawn[55].x, ThrallSpawn[55].y, ThrallSpawn[55].z, 40.0f, 40.0f, 0);
3264 sylvanas->GetMotionMaster()->MoveJump(ThrallSpawn[56].x, ThrallSpawn[56].y, ThrallSpawn[56].z, 40.0f, 40.0f, 0);
3266 break;
3267 case 54:
3268 FollowThrall();
3269 SetEscortPaused(false);
3270 bStepping = false;
3271 SetRun(false);
3273 break;
3274 // Top of Undercity Discussion
3275 case 55:
3277 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_1);
3279 break;
3280 case 56:
3282 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_2);
3284 break;
3285 case 57:
3288 break;
3289 case 58:
3291 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_3);
3293 break;
3294 // Top of Undercity - Fight
3295 case 59:
3296 SpawnWave(9);
3298 break;
3299 case 60:
3300 SpawnWave(9);
3302 break;
3303 case 61:
3304 SpawnWave(9);
3306 break;
3307 case 62:
3308 FollowThrall();
3309 SetEscortPaused(false);
3310 bStepping = false;
3311 SetRun(false);
3313 break;
3314 case 63:
3316 break;
3317 case 64:
3318 SpawnWave(10);
3320 break;
3321 case 65:
3322 SpawnWave(10);
3324 break;
3325 case 66:
3326 FollowThrall();
3327 SetEscortPaused(false);
3328 bStepping = false;
3329 SetRun(false);
3331 break;
3332 case 67:
3333 SpawnWave(11);
3335 break;
3336 case 68:
3337 SpawnWave(11);
3339 break;
3340 case 69:
3341 FollowThrall();
3342 SetEscortPaused(false);
3343 bStepping = false;
3344 SetRun(false);
3346 break;
3347 // KHANOK - Valimathtas Intro
3348 case 70:
3350 break;
3351 case 71:
3353 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_4);
3354 SpawnWave(12);
3356 break;
3357 case 72:
3359 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_0);
3361 break;
3362 case 73:
3364 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_1);
3365 SpawnWave(13);
3367 break;
3368 case 74:
3370 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3372 break;
3373 case 75:
3375 {
3376 valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
3377 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3378 }
3380 valimathrasportal->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3382 break;
3383 // KHANOK - Trashspawn
3384 case 76:
3385 SpawnWave(14);
3387 break;
3388 case 77:
3389 SpawnWave(15);
3391 break;
3392 case 78:
3393 SpawnWave(16);
3395 break;
3396 case 79:
3397 SpawnWave(14);
3399 break;
3400 case 80:
3401 SpawnWave(15);
3403 break;
3404 case 81:
3405 SpawnWave(16);
3407 break;
3408 case 82:
3409 SpawnWave(14);
3411 break;
3412 case 83:
3413 SpawnWave(15);
3415 break;
3416 case 84:
3417 SpawnWave(16);
3419 break;
3420 case 85:
3421 SpawnWave(14);
3423 break;
3424 case 86:
3425 SpawnWave(15);
3427 break;
3428 case 87:
3429 SpawnWave(16);
3431 break;
3432 case 88:
3433 SpawnWave(14);
3435 break;
3436 case 89:
3437 SpawnWave(15);
3439 break;
3440 case 90:
3441 SpawnWave(16);
3443 break;
3444 case 91:
3445 SpawnWave(14);
3447 break;
3448 case 92:
3449 SpawnWave(15);
3451 break;
3452 case 93:
3453 SpawnWave(16);
3455 break;
3456 case 94:
3457 // Spawn Boss 2 KHANOK
3458 SpawnWave(17);
3460 break;
3461 case 95:
3462 SpawnWave(14);
3464 break;
3465 case 96:
3466 SpawnWave(15);
3468 break;
3469 case 97:
3470 SpawnWave(16);
3472 bStepping = false;
3473 break;
3474 case 98:
3475 // KHANOK - Won
3478 break;
3479 case 99:
3480 SpawnWave(18);
3482 break;
3483 case 100:
3484 SpawnWave(18);
3486 break;
3487 case 101:
3488 SpawnWave(18);
3490 break;
3491 case 102:
3492 SpawnWave(18);
3494 break;
3495 case 103:
3496 SpawnWave(18);
3498 break;
3499 case 104:
3500 SpawnWave(18);
3502 break;
3503 case 105:
3504 SpawnWave(18);
3506 break;
3507 case 106:
3508 SpawnWave(18);
3510 break;
3511 case 107:
3512 SpawnWave(18);
3514 break;
3515 case 108:
3517 FollowThrall();
3518 SetEscortPaused(false);
3519 bStepping = false;
3520 SetRun(false);
3522 break;
3523 case 109:
3525 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_5);
3527 break;
3528 case 110:
3529 SpawnWave(19);
3531 break;
3532 case 111:
3533 FollowThrall();
3534 SetEscortPaused(false);
3535 bStepping = false;
3536 SetRun(true);
3538 break;
3539 case 112:
3541 break;
3542 case 113:
3545 break;
3546 case 114:
3550 break;
3551 case 115:
3552 {
3553 std::list<GameObject*> SaronitList;
3555 for (std::list<GameObject*>::const_iterator itr = SaronitList.begin(); itr != SaronitList.end(); ++itr)
3556 if (GameObject* saronit = (*itr))
3557 saronit->UseDoorOrButton();
3559 break;
3560 }
3561 case 116:
3564 FollowThrall();
3565 SetEscortPaused(false);
3566 bStepping = false;
3568 break;
3569 // Valimathras Intro
3570 case 117:
3573 break;
3574 case 118:
3576 {
3577 valimathras->AI()->Talk(SAY_THRONE_1);
3578 valimathras->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
3579 }
3581 break;
3582 case 119:
3583 SpawnWave(20);
3585 break;
3586 case 120:
3587 SpawnWave(21);
3589 break;
3590 case 121:
3593 valimathras->AI()->Talk(SAY_THRONE_2);
3595 break;
3596 case 122:
3597 SpawnWave(20);
3599 break;
3600 case 123:
3601 SpawnWave(21);
3603 break;
3604 case 124:
3607 valimathras->AI()->Talk(SAY_THRONE_3);
3609 break;
3610 case 125:
3611 SpawnWave(20);
3613 break;
3614 case 126:
3615 SpawnWave(21);
3617 break;
3618 case 127:
3621 valimathras->AI()->Talk(SAY_THRONE_4);
3623 break;
3624 case 128:
3625 SpawnWave(20);
3627 break;
3628 case 129:
3629 SpawnWave(21);
3631 break;
3632 case 130:
3635 valimathras->AI()->Talk(SAY_THRONE_5);
3637 break;
3638 case 131:
3639 SpawnWave(20);
3641 break;
3642 case 132:
3643 SpawnWave(21);
3645 break;
3646 case 133:
3649 valimathras->AI()->Talk(SAY_THRONE_6);
3651 break;
3652 case 134:
3653 SpawnWave(20);
3655 break;
3656 case 135:
3657 SpawnWave(21);
3659 break;
3660 case 136:
3663 break;
3664 // Valimathras Fight
3665 case 137:
3667 {
3668 valimathras->SetImmuneToAll(false);
3669 valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
3670 valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
3671 valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
3672 valimathras->AddThreat(me, 100.0f);
3673 me->AddThreat(valimathras, 100.0f);
3674 valimathras->AI()->AttackStart(me);
3675 }
3676 bStepping = false;
3678 break;
3679 // Valimathras Won
3680 case 138:
3683 break;
3684 case 139:
3687 break;
3688 case 140:
3689 SetEscortPaused(false);
3690 bStepping = false;
3692 break;
3693 case 141:
3695 break;
3696 case 142:
3698 me->SetFacingToObject(sylvanas);
3701 break;
3702 case 143:
3704 {
3705 sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f, true);
3706 sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
3707 }
3709 break;
3710 case 144:
3712 {
3713 sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
3714 me->SetFacingToObject(sylvanas);
3715 sylvanas->SetFacingToObject(me);
3717 }
3719 break;
3720 case 145:
3722 FollowThrall();
3723 SetEscortPaused(false);
3724 bStepping = false;
3726 break;
3727 case 146:
3730 break;
3731 case 147:
3732 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3733 {
3735 {
3736 allianceForcesGUID[i] = temp->GetGUID();
3737 temp->SetImmuneToAll(true);
3738 temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
3739 temp->SetReactState(REACT_PASSIVE);
3740 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3741 }
3742 }
3743 if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3744 {
3745 WrynnGUID = wrynn->GetGUID();
3746 wrynn->SetImmuneToAll(true);
3747 wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3748 wrynn->SetReactState(REACT_PASSIVE);
3749 wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f, true);
3750 }
3751 if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3752 {
3753 JainaGUID = jaina->GetGUID();
3754 jaina->SetImmuneToAll(true);
3755 jaina->SetReactState(REACT_PASSIVE);
3756 }
3758 break;
3759 // Wrynn Intro
3760 case 148:
3762 wrynn->AI()->Talk(WRYNN_SAY_THRONE_5);
3764 break;
3765 case 149:
3767 wrynn->AI()->Talk(WRYNN_SAY_THRONE_6);
3769 break;
3770 case 150:
3772 wrynn->AI()->Talk(WRYNN_SAY_THRONE_7);
3774 break;
3775 case 151:
3777 wrynn->AI()->Talk(WRYNN_SAY_THRONE_8);
3779 break;
3780 // Wrynn Fight
3781 case 152:
3782 me->SetImmuneToAll(false);
3784 {
3785 wrynn->SetImmuneToNPC(false);
3786 wrynn->SetImmuneToPC(true);
3787 wrynn->SetReactState(REACT_AGGRESSIVE);
3788 wrynn->AddThreat(me, 100.0f);
3789 me->AddThreat(wrynn, 100.0f);
3790 wrynn->AI()->AttackStart(me);
3791 }
3792
3793 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3794 {
3796 {
3797 temp->SetImmuneToAll(false);
3798 temp->SetReactState(REACT_AGGRESSIVE);
3799 temp->AddThreat(me, 100.0f);
3800 temp->AI()->AttackStart(me);
3801 }
3802 }
3804 break;
3805 case 153:
3807 {
3808 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
3809 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
3810 }
3812 break;
3813 case 154:
3815 {
3816 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
3817 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
3818 }
3820 break;
3821 case 155:
3822 {
3823 std::list<Creature*> HelperList;
3824 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
3825 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
3826 me->GetCreatureListWithEntryInGrid(HelperList, NPC_WRYNN, 100.0f);
3827 if (!HelperList.empty())
3828 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3829 (*itr)->DespawnOrUnsummon();
3831 break;
3832 }
3833 case 156:
3835 SetEscortPaused(false);
3836 bStepping = false;
3838 break;
3839 case 157:
3843 break;
3844 // Ending
3845 case 158:
3846 if (Creature* saurfang = me->SummonCreature(NPC_OVERLORD_SAURFANG, 1297.574f, 347.154f, -65.027f, TEMPSUMMON_MANUAL_DESPAWN))
3847 {
3848 SaurfangGUID = saurfang->GetGUID();
3849 saurfang->SetWalk(true);
3850 saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f, true);
3851 }
3853 break;
3854 case 159:
3856 {
3857 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_1);
3858 saurfang->SetStandState(UNIT_STAND_STATE_SIT);
3859 }
3861 break;
3862 case 160:
3864 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_2);
3866 break;
3867 case 161:
3869 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_3);
3870 if (Map* map = me->GetMap())
3871 {
3872 Map::PlayerList const& PlayerList = map->GetPlayers();
3873 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
3874 {
3875 if (Player* player = i->GetSource())
3876 {
3877 if (me->IsInRange(player, 0.0f, 50.0f))
3878 {
3879 if (player->GetTeamId() == TEAM_HORDE)
3880 {
3881 player->RemoveAura(SPELL_SYLVANAS_BUFF);
3882 player->RemoveAura(SPELL_THRALL_BUFF);
3883 player->CompleteQuest(QUEST_BATTLE_H);
3884 player->CastSpell(player, SPELL_PHASING_HORDE);
3885 }
3886 }
3887 }
3888 }
3889 }
3891 break;
3892 case 162:
3895 break;
3896 case 163:
3903 std::list<Creature*> HelperList;
3904 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
3906 if (!HelperList.empty())
3907 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3908 (*itr)->DespawnOrUnsummon(120 * IN_MILLISECONDS);
3910 bStepping = false;
3912 break;
3913 }
3914 }
3915 else phaseTimer -= diff;
3916 }
3917
3918 if (!UpdateVictim())
3919 return;
3920
3921 _events.Update(diff);
3922
3924 return;
3925
3926 while (uint32 eventId = _events.ExecuteEvent())
3927 {
3928 switch (eventId)
3929 {
3933 break;
3934 case EVENT_LAVA_BURST:
3937 break;
3938 case EVENT_THUNDER:
3941 break;
3943 if (me->GetVictim())
3945 sylvanas->AI()->AttackStart(me->GetVictim());
3947 break;
3948 case EVENT_THRALL_BUFF:
3951 break;
3952 default:
3953 break;
3954 }
3955 }
3956
3958 }
std::uint32_t uint32
Definition: Define.h:108
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &list, WorldObject *source, uint32 entry, float maxSearchRange)
Definition: ScriptedCreature.cpp:823
@ REACT_PASSIVE
Definition: Unit.h:1035
@ UNIT_STAND_STATE_SIT
Definition: Unit.h:54
@ UNIT_NPC_FLAG_QUESTGIVER
Definition: Unit.h:517
@ UNIT_STATE_CASTING
Definition: Unit.h:340
@ WRYNN_SAY_THRONE_5
Definition: zone_undercity.cpp:398
@ NPC_WRYNN
Definition: zone_undercity.cpp:369
@ WRYNN_SAY_THRONE_6
Definition: zone_undercity.cpp:399
@ WRYNN_SAY_THRONE_8
Definition: zone_undercity.cpp:401
@ WRYNN_SAY_THRONE_7
Definition: zone_undercity.cpp:400
@ JAINA_SAY_THRONE_2
Definition: zone_undercity.cpp:425
@ JAINA_SAY_THRONE_3
Definition: zone_undercity.cpp:426
@ NPC_JAINA
Definition: zone_undercity.cpp:419
@ SPELL_DEEPFREEZE
Definition: zone_undercity.cpp:432
@ NPC_SW_SOLDIER
Definition: zone_undercity.cpp:679
@ NPC_HORDE_GUARD
Definition: zone_undercity.cpp:681
@ SAY_PUTRESS_ANGER
Definition: zone_undercity.cpp:702
@ SAY_BURN_UC
Definition: zone_undercity.cpp:701
@ SYLVANAS_SAY_SANCTUM_4
Definition: zone_undercity.cpp:558
@ SPELL_LEAP_TO_PLATFORM
Definition: zone_undercity.cpp:565
@ SYLVANAS_SAY_SANCTUM_3
Definition: zone_undercity.cpp:557
@ SYLVANAS_SAY_THRONE_1
Definition: zone_undercity.cpp:560
@ SYLVANAS_SAY_SANCTUM_1
Definition: zone_undercity.cpp:555
@ SYLVANAS_SAY_SANCTUM_2
Definition: zone_undercity.cpp:556
@ SYLVANAS_SAY_SANCTUM_5
Definition: zone_undercity.cpp:559
@ NPC_SYLVANAS
Definition: zone_undercity.cpp:550
@ SYLVANAS_SAY_ELEVATOR_1
Definition: zone_undercity.cpp:554
@ SPELL_PHASING_HORDE
Definition: zone_undercity.cpp:711
@ ALLIANCE_FORCE_MAXCOUNT
Definition: zone_undercity.cpp:719
@ QUEST_BATTLE_H
Definition: zone_undercity.cpp:709
@ SAY_SAURFANG_ARRIVAL_2
Definition: zone_undercity.cpp:579
@ SAY_SAURFANG_ARRIVAL_3
Definition: zone_undercity.cpp:580
@ SAY_SAURFANG_ARRIVAL_1
Definition: zone_undercity.cpp:578
static LocationXYZO AllianceSpawn[]
Definition: zone_undercity.cpp:756
@ WORLD_STATE_BATTLE_START_H
Definition: zone_undercity.cpp:740
@ WORLD_STATE_BATTLE_COUNTDOWN_H
Definition: zone_undercity.cpp:739
@ SAY_VALIMATHRAS_ATTACK
Definition: zone_undercity.cpp:656
@ SAY_THRONE_2
Definition: zone_undercity.cpp:651
@ SAY_THRONE_1
Definition: zone_undercity.cpp:650
@ SAY_VALIMATHRAS_INTRO_1
Definition: zone_undercity.cpp:645
@ SAY_VALIMATHRAS_INTRO_2
Definition: zone_undercity.cpp:646
@ SAY_THRONE_6
Definition: zone_undercity.cpp:655
@ SAY_VALIMATHRAS_INTRO_0
Definition: zone_undercity.cpp:644
@ SAY_VALIMATHRAS_INNER_SANKTUM_0
Definition: zone_undercity.cpp:647
@ SAY_THRONE_5
Definition: zone_undercity.cpp:654
@ SAY_VALIMATHRAS_INNER_SANKTUM_1
Definition: zone_undercity.cpp:648
@ SAY_THRONE_4
Definition: zone_undercity.cpp:653
@ SAY_THRONE_3
Definition: zone_undercity.cpp:652
@ THRALL_SAY_THRONE_11
Definition: zone_undercity.cpp:490
@ NPC_SLINGER_TRIGGER
Definition: zone_undercity.cpp:532
@ THRALL_SAY_COURTYARD_5
Definition: zone_undercity.cpp:469
@ THRALL_SAY_THRONE_2
Definition: zone_undercity.cpp:481
@ THRALL_SAY_THRONE_4
Definition: zone_undercity.cpp:483
@ THRALL_SAY_SANCTUM_6
Definition: zone_undercity.cpp:478
@ THRALL_SAY_PREP_1
Definition: zone_undercity.cpp:457
@ SPELL_CALL_OF_AIR
Definition: zone_undercity.cpp:502
@ THRALL_SAY_PREP_6
Definition: zone_undercity.cpp:462
@ THRALL_SAY_ELEVATOR_1
Definition: zone_undercity.cpp:470
@ THRALL_SAY_COURTYARD_3
Definition: zone_undercity.cpp:467
@ THRALL_SAY_THRONE_9
Definition: zone_undercity.cpp:488
@ THRALL_SAY_THRONE_7
Definition: zone_undercity.cpp:486
@ THRALL_SAY_SANCTUM_4
Definition: zone_undercity.cpp:476
@ SPELL_LAVA_BURST
Definition: zone_undercity.cpp:515
@ THRALL_SAY_COURTYARD_1
Definition: zone_undercity.cpp:465
@ THRALL_SAY_PREP_5
Definition: zone_undercity.cpp:461
@ GO_HORDE_BANNER
Definition: zone_undercity.cpp:540
@ THRALL_SAY_SANCTUM_3
Definition: zone_undercity.cpp:475
@ SPELL_CALL_OF_EARTH
Definition: zone_undercity.cpp:504
@ THRALL_SAY_THRONE_1
Definition: zone_undercity.cpp:480
@ THRALL_SAY_PREP_7
Definition: zone_undercity.cpp:463
@ THRALL_SAY_SANCTUM_5
Definition: zone_undercity.cpp:477
@ THRALL_SAY_COURTYARD_4
Definition: zone_undercity.cpp:468
@ THRALL_SAY_PREP_3
Definition: zone_undercity.cpp:459
@ SPELL_TIDAL_WAVE_SUMMON
Definition: zone_undercity.cpp:499
@ THRALL_SAY_PREP_8
Definition: zone_undercity.cpp:464
@ THRALL_SAY_ELEVATOR_2
Definition: zone_undercity.cpp:471
@ THRALL_SAY_ELEVATOR_3
Definition: zone_undercity.cpp:472
@ THRALL_SAY_THRONE_3
Definition: zone_undercity.cpp:482
@ THRALL_SAY_PREP_4
Definition: zone_undercity.cpp:460
@ THRALL_SAY_THRONE_5
Definition: zone_undercity.cpp:484
@ THRALL_SAY_SANCTUM_7
Definition: zone_undercity.cpp:479
@ THRALL_SAY_PREP_2
Definition: zone_undercity.cpp:458
@ THRALL_SAY_THRONE_10
Definition: zone_undercity.cpp:489
@ SPELL_CHAIN_LIGHTNING
Definition: zone_undercity.cpp:514
@ THRALL_SAY_THRONE_6
Definition: zone_undercity.cpp:485
@ THRALL_SAY_SANCTUM_2
Definition: zone_undercity.cpp:474
@ NPC_PLAGUE_TRIGGER
Definition: zone_undercity.cpp:535
@ NPC_OVERLORD_SAURFANG
Definition: zone_undercity.cpp:533
@ SPELL_THUNDER
Definition: zone_undercity.cpp:516
@ THRALL_SAY_COURTYARD_2
Definition: zone_undercity.cpp:466
static LocationXYZO AllianceWP[]
Definition: zone_undercity.cpp:791
Talk
Definition: boss_fathomlord_karathress.cpp:25
@ EMOTE_ONESHOT_SALUTE
Definition: SharedDefines.h:1942
@ TEAM_HORDE
Definition: SharedDefines.h:761
@ FACTION_MONSTER
Definition: SharedDefines.h:195
Definition: LinkedList.h:139
uint32 ExecuteEvent()
Definition: EventMap.cpp:114
void Update(uint32 time)
Definition: EventMap.h:54
void DoMeleeAttackIfReady()
Definition: UnitAI.cpp:39
SpellCastResult DoCastVictim(uint32 spellId, bool triggered=false)
Definition: UnitAI.cpp:240
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:177
bool UpdateVictim()
Definition: CreatureAI.cpp:268
void UpdateAI(uint32 diff) override
Definition: ScriptedEscortAI.cpp:240
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition: Creature.cpp:2117
Definition: GameObject.h:122
void setActive(bool isActiveObject)
Definition: Object.cpp:1085
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
Definition: Object.cpp:1404
Definition: Player.h:1056
void Dismount()
Definition: Unit.cpp:13518
void SetFacingToObject(WorldObject *object)
Definition: Unit.cpp:20894
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition: Unit.cpp:1169
Unit * GetVictim() const
Definition: Unit.h:1398
bool HasUnitState(const uint32 f) const
Definition: Unit.h:1410
void HandleEmoteCommand(uint32 emoteId)
Definition: Unit.cpp:1980
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition: Unit.h:1692
Definition: Map.h:313
Definition: MapRefMgr.h:26
iterator begin()
Definition: MapRefMgr.h:36
iterator end()
Definition: MapRefMgr.h:37
void ActivateValimathrasPortal()
Definition: zone_undercity.cpp:2568
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition: zone_undercity.cpp:2340
void JumpToNextStep(uint32 uiTimer)
Definition: zone_undercity.cpp:2550
void SpawnWave(uint32 waveId)
Definition: zone_undercity.cpp:2577

References _events, ActivateValimathrasPortal(), Unit::AddThreat(), ALLIANCE_FORCE_MAXCOUNT, allianceForcesGUID, AllianceSpawn, AllianceWP, MapRefMgr::begin(), bStepping, Unit::CastSpell(), Creature::DespawnOrUnsummon(), Unit::Dismount(), UnitAI::DoCast(), UnitAI::DoCastVictim(), UnitAI::DoMeleeAttackIfReady(), EMOTE_ONESHOT_SALUTE, EMOTE_STATE_READY2H, EnableAttack, MapRefMgr::end(), EVENT_AGGRO_SYLVANAS, EVENT_CHAIN_LIGHTNING, EVENT_LAVA_BURST, EVENT_THRALL_BUFF, EVENT_THUNDER, EventMap::ExecuteEvent(), FACTION_MONSTER, WorldObject::FindNearestCreature(), FollowThrall(), ObjectAccessor::GetCreature(), WorldObject::GetCreatureListWithEntryInGrid(), GetGameObjectListWithEntryInGrid(), WorldObject::GetMap(), Unit::GetMotionMaster(), Unit::GetVictim(), GO_BLOCKED_PASSAGE, GO_HORDE_BANNER, Unit::HandleEmoteCommand(), Unit::HasUnitState(), IMMUNITY_ID, IN_MILLISECONDS, WorldObject::IsInRange(), JAINA_SAY_THRONE_2, JAINA_SAY_THRONE_3, JainaGUID, JumpToNextStep(), ScriptedAI::me, MotionMaster::MoveJump(), NPC_BLIGHT_SLINGER, NPC_CHEMIST_H, NPC_DOCTOR_H, NPC_HORDE_GUARD, NPC_JAINA, NPC_OVERLORD_SAURFANG, NPC_PLAGUE_TRIGGER, NPC_SLINGER_TRIGGER, NPC_SW_SOLDIER, NPC_SYLVANAS, NPC_TREACHEROUS_GUARDIAN_H, NPC_WRYNN, LocationXYZO::o, phaseTimer, QUEST_BATTLE_H, REACT_AGGRESSIVE, REACT_PASSIVE, SaurfangGUID, SAY_BURN_UC, SAY_PUTRESS_ANGER, SAY_SAURFANG_ARRIVAL_1, SAY_SAURFANG_ARRIVAL_2, SAY_SAURFANG_ARRIVAL_3, SAY_THRONE_1, SAY_THRONE_2, SAY_THRONE_3, SAY_THRONE_4, SAY_THRONE_5, SAY_THRONE_6, SAY_VALIMATHRAS_ATTACK, SAY_VALIMATHRAS_INNER_SANKTUM_0, SAY_VALIMATHRAS_INNER_SANKTUM_1, SAY_VALIMATHRAS_INTRO_0, SAY_VALIMATHRAS_INTRO_1, SAY_VALIMATHRAS_INTRO_2, EventMap::ScheduleEvent(), WorldObject::setActive(), npc_escortAI::SetEscortPaused(), Unit::SetFacingToObject(), Unit::SetImmuneToAll(), Unit::SetNpcFlag(), npc_escortAI::SetRun(), Unit::SetStandState(), SpawnWave(), SPELL_AURA_OF_VARIMATHRAS, SPELL_CALL_OF_AIR, SPELL_CALL_OF_EARTH, SPELL_CHAIN_LIGHTNING, SPELL_DEEPFREEZE, SPELL_HEROIC_VANGUARD, SPELL_LAVA_BURST, SPELL_LEAP_TO_PLATFORM, SPELL_OPENING_LEGION_PORTALS, SPELL_PHASING_HORDE, SPELL_SYLVANAS_BUFF, SPELL_THRALL_BUFF, SPELL_THUNDER, SPELL_TIDAL_WAVE_SUMMON, SPELL_VALIMATHRAS_PORTAL, step, WorldObject::SummonCreature(), WorldObject::SummonGameObject(), SYLVANAS_SAY_ELEVATOR_1, SYLVANAS_SAY_SANCTUM_1, SYLVANAS_SAY_SANCTUM_2, SYLVANAS_SAY_SANCTUM_3, SYLVANAS_SAY_SANCTUM_4, SYLVANAS_SAY_SANCTUM_5, SYLVANAS_SAY_THRONE_1, sylvanasfollowGUID, TEAM_HORDE, TEMPSUMMON_MANUAL_DESPAWN, THRALL_SAY_COURTYARD_1, THRALL_SAY_COURTYARD_2, THRALL_SAY_COURTYARD_3, THRALL_SAY_COURTYARD_4, THRALL_SAY_COURTYARD_5, THRALL_SAY_ELEVATOR_1, THRALL_SAY_ELEVATOR_2, THRALL_SAY_ELEVATOR_3, THRALL_SAY_PREP_1, THRALL_SAY_PREP_2, THRALL_SAY_PREP_3, THRALL_SAY_PREP_4, THRALL_SAY_PREP_5, THRALL_SAY_PREP_6, THRALL_SAY_PREP_7, THRALL_SAY_PREP_8, THRALL_SAY_SANCTUM_2, THRALL_SAY_SANCTUM_3, THRALL_SAY_SANCTUM_4, THRALL_SAY_SANCTUM_5, THRALL_SAY_SANCTUM_6, THRALL_SAY_SANCTUM_7, THRALL_SAY_THRONE_1, THRALL_SAY_THRONE_10, THRALL_SAY_THRONE_11, THRALL_SAY_THRONE_2, THRALL_SAY_THRONE_3, THRALL_SAY_THRONE_4, THRALL_SAY_THRONE_5, THRALL_SAY_THRONE_6, THRALL_SAY_THRONE_7, THRALL_SAY_THRONE_9, ThrallSpawn, UNIT_NPC_EMOTESTATE, UNIT_NPC_FLAG_GOSSIP, UNIT_NPC_FLAG_QUESTGIVER, UNIT_STAND_STATE_SIT, UNIT_STATE_CASTING, EventMap::Update(), npc_escortAI::UpdateAI(), CreatureAI::UpdateVictim(), UpdateWorldState(), ValimathrasGUID, ValimathrasPortalGUID, WORLD_STATE_BATTLE_COUNTDOWN_H, WORLD_STATE_BATTLE_START_H, WORLD_STATE_COURTYARD_FIGHT_H, WORLD_STATE_INNER_SANKTUM_FIGHT_H, WORLD_STATE_ROYAL_QUARTER_FIGHT_H, WRYNN_SAY_THRONE_5, WRYNN_SAY_THRONE_6, WRYNN_SAY_THRONE_7, WRYNN_SAY_THRONE_8, WrynnGUID, LocationXYZO::x, LocationXYZO::y, and LocationXYZO::z.

◆ UpdateWorldState()

void npc_thrall_bfu::npc_thrall_bfuAI::UpdateWorldState ( Map map,
uint32  id,
uint32  state 
)
inline
2532 {
2533 Map::PlayerList const& players = map->GetPlayers();
2534
2535 if (!players.IsEmpty())
2536 {
2537 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2538 {
2539 if (Player* player = itr->GetSource())
2540 player->SendUpdateWorldState(id, state);
2541 }
2542 }
2543 }
bool IsEmpty() const
Definition: LinkedList.h:97
PlayerList const & GetPlayers() const
Definition: Map.h:485

References MapRefMgr::begin(), MapRefMgr::end(), Map::GetPlayers(), and LinkedListHead::IsEmpty().

Referenced by SummonedCreatureDies(), UpdateAI(), and WaypointReached().

◆ WaypointReached()

void npc_thrall_bfu::npc_thrall_bfuAI::WaypointReached ( uint32  waypointId)
inlineoverridevirtual

Implements npc_escortAI.

2860 {
2861 switch (waypointId)
2862 {
2863 case 1:
2864 SetHoldState(true);
2865 bStepping = true;
2866 break;
2867 case 2:
2868 SetHoldState(true);
2869 bStepping = true;
2870 break;
2871 case 11:
2872 SetHoldState(true);
2873 bStepping = true;
2874 break;
2875 case 13:
2876 SetHoldState(true);
2877 bStepping = true;
2878 break;
2879 case 14:
2880 SetHoldState(true);
2881 bStepping = true;
2882 break;
2883 case 34:
2884 SetHoldState(true);
2885 bStepping = true;
2886 break;
2887 case 36:
2890 break;
2891 case 46:
2892 SetHoldState(true);
2893 bStepping = true;
2894 break;
2895 case 57:
2896 SetHoldState(true);
2897 bStepping = true;
2898 break;
2899 case 61:
2900 SetHoldState(true);
2901 bStepping = true;
2902 break;
2903 case 65:
2904 SetHoldState(true);
2905 bStepping = true;
2906 break;
2907 case 66:
2908 SetHoldState(true);
2909 bStepping = true;
2910 break;
2911 case 75:
2912 SetHoldState(true);
2913 bStepping = true;
2914 break;
2915 case 81:
2916 SetHoldState(true);
2917 bStepping = true;
2918 break;
2919 case 104:
2920 SetHoldState(true);
2921 bStepping = true;
2922 break;
2923 case 109:
2924 SetHoldState(true);
2925 bStepping = true;
2926 break;
2927 case 113:
2928 SetHoldState(true);
2929 bStepping = true;
2930 break;
2931 case 117:
2932 SetHoldState(true);
2933 bStepping = true;
2934 break;
2935 case 118:
2937 break;
2938 case 120:
2939 SetHoldState(true);
2940 bStepping = true;
2941 break;
2942 }
2943 }
@ THRALL_SAY_THRONE_8
Definition: zone_undercity.cpp:487
@ THRALL_SAY_SANCTUM_1
Definition: zone_undercity.cpp:473
void SetHoldState(bool bOnHold)
Definition: zone_undercity.cpp:2545

References bStepping, WorldObject::GetMap(), ScriptedAI::me, SetHoldState(), THRALL_SAY_SANCTUM_1, THRALL_SAY_THRONE_8, UpdateWorldState(), and WORLD_STATE_INNER_SANKTUM_FIGHT_H.

Member Data Documentation

◆ _events

EventMap npc_thrall_bfu::npc_thrall_bfuAI::_events

Referenced by Reset(), and UpdateAI().

◆ allianceForcesGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]

Referenced by UpdateAI().

◆ bStepping

bool npc_thrall_bfu::npc_thrall_bfuAI::bStepping

◆ EnableAttack

bool npc_thrall_bfu::npc_thrall_bfuAI::EnableAttack

Referenced by JustSummoned(), Reset(), and UpdateAI().

◆ hordeGuardsGUID

GuidVector npc_thrall_bfu::npc_thrall_bfuAI::hordeGuardsGUID

Referenced by npc_thrall_bfuAI(), Reset(), and SpawnWave().

◆ JainaGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::JainaGUID

Referenced by Reset(), and UpdateAI().

◆ phaseTimer

uint32 npc_thrall_bfu::npc_thrall_bfuAI::phaseTimer

Referenced by JumpToNextStep(), Reset(), and UpdateAI().

◆ SaurfangGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::SaurfangGUID

Referenced by Reset(), and UpdateAI().

◆ step

uint32 npc_thrall_bfu::npc_thrall_bfuAI::step

Referenced by JumpToNextStep(), Reset(), and UpdateAI().

◆ sylvanasfollowGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::sylvanasfollowGUID

Referenced by FollowThrall(), Reset(), and UpdateAI().

◆ ValimathrasGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::ValimathrasGUID

Referenced by Reset(), SpawnWave(), and UpdateAI().

◆ ValimathrasPortalGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::ValimathrasPortalGUID

Referenced by Reset(), SpawnWave(), and UpdateAI().

◆ WrynnGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::WrynnGUID

Referenced by Reset(), and UpdateAI().