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 (const Position *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)
 
UnitDoSelectLowestHpFriendly (float range, uint32 minHPDiff=1)
 
std::list< Creature * > DoFindFriendlyCC (float range)
 
std::list< Creature * > DoFindFriendlyMissingBuff (float range, uint32 spellId)
 
PlayerGetPlayerAtMinimumRange (float minRange)
 
CreatureDoSpawnCreature (uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, uint32 despawntime)
 
bool IsUniqueTimedEventDone (uint32 id) const
 
void SetUniqueTimedEventDone (uint32 id)
 
void ResetUniqueTimedEvent (uint32 id)
 
void ClearUniqueTimedEventsDone ()
 
void ScheduleTimedEvent (Milliseconds timerMin, Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=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 >
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
 
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)
 
WorldObjectGetSummoner () 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
 
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)
 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 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)
 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
Creatureme
 

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)
 
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
2229 : npc_escortAI(creature)
2230 {
2231 hordeGuardsGUID.clear();
2232 }
Definition ScriptedEscortAI.h:53
GuidVector hordeGuardsGUID
Definition zone_undercity.cpp:2247

References hordeGuardsGUID.

Member Function Documentation

◆ ActivateValimathrasPortal()

void npc_thrall_bfu::npc_thrall_bfuAI::ActivateValimathrasPortal ( )
inline
2475 {
2476 if (Creature* portal = me->FindNearestCreature(NPC_VARIMATHRAS_PORTAL, 500.0f))
2477 {
2478 portal->SummonCreature(NPC_LEGION_OVERLORD, ThrallSpawn[81].x + rand32() % 5, ThrallSpawn[81].y + rand32() % 5, ThrallSpawn[81].z, TEMPSUMMON_DEAD_DESPAWN);
2479 portal->DespawnOrUnsummon();
2480 }
2481 }
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:55
uint32 rand32()
Definition Random.cpp:80
Definition Creature.h:47
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2498
Creature * me
Definition ScriptedCreature.h:281
@ 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.

2855 {
2856 return victim->GetEntry() != NPC_BLIGHT_SLINGER;
2857 }
@ 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.

2252 {
2255 me->CombatStop(true);
2256 me->SetLootRecipient(nullptr);
2257
2259 {
2262 }
2263 else
2264 {
2266 Reset();
2267 }
2268 }
@ STATE_ESCORT_ESCORTING
Definition ScriptedEscortAI.h:47
@ STATE_ESCORT_RETURNING
Definition ScriptedEscortAI.h:48
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition Creature.cpp:1307
void MoveTargetedHome(bool walk=false)
The unit will return this initial position (owner for pets and summoned creatures)....
Definition MotionMaster.cpp:261
void ClearAllThreat()
Definition ThreatManager.cpp:575
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5038
MotionMaster * GetMotionMaster()
Definition Unit.h:1759
ThreatManager & GetThreatMgr()
Definition Unit.h:951
void CombatStop(bool includingCast=false, bool mutualPvP=true)
Definition Unit.cpp:7486
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:2270
@ 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
2463 {
2465 {
2466 sylvanas->GetMotionMaster()->Clear();
2467 sylvanas->SetImmuneToAll(false);
2468 sylvanas->SetReactState(REACT_AGGRESSIVE);
2469 sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
2470 sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
2471 }
2472 }
@ FACTION_ESCORT_N_NEUTRAL_ACTIVE
Definition ScriptSystem.h:37
@ REACT_AGGRESSIVE
Definition Unit.h:568
Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:210
ObjectGuid sylvanasfollowGUID
Definition zone_undercity.cpp:2240

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

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

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

Reimplemented from CreatureAI.

2331 {
2332 switch (summoned->GetEntry())
2333 {
2335 summoned->SetHomePosition(me->GetPosition());
2336 summoned->AddThreat(me, 100.0f);
2337 break;
2341 break;
2344 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2346 break;
2347 case NPC_CAVE_DUMMY:
2349 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2351 summoned->AddAura(SPELL_CYCLONE_FALL, summoned);
2352 break;
2354 case NPC_DOCTOR_H:
2355 case NPC_CHEMIST_H:
2358 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2360 if (!EnableAttack)
2361 summoned->SetFaction(FACTION_FRIENDLY);
2362 summoned->AddThreat(me, 100.0f);
2363 me->AddThreat(summoned, 100.0f);
2364 summoned->AI()->AttackStart(me);
2365 break;
2366 case NPC_LEGION_INVADER:
2369 case NPC_DREADLORD:
2370 case NPC_BETRAYER_H:
2371 case NPC_FELBEAST_H:
2374 summoned->AddThreat(me, 100.0f);
2375 me->AddThreat(summoned, 100.0f);
2376 summoned->AI()->AttackStart(me);
2377 break;
2378 case NPC_KHANOK:
2379 summoned->SetHomePosition(me->GetPosition());
2380 summoned->AddThreat(me, 100.0f);
2381 summoned->AI()->AttackStart(me);
2382 default:
2383 break;
2384 }
2385 }
@ 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:144
uint32 GetEntry() const
Definition Object.h:117
virtual void AttackStart(Unit *)
Definition UnitAI.cpp:28
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition Unit.cpp:10463
void SetFaction(uint32 faction)
Definition Unit.cpp:7073
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition Unit.cpp:11439
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:15117
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:17358
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:748
void GetPosition(float &x, float &y) const
Definition Position.h:126
bool EnableAttack
Definition zone_undercity.cpp:2235
@ 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.

2271 {
2273 {
2276 me->SetCorpseDelay(1);
2277 me->SetRespawnTime(1);
2280
2281 bStepping = false;
2282 EnableAttack = false;
2283 step = 0;
2284 phaseTimer = 0;
2291
2293 {
2294 valimathras->DespawnOrUnsummon();
2296 }
2297
2299 {
2300 valimathrasportal->DespawnOrUnsummon();
2302 }
2303
2305 {
2306 wrynn->DespawnOrUnsummon();
2307 WrynnGUID.Clear();
2308 }
2309
2311 {
2312 jaina->DespawnOrUnsummon();
2313 JainaGUID.Clear();
2314 }
2315
2317 {
2318 saurfang->DespawnOrUnsummon();
2320 }
2321
2322 for (ObjectGuid const& guid : hordeGuardsGUID)
2323 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
2324 temp->DespawnOrUnsummon();
2325
2326 hordeGuardsGUID.clear();
2327 }
2328 }
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:35
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:322
void SetRespawnTime(uint32 respawn)
Definition Creature.cpp:3806
void SetCorpseDelay(uint32 delay)
Definition Creature.h:74
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:48
Definition ObjectGuid.h:118
void Clear()
Definition ObjectGuid.h:138
void Mount(uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
Definition Unit.cpp:10505
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:764
void SetStandState(uint8 state)
Definition Unit.cpp:13115
Definition ObjectAccessor.h:61
bool bStepping
Definition zone_undercity.cpp:2234
ObjectGuid ValimathrasGUID
Definition zone_undercity.cpp:2242
ObjectGuid ValimathrasPortalGUID
Definition zone_undercity.cpp:2243
ObjectGuid SaurfangGUID
Definition zone_undercity.cpp:2246
ObjectGuid JainaGUID
Definition zone_undercity.cpp:2245
EventMap _events
Definition zone_undercity.cpp:2249
ObjectGuid WrynnGUID
Definition zone_undercity.cpp:2244
@ 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
2452 {
2453 SetEscortPaused(bOnHold);
2454 }
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
2484 {
2485 switch (waveId)
2486 {
2487 case 0: // Vortex
2489 whirlwind1->GetMotionMaster()->MoveWaypoint(NPC_WHIRLWIND * 10, false);
2491 whirlwind2->GetMotionMaster()->MoveWaypoint(NPC_WHIRLWIND * 100, false);
2492 break;
2493 case 1:
2494 // BATTLING_COURTYARD Initial Spawn
2495 for (uint8 i = 0; i < 3; ++i)
2497 for (uint8 i = 0; i < 9; ++i)
2499 for (uint8 i = 0; i < 6; ++i)
2501 for (uint8 i = 0; i < 4; ++i)
2503 break;
2504 case 2:
2505 // Valimathras
2507 {
2508 ValimathrasGUID = temp->GetGUID();
2509 temp->SetImmuneToAll(true);
2510 }
2511 break;
2512 case 3:
2514 ValimathrasPortalGUID = temp->GetGUID();
2515 break;
2516 case 4:
2517 // COURTYARD_FIGHT Spawns
2518 for (uint8 i = 0; i < WAVE_COURTYARD_FIGHT; ++i)
2519 {
2520 switch (urand(0, 2))
2521 {
2522 case 0:
2524 break;
2525 case 1:
2527 break;
2528 case 2:
2530 break;
2531 }
2532 }
2533 break;
2534 case 5:
2535 // Bossspawn 1
2537 {
2538 me->AddThreat(temp, 100.0f);
2539 me->AI()->AttackStart(temp);
2540 }
2541 break;
2542 case 6:
2543 // COURTYARD_DONE Spawn
2545 {
2546 hordeGuardsGUID.push_back(temp->GetGUID());
2547 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
2548 }
2550 {
2551 hordeGuardsGUID.push_back(temp->GetGUID());
2552 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
2553 }
2555 {
2556 hordeGuardsGUID.push_back(temp->GetGUID());
2557 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
2558 }
2560 {
2561 hordeGuardsGUID.push_back(temp->GetGUID());
2562 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
2563 }
2564 for (uint8 i = 0; i < 2; ++i)
2566 hordeGuardsGUID.push_back(temp->GetGUID());
2567 break;
2568 case 7:
2569 for (uint8 i = 0; i < 9; ++i)
2571 break;
2572 case 8:
2573 for (uint8 i = 0; i < 2; ++i)
2575 hordeGuardsGUID.push_back(temp->GetGUID());
2576 break;
2577 case 9:
2578 // Top of Undercity - Attacktrashpack
2579 for (uint8 i = 0; i < 3; ++i)
2580 {
2581 switch (urand(0, 2))
2582 {
2583 case 0:
2585 break;
2586 case 1:
2588 break;
2589 case 2:
2591 break;
2592 }
2593 }
2594 break;
2595 case 10:
2596 // Top of Undercity - Attacktrashpack
2597 for (uint8 i = 0; i < 3; ++i)
2598 {
2599 switch (urand(0, 1))
2600 {
2601 case 0:
2603 break;
2604 case 1:
2606 break;
2607 }
2608 }
2609 break;
2610 case 11:
2611 // Bottom of Undercity - Attacktrashpack
2612 for (uint8 i = 0; i < 3; ++i)
2613 {
2614 switch (urand(0, 1))
2615 {
2616 case 0:
2618 break;
2619 case 1:
2621 break;
2622 }
2623 }
2624 break;
2625 case 12:
2626 // Valimathras 2
2628 {
2629 ValimathrasGUID = temp->GetGUID();
2630 temp->SetImmuneToAll(true);
2631 }
2632 break;
2633 case 13:
2635 ValimathrasPortalGUID = temp->GetGUID();
2636 break;
2637 // NPC_KHANOK - Inner Sunktum Spawn Left
2638 case 14:
2639 for (uint8 i = 0; i < 4; ++i)
2640 {
2641 switch (urand(0, 6))
2642 {
2643 case 0:
2645 break;
2646 case 1:
2648 break;
2649 case 2:
2651 break;
2652 case 3:
2654 break;
2655 case 4:
2657 break;
2658 case 5:
2660 break;
2661 case 6:
2663 break;
2664 }
2665 }
2666 break;
2667 // NPC_KHANOK - Inner Sunktum Spawn Right
2668 case 15:
2669 for (uint8 i = 0; i < 4; ++i)
2670 {
2671 switch (urand(0, 6))
2672 {
2673 case 0:
2675 break;
2676 case 1:
2678 break;
2679 case 2:
2681 break;
2682 case 3:
2684 break;
2685 case 4:
2687 break;
2688 case 5:
2690 break;
2691 case 6:
2693 break;
2694 }
2695 }
2696 break;
2697 // NPC_KHANOK - Inner Sunktum Spawn Top
2698 case 16:
2700 break;
2701 // NPC_KHANOK - Inner Sunktum Spawn Middle
2702 case 17:
2704 {
2705 me->AddThreat(temp, 100.0f);
2706 me->AI()->AttackStart(temp);
2707 }
2708 break;
2709 case 18:
2711 {
2712 hordeGuardsGUID.push_back(temp->GetGUID());
2713 temp->AI()->Talk(SAY_FOR_THE_HORDE);
2714 temp->GetMotionMaster()->MoveWaypoint(NPC_WARSONG_BATTLEGUARD * 100, false);
2715 }
2716 break;
2717 // Valimathras Room Preparation
2718 case 19:
2719 for (uint8 i = 0; i < 3; ++i)
2720 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);
2721 // Valimathras BossSpawn
2723 {
2724 ValimathrasGUID = temp->GetGUID();
2725 temp->SetImmuneToAll(true);
2726 temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
2727 temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
2728 temp->AI()->Talk(SAY_CLOSE_DOOR);
2729 }
2730 for (uint8 i = 0; i < 6; ++i)
2731 {
2733 temp->CastSpell(me, SPELL_VALIMATHRAS_PORTAL);
2734 }
2735 break;
2736 case 20:
2737 for (uint8 i = 0; i < 3; ++i)
2738 {
2739 switch (urand(0, 1))
2740 {
2741 case 0:
2743 break;
2744 case 1:
2746 break;
2747 }
2748 }
2749 break;
2750 case 21:
2751 for (uint8 i = 0; i < 3; ++i)
2752 {
2753 switch (urand(0, 1))
2754 {
2755 case 0:
2757 break;
2758 case 1:
2760 break;
2761 }
2762 }
2763 break;
2764 }
2765 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::uint8_t uint8
Definition Define.h:109
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:56
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:49
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
Definition Unit.h:664
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:2393
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:2407
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.

2388 {
2389 switch (summon->GetEntry())
2390 {
2394 bStepping = true;
2395 break;
2396 case NPC_KHANOK:
2397 {
2400 FollowThrall();
2401 SetEscortPaused(false);
2402 std::list<Creature*> SanktumList;
2404 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DREADLORD, 1000.0f);
2406 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DOCTOR_H, 1000.0f);
2407 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_CHEMIST_H, 1000.0f);
2408 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_BETRAYER_H, 1000.0f);
2409 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_FELBEAST_H, 1000.0f);
2411 if (!SanktumList.empty())
2412 for (std::list<Creature*>::iterator itr = SanktumList.begin(); itr != SanktumList.end(); itr++)
2413 (*itr)->DespawnOrUnsummon();
2414 break;
2415 }
2416 case NPC_VARIMATHRAS:
2417 {
2420 std::list<Creature*> ThroneList;
2425 if (!ThroneList.empty())
2426 for (std::list<Creature*>::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++)
2427 (*itr)->DespawnOrUnsummon();
2428 SetEscortPaused(false);
2429 me->SetWalk(true);
2430 break;
2431 }
2432 default:
2433 break;
2434 }
2435 }
@ 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:3323
Map * GetMap() const
Definition Object.h:625
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2559
void FollowThrall()
Definition zone_undercity.cpp:2462
void UpdateWorldState(Map *map, uint32 id, uint32 state)
Definition zone_undercity.cpp:2437

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.

2860 {
2862
2863 if (bStepping)
2864 {
2865 if (phaseTimer <= diff)
2866 {
2867 switch (step)
2868 {
2869 //Preparation
2870 case 0:
2871 me->setActive(true);
2873 break;
2874 case 1:
2878 break;
2879 case 2:
2882 break;
2883 case 3:
2884 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2885 guard->AI()->Talk(SAY_BURN_UC);
2887 break;
2888 case 4:
2889 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2890 guard->AI()->Talk(SAY_PUTRESS_ANGER);
2892 break;
2893 case 5:
2896 break;
2897 case 6:
2900 break;
2901 case 7:
2904 break;
2905 case 8:
2908 break;
2909 case 9:
2912 break;
2913 case 10:
2916 break;
2917 // Start Event
2918 case 11:
2922 SetEscortPaused(false);
2923 bStepping = false;
2924 JumpToNextStep(0);
2925 me->SetWalk(false);
2927 {
2928 sylvanas->GetMotionMaster()->MoveWaypoint(NPC_SYLVANAS * 100, false);
2929 sylvanas->setActive(true);
2930 }
2931 break;
2932 case 12:
2933 me->Dismount();
2935 break;
2936 case 13:
2938 sylvanas->Dismount();
2940 break;
2941 case 14:
2944 break;
2945 case 15:
2947 SpawnWave(0);
2949 break;
2950 case 16:
2951 {
2952 std::list<Creature*> PlagueList;
2954 if (!PlagueList.empty())
2955 for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
2956 (*itr)->DespawnOrUnsummon();
2957 SetEscortPaused(false);
2958 me->SetWalk(true);
2960 sylvanas->GetMotionMaster()->MoveWaypoint(NPC_SYLVANAS * 1000, false);
2962 break;
2963 }
2964 case 17:
2965 bStepping = false;
2966 JumpToNextStep(0);
2967 break;
2968 case 18:
2969 SpawnWave(1);
2972 break;
2973 case 19:
2974 {
2975 SpawnWave(2);
2977 break;
2978 }
2979 case 20:
2981 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_0);
2983 break;
2984 case 21:
2986 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_1);
2988 break;
2989 case 22:
2991 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_2);
2993 break;
2994 case 23:
2995 SpawnWave(3);
2997 break;
2998 case 24:
3000 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3002 break;
3003 case 25:
3005 {
3006 valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
3007 valimathras->DespawnOrUnsummon(3s);
3008 }
3010 valimathrasportal->DespawnOrUnsummon(6s);
3012 break;
3013 case 26:
3014 {
3017 std::list<Creature*> HelperList;
3019 if (!HelperList.empty())
3020 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3021 (*itr)->DespawnOrUnsummon();
3023 break;
3024 }
3025 // Start COURTYARD_FIGHT
3026 case 27:
3027 FollowThrall();
3028 SetEscortPaused(false);
3029 bStepping = false;
3030 me->SetWalk(false);
3034 JumpToNextStep(0);
3035 break;
3036 case 28:
3037 {
3038 EnableAttack = true;
3040 std::list<Creature*> HostileEndList;
3042 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_DOCTOR_H, 1000.0f);
3043 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_CHEMIST_H, 1000.0f);
3044 if (!HostileEndList.empty())
3045 for (std::list<Creature*>::iterator itr = HostileEndList.begin(); itr != HostileEndList.end(); itr++) (*itr)->SetFaction(FACTION_MONSTER);
3046 SpawnWave(4);
3048 break;
3049 }
3050 case 29:
3051 SpawnWave(4);
3053 break;
3054 case 30:
3055 SpawnWave(4);
3057 break;
3058 case 31:
3059 SpawnWave(4);
3061 break;
3062 case 32:
3063 SpawnWave(4);
3065 break;
3066 case 33:
3067 SpawnWave(4);
3069 break;
3070 case 34:
3071 SpawnWave(4);
3073 break;
3074 case 35:
3075 SpawnWave(4);
3077 break;
3078 case 36:
3079 SpawnWave(4);
3081 break;
3082 case 37:
3083 SpawnWave(4);
3085 break;
3086 case 38:
3087 SpawnWave(4);
3089 break;
3090 case 39:
3091 SpawnWave(4);
3093 break;
3094 case 40:
3095 SpawnWave(4);
3097 break;
3098 case 41:
3099 SpawnWave(4);
3101 break;
3102 case 42:
3103 SpawnWave(4);
3105 break;
3106 case 43:
3107 SpawnWave(4);
3109 break;
3110 case 44:
3111 SpawnWave(4);
3113 break;
3114 case 45:
3115 SpawnWave(5);
3116 bStepping = false;
3118 break;
3119 // End COURTYARD_FIGHT
3120 case 46:
3121 {
3122 FollowThrall();
3123 std::list<Creature*> HostileList;
3125 me->GetCreatureListWithEntryInGrid(HostileList, NPC_DOCTOR_H, 1000.0f);
3126 me->GetCreatureListWithEntryInGrid(HostileList, NPC_CHEMIST_H, 1000.0f);
3128 for (auto& creature : HostileList)
3129 creature->DespawnOrUnsummon();
3130 for (uint8 i = 0; i < 7; ++i)
3131 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);
3132 SpawnWave(6);
3133 SetEscortPaused(false);
3134 bStepping = false;
3135 me->SetWalk(true);
3137 break;
3138 }
3139 case 47:
3142 break;
3143 case 48:
3144 SetEscortPaused(false);
3145 bStepping = false;
3147 break;
3148 // Elevator Event
3149 case 49:
3152 break;
3153 case 50:
3155 sylvanas->AI()->Talk(SYLVANAS_SAY_ELEVATOR_1);
3157 break;
3158 case 51:
3161 SpawnWave(7);
3163 break;
3164 case 52:
3167 break;
3168 case 53:
3169 SpawnWave(8);
3170 me->GetMotionMaster()->MoveJump(ThrallSpawn[55].x, ThrallSpawn[55].y, ThrallSpawn[55].z, 40.0f, 40.0f, 0);
3172 sylvanas->GetMotionMaster()->MoveJump(ThrallSpawn[56].x, ThrallSpawn[56].y, ThrallSpawn[56].z, 40.0f, 40.0f, 0);
3174 break;
3175 case 54:
3176 FollowThrall();
3177 SetEscortPaused(false);
3178 bStepping = false;
3179 me->SetWalk(true);
3181 break;
3182 // Top of Undercity Discussion
3183 case 55:
3185 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_1);
3187 break;
3188 case 56:
3190 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_2);
3192 break;
3193 case 57:
3196 break;
3197 case 58:
3199 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_3);
3201 break;
3202 // Top of Undercity - Fight
3203 case 59:
3204 SpawnWave(9);
3206 break;
3207 case 60:
3208 SpawnWave(9);
3210 break;
3211 case 61:
3212 SpawnWave(9);
3214 break;
3215 case 62:
3216 FollowThrall();
3217 SetEscortPaused(false);
3218 bStepping = false;
3219 me->SetWalk(true);
3221 break;
3222 case 63:
3224 break;
3225 case 64:
3226 SpawnWave(10);
3228 break;
3229 case 65:
3230 SpawnWave(10);
3232 break;
3233 case 66:
3234 FollowThrall();
3235 SetEscortPaused(false);
3236 bStepping = false;
3237 me->SetWalk(true);
3239 break;
3240 case 67:
3241 SpawnWave(11);
3243 break;
3244 case 68:
3245 SpawnWave(11);
3247 break;
3248 case 69:
3249 FollowThrall();
3250 SetEscortPaused(false);
3251 bStepping = false;
3252 me->SetWalk(true);
3254 break;
3255 // KHANOK - Valimathtas Intro
3256 case 70:
3258 break;
3259 case 71:
3261 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_4);
3262 SpawnWave(12);
3264 break;
3265 case 72:
3267 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_0);
3269 break;
3270 case 73:
3272 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_1);
3273 SpawnWave(13);
3275 break;
3276 case 74:
3278 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3280 break;
3281 case 75:
3283 {
3284 valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
3285 valimathras->DespawnOrUnsummon(3s);
3286 }
3288 valimathrasportal->DespawnOrUnsummon(3s);
3290 break;
3291 // KHANOK - Trashspawn
3292 case 76:
3293 SpawnWave(14);
3295 break;
3296 case 77:
3297 SpawnWave(15);
3299 break;
3300 case 78:
3301 SpawnWave(16);
3303 break;
3304 case 79:
3305 SpawnWave(14);
3307 break;
3308 case 80:
3309 SpawnWave(15);
3311 break;
3312 case 81:
3313 SpawnWave(16);
3315 break;
3316 case 82:
3317 SpawnWave(14);
3319 break;
3320 case 83:
3321 SpawnWave(15);
3323 break;
3324 case 84:
3325 SpawnWave(16);
3327 break;
3328 case 85:
3329 SpawnWave(14);
3331 break;
3332 case 86:
3333 SpawnWave(15);
3335 break;
3336 case 87:
3337 SpawnWave(16);
3339 break;
3340 case 88:
3341 SpawnWave(14);
3343 break;
3344 case 89:
3345 SpawnWave(15);
3347 break;
3348 case 90:
3349 SpawnWave(16);
3351 break;
3352 case 91:
3353 SpawnWave(14);
3355 break;
3356 case 92:
3357 SpawnWave(15);
3359 break;
3360 case 93:
3361 SpawnWave(16);
3363 break;
3364 case 94:
3365 // Spawn Boss 2 KHANOK
3366 SpawnWave(17);
3368 break;
3369 case 95:
3370 SpawnWave(14);
3372 break;
3373 case 96:
3374 SpawnWave(15);
3376 break;
3377 case 97:
3378 SpawnWave(16);
3380 bStepping = false;
3381 break;
3382 case 98:
3383 // KHANOK - Won
3386 break;
3387 case 99:
3388 SpawnWave(18);
3390 break;
3391 case 100:
3392 SpawnWave(18);
3394 break;
3395 case 101:
3396 SpawnWave(18);
3398 break;
3399 case 102:
3400 SpawnWave(18);
3402 break;
3403 case 103:
3404 SpawnWave(18);
3406 break;
3407 case 104:
3408 SpawnWave(18);
3410 break;
3411 case 105:
3412 SpawnWave(18);
3414 break;
3415 case 106:
3416 SpawnWave(18);
3418 break;
3419 case 107:
3420 SpawnWave(18);
3422 break;
3423 case 108:
3425 FollowThrall();
3426 SetEscortPaused(false);
3427 bStepping = false;
3428 me->SetWalk(true);
3430 break;
3431 case 109:
3433 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_5);
3435 break;
3436 case 110:
3437 SpawnWave(19);
3439 break;
3440 case 111:
3441 FollowThrall();
3442 SetEscortPaused(false);
3443 bStepping = false;
3444 me->SetWalk(false);
3446 break;
3447 case 112:
3449 break;
3450 case 113:
3453 break;
3454 case 114:
3458 break;
3459 case 115:
3460 {
3461 std::list<GameObject*> SaronitList;
3463 for (std::list<GameObject*>::const_iterator itr = SaronitList.begin(); itr != SaronitList.end(); ++itr)
3464 if (GameObject* saronit = (*itr))
3465 saronit->UseDoorOrButton();
3467 break;
3468 }
3469 case 116:
3472 FollowThrall();
3473 SetEscortPaused(false);
3474 bStepping = false;
3476 break;
3477 // Valimathras Intro
3478 case 117:
3481 break;
3482 case 118:
3484 {
3485 valimathras->AI()->Talk(SAY_THRONE_1);
3486 valimathras->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
3487 }
3489 break;
3490 case 119:
3491 SpawnWave(20);
3493 break;
3494 case 120:
3495 SpawnWave(21);
3497 break;
3498 case 121:
3501 valimathras->AI()->Talk(SAY_THRONE_2);
3503 break;
3504 case 122:
3505 SpawnWave(20);
3507 break;
3508 case 123:
3509 SpawnWave(21);
3511 break;
3512 case 124:
3515 valimathras->AI()->Talk(SAY_THRONE_3);
3517 break;
3518 case 125:
3519 SpawnWave(20);
3521 break;
3522 case 126:
3523 SpawnWave(21);
3525 break;
3526 case 127:
3529 valimathras->AI()->Talk(SAY_THRONE_4);
3531 break;
3532 case 128:
3533 SpawnWave(20);
3535 break;
3536 case 129:
3537 SpawnWave(21);
3539 break;
3540 case 130:
3543 valimathras->AI()->Talk(SAY_THRONE_5);
3545 break;
3546 case 131:
3547 SpawnWave(20);
3549 break;
3550 case 132:
3551 SpawnWave(21);
3553 break;
3554 case 133:
3557 valimathras->AI()->Talk(SAY_THRONE_6);
3559 break;
3560 case 134:
3561 SpawnWave(20);
3563 break;
3564 case 135:
3565 SpawnWave(21);
3567 break;
3568 case 136:
3571 break;
3572 // Valimathras Fight
3573 case 137:
3575 {
3576 valimathras->SetImmuneToAll(false);
3577 valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
3578 valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
3579 valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
3580 valimathras->SetHomePosition(me->GetPosition());
3581 valimathras->AddThreat(me, 100.0f);
3582 me->AddThreat(valimathras, 100.0f);
3583 valimathras->AI()->AttackStart(me);
3584 me->AI()->AttackStart(valimathras);
3585 }
3586 bStepping = false;
3588 break;
3589 // Valimathras Won
3590 case 138:
3593 break;
3594 case 139:
3597 break;
3598 case 140:
3599 SetEscortPaused(false);
3600 bStepping = false;
3602 break;
3603 case 141:
3605 break;
3606 case 142:
3608 me->SetFacingToObject(sylvanas);
3611 break;
3612 case 143:
3614 {
3615 sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f);
3616 sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
3617 }
3619 break;
3620 case 144:
3622 {
3623 sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
3624 me->SetFacingToObject(sylvanas);
3625 sylvanas->SetFacingToObject(me);
3627 }
3629 break;
3630 case 145:
3632 FollowThrall();
3633 SetEscortPaused(false);
3634 bStepping = false;
3636 break;
3637 case 146:
3640 break;
3641 case 147:
3642 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3643 {
3645 {
3646 allianceForcesGUID[i] = temp->GetGUID();
3647 temp->SetImmuneToAll(true);
3648 temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
3649 temp->SetReactState(REACT_PASSIVE);
3650 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3651 }
3652 }
3653 if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3654 {
3655 WrynnGUID = wrynn->GetGUID();
3656 wrynn->SetImmuneToAll(true);
3657 wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3658 wrynn->SetReactState(REACT_PASSIVE);
3659 wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f);
3660 }
3661 if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3662 {
3663 JainaGUID = jaina->GetGUID();
3664 jaina->SetImmuneToAll(true);
3665 jaina->SetReactState(REACT_PASSIVE);
3666 }
3668 break;
3669 // Wrynn Intro
3670 case 148:
3672 wrynn->AI()->Talk(WRYNN_SAY_THRONE_5);
3674 break;
3675 case 149:
3677 wrynn->AI()->Talk(WRYNN_SAY_THRONE_6);
3679 break;
3680 case 150:
3682 wrynn->AI()->Talk(WRYNN_SAY_THRONE_7);
3684 break;
3685 case 151:
3687 wrynn->AI()->Talk(WRYNN_SAY_THRONE_8);
3689 break;
3690 // Wrynn Fight
3691 case 152:
3692 me->SetImmuneToAll(false);
3694 {
3695 wrynn->SetImmuneToNPC(false);
3696 wrynn->SetImmuneToPC(true);
3697 wrynn->SetReactState(REACT_AGGRESSIVE);
3698 wrynn->AddThreat(me, 100.0f);
3699 me->AddThreat(wrynn, 100.0f);
3700 wrynn->AI()->AttackStart(me);
3701 }
3702
3703 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3704 {
3706 {
3707 temp->SetImmuneToAll(false);
3708 temp->SetReactState(REACT_AGGRESSIVE);
3709 temp->AddThreat(me, 100.0f);
3710 temp->AI()->AttackStart(me);
3711 }
3712 }
3714 break;
3715 case 153:
3717 {
3718 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
3719 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
3720 }
3722 break;
3723 case 154:
3725 {
3726 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
3727 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
3728 }
3730 break;
3731 case 155:
3732 {
3733 std::list<Creature*> HelperList;
3734 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
3735 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
3736 me->GetCreatureListWithEntryInGrid(HelperList, NPC_WRYNN, 100.0f);
3737 if (!HelperList.empty())
3738 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3739 (*itr)->DespawnOrUnsummon();
3741 break;
3742 }
3743 case 156:
3745 SetEscortPaused(false);
3746 bStepping = false;
3748 break;
3749 case 157:
3753 break;
3754 // Ending
3755 case 158:
3756 if (Creature* saurfang = me->SummonCreature(NPC_OVERLORD_SAURFANG, 1297.574f, 347.154f, -65.027f, TEMPSUMMON_MANUAL_DESPAWN))
3757 {
3758 SaurfangGUID = saurfang->GetGUID();
3759 saurfang->SetWalk(true);
3760 saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f);
3761 }
3763 break;
3764 case 159:
3766 {
3767 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_1);
3768 saurfang->SetStandState(UNIT_STAND_STATE_SIT);
3769 }
3771 break;
3772 case 160:
3774 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_2);
3776 break;
3777 case 161:
3779 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_3);
3780 if (Map* map = me->GetMap())
3781 {
3782 Map::PlayerList const& PlayerList = map->GetPlayers();
3783 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
3784 {
3785 if (Player* player = i->GetSource())
3786 {
3787 if (me->IsInRange(player, 0.0f, 50.0f))
3788 {
3789 if (player->GetTeamId() == TEAM_HORDE)
3790 {
3791 player->RemoveAura(SPELL_SYLVANAS_BUFF);
3792 player->RemoveAura(SPELL_THRALL_BUFF);
3793 player->CompleteQuest(QUEST_BATTLE_H);
3794 player->CastSpell(player, SPELL_PHASING_HORDE);
3795 }
3796 }
3797 }
3798 }
3799 }
3801 break;
3802 case 162:
3805 break;
3806 case 163:
3813 std::list<Creature*> HelperList;
3814 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
3816 if (!HelperList.empty())
3817 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3818 (*itr)->DespawnOrUnsummon(120s);
3819 me->DespawnOrUnsummon(120s);
3820 bStepping = false;
3822 break;
3823 }
3824 }
3825 else phaseTimer -= diff;
3826 }
3827
3828 if (!UpdateVictim())
3829 return;
3830
3831 _events.Update(diff);
3832
3834 return;
3835
3836 while (uint32 eventId = _events.ExecuteEvent())
3837 {
3838 switch (eventId)
3839 {
3843 break;
3844 case EVENT_LAVA_BURST:
3847 break;
3848 case EVENT_THUNDER:
3851 break;
3853 if (me->GetVictim())
3855 sylvanas->AI()->AttackStart(me->GetVictim());
3857 break;
3858 case EVENT_THRALL_BUFF:
3861 break;
3862 default:
3863 break;
3864 }
3865 }
3866
3868 }
std::uint32_t uint32
Definition Define.h:107
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &list, WorldObject *source, uint32 entry, float maxSearchRange)
Definition ScriptedCreature.cpp:948
@ 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:566
@ 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:2186
void Update(uint32 time)
Definition EventMap.h:67
EventId ExecuteEvent()
Definition EventMap.cpp:86
Definition GameObject.h:120
Definition LinkedList.h:139
Definition MapRefMgr.h:26
iterator begin()
Definition MapRefMgr.h:36
iterator end()
Definition MapRefMgr.h:37
Definition Map.h:166
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition MotionMaster.h:256
Definition Player.h:1084
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:40
SpellCastResult DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:277
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:178
void SetFacingToObject(WorldObject *object, Milliseconds timed=0ms)
Definition Unit.cpp:16456
void Dismount()
Definition Unit.cpp:10565
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:1375
Unit * GetVictim() const
Definition Unit.h:903
bool HasUnitState(const uint32 f) const
Definition Unit.h:736
void HandleEmoteCommand(uint32 emoteId)
Definition Unit.cpp:2197
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition Unit.h:924
void setActive(bool isActiveObject)
Definition Object.cpp:1082
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
Definition Object.cpp:1460
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:2474
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition zone_undercity.cpp:2241
void JumpToNextStep(uint32 uiTimer)
Definition zone_undercity.cpp:2456
void SpawnWave(uint32 waveId)
Definition zone_undercity.cpp:2483
@ 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, 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
2438 {
2439 Map::PlayerList const& players = map->GetPlayers();
2440
2441 if (!players.IsEmpty())
2442 {
2443 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2444 {
2445 if (Player* player = itr->GetSource())
2446 player->SendUpdateWorldState(id, state);
2447 }
2448 }
2449 }
bool IsEmpty() const
Definition LinkedList.h:97
PlayerList const & GetPlayers() const
Definition Map.h:329

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.

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