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 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 HealDone (Unit *, uint32 &)
 
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
 
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
2327 : npc_escortAI(creature)
2328 {
2329 hordeGuardsGUID.clear();
2330 }
Definition: ScriptedEscortAI.h:53
GuidVector hordeGuardsGUID
Definition: zone_undercity.cpp:2345

References hordeGuardsGUID.

Member Function Documentation

◆ ActivateValimathrasPortal()

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

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.

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

References Object::GetEntry(), and NPC_BLIGHT_SLINGER.

◆ EnterEvadeMode()

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

Reimplemented from npc_escortAI.

2350 {
2353 me->CombatStop(true);
2354 me->SetLootRecipient(nullptr);
2355
2357 {
2360 }
2361 else
2362 {
2364 Reset();
2365 }
2366 }
@ STATE_ESCORT_ESCORTING
Definition: ScriptedEscortAI.h:47
@ STATE_ESCORT_RETURNING
Definition: ScriptedEscortAI.h:48
@ SPELL_HEROIC_VANGUARD
Definition: zone_undercity.cpp:516
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:418
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition: Creature.cpp:1292
void CombatStop(bool includingCast=false)
Definition: Unit.cpp:10401
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition: Unit.cpp:4708
MotionMaster * GetMotionMaster()
Definition: Unit.h:2262
ThreatMgr & GetThreatMgr()
Definition: Unit.h:2145
void MoveTargetedHome(bool walk=false)
Definition: MotionMaster.cpp:251
void Reset() override
Definition: zone_undercity.cpp:2368

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
2556 {
2558 {
2559 sylvanas->GetMotionMaster()->Clear();
2560 sylvanas->SetImmuneToAll(false);
2561 sylvanas->SetReactState(REACT_AGGRESSIVE);
2562 sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
2563 sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
2564 }
2565 }
@ REACT_AGGRESSIVE
Definition: Unit.h:1025
@ FACTION_ESCORT_N_NEUTRAL_ACTIVE
Definition: ScriptSystem.h:37
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:215
ObjectGuid sylvanasfollowGUID
Definition: zone_undercity.cpp:2338

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
2550 {
2551 phaseTimer = uiTimer;
2552 ++step;
2553 }
uint32 phaseTimer
Definition: zone_undercity.cpp:2336
uint32 step
Definition: zone_undercity.cpp:2335

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

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

Reimplemented from ScriptedAI.

2429 {
2430 switch (summoned->GetEntry())
2431 {
2433 summoned->AI()->AttackStart(me);
2434 break;
2438 break;
2441 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2443 break;
2444 case NPC_CAVE_DUMMY:
2446 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2448 summoned->AddAura(SPELL_CYCLONE_FALL, summoned);
2449 break;
2451 case NPC_DOCTOR_H:
2452 case NPC_CHEMIST_H:
2455 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2457 if (!EnableAttack)
2458 summoned->SetFaction(FACTION_FRIENDLY);
2459 summoned->AddThreat(me, 100.0f);
2460 me->AddThreat(summoned, 100.0f);
2461 summoned->AI()->AttackStart(me);
2462 break;
2463 case NPC_LEGION_INVADER:
2466 case NPC_DREADLORD:
2467 case NPC_BETRAYER_H:
2468 case NPC_FELBEAST_H:
2471 summoned->AddThreat(me, 100.0f);
2472 me->AddThreat(summoned, 100.0f);
2473 summoned->AI()->AttackStart(me);
2474 break;
2475 default:
2476 break;
2477 }
2478 }
@ UNIT_NPC_EMOTESTATE
Definition: UpdateFields.h:140
@ UNIT_FLAG_NOT_SELECTABLE
Definition: Unit.h:473
@ NPC_DOCTOR_H
Definition: zone_undercity.cpp:690
@ NPC_BETRAYER_H
Definition: zone_undercity.cpp:687
@ NPC_DREADLORD
Definition: zone_undercity.cpp:671
@ NPC_FELBEAST_H
Definition: zone_undercity.cpp:685
@ NPC_LEGION_DREADWHISPER
Definition: zone_undercity.cpp:697
@ NPC_CHEMIST_H
Definition: zone_undercity.cpp:688
@ NPC_LEGION_INVADER
Definition: zone_undercity.cpp:696
@ NPC_TREACHEROUS_GUARDIAN_H
Definition: zone_undercity.cpp:683
@ NPC_FELGUARD_MORADEUR
Definition: zone_undercity.cpp:694
@ SPELL_SYLVANAS_BUFF
Definition: zone_undercity.cpp:562
@ NPC_BLIGHT_ABBERATION
Definition: zone_undercity.cpp:535
@ NPC_CAVE_DUMMY
Definition: zone_undercity.cpp:530
@ NPC_WARSONG_BATTLEGUARD
Definition: zone_undercity.cpp:526
@ SPELL_CYCLONE_FALL
Definition: zone_undercity.cpp:502
@ SPELL_THRALL_BUFF
Definition: zone_undercity.cpp:496
@ EMOTE_STATE_READY2H
Definition: SharedDefines.h:1942
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition: SharedDefines.h:894
@ SPELL_EFFECT_KNOCK_BACK
Definition: SharedDefines.h:848
@ IMMUNITY_EFFECT
Definition: SharedDefines.h:1366
@ IMMUNITY_ID
Definition: SharedDefines.h:1372
@ FACTION_FRIENDLY
Definition: SharedDefines.h:173
virtual void AttackStart(Unit *)
Definition: UnitAI.cpp:28
CreatureAI * AI() const
Definition: Creature.h:135
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:13300
void SetFaction(uint32 faction)
Definition: Unit.cpp:10029
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition: Unit.cpp:14548
Aura * AddAura(uint32 spellId, Unit *target)
Definition: Unit.cpp:19031
void SetUnitFlag(UnitFlags flags)
Definition: Unit.h:1481
bool EnableAttack
Definition: zone_undercity.cpp:2333

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.

2369 {
2371 {
2374 me->SetCorpseDelay(1);
2375 me->SetRespawnTime(1);
2378
2379 bStepping = false;
2380 EnableAttack = false;
2381 step = 0;
2382 phaseTimer = 0;
2389
2391 {
2392 valimathras->DespawnOrUnsummon();
2394 }
2395
2397 {
2398 valimathrasportal->DespawnOrUnsummon();
2400 }
2401
2403 {
2404 wrynn->DespawnOrUnsummon();
2405 WrynnGUID.Clear();
2406 }
2407
2409 {
2410 jaina->DespawnOrUnsummon();
2411 JainaGUID.Clear();
2412 }
2413
2415 {
2416 saurfang->DespawnOrUnsummon();
2418 }
2419
2420 for (ObjectGuid const& guid : hordeGuardsGUID)
2421 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
2422 temp->DespawnOrUnsummon();
2423
2424 hordeGuardsGUID.clear();
2425 }
2426 }
@ UNIT_STAND_STATE_STAND
Definition: Unit.h:53
@ UNIT_NPC_FLAG_GOSSIP
Definition: Unit.h:516
@ EVENT_CHAIN_LIGHTNING
Definition: zone_undercity.cpp:519
@ EVENT_THRALL_BUFF
Definition: zone_undercity.cpp:523
@ EVENT_AGGRO_SYLVANAS
Definition: zone_undercity.cpp:522
@ MODEL_WHITE_WULF
Definition: zone_undercity.cpp:543
@ EVENT_THUNDER
Definition: zone_undercity.cpp:521
@ EVENT_LAVA_BURST
Definition: zone_undercity.cpp:520
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group=0, uint32 phase=0)
Definition: EventMap.cpp:56
void SetRespawnTime(uint32 respawn)
Definition: Creature.cpp:3658
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:13376
void SetNpcFlag(NPCFlags flags)
Definition: Unit.h:1647
void SetStandState(uint8 state)
Definition: Unit.cpp:16900
bool bStepping
Definition: zone_undercity.cpp:2332
ObjectGuid ValimathrasGUID
Definition: zone_undercity.cpp:2340
ObjectGuid ValimathrasPortalGUID
Definition: zone_undercity.cpp:2341
ObjectGuid SaurfangGUID
Definition: zone_undercity.cpp:2344
ObjectGuid JainaGUID
Definition: zone_undercity.cpp:2343
EventMap _events
Definition: zone_undercity.cpp:2347
ObjectGuid WrynnGUID
Definition: zone_undercity.cpp:2342

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
2545 {
2546 SetEscortPaused(bOnHold);
2547 }
void SetEscortPaused(bool on)
Definition: ScriptedEscortAI.cpp:524

References npc_escortAI::SetEscortPaused().

Referenced by WaypointReached().

◆ SpawnWave()

void npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave ( uint32  waveId)
inline
2577 {
2578 switch (waveId)
2579 {
2580 case 0: // Vortex
2582 whirlwind1->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 10, false);
2584 whirlwind2->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 100, false);
2585 break;
2586 case 1:
2587 // BATTLING_COURTYARD Initial Spawn
2588 for (uint8 i = 0; i < 3; ++i)
2590 for (uint8 i = 0; i < 9; ++i)
2592 for (uint8 i = 0; i < 6; ++i)
2594 for (uint8 i = 0; i < 4; ++i)
2596 break;
2597 case 2:
2598 // Valimathras
2600 {
2601 ValimathrasGUID = temp->GetGUID();
2602 temp->SetImmuneToAll(true);
2603 }
2604 break;
2605 case 3:
2607 ValimathrasPortalGUID = temp->GetGUID();
2608 break;
2609 case 4:
2610 // COURTYARD_FIGHT Spawns
2611 for (uint8 i = 0; i < WAVE_COURTYARD_FIGHT; ++i)
2612 {
2613 switch (urand(0, 2))
2614 {
2615 case 0:
2617 break;
2618 case 1:
2620 break;
2621 case 2:
2623 break;
2624 }
2625 }
2626 break;
2627 case 5:
2628 // Bossspawn 1
2630 {
2631 temp->GetMotionMaster()->MoveJump(ThrallSpawn[62].x, ThrallSpawn[62].y, ThrallSpawn[62].z, 10.0f, 20.0f, 0);
2632 temp->AddThreat(me, 100.0f);
2633 me->AddThreat(temp, 100.0f);
2634 temp->AI()->AttackStart(me);
2635 }
2636 break;
2637 case 6:
2638 // COURTYARD_DONE Spawn
2640 {
2641 hordeGuardsGUID.push_back(temp->GetGUID());
2642 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
2643 }
2645 {
2646 hordeGuardsGUID.push_back(temp->GetGUID());
2647 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
2648 }
2650 {
2651 hordeGuardsGUID.push_back(temp->GetGUID());
2652 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
2653 }
2655 {
2656 hordeGuardsGUID.push_back(temp->GetGUID());
2657 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
2658 }
2659 for (uint8 i = 0; i < 2; ++i)
2661 hordeGuardsGUID.push_back(temp->GetGUID());
2662 break;
2663 case 7:
2664 for (uint8 i = 0; i < 9; ++i)
2666 break;
2667 case 8:
2668 for (uint8 i = 0; i < 2; ++i)
2670 hordeGuardsGUID.push_back(temp->GetGUID());
2671 break;
2672 case 9:
2673 // Top of Undercity - Attacktrashpack
2674 for (uint8 i = 0; i < 3; ++i)
2675 {
2676 switch (urand(0, 2))
2677 {
2678 case 0:
2680 break;
2681 case 1:
2683 break;
2684 case 2:
2686 break;
2687 }
2688 }
2689 break;
2690 case 10:
2691 // Top of Undercity - Attacktrashpack
2692 for (uint8 i = 0; i < 3; ++i)
2693 {
2694 switch (urand(0, 1))
2695 {
2696 case 0:
2698 break;
2699 case 1:
2701 break;
2702 }
2703 }
2704 break;
2705 case 11:
2706 // Bottom of Undercity - Attacktrashpack
2707 for (uint8 i = 0; i < 3; ++i)
2708 {
2709 switch (urand(0, 1))
2710 {
2711 case 0:
2713 break;
2714 case 1:
2716 break;
2717 }
2718 }
2719 break;
2720 case 12:
2721 // Valimathras 2
2723 {
2724 ValimathrasGUID = temp->GetGUID();
2725 temp->SetImmuneToAll(true);
2726 }
2727 break;
2728 case 13:
2730 ValimathrasPortalGUID = temp->GetGUID();
2731 break;
2732 // NPC_KHANOK - Inner Sunktum Spawn Left
2733 case 14:
2734 for (uint8 i = 0; i < 4; ++i)
2735 {
2736 switch (urand(0, 6))
2737 {
2738 case 0:
2740 break;
2741 case 1:
2743 break;
2744 case 2:
2746 break;
2747 case 3:
2749 break;
2750 case 4:
2752 break;
2753 case 5:
2755 break;
2756 case 6:
2758 break;
2759 }
2760 }
2761 break;
2762 // NPC_KHANOK - Inner Sunktum Spawn Right
2763 case 15:
2764 for (uint8 i = 0; i < 4; ++i)
2765 {
2766 switch (urand(0, 6))
2767 {
2768 case 0:
2770 break;
2771 case 1:
2773 break;
2774 case 2:
2776 break;
2777 case 3:
2779 break;
2780 case 4:
2782 break;
2783 case 5:
2785 break;
2786 case 6:
2788 break;
2789 }
2790 }
2791 break;
2792 // NPC_KHANOK - Inner Sunktum Spawn Top
2793 case 16:
2795 break;
2796 // NPC_KHANOK - Inner Sunktum Spawn Middle
2797 case 17:
2799 break;
2800 case 18:
2802 {
2803 hordeGuardsGUID.push_back(temp->GetGUID());
2804 temp->AI()->Talk(SAY_FOR_THE_HORDE);
2805 temp->GetMotionMaster()->MovePath(NPC_WARSONG_BATTLEGUARD * 100, false);
2806 }
2807 break;
2808 // Valimathras Room Preparation
2809 case 19:
2810 for (uint8 i = 0; i < 3; ++i)
2811 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);
2812 // Valimathras BossSpawn
2814 {
2815 ValimathrasGUID = temp->GetGUID();
2816 temp->SetImmuneToAll(true);
2817 temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
2818 temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
2819 temp->AI()->Talk(SAY_CLOSE_DOOR);
2820 }
2821 for (uint8 i = 0; i < 6; ++i)
2822 {
2824 temp->CastSpell(me, SPELL_VALIMATHRAS_PORTAL);
2825 }
2826 break;
2827 case 20:
2828 for (uint8 i = 0; i < 3; ++i)
2829 {
2830 switch (urand(0, 1))
2831 {
2832 case 0:
2834 break;
2835 case 1:
2837 break;
2838 }
2839 }
2840 break;
2841 case 21:
2842 for (uint8 i = 0; i < 3; ++i)
2843 {
2844 switch (urand(0, 1))
2845 {
2846 case 0:
2848 break;
2849 case 1:
2851 break;
2852 }
2853 }
2854 break;
2855 }
2856 }
constexpr auto IN_MILLISECONDS
Definition: Common.h:62
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:691
@ SAY_FOR_THE_HORDE
Definition: zone_undercity.cpp:702
@ NPC_KHANOK
Definition: zone_undercity.cpp:633
@ WAVE_COURTYARD_FIGHT
Definition: zone_undercity.cpp:720
@ NPC_VARIMATHRAS
Definition: zone_undercity.cpp:639
@ SPELL_VALIMATHRAS_PORTAL
Definition: zone_undercity.cpp:658
@ SPELL_OPENING_LEGION_PORTALS
Definition: zone_undercity.cpp:665
@ SPELL_AURA_OF_VARIMATHRAS
Definition: zone_undercity.cpp:663
@ SAY_CLOSE_DOOR
Definition: zone_undercity.cpp:648
@ GO_BLOCKED_PASSAGE
Definition: zone_undercity.cpp:538
@ NPC_VORTEX
Definition: zone_undercity.cpp:527
@ NPC_WHIRLWIND
Definition: zone_undercity.cpp:529
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:2318
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:2332
Definition: Unit.h:1290
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition: MotionMaster.h:225
float o
Definition: zone_undercity.cpp:752
float y
Definition: zone_undercity.cpp:752
float x
Definition: zone_undercity.cpp:752
float z
Definition: zone_undercity.cpp:752

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.

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

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.

2950 {
2952
2953 if (bStepping)
2954 {
2955 if (phaseTimer <= diff)
2956 {
2957 switch (step)
2958 {
2959 //Preparation
2960 case 0:
2961 me->setActive(true);
2963 break;
2964 case 1:
2968 break;
2969 case 2:
2972 break;
2973 case 3:
2974 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2975 guard->AI()->Talk(SAY_BURN_UC);
2977 break;
2978 case 4:
2979 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2980 guard->AI()->Talk(SAY_PUTRESS_ANGER);
2982 break;
2983 case 5:
2986 break;
2987 case 6:
2990 break;
2991 case 7:
2994 break;
2995 case 8:
2998 break;
2999 case 9:
3002 break;
3003 case 10:
3006 break;
3007 // Start Event
3008 case 11:
3012 SetEscortPaused(false);
3013 bStepping = false;
3014 JumpToNextStep(0);
3015 SetRun(true);
3017 {
3018 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 100, false);
3019 sylvanas->setActive(true);
3020 }
3021 break;
3022 case 12:
3023 me->Dismount();
3025 break;
3026 case 13:
3028 sylvanas->Dismount();
3030 break;
3031 case 14:
3034 break;
3035 case 15:
3037 SpawnWave(0);
3039 break;
3040 case 16:
3041 {
3042 std::list<Creature*> PlagueList;
3044 if (!PlagueList.empty())
3045 for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
3046 (*itr)->DespawnOrUnsummon();
3047 SetEscortPaused(false);
3048 SetRun(false);
3050 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 1000, false);
3052 break;
3053 }
3054 case 17:
3055 bStepping = false;
3056 JumpToNextStep(0);
3057 break;
3058 case 18:
3059 SpawnWave(1);
3062 break;
3063 case 19:
3064 {
3065 SpawnWave(2);
3067 break;
3068 }
3069 case 20:
3071 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_0);
3073 break;
3074 case 21:
3076 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_1);
3078 break;
3079 case 22:
3081 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_2);
3083 break;
3084 case 23:
3085 SpawnWave(3);
3087 break;
3088 case 24:
3090 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3092 break;
3093 case 25:
3095 {
3096 valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
3097 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3098 }
3100 valimathrasportal->DespawnOrUnsummon(6 * IN_MILLISECONDS);
3102 break;
3103 case 26:
3104 {
3107 std::list<Creature*> HelperList;
3109 if (!HelperList.empty())
3110 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3111 (*itr)->DespawnOrUnsummon();
3113 break;
3114 }
3115 // Start COURTYARD_FIGHT
3116 case 27:
3117 FollowThrall();
3118 SetEscortPaused(false);
3119 bStepping = false;
3120 SetRun(true);
3124 JumpToNextStep(0);
3125 break;
3126 case 28:
3127 {
3128 EnableAttack = true;
3130 std::list<Creature*> HostileEndList;
3132 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_DOCTOR_H, 1000.0f);
3133 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_CHEMIST_H, 1000.0f);
3134 if (!HostileEndList.empty())
3135 for (std::list<Creature*>::iterator itr = HostileEndList.begin(); itr != HostileEndList.end(); itr++) (*itr)->SetFaction(FACTION_MONSTER);
3136 SpawnWave(4);
3138 break;
3139 }
3140 case 29:
3141 SpawnWave(4);
3143 break;
3144 case 30:
3145 SpawnWave(4);
3147 break;
3148 case 31:
3149 SpawnWave(4);
3151 break;
3152 case 32:
3153 SpawnWave(4);
3155 break;
3156 case 33:
3157 SpawnWave(4);
3159 break;
3160 case 34:
3161 SpawnWave(4);
3163 break;
3164 case 35:
3165 SpawnWave(4);
3167 break;
3168 case 36:
3169 SpawnWave(4);
3171 break;
3172 case 37:
3173 SpawnWave(4);
3175 break;
3176 case 38:
3177 SpawnWave(4);
3179 break;
3180 case 39:
3181 SpawnWave(4);
3183 break;
3184 case 40:
3185 SpawnWave(4);
3187 break;
3188 case 41:
3189 SpawnWave(4);
3191 break;
3192 case 42:
3193 SpawnWave(4);
3195 break;
3196 case 43:
3197 SpawnWave(4);
3199 break;
3200 case 44:
3201 SpawnWave(4);
3203 break;
3204 case 45:
3205 SpawnWave(5);
3206 bStepping = false;
3208 break;
3209 // End COURTYARD_FIGHT
3210 case 46:
3211 {
3212 FollowThrall();
3213 std::list<Creature*> HostileList;
3215 me->GetCreatureListWithEntryInGrid(HostileList, NPC_DOCTOR_H, 1000.0f);
3216 me->GetCreatureListWithEntryInGrid(HostileList, NPC_CHEMIST_H, 1000.0f);
3218 if (!HostileList.empty())
3219 for (std::list<Creature*>::iterator itr = HostileList.begin(); itr != HostileList.end(); itr++)
3220 (*itr)->DespawnOrUnsummon();
3221 for (uint8 i = 0; i < 7; ++i)
3222 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);
3223 SpawnWave(6);
3224 SetEscortPaused(false);
3225 bStepping = false;
3226 SetRun(false);
3228 break;
3229 }
3230 case 47:
3233 break;
3234 case 48:
3235 SetEscortPaused(false);
3236 bStepping = false;
3238 break;
3239 // Elevator Event
3240 case 49:
3243 break;
3244 case 50:
3246 sylvanas->AI()->Talk(SYLVANAS_SAY_ELEVATOR_1);
3248 break;
3249 case 51:
3252 SpawnWave(7);
3254 break;
3255 case 52:
3258 break;
3259 case 53:
3260 SpawnWave(8);
3261 me->GetMotionMaster()->MoveJump(ThrallSpawn[55].x, ThrallSpawn[55].y, ThrallSpawn[55].z, 40.0f, 40.0f, 0);
3263 sylvanas->GetMotionMaster()->MoveJump(ThrallSpawn[56].x, ThrallSpawn[56].y, ThrallSpawn[56].z, 40.0f, 40.0f, 0);
3265 break;
3266 case 54:
3267 FollowThrall();
3268 SetEscortPaused(false);
3269 bStepping = false;
3270 SetRun(false);
3272 break;
3273 // Top of Undercity Discussion
3274 case 55:
3276 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_1);
3278 break;
3279 case 56:
3281 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_2);
3283 break;
3284 case 57:
3287 break;
3288 case 58:
3290 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_3);
3292 break;
3293 // Top of Undercity - Fight
3294 case 59:
3295 SpawnWave(9);
3297 break;
3298 case 60:
3299 SpawnWave(9);
3301 break;
3302 case 61:
3303 SpawnWave(9);
3305 break;
3306 case 62:
3307 FollowThrall();
3308 SetEscortPaused(false);
3309 bStepping = false;
3310 SetRun(false);
3312 break;
3313 case 63:
3315 break;
3316 case 64:
3317 SpawnWave(10);
3319 break;
3320 case 65:
3321 SpawnWave(10);
3323 break;
3324 case 66:
3325 FollowThrall();
3326 SetEscortPaused(false);
3327 bStepping = false;
3328 SetRun(false);
3330 break;
3331 case 67:
3332 SpawnWave(11);
3334 break;
3335 case 68:
3336 SpawnWave(11);
3338 break;
3339 case 69:
3340 FollowThrall();
3341 SetEscortPaused(false);
3342 bStepping = false;
3343 SetRun(false);
3345 break;
3346 // KHANOK - Valimathtas Intro
3347 case 70:
3349 break;
3350 case 71:
3352 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_4);
3353 SpawnWave(12);
3355 break;
3356 case 72:
3358 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_0);
3360 break;
3361 case 73:
3363 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_1);
3364 SpawnWave(13);
3366 break;
3367 case 74:
3369 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3371 break;
3372 case 75:
3374 {
3375 valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
3376 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3377 }
3379 valimathrasportal->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3381 break;
3382 // KHANOK - Trashspawn
3383 case 76:
3384 SpawnWave(14);
3386 break;
3387 case 77:
3388 SpawnWave(15);
3390 break;
3391 case 78:
3392 SpawnWave(16);
3394 break;
3395 case 79:
3396 SpawnWave(14);
3398 break;
3399 case 80:
3400 SpawnWave(15);
3402 break;
3403 case 81:
3404 SpawnWave(16);
3406 break;
3407 case 82:
3408 SpawnWave(14);
3410 break;
3411 case 83:
3412 SpawnWave(15);
3414 break;
3415 case 84:
3416 SpawnWave(16);
3418 break;
3419 case 85:
3420 SpawnWave(14);
3422 break;
3423 case 86:
3424 SpawnWave(15);
3426 break;
3427 case 87:
3428 SpawnWave(16);
3430 break;
3431 case 88:
3432 SpawnWave(14);
3434 break;
3435 case 89:
3436 SpawnWave(15);
3438 break;
3439 case 90:
3440 SpawnWave(16);
3442 break;
3443 case 91:
3444 SpawnWave(14);
3446 break;
3447 case 92:
3448 SpawnWave(15);
3450 break;
3451 case 93:
3452 SpawnWave(16);
3454 break;
3455 case 94:
3456 // Spawn Boss 2 KHANOK
3457 SpawnWave(17);
3459 break;
3460 case 95:
3461 SpawnWave(14);
3463 break;
3464 case 96:
3465 SpawnWave(15);
3467 break;
3468 case 97:
3469 SpawnWave(16);
3471 bStepping = false;
3472 break;
3473 case 98:
3474 // KHANOK - Won
3477 break;
3478 case 99:
3479 SpawnWave(18);
3481 break;
3482 case 100:
3483 SpawnWave(18);
3485 break;
3486 case 101:
3487 SpawnWave(18);
3489 break;
3490 case 102:
3491 SpawnWave(18);
3493 break;
3494 case 103:
3495 SpawnWave(18);
3497 break;
3498 case 104:
3499 SpawnWave(18);
3501 break;
3502 case 105:
3503 SpawnWave(18);
3505 break;
3506 case 106:
3507 SpawnWave(18);
3509 break;
3510 case 107:
3511 SpawnWave(18);
3513 break;
3514 case 108:
3516 FollowThrall();
3517 SetEscortPaused(false);
3518 bStepping = false;
3519 SetRun(false);
3521 break;
3522 case 109:
3524 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_5);
3526 break;
3527 case 110:
3528 SpawnWave(19);
3530 break;
3531 case 111:
3532 FollowThrall();
3533 SetEscortPaused(false);
3534 bStepping = false;
3535 SetRun(true);
3537 break;
3538 case 112:
3540 break;
3541 case 113:
3544 break;
3545 case 114:
3549 break;
3550 case 115:
3551 {
3552 std::list<GameObject*> SaronitList;
3554 for (std::list<GameObject*>::const_iterator itr = SaronitList.begin(); itr != SaronitList.end(); ++itr)
3555 if (GameObject* saronit = (*itr))
3556 saronit->UseDoorOrButton();
3558 break;
3559 }
3560 case 116:
3563 FollowThrall();
3564 SetEscortPaused(false);
3565 bStepping = false;
3567 break;
3568 // Valimathras Intro
3569 case 117:
3572 break;
3573 case 118:
3575 {
3576 valimathras->AI()->Talk(SAY_THRONE_1);
3577 valimathras->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
3578 }
3580 break;
3581 case 119:
3582 SpawnWave(20);
3584 break;
3585 case 120:
3586 SpawnWave(21);
3588 break;
3589 case 121:
3592 valimathras->AI()->Talk(SAY_THRONE_2);
3594 break;
3595 case 122:
3596 SpawnWave(20);
3598 break;
3599 case 123:
3600 SpawnWave(21);
3602 break;
3603 case 124:
3606 valimathras->AI()->Talk(SAY_THRONE_3);
3608 break;
3609 case 125:
3610 SpawnWave(20);
3612 break;
3613 case 126:
3614 SpawnWave(21);
3616 break;
3617 case 127:
3620 valimathras->AI()->Talk(SAY_THRONE_4);
3622 break;
3623 case 128:
3624 SpawnWave(20);
3626 break;
3627 case 129:
3628 SpawnWave(21);
3630 break;
3631 case 130:
3634 valimathras->AI()->Talk(SAY_THRONE_5);
3636 break;
3637 case 131:
3638 SpawnWave(20);
3640 break;
3641 case 132:
3642 SpawnWave(21);
3644 break;
3645 case 133:
3648 valimathras->AI()->Talk(SAY_THRONE_6);
3650 break;
3651 case 134:
3652 SpawnWave(20);
3654 break;
3655 case 135:
3656 SpawnWave(21);
3658 break;
3659 case 136:
3662 break;
3663 // Valimathras Fight
3664 case 137:
3666 {
3667 valimathras->SetImmuneToAll(false);
3668 valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
3669 valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
3670 valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
3671 valimathras->AddThreat(me, 100.0f);
3672 me->AddThreat(valimathras, 100.0f);
3673 valimathras->AI()->AttackStart(me);
3674 }
3675 bStepping = false;
3677 break;
3678 // Valimathras Won
3679 case 138:
3682 break;
3683 case 139:
3686 break;
3687 case 140:
3688 SetEscortPaused(false);
3689 bStepping = false;
3691 break;
3692 case 141:
3694 break;
3695 case 142:
3697 me->SetFacingToObject(sylvanas);
3700 break;
3701 case 143:
3703 {
3704 sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f, true);
3705 sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
3706 }
3708 break;
3709 case 144:
3711 {
3712 sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
3713 me->SetFacingToObject(sylvanas);
3714 sylvanas->SetFacingToObject(me);
3716 }
3718 break;
3719 case 145:
3721 FollowThrall();
3722 SetEscortPaused(false);
3723 bStepping = false;
3725 break;
3726 case 146:
3729 break;
3730 case 147:
3731 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3732 {
3734 {
3735 allianceForcesGUID[i] = temp->GetGUID();
3736 temp->SetImmuneToAll(true);
3737 temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
3738 temp->SetReactState(REACT_PASSIVE);
3739 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3740 }
3741 }
3742 if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3743 {
3744 WrynnGUID = wrynn->GetGUID();
3745 wrynn->SetImmuneToAll(true);
3746 wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3747 wrynn->SetReactState(REACT_PASSIVE);
3748 wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f, true);
3749 }
3750 if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3751 {
3752 JainaGUID = jaina->GetGUID();
3753 jaina->SetImmuneToAll(true);
3754 jaina->SetReactState(REACT_PASSIVE);
3755 }
3757 break;
3758 // Wrynn Intro
3759 case 148:
3761 wrynn->AI()->Talk(WRYNN_SAY_THRONE_5);
3763 break;
3764 case 149:
3766 wrynn->AI()->Talk(WRYNN_SAY_THRONE_6);
3768 break;
3769 case 150:
3771 wrynn->AI()->Talk(WRYNN_SAY_THRONE_7);
3773 break;
3774 case 151:
3776 wrynn->AI()->Talk(WRYNN_SAY_THRONE_8);
3778 break;
3779 // Wrynn Fight
3780 case 152:
3781 me->SetImmuneToAll(false);
3783 {
3784 wrynn->SetImmuneToNPC(false);
3785 wrynn->SetImmuneToPC(true);
3786 wrynn->SetReactState(REACT_AGGRESSIVE);
3787 wrynn->AddThreat(me, 100.0f);
3788 me->AddThreat(wrynn, 100.0f);
3789 wrynn->AI()->AttackStart(me);
3790 }
3791
3792 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3793 {
3795 {
3796 temp->SetImmuneToAll(false);
3797 temp->SetReactState(REACT_AGGRESSIVE);
3798 temp->AddThreat(me, 100.0f);
3799 temp->AI()->AttackStart(me);
3800 }
3801 }
3803 break;
3804 case 153:
3806 {
3807 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
3808 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
3809 }
3811 break;
3812 case 154:
3814 {
3815 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
3816 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
3817 }
3819 break;
3820 case 155:
3821 {
3822 std::list<Creature*> HelperList;
3823 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
3824 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
3825 me->GetCreatureListWithEntryInGrid(HelperList, NPC_WRYNN, 100.0f);
3826 if (!HelperList.empty())
3827 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3828 (*itr)->DespawnOrUnsummon();
3830 break;
3831 }
3832 case 156:
3834 SetEscortPaused(false);
3835 bStepping = false;
3837 break;
3838 case 157:
3842 break;
3843 // Ending
3844 case 158:
3845 if (Creature* saurfang = me->SummonCreature(NPC_OVERLORD_SAURFANG, 1297.574f, 347.154f, -65.027f, TEMPSUMMON_MANUAL_DESPAWN))
3846 {
3847 SaurfangGUID = saurfang->GetGUID();
3848 saurfang->SetWalk(true);
3849 saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f, true);
3850 }
3852 break;
3853 case 159:
3855 {
3856 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_1);
3857 saurfang->SetStandState(UNIT_STAND_STATE_SIT);
3858 }
3860 break;
3861 case 160:
3863 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_2);
3865 break;
3866 case 161:
3868 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_3);
3869 if (Map* map = me->GetMap())
3870 {
3871 Map::PlayerList const& PlayerList = map->GetPlayers();
3872 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
3873 {
3874 if (Player* player = i->GetSource())
3875 {
3876 if (me->IsInRange(player, 0.0f, 50.0f))
3877 {
3878 if (player->GetTeamId() == TEAM_HORDE)
3879 {
3880 player->RemoveAura(SPELL_SYLVANAS_BUFF);
3881 player->RemoveAura(SPELL_THRALL_BUFF);
3882 player->CompleteQuest(QUEST_BATTLE_H);
3883 player->CastSpell(player, SPELL_PHASING_HORDE);
3884 }
3885 }
3886 }
3887 }
3888 }
3890 break;
3891 case 162:
3894 break;
3895 case 163:
3902 std::list<Creature*> HelperList;
3903 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
3905 if (!HelperList.empty())
3906 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3907 (*itr)->DespawnOrUnsummon(120 * IN_MILLISECONDS);
3909 bStepping = false;
3911 break;
3912 }
3913 }
3914 else phaseTimer -= diff;
3915 }
3916
3917 if (!UpdateVictim())
3918 return;
3919
3920 _events.Update(diff);
3921
3923 return;
3924
3925 while (uint32 eventId = _events.ExecuteEvent())
3926 {
3927 switch (eventId)
3928 {
3932 break;
3933 case EVENT_LAVA_BURST:
3936 break;
3937 case EVENT_THUNDER:
3940 break;
3942 if (me->GetVictim())
3944 sylvanas->AI()->AttackStart(me->GetVictim());
3946 break;
3947 case EVENT_THRALL_BUFF:
3950 break;
3951 default:
3952 break;
3953 }
3954 }
3955
3957 }
std::uint32_t uint32
Definition: Define.h:108
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &list, WorldObject *source, uint32 entry, float maxSearchRange)
Definition: ScriptedCreature.cpp:780
@ REACT_PASSIVE
Definition: Unit.h:1023
@ 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:397
@ NPC_WRYNN
Definition: zone_undercity.cpp:368
@ WRYNN_SAY_THRONE_6
Definition: zone_undercity.cpp:398
@ WRYNN_SAY_THRONE_8
Definition: zone_undercity.cpp:400
@ WRYNN_SAY_THRONE_7
Definition: zone_undercity.cpp:399
@ JAINA_SAY_THRONE_2
Definition: zone_undercity.cpp:424
@ JAINA_SAY_THRONE_3
Definition: zone_undercity.cpp:425
@ NPC_JAINA
Definition: zone_undercity.cpp:418
@ SPELL_DEEPFREEZE
Definition: zone_undercity.cpp:431
@ NPC_SW_SOLDIER
Definition: zone_undercity.cpp:678
@ NPC_HORDE_GUARD
Definition: zone_undercity.cpp:680
@ SAY_PUTRESS_ANGER
Definition: zone_undercity.cpp:701
@ SAY_BURN_UC
Definition: zone_undercity.cpp:700
@ SYLVANAS_SAY_SANCTUM_4
Definition: zone_undercity.cpp:557
@ SPELL_LEAP_TO_PLATFORM
Definition: zone_undercity.cpp:564
@ SYLVANAS_SAY_SANCTUM_3
Definition: zone_undercity.cpp:556
@ SYLVANAS_SAY_THRONE_1
Definition: zone_undercity.cpp:559
@ SYLVANAS_SAY_SANCTUM_1
Definition: zone_undercity.cpp:554
@ SYLVANAS_SAY_SANCTUM_2
Definition: zone_undercity.cpp:555
@ SYLVANAS_SAY_SANCTUM_5
Definition: zone_undercity.cpp:558
@ NPC_SYLVANAS
Definition: zone_undercity.cpp:549
@ SYLVANAS_SAY_ELEVATOR_1
Definition: zone_undercity.cpp:553
@ SPELL_PHASING_HORDE
Definition: zone_undercity.cpp:710
@ ALLIANCE_FORCE_MAXCOUNT
Definition: zone_undercity.cpp:718
@ QUEST_BATTLE_H
Definition: zone_undercity.cpp:708
@ SAY_SAURFANG_ARRIVAL_2
Definition: zone_undercity.cpp:578
@ SAY_SAURFANG_ARRIVAL_3
Definition: zone_undercity.cpp:579
@ SAY_SAURFANG_ARRIVAL_1
Definition: zone_undercity.cpp:577
static LocationXYZO AllianceSpawn[]
Definition: zone_undercity.cpp:755
@ WORLD_STATE_BATTLE_START_H
Definition: zone_undercity.cpp:739
@ WORLD_STATE_BATTLE_COUNTDOWN_H
Definition: zone_undercity.cpp:738
@ SAY_VALIMATHRAS_ATTACK
Definition: zone_undercity.cpp:655
@ SAY_THRONE_2
Definition: zone_undercity.cpp:650
@ SAY_THRONE_1
Definition: zone_undercity.cpp:649
@ SAY_VALIMATHRAS_INTRO_1
Definition: zone_undercity.cpp:644
@ SAY_VALIMATHRAS_INTRO_2
Definition: zone_undercity.cpp:645
@ SAY_THRONE_6
Definition: zone_undercity.cpp:654
@ SAY_VALIMATHRAS_INTRO_0
Definition: zone_undercity.cpp:643
@ SAY_VALIMATHRAS_INNER_SANKTUM_0
Definition: zone_undercity.cpp:646
@ SAY_THRONE_5
Definition: zone_undercity.cpp:653
@ SAY_VALIMATHRAS_INNER_SANKTUM_1
Definition: zone_undercity.cpp:647
@ SAY_THRONE_4
Definition: zone_undercity.cpp:652
@ SAY_THRONE_3
Definition: zone_undercity.cpp:651
@ THRALL_SAY_THRONE_11
Definition: zone_undercity.cpp:489
@ NPC_SLINGER_TRIGGER
Definition: zone_undercity.cpp:531
@ THRALL_SAY_COURTYARD_5
Definition: zone_undercity.cpp:468
@ THRALL_SAY_THRONE_2
Definition: zone_undercity.cpp:480
@ THRALL_SAY_THRONE_4
Definition: zone_undercity.cpp:482
@ THRALL_SAY_SANCTUM_6
Definition: zone_undercity.cpp:477
@ THRALL_SAY_PREP_1
Definition: zone_undercity.cpp:456
@ SPELL_CALL_OF_AIR
Definition: zone_undercity.cpp:501
@ THRALL_SAY_PREP_6
Definition: zone_undercity.cpp:461
@ THRALL_SAY_ELEVATOR_1
Definition: zone_undercity.cpp:469
@ THRALL_SAY_COURTYARD_3
Definition: zone_undercity.cpp:466
@ THRALL_SAY_THRONE_9
Definition: zone_undercity.cpp:487
@ THRALL_SAY_THRONE_7
Definition: zone_undercity.cpp:485
@ THRALL_SAY_SANCTUM_4
Definition: zone_undercity.cpp:475
@ SPELL_LAVA_BURST
Definition: zone_undercity.cpp:514
@ THRALL_SAY_COURTYARD_1
Definition: zone_undercity.cpp:464
@ THRALL_SAY_PREP_5
Definition: zone_undercity.cpp:460
@ GO_HORDE_BANNER
Definition: zone_undercity.cpp:539
@ THRALL_SAY_SANCTUM_3
Definition: zone_undercity.cpp:474
@ SPELL_CALL_OF_EARTH
Definition: zone_undercity.cpp:503
@ THRALL_SAY_THRONE_1
Definition: zone_undercity.cpp:479
@ THRALL_SAY_PREP_7
Definition: zone_undercity.cpp:462
@ THRALL_SAY_SANCTUM_5
Definition: zone_undercity.cpp:476
@ THRALL_SAY_COURTYARD_4
Definition: zone_undercity.cpp:467
@ THRALL_SAY_PREP_3
Definition: zone_undercity.cpp:458
@ SPELL_TIDAL_WAVE_SUMMON
Definition: zone_undercity.cpp:498
@ THRALL_SAY_PREP_8
Definition: zone_undercity.cpp:463
@ THRALL_SAY_ELEVATOR_2
Definition: zone_undercity.cpp:470
@ THRALL_SAY_ELEVATOR_3
Definition: zone_undercity.cpp:471
@ THRALL_SAY_THRONE_3
Definition: zone_undercity.cpp:481
@ THRALL_SAY_PREP_4
Definition: zone_undercity.cpp:459
@ THRALL_SAY_THRONE_5
Definition: zone_undercity.cpp:483
@ THRALL_SAY_SANCTUM_7
Definition: zone_undercity.cpp:478
@ THRALL_SAY_PREP_2
Definition: zone_undercity.cpp:457
@ THRALL_SAY_THRONE_10
Definition: zone_undercity.cpp:488
@ SPELL_CHAIN_LIGHTNING
Definition: zone_undercity.cpp:513
@ THRALL_SAY_THRONE_6
Definition: zone_undercity.cpp:484
@ THRALL_SAY_SANCTUM_2
Definition: zone_undercity.cpp:473
@ NPC_PLAGUE_TRIGGER
Definition: zone_undercity.cpp:534
@ NPC_OVERLORD_SAURFANG
Definition: zone_undercity.cpp:532
@ SPELL_THUNDER
Definition: zone_undercity.cpp:515
@ THRALL_SAY_COURTYARD_2
Definition: zone_undercity.cpp:465
static LocationXYZO AllianceWP[]
Definition: zone_undercity.cpp:790
Talk
Definition: boss_fathomlord_karathress.cpp:23
@ EMOTE_ONESHOT_SALUTE
Definition: SharedDefines.h:1914
@ TEAM_HORDE
Definition: SharedDefines.h:733
@ FACTION_MONSTER
Definition: SharedDefines.h:167
Definition: LinkedList.h:139
uint32 ExecuteEvent()
Definition: EventMap.cpp:114
void Update(uint32 time)
Definition: EventMap.h:54
void DoMeleeAttackIfReady()
Definition: UnitAI.cpp:40
SpellCastResult DoCastVictim(uint32 spellId, bool triggered=false)
Definition: UnitAI.cpp:241
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:178
bool UpdateVictim()
Definition: CreatureAI.cpp:269
void UpdateAI(uint32 diff) override
Definition: ScriptedEscortAI.cpp:241
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition: Creature.cpp:2108
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:1046
void Dismount()
Definition: Unit.cpp:13435
void SetFacingToObject(WorldObject *object)
Definition: Unit.cpp:20792
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:1386
bool HasUnitState(const uint32 f) const
Definition: Unit.h:1398
void HandleEmoteCommand(uint32 emoteId)
Definition: Unit.cpp:1970
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition: Unit.h:1678
Definition: Map.h:312
Definition: MapRefMgr.h:26
iterator begin()
Definition: MapRefMgr.h:36
iterator end()
Definition: MapRefMgr.h:37
void ActivateValimathrasPortal()
Definition: zone_undercity.cpp:2567
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition: zone_undercity.cpp:2339
void JumpToNextStep(uint32 uiTimer)
Definition: zone_undercity.cpp:2549
void SpawnWave(uint32 waveId)
Definition: zone_undercity.cpp:2576

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
2531 {
2532 Map::PlayerList const& players = map->GetPlayers();
2533
2534 if (!players.IsEmpty())
2535 {
2536 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2537 {
2538 if (Player* player = itr->GetSource())
2539 player->SendUpdateWorldState(id, state);
2540 }
2541 }
2542 }
bool IsEmpty() const
Definition: LinkedList.h:97
PlayerList const & GetPlayers() const
Definition: Map.h:484

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.

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

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().