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
 Use to start attacking a target. Called just before JustEngagedWith()
 
virtual void WaypointReached (uint32, uint32)
 
- 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
 
bool IsEscortNPC (bool=true) const override
 
void ReturnToLastPoint ()
 
void JustExitedCombat () override
 Called when the unit leaves combat.
 
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 WaypointStart (uint32)
 
void Start (bool isActiveAttacker=true, ObjectGuid playerGUID=ObjectGuid::Empty, Quest const *quest=nullptr, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=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
 Called at any Damage from any attacker (before damage apply)
 
void UpdateAI (uint32 diff) override
 Use to start attacking a target. Called just before JustEngagedWith()
 
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 (Position const *pos, Axis axis, bool above)
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged - this happens after JustEnteredCombat.
 
void AttackStart (Unit *) override
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoRewardPlayersInArea ()
 
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 DoTeleportPlayer (Unit *unit, Position pos)
 
void DoTeleportAll (float x, float y, float z, float o)
 
Unit * DoSelectLowestHpFriendly (float range, uint32 minHPDiff=1)
 
std::list< Creature * > DoFindFriendlyCC (float range)
 
std::list< Creature * > DoFindFriendlyMissingBuff (float range, uint32 spellId)
 
Player * GetPlayerAtMinimumRange (float minRange)
 
Creature * DoSpawnCreature (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=0ms, uint32 uniqueId=0)
 
void ScheduleTimedEvent (Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0ms, 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)
 
virtual bool CheckEvadeIfOutOfCombatArea () const
 
bool IsHeroic () const
 
Difficulty GetDifficulty () const
 
bool Is25ManRaid () const
 
template<class T >
T const & DUNGEON_MODE (T const &normal5, T const &heroic10) const
 
template<class T >
T const & RAID_MODE (T const &normal10, T const &normal25) const
 
template<class T >
T const & RAID_MODE (T const &normal10, T const &normal25, T const &heroic10, T const &heroic25) const
 
Player * SelectTargetFromPlayerList (float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
 
void SetInvincibility (bool apply)
 
bool IsInvincible () const
 
void SetAutoAttackAllowed (bool allow)
 
bool IsAutoAttackAllowed () const
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr, Milliseconds delay=0ms)
 Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
 
void Talk (uint8 id, Milliseconds delay)
 
WorldObject * GetSummoner () const
 Returns the summoner creature/object, if the creature is a temporary summon.
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
bool IsEngaged () const
 Check if creature is currently engaged in combat.
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
void JustEnteredCombat (Unit *who) override
 Called when the unit enters combat.
 
virtual void JustStartedThreateningMe (Unit *who)
 
void EngagementStart (Unit *who)
 
void EngagementOver ()
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDespawnAll ()
 
virtual void SummonedCreatureEvade (Creature *)
 
virtual void OnSpellStart (SpellInfo const *)
 
virtual void OnSpellCast (SpellInfo const *)
 
virtual void OnSpellFailed (SpellInfo const *)
 
virtual void OnChannelFinished (SpellInfo const *)
 
virtual void AttackedBy (Unit *)
 
virtual void PathEndReached (uint32)
 
virtual void WaypointPathStarted (uint32)
 == Waypoints system =============================
 
virtual void WaypointStarted (uint32, uint32)
 
virtual void WaypointPathEnded (uint32, uint32)
 
void OnCharmed (bool apply) override
 Called when unit is charmed.
 
virtual void JustReachedHome ()
 
void DoZoneInCombat (Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *attacker)
 
virtual void OwnerAttacked (Unit *target)
 
void OnOwnerCombatInteraction (Unit *target)
 
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 ()
 
int32 VisualizeBoundary (uint32 duration, Unit *owner=nullptr, bool fill=false, bool checkZ=false) const
 
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 *)
 
virtual void OnAuraRemove (AuraApplication *, AuraRemoveMode)
 
virtual void DistancingStarted ()
 
virtual void DistancingEnded ()
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual void InitializeAI ()
 
virtual void DoAction (int32)
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual void SetGUID (ObjectGuid const &, int32=0)
 
virtual ObjectGuid GetGUID (int32=0) const
 
Unit * SelectTarget (SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
Unit * SelectTarget (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)
 Select the best (up to) <num> targets (in <targetType> order) from the threat list that fulfill the following:
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
virtual void OnDespawn ()
 Called when the unit is about to be removed from the world (despawn, grid unload, corpse disappearing, player logging out etc.)
 
virtual void EvadeTimerExpired ()
 Called when evade timer expires (target unreachable for too long)
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 Called at any Damage to any victim (before damage apply)
 
virtual void HealReceived (Unit *, uint32 &)
 Called when the creature receives heal.
 
virtual void OnPowerUpdate (Powers, int32, int32, uint32)
 Called when the creature power updates.
 
virtual void HealDone (Unit *, uint32 &)
 Called when the unit heals.
 
virtual void OnCalculateMeleeDamageReceived (uint32 &, Unit *)
 Called during damage calculations.
 
virtual void OnCalculateSpellDamageReceived (int32 &, Unit *)
 
virtual void OnCalculatePeriodicTickReceived (uint32 &, Unit *)
 Called during calculation when receiving periodic healing or damage (DoT or HoT)
 
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)
 To specify the caster as target if the spell is self-cast.
 
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, bool withTank=true, int32 aura=0)
 Cast the spell on a random unit from the threat list.
 
SpellCastResult DoCastMaxThreat (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 Cast spell on the top threat target, which may not 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)
 Called when a summon reaches a waypoint or point movement finished.
 
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
Creature * me
 

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 AISpellInfoType * AISpellInfo
 
- Protected Member Functions inherited from npc_escortAI
Player * GetPlayerForEscort ()
 
- Protected Member Functions inherited from CreatureAI
bool UpdateVictim ()
 
bool UpdateVictimWithGaze ()
 
void SetGazeOn (Unit *target)
 
Creature * DoSummon (uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
Creature * DoSummon (uint32 entry, WorldObject *obj, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
Creature * DoSummonFlyer (uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
bool _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
- Protected Attributes inherited from CreatureAI
Creature *const me
 
EventMap events
 
TaskScheduler scheduler
 
CreatureBoundary const * _boundary
 
bool _negateBoundary
 
bool _isEngaged
 
- 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
2230 : npc_escortAI(creature)
2231 {
2232 hordeGuardsGUID.clear();
2233 }
Definition ScriptedEscortAI.h:53
GuidVector hordeGuardsGUID
Definition zone_undercity.cpp:2248

References hordeGuardsGUID.

Member Function Documentation

◆ ActivateValimathrasPortal()

void npc_thrall_bfu::npc_thrall_bfuAI::ActivateValimathrasPortal ( )
inline
2476 {
2477 if (Creature* portal = me->FindNearestCreature(NPC_VARIMATHRAS_PORTAL, 500.0f))
2478 {
2479 portal->SummonCreature(NPC_LEGION_OVERLORD, ThrallSpawn[81].x + rand32() % 5, ThrallSpawn[81].y + rand32() % 5, ThrallSpawn[81].z, TEMPSUMMON_DEAD_DESPAWN);
2480 portal->DespawnOrUnsummon();
2481 }
2482 }
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:56
uint32 rand32()
Definition Random.cpp:80
Definition Creature.h:47
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2565
Creature * me
Definition ScriptedCreature.h:292
@ NPC_LEGION_OVERLORD
Definition zone_undercity.cpp:630
@ NPC_VARIMATHRAS_PORTAL
Definition zone_undercity.cpp:575
static LocationXYZO ThrallSpawn[]
Definition zone_undercity.cpp:719

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.

2856 {
2857 return victim->GetEntry() != NPC_BLIGHT_SLINGER;
2858 }
@ NPC_BLIGHT_SLINGER
Definition zone_undercity.cpp:627

References Object::GetEntry(), and NPC_BLIGHT_SLINGER.

◆ EnterEvadeMode()

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

Reimplemented from npc_escortAI.

2253 {
2256 me->CombatStop(true);
2257 me->SetLootRecipient(nullptr);
2258
2260 {
2263 }
2264 else
2265 {
2267 Reset();
2268 }
2269 }
@ STATE_ESCORT_ESCORTING
Definition ScriptedEscortAI.h:47
@ STATE_ESCORT_RETURNING
Definition ScriptedEscortAI.h:48
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition Creature.cpp:1323
void MoveTargetedHome(bool walk=false)
The unit will return this initial position (owner for pets and summoned creatures)....
Definition MotionMaster.cpp:262
void ClearAllThreat()
Definition ThreatManager.cpp:617
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4830
MotionMaster * GetMotionMaster()
Definition Unit.h:1774
void CombatStop(bool includingCast=false, bool mutualPvP=true, bool keepPvPForOthers=false)
Definition Unit.cpp:7303
ThreatManager & GetThreatMgr()
Definition Unit.h:965
bool HasEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:102
void AddEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:114
void ReturnToLastPoint()
Definition ScriptedEscortAI.cpp:185
void Reset() override
Definition zone_undercity.cpp:2271
@ SPELL_HEROIC_VANGUARD
Definition zone_undercity.cpp:451

References npc_escortAI::AddEscortState(), ThreatManager::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
2464 {
2466 {
2467 sylvanas->GetMotionMaster()->Clear();
2468 sylvanas->SetImmuneToAll(false);
2469 sylvanas->SetReactState(REACT_AGGRESSIVE);
2470 sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
2471 sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
2472 }
2473 }
@ FACTION_ESCORT_N_NEUTRAL_ACTIVE
Definition ScriptSystem.h:37
@ REACT_AGGRESSIVE
Definition Unit.h:576
Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:234
ObjectGuid sylvanasfollowGUID
Definition zone_undercity.cpp:2241

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
2458 {
2459 phaseTimer = uiTimer;
2460 ++step;
2461 }
uint32 phaseTimer
Definition zone_undercity.cpp:2239
uint32 step
Definition zone_undercity.cpp:2238

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

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

Reimplemented from CreatureAI.

2332 {
2333 switch (summoned->GetEntry())
2334 {
2336 summoned->SetHomePosition(me->GetPosition());
2337 summoned->AddThreat(me, 100.0f);
2338 break;
2342 break;
2345 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2347 break;
2348 case NPC_CAVE_DUMMY:
2350 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2352 summoned->AddAura(SPELL_CYCLONE_FALL, summoned);
2353 break;
2355 case NPC_DOCTOR_H:
2356 case NPC_CHEMIST_H:
2359 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2361 if (!EnableAttack)
2362 summoned->SetFaction(FACTION_FRIENDLY);
2363 summoned->AddThreat(me, 100.0f);
2364 me->AddThreat(summoned, 100.0f);
2365 summoned->AI()->AttackStart(me);
2366 break;
2367 case NPC_LEGION_INVADER:
2370 case NPC_DREADLORD:
2371 case NPC_BETRAYER_H:
2372 case NPC_FELBEAST_H:
2375 summoned->AddThreat(me, 100.0f);
2376 me->AddThreat(summoned, 100.0f);
2377 summoned->AI()->AttackStart(me);
2378 break;
2379 case NPC_KHANOK:
2380 summoned->SetHomePosition(me->GetPosition());
2381 summoned->AddThreat(me, 100.0f);
2382 summoned->AI()->AttackStart(me);
2383 default:
2384 break;
2385 }
2386 }
@ EMOTE_STATE_READY2H
Definition SharedDefines.h:1974
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition SharedDefines.h:910
@ SPELL_EFFECT_KNOCK_BACK
Definition SharedDefines.h:864
@ IMMUNITY_EFFECT
Definition SharedDefines.h:1398
@ IMMUNITY_ID
Definition SharedDefines.h:1404
@ FACTION_FRIENDLY
Definition SharedDefines.h:189
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:282
@ UNIT_NPC_EMOTESTATE
Definition UpdateFields.h:140
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:347
CreatureAI * AI() const
Definition Creature.h:143
uint32 GetEntry() const
Definition Object.h:123
virtual void AttackStart(Unit *)
Definition UnitAI.cpp:29
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition Unit.cpp:10247
void SetFaction(uint32 faction)
Definition Unit.cpp:6886
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition Unit.cpp:11268
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:14825
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:17078
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:754
void GetPosition(float &x, float &y) const
Definition Position.h:126
bool EnableAttack
Definition zone_undercity.cpp:2236
@ NPC_DOCTOR_H
Definition zone_undercity.cpp:625
@ NPC_BETRAYER_H
Definition zone_undercity.cpp:622
@ NPC_DREADLORD
Definition zone_undercity.cpp:606
@ NPC_FELBEAST_H
Definition zone_undercity.cpp:620
@ NPC_LEGION_DREADWHISPER
Definition zone_undercity.cpp:632
@ NPC_CHEMIST_H
Definition zone_undercity.cpp:623
@ NPC_LEGION_INVADER
Definition zone_undercity.cpp:631
@ NPC_TREACHEROUS_GUARDIAN_H
Definition zone_undercity.cpp:618
@ NPC_FELGUARD_MORADEUR
Definition zone_undercity.cpp:629
@ NPC_KHANOK
Definition zone_undercity.cpp:568
@ SPELL_SYLVANAS_BUFF
Definition zone_undercity.cpp:497
@ NPC_BLIGHT_ABBERATION
Definition zone_undercity.cpp:470
@ NPC_CAVE_DUMMY
Definition zone_undercity.cpp:465
@ NPC_WARSONG_BATTLEGUARD
Definition zone_undercity.cpp:461
@ SPELL_CYCLONE_FALL
Definition zone_undercity.cpp:437
@ SPELL_THRALL_BUFF
Definition zone_undercity.cpp:431

References Unit::AddAura(), Unit::AddThreat(), Creature::AI(), Unit::ApplySpellImmune(), UnitAI::AttackStart(), EMOTE_STATE_READY2H, EnableAttack, FACTION_FRIENDLY, Object::GetEntry(), Position::GetPosition(), 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_KHANOK, NPC_LEGION_DREADWHISPER, NPC_LEGION_INVADER, NPC_TREACHEROUS_GUARDIAN_H, NPC_VARIMATHRAS_PORTAL, NPC_WARSONG_BATTLEGUARD, Unit::SetFaction(), Creature::SetHomePosition(), Unit::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 UnitAI.

2272 {
2274 {
2277 me->SetCorpseDelay(1);
2278 me->SetRespawnTime(1);
2281
2282 bStepping = false;
2283 EnableAttack = false;
2284 step = 0;
2285 phaseTimer = 0;
2292
2294 {
2295 valimathras->DespawnOrUnsummon();
2297 }
2298
2300 {
2301 valimathrasportal->DespawnOrUnsummon();
2303 }
2304
2306 {
2307 wrynn->DespawnOrUnsummon();
2308 WrynnGUID.Clear();
2309 }
2310
2312 {
2313 jaina->DespawnOrUnsummon();
2314 JainaGUID.Clear();
2315 }
2316
2318 {
2319 saurfang->DespawnOrUnsummon();
2321 }
2322
2323 for (ObjectGuid const& guid : hordeGuardsGUID)
2324 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
2325 temp->DespawnOrUnsummon();
2326
2327 hordeGuardsGUID.clear();
2328 }
2329 }
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:35
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:322
void SetRespawnTime(uint32 respawn)
Definition Creature.cpp:3897
void SetCorpseDelay(uint32 delay)
Definition Creature.h:73
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:48
Definition ObjectGuid.h:121
void Clear()
Definition ObjectGuid.h:141
void Mount(uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
Definition Unit.cpp:10303
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:770
void SetStandState(uint8 state)
Definition Unit.cpp:12801
Definition ObjectAccessor.h:61
bool bStepping
Definition zone_undercity.cpp:2235
ObjectGuid ValimathrasGUID
Definition zone_undercity.cpp:2243
ObjectGuid ValimathrasPortalGUID
Definition zone_undercity.cpp:2244
ObjectGuid SaurfangGUID
Definition zone_undercity.cpp:2247
ObjectGuid JainaGUID
Definition zone_undercity.cpp:2246
EventMap _events
Definition zone_undercity.cpp:2250
ObjectGuid WrynnGUID
Definition zone_undercity.cpp:2245
@ EVENT_CHAIN_LIGHTNING
Definition zone_undercity.cpp:454
@ EVENT_THRALL_BUFF
Definition zone_undercity.cpp:458
@ EVENT_AGGRO_SYLVANAS
Definition zone_undercity.cpp:457
@ MODEL_WHITE_WULF
Definition zone_undercity.cpp:478
@ EVENT_THUNDER
Definition zone_undercity.cpp:456
@ EVENT_LAVA_BURST
Definition zone_undercity.cpp:455

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
2453 {
2454 SetEscortPaused(bOnHold);
2455 }
void SetEscortPaused(bool on)
Definition ScriptedEscortAI.cpp:495

References npc_escortAI::SetEscortPaused().

Referenced by WaypointReached().

◆ SpawnWave()

void npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave ( uint32  waveId)
inline
2485 {
2486 switch (waveId)
2487 {
2488 case 0: // Vortex
2490 whirlwind1->GetMotionMaster()->MoveWaypoint(NPC_WHIRLWIND * 10, false);
2492 whirlwind2->GetMotionMaster()->MoveWaypoint(NPC_WHIRLWIND * 100, false);
2493 break;
2494 case 1:
2495 // BATTLING_COURTYARD Initial Spawn
2496 for (uint8 i = 0; i < 3; ++i)
2498 for (uint8 i = 0; i < 9; ++i)
2500 for (uint8 i = 0; i < 6; ++i)
2502 for (uint8 i = 0; i < 4; ++i)
2504 break;
2505 case 2:
2506 // Valimathras
2508 {
2509 ValimathrasGUID = temp->GetGUID();
2510 temp->SetImmuneToAll(true);
2511 }
2512 break;
2513 case 3:
2515 ValimathrasPortalGUID = temp->GetGUID();
2516 break;
2517 case 4:
2518 // COURTYARD_FIGHT Spawns
2519 for (uint8 i = 0; i < WAVE_COURTYARD_FIGHT; ++i)
2520 {
2521 switch (urand(0, 2))
2522 {
2523 case 0:
2525 break;
2526 case 1:
2528 break;
2529 case 2:
2531 break;
2532 }
2533 }
2534 break;
2535 case 5:
2536 // Bossspawn 1
2538 {
2539 me->AddThreat(temp, 100.0f);
2540 me->AI()->AttackStart(temp);
2541 }
2542 break;
2543 case 6:
2544 // COURTYARD_DONE Spawn
2546 {
2547 hordeGuardsGUID.push_back(temp->GetGUID());
2548 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
2549 }
2551 {
2552 hordeGuardsGUID.push_back(temp->GetGUID());
2553 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
2554 }
2556 {
2557 hordeGuardsGUID.push_back(temp->GetGUID());
2558 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
2559 }
2561 {
2562 hordeGuardsGUID.push_back(temp->GetGUID());
2563 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
2564 }
2565 for (uint8 i = 0; i < 2; ++i)
2567 hordeGuardsGUID.push_back(temp->GetGUID());
2568 break;
2569 case 7:
2570 for (uint8 i = 0; i < 9; ++i)
2572 break;
2573 case 8:
2574 for (uint8 i = 0; i < 2; ++i)
2576 hordeGuardsGUID.push_back(temp->GetGUID());
2577 break;
2578 case 9:
2579 // Top of Undercity - Attacktrashpack
2580 for (uint8 i = 0; i < 3; ++i)
2581 {
2582 switch (urand(0, 2))
2583 {
2584 case 0:
2586 break;
2587 case 1:
2589 break;
2590 case 2:
2592 break;
2593 }
2594 }
2595 break;
2596 case 10:
2597 // Top of Undercity - Attacktrashpack
2598 for (uint8 i = 0; i < 3; ++i)
2599 {
2600 switch (urand(0, 1))
2601 {
2602 case 0:
2604 break;
2605 case 1:
2607 break;
2608 }
2609 }
2610 break;
2611 case 11:
2612 // Bottom of Undercity - Attacktrashpack
2613 for (uint8 i = 0; i < 3; ++i)
2614 {
2615 switch (urand(0, 1))
2616 {
2617 case 0:
2619 break;
2620 case 1:
2622 break;
2623 }
2624 }
2625 break;
2626 case 12:
2627 // Valimathras 2
2629 {
2630 ValimathrasGUID = temp->GetGUID();
2631 temp->SetImmuneToAll(true);
2632 }
2633 break;
2634 case 13:
2636 ValimathrasPortalGUID = temp->GetGUID();
2637 break;
2638 // NPC_KHANOK - Inner Sunktum Spawn Left
2639 case 14:
2640 for (uint8 i = 0; i < 4; ++i)
2641 {
2642 switch (urand(0, 6))
2643 {
2644 case 0:
2646 break;
2647 case 1:
2649 break;
2650 case 2:
2652 break;
2653 case 3:
2655 break;
2656 case 4:
2658 break;
2659 case 5:
2661 break;
2662 case 6:
2664 break;
2665 }
2666 }
2667 break;
2668 // NPC_KHANOK - Inner Sunktum Spawn Right
2669 case 15:
2670 for (uint8 i = 0; i < 4; ++i)
2671 {
2672 switch (urand(0, 6))
2673 {
2674 case 0:
2676 break;
2677 case 1:
2679 break;
2680 case 2:
2682 break;
2683 case 3:
2685 break;
2686 case 4:
2688 break;
2689 case 5:
2691 break;
2692 case 6:
2694 break;
2695 }
2696 }
2697 break;
2698 // NPC_KHANOK - Inner Sunktum Spawn Top
2699 case 16:
2701 break;
2702 // NPC_KHANOK - Inner Sunktum Spawn Middle
2703 case 17:
2705 {
2706 me->AddThreat(temp, 100.0f);
2707 me->AI()->AttackStart(temp);
2708 }
2709 break;
2710 case 18:
2712 {
2713 hordeGuardsGUID.push_back(temp->GetGUID());
2714 temp->AI()->Talk(SAY_FOR_THE_HORDE);
2715 temp->GetMotionMaster()->MoveWaypoint(NPC_WARSONG_BATTLEGUARD * 100, false);
2716 }
2717 break;
2718 // Valimathras Room Preparation
2719 case 19:
2720 for (uint8 i = 0; i < 3; ++i)
2721 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);
2722 // Valimathras BossSpawn
2724 {
2725 ValimathrasGUID = temp->GetGUID();
2726 temp->SetImmuneToAll(true);
2727 temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
2728 temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
2729 temp->AI()->Talk(SAY_CLOSE_DOOR);
2730 }
2731 for (uint8 i = 0; i < 6; ++i)
2732 {
2734 temp->CastSpell(me, SPELL_VALIMATHRAS_PORTAL);
2735 }
2736 break;
2737 case 20:
2738 for (uint8 i = 0; i < 3; ++i)
2739 {
2740 switch (urand(0, 1))
2741 {
2742 case 0:
2744 break;
2745 case 1:
2747 break;
2748 }
2749 }
2750 break;
2751 case 21:
2752 for (uint8 i = 0; i < 3; ++i)
2753 {
2754 switch (urand(0, 1))
2755 {
2756 case 0:
2758 break;
2759 case 1:
2761 break;
2762 }
2763 }
2764 break;
2765 }
2766 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::uint8_t uint8
Definition Define.h:109
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:57
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:50
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
Definition Unit.h:670
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition Object.cpp:2460
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:2474
float o
Definition zone_undercity.cpp:662
float y
Definition zone_undercity.cpp:662
float x
Definition zone_undercity.cpp:662
float z
Definition zone_undercity.cpp:662
@ NPC_DOOMGUARD_PILLARGER
Definition zone_undercity.cpp:626
@ SAY_FOR_THE_HORDE
Definition zone_undercity.cpp:637
@ WAVE_COURTYARD_FIGHT
Definition zone_undercity.cpp:655
@ NPC_VARIMATHRAS
Definition zone_undercity.cpp:574
@ SPELL_VALIMATHRAS_PORTAL
Definition zone_undercity.cpp:593
@ SPELL_OPENING_LEGION_PORTALS
Definition zone_undercity.cpp:600
@ SPELL_AURA_OF_VARIMATHRAS
Definition zone_undercity.cpp:598
@ SAY_CLOSE_DOOR
Definition zone_undercity.cpp:583
@ GO_BLOCKED_PASSAGE
Definition zone_undercity.cpp:473
@ NPC_VORTEX
Definition zone_undercity.cpp:462
@ NPC_WHIRLWIND
Definition zone_undercity.cpp:464

References Unit::AddThreat(), Creature::AI(), UnitAI::AttackStart(), GO_BLOCKED_PASSAGE, hordeGuardsGUID, IN_MILLISECONDS, ScriptedAI::me, 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.

2389 {
2390 switch (summon->GetEntry())
2391 {
2395 bStepping = true;
2396 break;
2397 case NPC_KHANOK:
2398 {
2401 FollowThrall();
2402 SetEscortPaused(false);
2403 std::list<Creature*> SanktumList;
2405 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DREADLORD, 1000.0f);
2407 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DOCTOR_H, 1000.0f);
2408 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_CHEMIST_H, 1000.0f);
2409 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_BETRAYER_H, 1000.0f);
2410 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_FELBEAST_H, 1000.0f);
2412 if (!SanktumList.empty())
2413 for (std::list<Creature*>::iterator itr = SanktumList.begin(); itr != SanktumList.end(); itr++)
2414 (*itr)->DespawnOrUnsummon();
2415 break;
2416 }
2417 case NPC_VARIMATHRAS:
2418 {
2421 std::list<Creature*> ThroneList;
2426 if (!ThroneList.empty())
2427 for (std::list<Creature*>::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++)
2428 (*itr)->DespawnOrUnsummon();
2429 SetEscortPaused(false);
2430 me->SetWalk(true);
2431 break;
2432 }
2433 default:
2434 break;
2435 }
2436 }
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_COURTYARD_DONE_H
Definition WorldStateDefines.h:534
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_ROYAL_QUARTER_FIGHT_H
Definition WorldStateDefines.h:537
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_INNER_SANCTUM_FIGHT_H
Definition WorldStateDefines.h:535
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_COURTYARD_FIGHT_H
Definition WorldStateDefines.h:533
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_INNER_SANCTUM_DONE_H
Definition WorldStateDefines.h:536
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_ROYAL_QUARTER_DONE_H
Definition WorldStateDefines.h:538
bool SetWalk(bool enable) override
Enable or disable the creature's walk mode by removing: MOVEMENTFLAG_WALKING. Infom also the client.
Definition Creature.cpp:3416
Map * GetMap() const
Definition Object.h:637
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2626
void FollowThrall()
Definition zone_undercity.cpp:2463
void UpdateWorldState(Map *map, uint32 id, uint32 state)
Definition zone_undercity.cpp:2438

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(), Creature::SetWalk(), UpdateWorldState(), WORLD_STATE_BATTLE_FOR_UNDERCITY_COURTYARD_DONE_H, WORLD_STATE_BATTLE_FOR_UNDERCITY_COURTYARD_FIGHT_H, WORLD_STATE_BATTLE_FOR_UNDERCITY_INNER_SANCTUM_DONE_H, WORLD_STATE_BATTLE_FOR_UNDERCITY_INNER_SANCTUM_FIGHT_H, WORLD_STATE_BATTLE_FOR_UNDERCITY_ROYAL_QUARTER_DONE_H, and WORLD_STATE_BATTLE_FOR_UNDERCITY_ROYAL_QUARTER_FIGHT_H.

◆ UpdateAI()

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

Use to start attacking a target. Called just before JustEngagedWith()

Reimplemented from npc_escortAI.

2861 {
2863
2864 if (bStepping)
2865 {
2866 if (phaseTimer <= diff)
2867 {
2868 switch (step)
2869 {
2870 //Preparation
2871 case 0:
2872 me->setActive(true);
2874 break;
2875 case 1:
2879 break;
2880 case 2:
2883 break;
2884 case 3:
2885 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2886 guard->AI()->Talk(SAY_BURN_UC);
2888 break;
2889 case 4:
2890 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2891 guard->AI()->Talk(SAY_PUTRESS_ANGER);
2893 break;
2894 case 5:
2897 break;
2898 case 6:
2901 break;
2902 case 7:
2905 break;
2906 case 8:
2909 break;
2910 case 9:
2913 break;
2914 case 10:
2917 break;
2918 // Start Event
2919 case 11:
2923 SetEscortPaused(false);
2924 bStepping = false;
2925 JumpToNextStep(0);
2926 me->SetWalk(false);
2928 {
2929 sylvanas->GetMotionMaster()->MoveWaypoint(NPC_SYLVANAS * 100, false);
2930 sylvanas->setActive(true);
2931 }
2932 break;
2933 case 12:
2934 me->Dismount();
2936 break;
2937 case 13:
2939 sylvanas->Dismount();
2941 break;
2942 case 14:
2945 break;
2946 case 15:
2948 SpawnWave(0);
2950 break;
2951 case 16:
2952 {
2953 std::list<Creature*> PlagueList;
2955 if (!PlagueList.empty())
2956 for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
2957 (*itr)->DespawnOrUnsummon();
2958 SetEscortPaused(false);
2959 me->SetWalk(true);
2961 sylvanas->GetMotionMaster()->MoveWaypoint(NPC_SYLVANAS * 1000, false);
2963 break;
2964 }
2965 case 17:
2966 bStepping = false;
2967 JumpToNextStep(0);
2968 break;
2969 case 18:
2970 SpawnWave(1);
2973 break;
2974 case 19:
2975 {
2976 SpawnWave(2);
2978 break;
2979 }
2980 case 20:
2982 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_0);
2984 break;
2985 case 21:
2987 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_1);
2989 break;
2990 case 22:
2992 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_2);
2994 break;
2995 case 23:
2996 SpawnWave(3);
2998 break;
2999 case 24:
3001 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3003 break;
3004 case 25:
3006 {
3007 valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
3008 valimathras->DespawnOrUnsummon(3s);
3009 }
3011 valimathrasportal->DespawnOrUnsummon(6s);
3013 break;
3014 case 26:
3015 {
3018 std::list<Creature*> HelperList;
3020 if (!HelperList.empty())
3021 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3022 (*itr)->DespawnOrUnsummon();
3024 break;
3025 }
3026 // Start COURTYARD_FIGHT
3027 case 27:
3028 FollowThrall();
3029 SetEscortPaused(false);
3030 bStepping = false;
3031 me->SetWalk(false);
3035 JumpToNextStep(0);
3036 break;
3037 case 28:
3038 {
3039 EnableAttack = true;
3041 std::list<Creature*> HostileEndList;
3043 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_DOCTOR_H, 1000.0f);
3044 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_CHEMIST_H, 1000.0f);
3045 if (!HostileEndList.empty())
3046 for (std::list<Creature*>::iterator itr = HostileEndList.begin(); itr != HostileEndList.end(); itr++) (*itr)->SetFaction(FACTION_MONSTER);
3047 SpawnWave(4);
3049 break;
3050 }
3051 case 29:
3052 SpawnWave(4);
3054 break;
3055 case 30:
3056 SpawnWave(4);
3058 break;
3059 case 31:
3060 SpawnWave(4);
3062 break;
3063 case 32:
3064 SpawnWave(4);
3066 break;
3067 case 33:
3068 SpawnWave(4);
3070 break;
3071 case 34:
3072 SpawnWave(4);
3074 break;
3075 case 35:
3076 SpawnWave(4);
3078 break;
3079 case 36:
3080 SpawnWave(4);
3082 break;
3083 case 37:
3084 SpawnWave(4);
3086 break;
3087 case 38:
3088 SpawnWave(4);
3090 break;
3091 case 39:
3092 SpawnWave(4);
3094 break;
3095 case 40:
3096 SpawnWave(4);
3098 break;
3099 case 41:
3100 SpawnWave(4);
3102 break;
3103 case 42:
3104 SpawnWave(4);
3106 break;
3107 case 43:
3108 SpawnWave(4);
3110 break;
3111 case 44:
3112 SpawnWave(4);
3114 break;
3115 case 45:
3116 SpawnWave(5);
3117 bStepping = false;
3119 break;
3120 // End COURTYARD_FIGHT
3121 case 46:
3122 {
3123 FollowThrall();
3124 std::list<Creature*> HostileList;
3126 me->GetCreatureListWithEntryInGrid(HostileList, NPC_DOCTOR_H, 1000.0f);
3127 me->GetCreatureListWithEntryInGrid(HostileList, NPC_CHEMIST_H, 1000.0f);
3129 for (auto& creature : HostileList)
3130 creature->DespawnOrUnsummon();
3131 for (uint8 i = 0; i < 7; ++i)
3132 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);
3133 SpawnWave(6);
3134 SetEscortPaused(false);
3135 bStepping = false;
3136 me->SetWalk(true);
3138 break;
3139 }
3140 case 47:
3143 break;
3144 case 48:
3145 SetEscortPaused(false);
3146 bStepping = false;
3148 break;
3149 // Elevator Event
3150 case 49:
3153 break;
3154 case 50:
3156 sylvanas->AI()->Talk(SYLVANAS_SAY_ELEVATOR_1);
3158 break;
3159 case 51:
3162 SpawnWave(7);
3164 break;
3165 case 52:
3168 break;
3169 case 53:
3170 SpawnWave(8);
3171 me->GetMotionMaster()->MoveJump(ThrallSpawn[55].x, ThrallSpawn[55].y, ThrallSpawn[55].z, 40.0f, 40.0f, 0);
3173 sylvanas->GetMotionMaster()->MoveJump(ThrallSpawn[56].x, ThrallSpawn[56].y, ThrallSpawn[56].z, 40.0f, 40.0f, 0);
3175 break;
3176 case 54:
3177 FollowThrall();
3178 SetEscortPaused(false);
3179 bStepping = false;
3180 me->SetWalk(true);
3182 break;
3183 // Top of Undercity Discussion
3184 case 55:
3186 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_1);
3188 break;
3189 case 56:
3191 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_2);
3193 break;
3194 case 57:
3197 break;
3198 case 58:
3200 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_3);
3202 break;
3203 // Top of Undercity - Fight
3204 case 59:
3205 SpawnWave(9);
3207 break;
3208 case 60:
3209 SpawnWave(9);
3211 break;
3212 case 61:
3213 SpawnWave(9);
3215 break;
3216 case 62:
3217 FollowThrall();
3218 SetEscortPaused(false);
3219 bStepping = false;
3220 me->SetWalk(true);
3222 break;
3223 case 63:
3225 break;
3226 case 64:
3227 SpawnWave(10);
3229 break;
3230 case 65:
3231 SpawnWave(10);
3233 break;
3234 case 66:
3235 FollowThrall();
3236 SetEscortPaused(false);
3237 bStepping = false;
3238 me->SetWalk(true);
3240 break;
3241 case 67:
3242 SpawnWave(11);
3244 break;
3245 case 68:
3246 SpawnWave(11);
3248 break;
3249 case 69:
3250 FollowThrall();
3251 SetEscortPaused(false);
3252 bStepping = false;
3253 me->SetWalk(true);
3255 break;
3256 // KHANOK - Valimathtas Intro
3257 case 70:
3259 break;
3260 case 71:
3262 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_4);
3263 SpawnWave(12);
3265 break;
3266 case 72:
3268 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_0);
3270 break;
3271 case 73:
3273 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_1);
3274 SpawnWave(13);
3276 break;
3277 case 74:
3279 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3281 break;
3282 case 75:
3284 {
3285 valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
3286 valimathras->DespawnOrUnsummon(3s);
3287 }
3289 valimathrasportal->DespawnOrUnsummon(3s);
3291 break;
3292 // KHANOK - Trashspawn
3293 case 76:
3294 SpawnWave(14);
3296 break;
3297 case 77:
3298 SpawnWave(15);
3300 break;
3301 case 78:
3302 SpawnWave(16);
3304 break;
3305 case 79:
3306 SpawnWave(14);
3308 break;
3309 case 80:
3310 SpawnWave(15);
3312 break;
3313 case 81:
3314 SpawnWave(16);
3316 break;
3317 case 82:
3318 SpawnWave(14);
3320 break;
3321 case 83:
3322 SpawnWave(15);
3324 break;
3325 case 84:
3326 SpawnWave(16);
3328 break;
3329 case 85:
3330 SpawnWave(14);
3332 break;
3333 case 86:
3334 SpawnWave(15);
3336 break;
3337 case 87:
3338 SpawnWave(16);
3340 break;
3341 case 88:
3342 SpawnWave(14);
3344 break;
3345 case 89:
3346 SpawnWave(15);
3348 break;
3349 case 90:
3350 SpawnWave(16);
3352 break;
3353 case 91:
3354 SpawnWave(14);
3356 break;
3357 case 92:
3358 SpawnWave(15);
3360 break;
3361 case 93:
3362 SpawnWave(16);
3364 break;
3365 case 94:
3366 // Spawn Boss 2 KHANOK
3367 SpawnWave(17);
3369 break;
3370 case 95:
3371 SpawnWave(14);
3373 break;
3374 case 96:
3375 SpawnWave(15);
3377 break;
3378 case 97:
3379 SpawnWave(16);
3381 bStepping = false;
3382 break;
3383 case 98:
3384 // KHANOK - Won
3387 break;
3388 case 99:
3389 SpawnWave(18);
3391 break;
3392 case 100:
3393 SpawnWave(18);
3395 break;
3396 case 101:
3397 SpawnWave(18);
3399 break;
3400 case 102:
3401 SpawnWave(18);
3403 break;
3404 case 103:
3405 SpawnWave(18);
3407 break;
3408 case 104:
3409 SpawnWave(18);
3411 break;
3412 case 105:
3413 SpawnWave(18);
3415 break;
3416 case 106:
3417 SpawnWave(18);
3419 break;
3420 case 107:
3421 SpawnWave(18);
3423 break;
3424 case 108:
3426 FollowThrall();
3427 SetEscortPaused(false);
3428 bStepping = false;
3429 me->SetWalk(true);
3431 break;
3432 case 109:
3434 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_5);
3436 break;
3437 case 110:
3438 SpawnWave(19);
3440 break;
3441 case 111:
3442 FollowThrall();
3443 SetEscortPaused(false);
3444 bStepping = false;
3445 me->SetWalk(false);
3447 break;
3448 case 112:
3450 break;
3451 case 113:
3454 break;
3455 case 114:
3459 break;
3460 case 115:
3461 {
3462 std::list<GameObject*> SaronitList;
3464 for (std::list<GameObject*>::const_iterator itr = SaronitList.begin(); itr != SaronitList.end(); ++itr)
3465 if (GameObject* saronit = (*itr))
3466 saronit->UseDoorOrButton();
3468 break;
3469 }
3470 case 116:
3473 FollowThrall();
3474 SetEscortPaused(false);
3475 bStepping = false;
3477 break;
3478 // Valimathras Intro
3479 case 117:
3482 break;
3483 case 118:
3485 {
3486 valimathras->AI()->Talk(SAY_THRONE_1);
3487 valimathras->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
3488 }
3490 break;
3491 case 119:
3492 SpawnWave(20);
3494 break;
3495 case 120:
3496 SpawnWave(21);
3498 break;
3499 case 121:
3502 valimathras->AI()->Talk(SAY_THRONE_2);
3504 break;
3505 case 122:
3506 SpawnWave(20);
3508 break;
3509 case 123:
3510 SpawnWave(21);
3512 break;
3513 case 124:
3516 valimathras->AI()->Talk(SAY_THRONE_3);
3518 break;
3519 case 125:
3520 SpawnWave(20);
3522 break;
3523 case 126:
3524 SpawnWave(21);
3526 break;
3527 case 127:
3530 valimathras->AI()->Talk(SAY_THRONE_4);
3532 break;
3533 case 128:
3534 SpawnWave(20);
3536 break;
3537 case 129:
3538 SpawnWave(21);
3540 break;
3541 case 130:
3544 valimathras->AI()->Talk(SAY_THRONE_5);
3546 break;
3547 case 131:
3548 SpawnWave(20);
3550 break;
3551 case 132:
3552 SpawnWave(21);
3554 break;
3555 case 133:
3558 valimathras->AI()->Talk(SAY_THRONE_6);
3560 break;
3561 case 134:
3562 SpawnWave(20);
3564 break;
3565 case 135:
3566 SpawnWave(21);
3568 break;
3569 case 136:
3572 break;
3573 // Valimathras Fight
3574 case 137:
3576 {
3577 valimathras->SetImmuneToAll(false);
3578 valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
3579 valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
3580 valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
3581 valimathras->SetHomePosition(me->GetPosition());
3582 valimathras->AddThreat(me, 100.0f);
3583 me->AddThreat(valimathras, 100.0f);
3584 valimathras->AI()->AttackStart(me);
3585 me->AI()->AttackStart(valimathras);
3586 }
3587 bStepping = false;
3589 break;
3590 // Valimathras Won
3591 case 138:
3594 break;
3595 case 139:
3598 break;
3599 case 140:
3600 SetEscortPaused(false);
3601 bStepping = false;
3603 break;
3604 case 141:
3606 break;
3607 case 142:
3609 me->SetFacingToObject(sylvanas);
3612 break;
3613 case 143:
3615 {
3616 sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f);
3617 sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
3618 }
3620 break;
3621 case 144:
3623 {
3624 sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
3625 me->SetFacingToObject(sylvanas);
3626 sylvanas->SetFacingToObject(me);
3628 }
3630 break;
3631 case 145:
3633 FollowThrall();
3634 SetEscortPaused(false);
3635 bStepping = false;
3637 break;
3638 case 146:
3641 break;
3642 case 147:
3643 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3644 {
3646 {
3647 allianceForcesGUID[i] = temp->GetGUID();
3648 temp->SetImmuneToAll(true);
3649 temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
3650 temp->SetReactState(REACT_PASSIVE);
3651 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3652 }
3653 }
3654 if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3655 {
3656 WrynnGUID = wrynn->GetGUID();
3657 wrynn->SetImmuneToAll(true);
3658 wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3659 wrynn->SetReactState(REACT_PASSIVE);
3660 wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f);
3661 }
3662 if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3663 {
3664 JainaGUID = jaina->GetGUID();
3665 jaina->SetImmuneToAll(true);
3666 jaina->SetReactState(REACT_PASSIVE);
3667 }
3669 break;
3670 // Wrynn Intro
3671 case 148:
3673 wrynn->AI()->Talk(WRYNN_SAY_THRONE_5);
3675 break;
3676 case 149:
3678 wrynn->AI()->Talk(WRYNN_SAY_THRONE_6);
3680 break;
3681 case 150:
3683 wrynn->AI()->Talk(WRYNN_SAY_THRONE_7);
3685 break;
3686 case 151:
3688 wrynn->AI()->Talk(WRYNN_SAY_THRONE_8);
3690 break;
3691 // Wrynn Fight
3692 case 152:
3693 me->SetImmuneToAll(false);
3695 {
3696 wrynn->SetImmuneToNPC(false);
3697 wrynn->SetImmuneToPC(true);
3698 wrynn->SetReactState(REACT_AGGRESSIVE);
3699 wrynn->AddThreat(me, 100.0f);
3700 me->AddThreat(wrynn, 100.0f);
3701 wrynn->AI()->AttackStart(me);
3702 }
3703
3704 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3705 {
3707 {
3708 temp->SetImmuneToAll(false);
3709 temp->SetReactState(REACT_AGGRESSIVE);
3710 temp->AddThreat(me, 100.0f);
3711 temp->AI()->AttackStart(me);
3712 }
3713 }
3715 break;
3716 case 153:
3718 {
3719 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
3720 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
3721 }
3723 break;
3724 case 154:
3726 {
3727 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
3728 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
3729 }
3731 break;
3732 case 155:
3733 {
3734 std::list<Creature*> HelperList;
3735 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
3736 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
3737 me->GetCreatureListWithEntryInGrid(HelperList, NPC_WRYNN, 100.0f);
3738 if (!HelperList.empty())
3739 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3740 (*itr)->DespawnOrUnsummon();
3742 break;
3743 }
3744 case 156:
3746 SetEscortPaused(false);
3747 bStepping = false;
3749 break;
3750 case 157:
3754 break;
3755 // Ending
3756 case 158:
3757 if (Creature* saurfang = me->SummonCreature(NPC_OVERLORD_SAURFANG, 1297.574f, 347.154f, -65.027f, TEMPSUMMON_MANUAL_DESPAWN))
3758 {
3759 SaurfangGUID = saurfang->GetGUID();
3760 saurfang->SetWalk(true);
3761 saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f);
3762 }
3764 break;
3765 case 159:
3767 {
3768 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_1);
3769 saurfang->SetStandState(UNIT_STAND_STATE_SIT);
3770 }
3772 break;
3773 case 160:
3775 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_2);
3777 break;
3778 case 161:
3780 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_3);
3781 if (Map* map = me->GetMap())
3782 {
3783 Map::PlayerList const& PlayerList = map->GetPlayers();
3784 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
3785 {
3786 if (Player* player = i->GetSource())
3787 {
3788 if (me->IsInRange(player, 0.0f, 50.0f))
3789 {
3790 if (player->GetTeamId() == TEAM_HORDE)
3791 {
3792 player->RemoveAura(SPELL_SYLVANAS_BUFF);
3793 player->RemoveAura(SPELL_THRALL_BUFF);
3794 if (player->GetQuestStatus(QUEST_BATTLE_H) == QUEST_STATUS_INCOMPLETE)
3795 {
3796 player->CompleteQuest(QUEST_BATTLE_H);
3797 player->CastSpell(player, SPELL_PHASING_HORDE);
3798 }
3799 }
3800 }
3801 }
3802 }
3803 }
3805 break;
3806 case 162:
3809 break;
3810 case 163:
3817 std::list<Creature*> HelperList;
3818 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
3820 if (!HelperList.empty())
3821 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3822 (*itr)->DespawnOrUnsummon(120s);
3823 me->DespawnOrUnsummon(120s);
3824 bStepping = false;
3826 break;
3827 }
3828 }
3829 else phaseTimer -= diff;
3830 }
3831
3832 if (!UpdateVictim())
3833 return;
3834
3835 _events.Update(diff);
3836
3838 return;
3839
3840 while (uint32 eventId = _events.ExecuteEvent())
3841 {
3842 switch (eventId)
3843 {
3847 break;
3848 case EVENT_LAVA_BURST:
3851 break;
3852 case EVENT_THUNDER:
3855 break;
3857 if (me->GetVictim())
3859 sylvanas->AI()->AttackStart(me->GetVictim());
3861 break;
3862 case EVENT_THRALL_BUFF:
3865 break;
3866 default:
3867 break;
3868 }
3869 }
3870
3872 }
std::uint32_t uint32
Definition Define.h:107
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:103
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &list, WorldObject *source, uint32 entry, float maxSearchRange)
Definition ScriptedCreature.cpp:952
@ EMOTE_ONESHOT_SALUTE
Definition SharedDefines.h:1946
@ TEAM_HORDE
Definition SharedDefines.h:749
@ FACTION_MONSTER
Definition SharedDefines.h:183
@ UNIT_STAND_STATE_SIT
Definition UnitDefines.h:36
@ UNIT_NPC_FLAG_QUESTGIVER
Definition UnitDefines.h:323
@ UNIT_STATE_CASTING
Definition UnitDefines.h:188
@ REACT_PASSIVE
Definition Unit.h:574
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_START_H
Definition WorldStateDefines.h:530
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_COUNTDOWN_H
Definition WorldStateDefines.h:531
bool UpdateVictim()
Definition CreatureAI.cpp:350
void DespawnOrUnsummon(Milliseconds msTimeToDespawn=0ms, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2221
void Update(uint32 time)
Definition EventMap.h:67
EventId ExecuteEvent()
Definition EventMap.cpp:86
Definition GameObject.h:125
Definition LinkedList.h:139
Definition MapRefMgr.h:26
iterator begin()
Definition MapRefMgr.h:36
iterator end()
Definition MapRefMgr.h:37
Definition Map.h:168
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition MotionMaster.h:257
Definition Player.h:1086
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:41
SpellCastResult DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:274
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:175
void SetFacingToObject(WorldObject *object, Milliseconds timed=0ms)
Definition Unit.cpp:16167
void Dismount()
Definition Unit.cpp:10363
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:1378
Unit * GetVictim() const
Definition Unit.h:910
bool HasUnitState(const uint32 f) const
Definition Unit.h:742
void HandleEmoteCommand(uint32 emoteId)
Definition Unit.cpp:2202
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition Unit.h:938
void setActive(bool isActiveObject)
Definition Object.cpp:1091
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
Definition Object.cpp:1469
Talk
Definition hyjal.cpp:82
void UpdateAI(uint32 diff) override
Use to start attacking a target. Called just before JustEngagedWith()
Definition ScriptedEscortAI.cpp:240
void ActivateValimathrasPortal()
Definition zone_undercity.cpp:2475
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition zone_undercity.cpp:2242
void JumpToNextStep(uint32 uiTimer)
Definition zone_undercity.cpp:2457
void SpawnWave(uint32 waveId)
Definition zone_undercity.cpp:2484
@ WRYNN_SAY_THRONE_5
Definition zone_undercity.cpp:332
@ NPC_WRYNN
Definition zone_undercity.cpp:303
@ WRYNN_SAY_THRONE_6
Definition zone_undercity.cpp:333
@ WRYNN_SAY_THRONE_8
Definition zone_undercity.cpp:335
@ WRYNN_SAY_THRONE_7
Definition zone_undercity.cpp:334
@ JAINA_SAY_THRONE_2
Definition zone_undercity.cpp:359
@ JAINA_SAY_THRONE_3
Definition zone_undercity.cpp:360
@ NPC_JAINA
Definition zone_undercity.cpp:353
@ SPELL_DEEPFREEZE
Definition zone_undercity.cpp:366
@ NPC_SW_SOLDIER
Definition zone_undercity.cpp:613
@ NPC_HORDE_GUARD
Definition zone_undercity.cpp:615
@ SAY_PUTRESS_ANGER
Definition zone_undercity.cpp:636
@ SAY_BURN_UC
Definition zone_undercity.cpp:635
@ SYLVANAS_SAY_SANCTUM_4
Definition zone_undercity.cpp:492
@ SPELL_LEAP_TO_PLATFORM
Definition zone_undercity.cpp:499
@ SYLVANAS_SAY_SANCTUM_3
Definition zone_undercity.cpp:491
@ SYLVANAS_SAY_THRONE_1
Definition zone_undercity.cpp:494
@ SYLVANAS_SAY_SANCTUM_1
Definition zone_undercity.cpp:489
@ SYLVANAS_SAY_SANCTUM_2
Definition zone_undercity.cpp:490
@ SYLVANAS_SAY_SANCTUM_5
Definition zone_undercity.cpp:493
@ NPC_SYLVANAS
Definition zone_undercity.cpp:484
@ SYLVANAS_SAY_ELEVATOR_1
Definition zone_undercity.cpp:488
@ SPELL_PHASING_HORDE
Definition zone_undercity.cpp:645
@ ALLIANCE_FORCE_MAXCOUNT
Definition zone_undercity.cpp:653
@ QUEST_BATTLE_H
Definition zone_undercity.cpp:643
@ SAY_SAURFANG_ARRIVAL_2
Definition zone_undercity.cpp:513
@ SAY_SAURFANG_ARRIVAL_3
Definition zone_undercity.cpp:514
@ SAY_SAURFANG_ARRIVAL_1
Definition zone_undercity.cpp:512
static LocationXYZO AllianceSpawn[]
Definition zone_undercity.cpp:665
@ SAY_VALIMATHRAS_ATTACK
Definition zone_undercity.cpp:590
@ SAY_THRONE_2
Definition zone_undercity.cpp:585
@ SAY_THRONE_1
Definition zone_undercity.cpp:584
@ SAY_VALIMATHRAS_INTRO_1
Definition zone_undercity.cpp:579
@ SAY_VALIMATHRAS_INTRO_2
Definition zone_undercity.cpp:580
@ SAY_THRONE_6
Definition zone_undercity.cpp:589
@ SAY_VALIMATHRAS_INTRO_0
Definition zone_undercity.cpp:578
@ SAY_VALIMATHRAS_INNER_SANKTUM_0
Definition zone_undercity.cpp:581
@ SAY_THRONE_5
Definition zone_undercity.cpp:588
@ SAY_VALIMATHRAS_INNER_SANKTUM_1
Definition zone_undercity.cpp:582
@ SAY_THRONE_4
Definition zone_undercity.cpp:587
@ SAY_THRONE_3
Definition zone_undercity.cpp:586
@ THRALL_SAY_THRONE_11
Definition zone_undercity.cpp:424
@ NPC_SLINGER_TRIGGER
Definition zone_undercity.cpp:466
@ THRALL_SAY_COURTYARD_5
Definition zone_undercity.cpp:403
@ THRALL_SAY_THRONE_2
Definition zone_undercity.cpp:415
@ THRALL_SAY_THRONE_4
Definition zone_undercity.cpp:417
@ THRALL_SAY_SANCTUM_6
Definition zone_undercity.cpp:412
@ THRALL_SAY_PREP_1
Definition zone_undercity.cpp:391
@ SPELL_CALL_OF_AIR
Definition zone_undercity.cpp:436
@ THRALL_SAY_PREP_6
Definition zone_undercity.cpp:396
@ THRALL_SAY_ELEVATOR_1
Definition zone_undercity.cpp:404
@ THRALL_SAY_COURTYARD_3
Definition zone_undercity.cpp:401
@ THRALL_SAY_THRONE_9
Definition zone_undercity.cpp:422
@ THRALL_SAY_THRONE_7
Definition zone_undercity.cpp:420
@ THRALL_SAY_SANCTUM_4
Definition zone_undercity.cpp:410
@ SPELL_LAVA_BURST
Definition zone_undercity.cpp:449
@ THRALL_SAY_COURTYARD_1
Definition zone_undercity.cpp:399
@ THRALL_SAY_PREP_5
Definition zone_undercity.cpp:395
@ GO_HORDE_BANNER
Definition zone_undercity.cpp:474
@ THRALL_SAY_SANCTUM_3
Definition zone_undercity.cpp:409
@ SPELL_CALL_OF_EARTH
Definition zone_undercity.cpp:438
@ THRALL_SAY_THRONE_1
Definition zone_undercity.cpp:414
@ THRALL_SAY_PREP_7
Definition zone_undercity.cpp:397
@ THRALL_SAY_SANCTUM_5
Definition zone_undercity.cpp:411
@ THRALL_SAY_COURTYARD_4
Definition zone_undercity.cpp:402
@ THRALL_SAY_PREP_3
Definition zone_undercity.cpp:393
@ SPELL_TIDAL_WAVE_SUMMON
Definition zone_undercity.cpp:433
@ THRALL_SAY_PREP_8
Definition zone_undercity.cpp:398
@ THRALL_SAY_ELEVATOR_2
Definition zone_undercity.cpp:405
@ THRALL_SAY_ELEVATOR_3
Definition zone_undercity.cpp:406
@ THRALL_SAY_THRONE_3
Definition zone_undercity.cpp:416
@ THRALL_SAY_PREP_4
Definition zone_undercity.cpp:394
@ THRALL_SAY_THRONE_5
Definition zone_undercity.cpp:418
@ THRALL_SAY_SANCTUM_7
Definition zone_undercity.cpp:413
@ THRALL_SAY_PREP_2
Definition zone_undercity.cpp:392
@ THRALL_SAY_THRONE_10
Definition zone_undercity.cpp:423
@ SPELL_CHAIN_LIGHTNING
Definition zone_undercity.cpp:448
@ THRALL_SAY_THRONE_6
Definition zone_undercity.cpp:419
@ THRALL_SAY_SANCTUM_2
Definition zone_undercity.cpp:408
@ NPC_PLAGUE_TRIGGER
Definition zone_undercity.cpp:469
@ NPC_OVERLORD_SAURFANG
Definition zone_undercity.cpp:467
@ SPELL_THUNDER
Definition zone_undercity.cpp:450
@ THRALL_SAY_COURTYARD_2
Definition zone_undercity.cpp:400
static LocationXYZO AllianceWP[]
Definition zone_undercity.cpp:700

References _events, ActivateValimathrasPortal(), Unit::AddThreat(), Creature::AI(), ALLIANCE_FORCE_MAXCOUNT, allianceForcesGUID, AllianceSpawn, AllianceWP, UnitAI::AttackStart(), 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(), Position::GetPosition(), 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, QUEST_STATUS_INCOMPLETE, 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(), Unit::SetStandState(), Creature::SetWalk(), 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_FOR_UNDERCITY_COUNTDOWN_H, WORLD_STATE_BATTLE_FOR_UNDERCITY_COURTYARD_FIGHT_H, WORLD_STATE_BATTLE_FOR_UNDERCITY_INNER_SANCTUM_FIGHT_H, WORLD_STATE_BATTLE_FOR_UNDERCITY_ROYAL_QUARTER_FIGHT_H, WORLD_STATE_BATTLE_FOR_UNDERCITY_START_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
2439 {
2440 Map::PlayerList const& players = map->GetPlayers();
2441
2442 if (!players.IsEmpty())
2443 {
2444 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2445 {
2446 if (Player* player = itr->GetSource())
2447 player->SendUpdateWorldState(id, state);
2448 }
2449 }
2450 }
bool IsEmpty() const
Definition LinkedList.h:97
PlayerList const & GetPlayers() const
Definition Map.h:335

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

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

◆ WaypointReached() [1/2]

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

Implements npc_escortAI.

2770 {
2771 switch (waypointId)
2772 {
2773 case 1:
2774 SetHoldState(true);
2775 bStepping = true;
2776 break;
2777 case 2:
2778 SetHoldState(true);
2779 bStepping = true;
2780 break;
2781 case 11:
2782 SetHoldState(true);
2783 bStepping = true;
2784 break;
2785 case 13:
2786 SetHoldState(true);
2787 bStepping = true;
2788 break;
2789 case 14:
2790 SetHoldState(true);
2791 bStepping = true;
2792 break;
2793 case 34:
2794 SetHoldState(true);
2795 bStepping = true;
2796 break;
2797 case 36:
2800 break;
2801 case 46:
2802 SetHoldState(true);
2803 bStepping = true;
2804 break;
2805 case 57:
2806 SetHoldState(true);
2807 bStepping = true;
2808 break;
2809 case 61:
2810 SetHoldState(true);
2811 bStepping = true;
2812 break;
2813 case 65:
2814 SetHoldState(true);
2815 bStepping = true;
2816 break;
2817 case 66:
2818 SetHoldState(true);
2819 bStepping = true;
2820 break;
2821 case 75:
2822 SetHoldState(true);
2823 bStepping = true;
2824 break;
2825 case 81:
2826 SetHoldState(true);
2827 bStepping = true;
2828 break;
2829 case 104:
2830 SetHoldState(true);
2831 bStepping = true;
2832 break;
2833 case 109:
2834 SetHoldState(true);
2835 bStepping = true;
2836 break;
2837 case 113:
2838 SetHoldState(true);
2839 bStepping = true;
2840 break;
2841 case 117:
2842 SetHoldState(true);
2843 bStepping = true;
2844 break;
2845 case 118:
2847 break;
2848 case 120:
2849 SetHoldState(true);
2850 bStepping = true;
2851 break;
2852 }
2853 }
void SetHoldState(bool bOnHold)
Definition zone_undercity.cpp:2452
@ THRALL_SAY_THRONE_8
Definition zone_undercity.cpp:421
@ THRALL_SAY_SANCTUM_1
Definition zone_undercity.cpp:407

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

◆ WaypointReached() [2/2]

virtual void CreatureAI::WaypointReached ( uint32  ,
uint32   
)
inlinevirtual

Reimplemented from npc_escortAI.

196{ }

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


The documentation for this struct was generated from the following file: