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()
 
- Public Member Functions inherited from npc_escortAI
 npc_escortAI (Creature *creature)
 
 ~npc_escortAI () override
 
void AttackStart (Unit *who) override
 
void MoveInLineOfSight (Unit *who) override
 
void JustDied (Unit *) override
 
void JustRespawned () override
 
void ReturnToLastPoint ()
 
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, bool run=false, ObjectGuid playerGUID=ObjectGuid::Empty, Quest const *quest=nullptr, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=true)
 
void SetRun (bool on=true)
 
void SetEscortPaused (bool on)
 
bool HasEscortState (uint32 escortState)
 
bool IsEscorted () override
 
void SetMaxPlayerDistance (float newMax)
 
float GetMaxPlayerDistance ()
 
void SetDespawnAtEnd (bool despawn)
 
void SetDespawnAtFar (bool despawn)
 
bool GetAttack ()
 
void SetCanAttack (bool attack)
 
ObjectGuid GetEventStarterGUID ()
 
void AddEscortState (uint32 escortState)
 
void RemoveEscortState (uint32 escortState)
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
 ~ScriptedAI () override
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask) override
 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.
 
void AttackStart (Unit *) override
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoCastSpell (Unit *target, SpellInfo const *spellInfo, bool triggered=false)
 
void DoPlaySoundToSet (WorldObject *source, uint32 soundId)
 
void DoPlayMusic (uint32 soundId, bool zone)
 
void DoAddThreat (Unit *unit, float amount)
 
void DoModifyThreatByPercent (Unit *unit, int32 pct)
 
void DoResetThreat (Unit *unit)
 
void DoResetThreatList ()
 
float DoGetThreat (Unit *unit)
 
void DoTeleportPlayer (Unit *unit, float x, float y, float z, float o)
 
void 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=0s, uint32 uniqueId=0)
 
void ScheduleTimedEvent (Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0s, uint32 uniqueId=0)
 
void ScheduleUniqueTimedEvent (Milliseconds timer, std::function< void()> exec, uint32 uniqueId)
 
bool HealthBelowPct (uint32 pct) const
 
bool HealthAbovePct (uint32 pct) const
 
SpellInfo const * SelectSpell (Unit *target, uint32 school, uint32 mechanic, SelectTargetType targets, uint32 powerCostMin, uint32 powerCostMax, float rangeMin, float rangeMax, SelectEffect effect)
 
void SetEquipmentSlots (bool loadDefault, int32 mainHand=EQUIP_NO_CHANGE, int32 offHand=EQUIP_NO_CHANGE, int32 ranged=EQUIP_NO_CHANGE)
 
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=0s)
 Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
 
void Talk (uint8 id, Milliseconds delay)
 
WorldObjectGetSummoner () const
 Returns the summoner creature/object, if the creature is a temporary summon.
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDespawnAll ()
 
virtual void SummonedCreatureEvade (Creature *)
 
virtual void OnSpellCastFinished (SpellInfo const *, SpellFinishReason)
 
virtual void AttackedBy (Unit *)
 
virtual void PathEndReached (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 *)
 
virtual void OwnerAttacked (Unit *)
 
virtual void CorpseRemoved (uint32 &)
 == Triggered Actions Requested ==================
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields =======================================
 
virtual bool BeforeSpellClick (Unit *)
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual bool CanAlwaysBeDetectable (WorldObject const *)
 
virtual void PetStopAttack ()
 
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, 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 JustEnteredCombat (Unit *)
 Called when the unit enters combat.
 
virtual void JustExitedCombat ()
 Called when the unit leaves combat.
 
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
 
- 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
2280 : npc_escortAI(creature)
2281 {
2282 hordeGuardsGUID.clear();
2283 }
Definition ScriptedEscortAI.h:53
GuidVector hordeGuardsGUID
Definition zone_undercity.cpp:2298

References hordeGuardsGUID.

Member Function Documentation

◆ ActivateValimathrasPortal()

void npc_thrall_bfu::npc_thrall_bfuAI::ActivateValimathrasPortal ( )
inline
2526 {
2527 if (Creature* portal = me->FindNearestCreature(NPC_VARIMATHRAS_PORTAL, 500.0f))
2528 {
2529 portal->SummonCreature(NPC_LEGION_OVERLORD, ThrallSpawn[81].x + rand32() % 5, ThrallSpawn[81].y + rand32() % 5, ThrallSpawn[81].z, TEMPSUMMON_DEAD_DESPAWN);
2530 portal->DespawnOrUnsummon();
2531 }
2532 }
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:54
uint32 rand32()
Definition Random.cpp:80
Definition Creature.h:43
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2425
Creature * me
Definition ScriptedCreature.h:280
@ NPC_LEGION_OVERLORD
Definition zone_undercity.cpp:683
@ NPC_VARIMATHRAS_PORTAL
Definition zone_undercity.cpp:628
static LocationXYZO ThrallSpawn[]
Definition zone_undercity.cpp:772

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.

2905 {
2906 return victim->GetEntry() != NPC_BLIGHT_SLINGER;
2907 }
@ NPC_BLIGHT_SLINGER
Definition zone_undercity.cpp:680

References Object::GetEntry(), and NPC_BLIGHT_SLINGER.

◆ EnterEvadeMode()

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

Reimplemented from npc_escortAI.

2303 {
2306 me->CombatStop(true);
2307 me->SetLootRecipient(nullptr);
2308
2310 {
2313 }
2314 else
2315 {
2317 Reset();
2318 }
2319 }
@ STATE_ESCORT_ESCORTING
Definition ScriptedEscortAI.h:47
@ STATE_ESCORT_RETURNING
Definition ScriptedEscortAI.h:48
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition Creature.cpp:1331
void MoveTargetedHome(bool walk=false)
The unit will return this initial position (owner for pets and summoned creatures)....
Definition MotionMaster.cpp:259
void ClearAllThreat()
Definition ThreatMgr.cpp:417
void CombatStop(bool includingCast=false)
Definition Unit.cpp:10531
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4841
MotionMaster * GetMotionMaster()
Definition Unit.h:1676
ThreatMgr & GetThreatMgr()
Definition Unit.h:900
bool HasEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:98
void AddEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:110
void ReturnToLastPoint()
Definition ScriptedEscortAI.cpp:186
void Reset() override
Definition zone_undercity.cpp:2321
@ SPELL_HEROIC_VANGUARD
Definition zone_undercity.cpp:504

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

◆ FollowThrall()

void npc_thrall_bfu::npc_thrall_bfuAI::FollowThrall ( )
inline
2514 {
2516 {
2517 sylvanas->GetMotionMaster()->Clear();
2518 sylvanas->SetImmuneToAll(false);
2519 sylvanas->SetReactState(REACT_AGGRESSIVE);
2520 sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
2521 sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
2522 }
2523 }
@ FACTION_ESCORT_N_NEUTRAL_ACTIVE
Definition ScriptSystem.h:37
@ REACT_AGGRESSIVE
Definition Unit.h:551
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition ObjectAccessor.cpp:210
ObjectGuid sylvanasfollowGUID
Definition zone_undercity.cpp:2291

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
2508 {
2509 phaseTimer = uiTimer;
2510 ++step;
2511 }
uint32 phaseTimer
Definition zone_undercity.cpp:2289
uint32 step
Definition zone_undercity.cpp:2288

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

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

Reimplemented from CreatureAI.

2382 {
2383 switch (summoned->GetEntry())
2384 {
2386 summoned->SetHomePosition(me->GetPosition());
2387 summoned->AddThreat(me, 100.0f);
2388 break;
2392 break;
2395 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2397 break;
2398 case NPC_CAVE_DUMMY:
2400 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2402 summoned->AddAura(SPELL_CYCLONE_FALL, summoned);
2403 break;
2405 case NPC_DOCTOR_H:
2406 case NPC_CHEMIST_H:
2409 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2411 if (!EnableAttack)
2412 summoned->SetFaction(FACTION_FRIENDLY);
2413 summoned->AddThreat(me, 100.0f);
2414 me->AddThreat(summoned, 100.0f);
2415 summoned->AI()->AttackStart(me);
2416 break;
2417 case NPC_LEGION_INVADER:
2420 case NPC_DREADLORD:
2421 case NPC_BETRAYER_H:
2422 case NPC_FELBEAST_H:
2425 summoned->AddThreat(me, 100.0f);
2426 me->AddThreat(summoned, 100.0f);
2427 summoned->AI()->AttackStart(me);
2428 break;
2429 case NPC_KHANOK:
2430 summoned->SetHomePosition(me->GetPosition());
2431 summoned->AddThreat(me, 100.0f);
2432 summoned->AI()->AttackStart(me);
2433 default:
2434 break;
2435 }
2436 }
@ EMOTE_STATE_READY2H
Definition SharedDefines.h:1981
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition SharedDefines.h:933
@ SPELL_EFFECT_KNOCK_BACK
Definition SharedDefines.h:887
@ IMMUNITY_EFFECT
Definition SharedDefines.h:1405
@ IMMUNITY_ID
Definition SharedDefines.h:1411
@ FACTION_FRIENDLY
Definition SharedDefines.h:212
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:277
@ UNIT_NPC_EMOTESTATE
Definition UpdateFields.h:140
void SetHomePosition(float x, float y, float z, float o)
Definition Creature.h:341
CreatureAI * AI() const
Definition Creature.h:141
uint32 GetEntry() const
Definition Object.h:116
virtual void AttackStart(Unit *)
Definition UnitAI.cpp:27
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition Unit.cpp:13483
void SetFaction(uint32 faction)
Definition Unit.cpp:10126
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition Unit.cpp:14754
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:18960
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:21182
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:703
void GetPosition(float &x, float &y) const
Definition Position.h:126
bool EnableAttack
Definition zone_undercity.cpp:2286
@ NPC_DOCTOR_H
Definition zone_undercity.cpp:678
@ NPC_BETRAYER_H
Definition zone_undercity.cpp:675
@ NPC_DREADLORD
Definition zone_undercity.cpp:659
@ NPC_FELBEAST_H
Definition zone_undercity.cpp:673
@ NPC_LEGION_DREADWHISPER
Definition zone_undercity.cpp:685
@ NPC_CHEMIST_H
Definition zone_undercity.cpp:676
@ NPC_LEGION_INVADER
Definition zone_undercity.cpp:684
@ NPC_TREACHEROUS_GUARDIAN_H
Definition zone_undercity.cpp:671
@ NPC_FELGUARD_MORADEUR
Definition zone_undercity.cpp:682
@ NPC_KHANOK
Definition zone_undercity.cpp:621
@ SPELL_SYLVANAS_BUFF
Definition zone_undercity.cpp:550
@ NPC_BLIGHT_ABBERATION
Definition zone_undercity.cpp:523
@ NPC_CAVE_DUMMY
Definition zone_undercity.cpp:518
@ NPC_WARSONG_BATTLEGUARD
Definition zone_undercity.cpp:514
@ SPELL_CYCLONE_FALL
Definition zone_undercity.cpp:490
@ SPELL_THRALL_BUFF
Definition zone_undercity.cpp:484

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.

2322 {
2324 {
2327 me->SetCorpseDelay(1);
2328 me->SetRespawnTime(1);
2331
2332 bStepping = false;
2333 EnableAttack = false;
2334 step = 0;
2335 phaseTimer = 0;
2342
2344 {
2345 valimathras->DespawnOrUnsummon();
2347 }
2348
2350 {
2351 valimathrasportal->DespawnOrUnsummon();
2353 }
2354
2356 {
2357 wrynn->DespawnOrUnsummon();
2358 WrynnGUID.Clear();
2359 }
2360
2362 {
2363 jaina->DespawnOrUnsummon();
2364 JainaGUID.Clear();
2365 }
2366
2368 {
2369 saurfang->DespawnOrUnsummon();
2371 }
2372
2373 for (ObjectGuid const& guid : hordeGuardsGUID)
2374 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
2375 temp->DespawnOrUnsummon();
2376
2377 hordeGuardsGUID.clear();
2378 }
2379 }
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:32
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:317
void SetRespawnTime(uint32 respawn)
Definition Creature.cpp:3801
void SetCorpseDelay(uint32 delay)
Definition Creature.h:70
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group=0, uint32 phase=0)
Definition EventMap.cpp:56
Definition ObjectGuid.h:118
void Clear()
Definition ObjectGuid.h:138
void Mount(uint32 mount, uint32 vehicleId=0, uint32 creatureEntry=0)
Definition Unit.cpp:13559
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:719
void SetStandState(uint8 state)
Definition Unit.cpp:16809
Definition ObjectAccessor.h:61
bool bStepping
Definition zone_undercity.cpp:2285
ObjectGuid ValimathrasGUID
Definition zone_undercity.cpp:2293
ObjectGuid ValimathrasPortalGUID
Definition zone_undercity.cpp:2294
ObjectGuid SaurfangGUID
Definition zone_undercity.cpp:2297
ObjectGuid JainaGUID
Definition zone_undercity.cpp:2296
EventMap _events
Definition zone_undercity.cpp:2300
ObjectGuid WrynnGUID
Definition zone_undercity.cpp:2295
@ EVENT_CHAIN_LIGHTNING
Definition zone_undercity.cpp:507
@ EVENT_THRALL_BUFF
Definition zone_undercity.cpp:511
@ EVENT_AGGRO_SYLVANAS
Definition zone_undercity.cpp:510
@ MODEL_WHITE_WULF
Definition zone_undercity.cpp:531
@ EVENT_THUNDER
Definition zone_undercity.cpp:509
@ EVENT_LAVA_BURST
Definition zone_undercity.cpp:508

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
2503 {
2504 SetEscortPaused(bOnHold);
2505 }
void SetEscortPaused(bool on)
Definition ScriptedEscortAI.cpp:516

References npc_escortAI::SetEscortPaused().

Referenced by WaypointReached().

◆ SpawnWave()

void npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave ( uint32  waveId)
inline
2535 {
2536 switch (waveId)
2537 {
2538 case 0: // Vortex
2540 whirlwind1->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 10, false);
2542 whirlwind2->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 100, false);
2543 break;
2544 case 1:
2545 // BATTLING_COURTYARD Initial Spawn
2546 for (uint8 i = 0; i < 3; ++i)
2548 for (uint8 i = 0; i < 9; ++i)
2550 for (uint8 i = 0; i < 6; ++i)
2552 for (uint8 i = 0; i < 4; ++i)
2554 break;
2555 case 2:
2556 // Valimathras
2558 {
2559 ValimathrasGUID = temp->GetGUID();
2560 temp->SetImmuneToAll(true);
2561 }
2562 break;
2563 case 3:
2565 ValimathrasPortalGUID = temp->GetGUID();
2566 break;
2567 case 4:
2568 // COURTYARD_FIGHT Spawns
2569 for (uint8 i = 0; i < WAVE_COURTYARD_FIGHT; ++i)
2570 {
2571 switch (urand(0, 2))
2572 {
2573 case 0:
2575 break;
2576 case 1:
2578 break;
2579 case 2:
2581 break;
2582 }
2583 }
2584 break;
2585 case 5:
2586 // Bossspawn 1
2588 {
2589 me->AddThreat(temp, 100.0f);
2590 me->AI()->AttackStart(temp);
2591 }
2592 break;
2593 case 6:
2594 // COURTYARD_DONE Spawn
2596 {
2597 hordeGuardsGUID.push_back(temp->GetGUID());
2598 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
2599 }
2601 {
2602 hordeGuardsGUID.push_back(temp->GetGUID());
2603 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
2604 }
2606 {
2607 hordeGuardsGUID.push_back(temp->GetGUID());
2608 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
2609 }
2611 {
2612 hordeGuardsGUID.push_back(temp->GetGUID());
2613 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
2614 }
2615 for (uint8 i = 0; i < 2; ++i)
2617 hordeGuardsGUID.push_back(temp->GetGUID());
2618 break;
2619 case 7:
2620 for (uint8 i = 0; i < 9; ++i)
2622 break;
2623 case 8:
2624 for (uint8 i = 0; i < 2; ++i)
2626 hordeGuardsGUID.push_back(temp->GetGUID());
2627 break;
2628 case 9:
2629 // Top of Undercity - Attacktrashpack
2630 for (uint8 i = 0; i < 3; ++i)
2631 {
2632 switch (urand(0, 2))
2633 {
2634 case 0:
2636 break;
2637 case 1:
2639 break;
2640 case 2:
2642 break;
2643 }
2644 }
2645 break;
2646 case 10:
2647 // Top of Undercity - Attacktrashpack
2648 for (uint8 i = 0; i < 3; ++i)
2649 {
2650 switch (urand(0, 1))
2651 {
2652 case 0:
2654 break;
2655 case 1:
2657 break;
2658 }
2659 }
2660 break;
2661 case 11:
2662 // Bottom of Undercity - Attacktrashpack
2663 for (uint8 i = 0; i < 3; ++i)
2664 {
2665 switch (urand(0, 1))
2666 {
2667 case 0:
2669 break;
2670 case 1:
2672 break;
2673 }
2674 }
2675 break;
2676 case 12:
2677 // Valimathras 2
2679 {
2680 ValimathrasGUID = temp->GetGUID();
2681 temp->SetImmuneToAll(true);
2682 }
2683 break;
2684 case 13:
2686 ValimathrasPortalGUID = temp->GetGUID();
2687 break;
2688 // NPC_KHANOK - Inner Sunktum Spawn Left
2689 case 14:
2690 for (uint8 i = 0; i < 4; ++i)
2691 {
2692 switch (urand(0, 6))
2693 {
2694 case 0:
2696 break;
2697 case 1:
2699 break;
2700 case 2:
2702 break;
2703 case 3:
2705 break;
2706 case 4:
2708 break;
2709 case 5:
2711 break;
2712 case 6:
2714 break;
2715 }
2716 }
2717 break;
2718 // NPC_KHANOK - Inner Sunktum Spawn Right
2719 case 15:
2720 for (uint8 i = 0; i < 4; ++i)
2721 {
2722 switch (urand(0, 6))
2723 {
2724 case 0:
2726 break;
2727 case 1:
2729 break;
2730 case 2:
2732 break;
2733 case 3:
2735 break;
2736 case 4:
2738 break;
2739 case 5:
2741 break;
2742 case 6:
2744 break;
2745 }
2746 }
2747 break;
2748 // NPC_KHANOK - Inner Sunktum Spawn Top
2749 case 16:
2751 break;
2752 // NPC_KHANOK - Inner Sunktum Spawn Middle
2753 case 17:
2755 {
2756 me->AddThreat(temp, 100.0f);
2757 me->AI()->AttackStart(temp);
2758 }
2759 break;
2760 case 18:
2762 {
2763 hordeGuardsGUID.push_back(temp->GetGUID());
2764 temp->AI()->Talk(SAY_FOR_THE_HORDE);
2765 temp->GetMotionMaster()->MovePath(NPC_WARSONG_BATTLEGUARD * 100, false);
2766 }
2767 break;
2768 // Valimathras Room Preparation
2769 case 19:
2770 for (uint8 i = 0; i < 3; ++i)
2771 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);
2772 // Valimathras BossSpawn
2774 {
2775 ValimathrasGUID = temp->GetGUID();
2776 temp->SetImmuneToAll(true);
2777 temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
2778 temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
2779 temp->AI()->Talk(SAY_CLOSE_DOOR);
2780 }
2781 for (uint8 i = 0; i < 6; ++i)
2782 {
2784 temp->CastSpell(me, SPELL_VALIMATHRAS_PORTAL);
2785 }
2786 break;
2787 case 20:
2788 for (uint8 i = 0; i < 3; ++i)
2789 {
2790 switch (urand(0, 1))
2791 {
2792 case 0:
2794 break;
2795 case 1:
2797 break;
2798 }
2799 }
2800 break;
2801 case 21:
2802 for (uint8 i = 0; i < 3; ++i)
2803 {
2804 switch (urand(0, 1))
2805 {
2806 case 0:
2808 break;
2809 case 1:
2811 break;
2812 }
2813 }
2814 break;
2815 }
2816 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::uint8_t uint8
Definition Define.h:109
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:55
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:48
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
Definition Unit.h:620
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:2334
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:2348
float o
Definition zone_undercity.cpp:715
float y
Definition zone_undercity.cpp:715
float x
Definition zone_undercity.cpp:715
float z
Definition zone_undercity.cpp:715
@ NPC_DOOMGUARD_PILLARGER
Definition zone_undercity.cpp:679
@ SAY_FOR_THE_HORDE
Definition zone_undercity.cpp:690
@ WAVE_COURTYARD_FIGHT
Definition zone_undercity.cpp:708
@ NPC_VARIMATHRAS
Definition zone_undercity.cpp:627
@ SPELL_VALIMATHRAS_PORTAL
Definition zone_undercity.cpp:646
@ SPELL_OPENING_LEGION_PORTALS
Definition zone_undercity.cpp:653
@ SPELL_AURA_OF_VARIMATHRAS
Definition zone_undercity.cpp:651
@ SAY_CLOSE_DOOR
Definition zone_undercity.cpp:636
@ GO_BLOCKED_PASSAGE
Definition zone_undercity.cpp:526
@ NPC_VORTEX
Definition zone_undercity.cpp:515
@ NPC_WHIRLWIND
Definition zone_undercity.cpp:517

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.

2439 {
2440 switch (summon->GetEntry())
2441 {
2445 bStepping = true;
2446 break;
2447 case NPC_KHANOK:
2448 {
2451 FollowThrall();
2452 SetEscortPaused(false);
2453 std::list<Creature*> SanktumList;
2455 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DREADLORD, 1000.0f);
2457 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DOCTOR_H, 1000.0f);
2458 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_CHEMIST_H, 1000.0f);
2459 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_BETRAYER_H, 1000.0f);
2460 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_FELBEAST_H, 1000.0f);
2462 if (!SanktumList.empty())
2463 for (std::list<Creature*>::iterator itr = SanktumList.begin(); itr != SanktumList.end(); itr++)
2464 (*itr)->DespawnOrUnsummon();
2465 break;
2466 }
2467 case NPC_VARIMATHRAS:
2468 {
2471 std::list<Creature*> ThroneList;
2476 if (!ThroneList.empty())
2477 for (std::list<Creature*>::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++)
2478 (*itr)->DespawnOrUnsummon();
2479 SetEscortPaused(false);
2480 SetRun(false);
2481 break;
2482 }
2483 default:
2484 break;
2485 }
2486 }
@ 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
Map * GetMap() const
Definition Object.h:621
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2486
void SetRun(bool on=true)
Definition ScriptedEscortAI.cpp:421
void FollowThrall()
Definition zone_undercity.cpp:2513
void UpdateWorldState(Map *map, uint32 id, uint32 state)
Definition zone_undercity.cpp:2488

References bStepping, FollowThrall(), WorldObject::GetCreatureListWithEntryInGrid(), Object::GetEntry(), WorldObject::GetMap(), ScriptedAI::me, NPC_BETRAYER_H, NPC_BLIGHT_ABBERATION, NPC_CHEMIST_H, NPC_DOCTOR_H, NPC_DOOMGUARD_PILLARGER, NPC_DREADLORD, NPC_FELBEAST_H, NPC_FELGUARD_MORADEUR, NPC_KHANOK, NPC_LEGION_DREADWHISPER, NPC_LEGION_INVADER, NPC_LEGION_OVERLORD, NPC_TREACHEROUS_GUARDIAN_H, NPC_VARIMATHRAS, NPC_VARIMATHRAS_PORTAL, npc_escortAI::SetEscortPaused(), npc_escortAI::SetRun(), UpdateWorldState(), WORLD_STATE_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.

2910 {
2912
2913 if (bStepping)
2914 {
2915 if (phaseTimer <= diff)
2916 {
2917 switch (step)
2918 {
2919 //Preparation
2920 case 0:
2921 me->setActive(true);
2923 break;
2924 case 1:
2928 break;
2929 case 2:
2932 break;
2933 case 3:
2934 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2935 guard->AI()->Talk(SAY_BURN_UC);
2937 break;
2938 case 4:
2939 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2940 guard->AI()->Talk(SAY_PUTRESS_ANGER);
2942 break;
2943 case 5:
2946 break;
2947 case 6:
2950 break;
2951 case 7:
2954 break;
2955 case 8:
2958 break;
2959 case 9:
2962 break;
2963 case 10:
2966 break;
2967 // Start Event
2968 case 11:
2972 SetEscortPaused(false);
2973 bStepping = false;
2974 JumpToNextStep(0);
2975 SetRun(true);
2977 {
2978 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 100, false);
2979 sylvanas->setActive(true);
2980 }
2981 break;
2982 case 12:
2983 me->Dismount();
2985 break;
2986 case 13:
2988 sylvanas->Dismount();
2990 break;
2991 case 14:
2994 break;
2995 case 15:
2997 SpawnWave(0);
2999 break;
3000 case 16:
3001 {
3002 std::list<Creature*> PlagueList;
3004 if (!PlagueList.empty())
3005 for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
3006 (*itr)->DespawnOrUnsummon();
3007 SetEscortPaused(false);
3008 SetRun(false);
3010 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 1000, false);
3012 break;
3013 }
3014 case 17:
3015 bStepping = false;
3016 JumpToNextStep(0);
3017 break;
3018 case 18:
3019 SpawnWave(1);
3022 break;
3023 case 19:
3024 {
3025 SpawnWave(2);
3027 break;
3028 }
3029 case 20:
3031 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_0);
3033 break;
3034 case 21:
3036 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_1);
3038 break;
3039 case 22:
3041 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_2);
3043 break;
3044 case 23:
3045 SpawnWave(3);
3047 break;
3048 case 24:
3050 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3052 break;
3053 case 25:
3055 {
3056 valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
3057 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3058 }
3060 valimathrasportal->DespawnOrUnsummon(6 * IN_MILLISECONDS);
3062 break;
3063 case 26:
3064 {
3067 std::list<Creature*> HelperList;
3069 if (!HelperList.empty())
3070 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3071 (*itr)->DespawnOrUnsummon();
3073 break;
3074 }
3075 // Start COURTYARD_FIGHT
3076 case 27:
3077 FollowThrall();
3078 SetEscortPaused(false);
3079 bStepping = false;
3080 SetRun(true);
3084 JumpToNextStep(0);
3085 break;
3086 case 28:
3087 {
3088 EnableAttack = true;
3090 std::list<Creature*> HostileEndList;
3092 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_DOCTOR_H, 1000.0f);
3093 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_CHEMIST_H, 1000.0f);
3094 if (!HostileEndList.empty())
3095 for (std::list<Creature*>::iterator itr = HostileEndList.begin(); itr != HostileEndList.end(); itr++) (*itr)->SetFaction(FACTION_MONSTER);
3096 SpawnWave(4);
3098 break;
3099 }
3100 case 29:
3101 SpawnWave(4);
3103 break;
3104 case 30:
3105 SpawnWave(4);
3107 break;
3108 case 31:
3109 SpawnWave(4);
3111 break;
3112 case 32:
3113 SpawnWave(4);
3115 break;
3116 case 33:
3117 SpawnWave(4);
3119 break;
3120 case 34:
3121 SpawnWave(4);
3123 break;
3124 case 35:
3125 SpawnWave(4);
3127 break;
3128 case 36:
3129 SpawnWave(4);
3131 break;
3132 case 37:
3133 SpawnWave(4);
3135 break;
3136 case 38:
3137 SpawnWave(4);
3139 break;
3140 case 39:
3141 SpawnWave(4);
3143 break;
3144 case 40:
3145 SpawnWave(4);
3147 break;
3148 case 41:
3149 SpawnWave(4);
3151 break;
3152 case 42:
3153 SpawnWave(4);
3155 break;
3156 case 43:
3157 SpawnWave(4);
3159 break;
3160 case 44:
3161 SpawnWave(4);
3163 break;
3164 case 45:
3165 SpawnWave(5);
3166 bStepping = false;
3168 break;
3169 // End COURTYARD_FIGHT
3170 case 46:
3171 {
3172 FollowThrall();
3173 std::list<Creature*> HostileList;
3175 me->GetCreatureListWithEntryInGrid(HostileList, NPC_DOCTOR_H, 1000.0f);
3176 me->GetCreatureListWithEntryInGrid(HostileList, NPC_CHEMIST_H, 1000.0f);
3178 for (auto& creature : HostileList)
3179 creature->DespawnOrUnsummon();
3180 for (uint8 i = 0; i < 7; ++i)
3181 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);
3182 SpawnWave(6);
3183 SetEscortPaused(false);
3184 bStepping = false;
3185 SetRun(false);
3187 break;
3188 }
3189 case 47:
3192 break;
3193 case 48:
3194 SetEscortPaused(false);
3195 bStepping = false;
3197 break;
3198 // Elevator Event
3199 case 49:
3202 break;
3203 case 50:
3205 sylvanas->AI()->Talk(SYLVANAS_SAY_ELEVATOR_1);
3207 break;
3208 case 51:
3211 SpawnWave(7);
3213 break;
3214 case 52:
3217 break;
3218 case 53:
3219 SpawnWave(8);
3220 me->GetMotionMaster()->MoveJump(ThrallSpawn[55].x, ThrallSpawn[55].y, ThrallSpawn[55].z, 40.0f, 40.0f, 0);
3222 sylvanas->GetMotionMaster()->MoveJump(ThrallSpawn[56].x, ThrallSpawn[56].y, ThrallSpawn[56].z, 40.0f, 40.0f, 0);
3224 break;
3225 case 54:
3226 FollowThrall();
3227 SetEscortPaused(false);
3228 bStepping = false;
3229 SetRun(false);
3231 break;
3232 // Top of Undercity Discussion
3233 case 55:
3235 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_1);
3237 break;
3238 case 56:
3240 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_2);
3242 break;
3243 case 57:
3246 break;
3247 case 58:
3249 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_3);
3251 break;
3252 // Top of Undercity - Fight
3253 case 59:
3254 SpawnWave(9);
3256 break;
3257 case 60:
3258 SpawnWave(9);
3260 break;
3261 case 61:
3262 SpawnWave(9);
3264 break;
3265 case 62:
3266 FollowThrall();
3267 SetEscortPaused(false);
3268 bStepping = false;
3269 SetRun(false);
3271 break;
3272 case 63:
3274 break;
3275 case 64:
3276 SpawnWave(10);
3278 break;
3279 case 65:
3280 SpawnWave(10);
3282 break;
3283 case 66:
3284 FollowThrall();
3285 SetEscortPaused(false);
3286 bStepping = false;
3287 SetRun(false);
3289 break;
3290 case 67:
3291 SpawnWave(11);
3293 break;
3294 case 68:
3295 SpawnWave(11);
3297 break;
3298 case 69:
3299 FollowThrall();
3300 SetEscortPaused(false);
3301 bStepping = false;
3302 SetRun(false);
3304 break;
3305 // KHANOK - Valimathtas Intro
3306 case 70:
3308 break;
3309 case 71:
3311 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_4);
3312 SpawnWave(12);
3314 break;
3315 case 72:
3317 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_0);
3319 break;
3320 case 73:
3322 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_1);
3323 SpawnWave(13);
3325 break;
3326 case 74:
3328 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3330 break;
3331 case 75:
3333 {
3334 valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
3335 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3336 }
3338 valimathrasportal->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3340 break;
3341 // KHANOK - Trashspawn
3342 case 76:
3343 SpawnWave(14);
3345 break;
3346 case 77:
3347 SpawnWave(15);
3349 break;
3350 case 78:
3351 SpawnWave(16);
3353 break;
3354 case 79:
3355 SpawnWave(14);
3357 break;
3358 case 80:
3359 SpawnWave(15);
3361 break;
3362 case 81:
3363 SpawnWave(16);
3365 break;
3366 case 82:
3367 SpawnWave(14);
3369 break;
3370 case 83:
3371 SpawnWave(15);
3373 break;
3374 case 84:
3375 SpawnWave(16);
3377 break;
3378 case 85:
3379 SpawnWave(14);
3381 break;
3382 case 86:
3383 SpawnWave(15);
3385 break;
3386 case 87:
3387 SpawnWave(16);
3389 break;
3390 case 88:
3391 SpawnWave(14);
3393 break;
3394 case 89:
3395 SpawnWave(15);
3397 break;
3398 case 90:
3399 SpawnWave(16);
3401 break;
3402 case 91:
3403 SpawnWave(14);
3405 break;
3406 case 92:
3407 SpawnWave(15);
3409 break;
3410 case 93:
3411 SpawnWave(16);
3413 break;
3414 case 94:
3415 // Spawn Boss 2 KHANOK
3416 SpawnWave(17);
3418 break;
3419 case 95:
3420 SpawnWave(14);
3422 break;
3423 case 96:
3424 SpawnWave(15);
3426 break;
3427 case 97:
3428 SpawnWave(16);
3430 bStepping = false;
3431 break;
3432 case 98:
3433 // KHANOK - Won
3436 break;
3437 case 99:
3438 SpawnWave(18);
3440 break;
3441 case 100:
3442 SpawnWave(18);
3444 break;
3445 case 101:
3446 SpawnWave(18);
3448 break;
3449 case 102:
3450 SpawnWave(18);
3452 break;
3453 case 103:
3454 SpawnWave(18);
3456 break;
3457 case 104:
3458 SpawnWave(18);
3460 break;
3461 case 105:
3462 SpawnWave(18);
3464 break;
3465 case 106:
3466 SpawnWave(18);
3468 break;
3469 case 107:
3470 SpawnWave(18);
3472 break;
3473 case 108:
3475 FollowThrall();
3476 SetEscortPaused(false);
3477 bStepping = false;
3478 SetRun(false);
3480 break;
3481 case 109:
3483 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_5);
3485 break;
3486 case 110:
3487 SpawnWave(19);
3489 break;
3490 case 111:
3491 FollowThrall();
3492 SetEscortPaused(false);
3493 bStepping = false;
3494 SetRun(true);
3496 break;
3497 case 112:
3499 break;
3500 case 113:
3503 break;
3504 case 114:
3508 break;
3509 case 115:
3510 {
3511 std::list<GameObject*> SaronitList;
3513 for (std::list<GameObject*>::const_iterator itr = SaronitList.begin(); itr != SaronitList.end(); ++itr)
3514 if (GameObject* saronit = (*itr))
3515 saronit->UseDoorOrButton();
3517 break;
3518 }
3519 case 116:
3522 FollowThrall();
3523 SetEscortPaused(false);
3524 bStepping = false;
3526 break;
3527 // Valimathras Intro
3528 case 117:
3531 break;
3532 case 118:
3534 {
3535 valimathras->AI()->Talk(SAY_THRONE_1);
3536 valimathras->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
3537 }
3539 break;
3540 case 119:
3541 SpawnWave(20);
3543 break;
3544 case 120:
3545 SpawnWave(21);
3547 break;
3548 case 121:
3551 valimathras->AI()->Talk(SAY_THRONE_2);
3553 break;
3554 case 122:
3555 SpawnWave(20);
3557 break;
3558 case 123:
3559 SpawnWave(21);
3561 break;
3562 case 124:
3565 valimathras->AI()->Talk(SAY_THRONE_3);
3567 break;
3568 case 125:
3569 SpawnWave(20);
3571 break;
3572 case 126:
3573 SpawnWave(21);
3575 break;
3576 case 127:
3579 valimathras->AI()->Talk(SAY_THRONE_4);
3581 break;
3582 case 128:
3583 SpawnWave(20);
3585 break;
3586 case 129:
3587 SpawnWave(21);
3589 break;
3590 case 130:
3593 valimathras->AI()->Talk(SAY_THRONE_5);
3595 break;
3596 case 131:
3597 SpawnWave(20);
3599 break;
3600 case 132:
3601 SpawnWave(21);
3603 break;
3604 case 133:
3607 valimathras->AI()->Talk(SAY_THRONE_6);
3609 break;
3610 case 134:
3611 SpawnWave(20);
3613 break;
3614 case 135:
3615 SpawnWave(21);
3617 break;
3618 case 136:
3621 break;
3622 // Valimathras Fight
3623 case 137:
3625 {
3626 valimathras->SetImmuneToAll(false);
3627 valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
3628 valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
3629 valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
3630 valimathras->SetHomePosition(me->GetPosition());
3631 valimathras->AddThreat(me, 100.0f);
3632 me->AddThreat(valimathras, 100.0f);
3633 valimathras->AI()->AttackStart(me);
3634 me->AI()->AttackStart(valimathras);
3635 }
3636 bStepping = false;
3638 break;
3639 // Valimathras Won
3640 case 138:
3643 break;
3644 case 139:
3647 break;
3648 case 140:
3649 SetEscortPaused(false);
3650 bStepping = false;
3652 break;
3653 case 141:
3655 break;
3656 case 142:
3658 me->SetFacingToObject(sylvanas);
3661 break;
3662 case 143:
3664 {
3665 sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f, true);
3666 sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
3667 }
3669 break;
3670 case 144:
3672 {
3673 sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
3674 me->SetFacingToObject(sylvanas);
3675 sylvanas->SetFacingToObject(me);
3677 }
3679 break;
3680 case 145:
3682 FollowThrall();
3683 SetEscortPaused(false);
3684 bStepping = false;
3686 break;
3687 case 146:
3690 break;
3691 case 147:
3692 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3693 {
3695 {
3696 allianceForcesGUID[i] = temp->GetGUID();
3697 temp->SetImmuneToAll(true);
3698 temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
3699 temp->SetReactState(REACT_PASSIVE);
3700 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3701 }
3702 }
3703 if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3704 {
3705 WrynnGUID = wrynn->GetGUID();
3706 wrynn->SetImmuneToAll(true);
3707 wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3708 wrynn->SetReactState(REACT_PASSIVE);
3709 wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f, true);
3710 }
3711 if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3712 {
3713 JainaGUID = jaina->GetGUID();
3714 jaina->SetImmuneToAll(true);
3715 jaina->SetReactState(REACT_PASSIVE);
3716 }
3718 break;
3719 // Wrynn Intro
3720 case 148:
3722 wrynn->AI()->Talk(WRYNN_SAY_THRONE_5);
3724 break;
3725 case 149:
3727 wrynn->AI()->Talk(WRYNN_SAY_THRONE_6);
3729 break;
3730 case 150:
3732 wrynn->AI()->Talk(WRYNN_SAY_THRONE_7);
3734 break;
3735 case 151:
3737 wrynn->AI()->Talk(WRYNN_SAY_THRONE_8);
3739 break;
3740 // Wrynn Fight
3741 case 152:
3742 me->SetImmuneToAll(false);
3744 {
3745 wrynn->SetImmuneToNPC(false);
3746 wrynn->SetImmuneToPC(true);
3747 wrynn->SetReactState(REACT_AGGRESSIVE);
3748 wrynn->AddThreat(me, 100.0f);
3749 me->AddThreat(wrynn, 100.0f);
3750 wrynn->AI()->AttackStart(me);
3751 }
3752
3753 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3754 {
3756 {
3757 temp->SetImmuneToAll(false);
3758 temp->SetReactState(REACT_AGGRESSIVE);
3759 temp->AddThreat(me, 100.0f);
3760 temp->AI()->AttackStart(me);
3761 }
3762 }
3764 break;
3765 case 153:
3767 {
3768 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
3769 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
3770 }
3772 break;
3773 case 154:
3775 {
3776 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
3777 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
3778 }
3780 break;
3781 case 155:
3782 {
3783 std::list<Creature*> HelperList;
3784 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
3785 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
3786 me->GetCreatureListWithEntryInGrid(HelperList, NPC_WRYNN, 100.0f);
3787 if (!HelperList.empty())
3788 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3789 (*itr)->DespawnOrUnsummon();
3791 break;
3792 }
3793 case 156:
3795 SetEscortPaused(false);
3796 bStepping = false;
3798 break;
3799 case 157:
3803 break;
3804 // Ending
3805 case 158:
3806 if (Creature* saurfang = me->SummonCreature(NPC_OVERLORD_SAURFANG, 1297.574f, 347.154f, -65.027f, TEMPSUMMON_MANUAL_DESPAWN))
3807 {
3808 SaurfangGUID = saurfang->GetGUID();
3809 saurfang->SetWalk(true);
3810 saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f, true);
3811 }
3813 break;
3814 case 159:
3816 {
3817 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_1);
3818 saurfang->SetStandState(UNIT_STAND_STATE_SIT);
3819 }
3821 break;
3822 case 160:
3824 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_2);
3826 break;
3827 case 161:
3829 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_3);
3830 if (Map* map = me->GetMap())
3831 {
3832 Map::PlayerList const& PlayerList = map->GetPlayers();
3833 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
3834 {
3835 if (Player* player = i->GetSource())
3836 {
3837 if (me->IsInRange(player, 0.0f, 50.0f))
3838 {
3839 if (player->GetTeamId() == TEAM_HORDE)
3840 {
3841 player->RemoveAura(SPELL_SYLVANAS_BUFF);
3842 player->RemoveAura(SPELL_THRALL_BUFF);
3843 player->CompleteQuest(QUEST_BATTLE_H);
3844 player->CastSpell(player, SPELL_PHASING_HORDE);
3845 }
3846 }
3847 }
3848 }
3849 }
3851 break;
3852 case 162:
3855 break;
3856 case 163:
3863 std::list<Creature*> HelperList;
3864 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
3866 if (!HelperList.empty())
3867 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3868 (*itr)->DespawnOrUnsummon(120 * IN_MILLISECONDS);
3870 bStepping = false;
3872 break;
3873 }
3874 }
3875 else phaseTimer -= diff;
3876 }
3877
3878 if (!UpdateVictim())
3879 return;
3880
3881 _events.Update(diff);
3882
3884 return;
3885
3886 while (uint32 eventId = _events.ExecuteEvent())
3887 {
3888 switch (eventId)
3889 {
3893 break;
3894 case EVENT_LAVA_BURST:
3897 break;
3898 case EVENT_THUNDER:
3901 break;
3903 if (me->GetVictim())
3905 sylvanas->AI()->AttackStart(me->GetVictim());
3907 break;
3908 case EVENT_THRALL_BUFF:
3911 break;
3912 default:
3913 break;
3914 }
3915 }
3916
3918 }
std::uint32_t uint32
Definition Define.h:107
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &list, WorldObject *source, uint32 entry, float maxSearchRange)
Definition ScriptedCreature.cpp:910
@ EMOTE_ONESHOT_SALUTE
Definition SharedDefines.h:1953
@ TEAM_HORDE
Definition SharedDefines.h:772
@ FACTION_MONSTER
Definition SharedDefines.h:206
@ UNIT_STAND_STATE_SIT
Definition UnitDefines.h:33
@ UNIT_NPC_FLAG_QUESTGIVER
Definition UnitDefines.h:318
@ UNIT_STATE_CASTING
Definition UnitDefines.h:185
@ REACT_PASSIVE
Definition Unit.h:549
@ 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:287
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition Creature.cpp:2180
uint32 ExecuteEvent()
Definition EventMap.cpp:114
void Update(uint32 time)
Definition EventMap.h:54
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:160
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition MotionMaster.h:229
Definition Player.h:1072
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:39
SpellCastResult DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:276
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:177
void Dismount()
Definition Unit.cpp:13618
void SetFacingToObject(WorldObject *object)
Definition Unit.cpp:20379
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:1194
Unit * GetVictim() const
Definition Unit.h:850
bool HasUnitState(const uint32 f) const
Definition Unit.h:691
void HandleEmoteCommand(uint32 emoteId)
Definition Unit.cpp:2032
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition Unit.h:871
void setActive(bool isActiveObject)
Definition Object.cpp:1065
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
Definition Object.cpp:1409
Talk
Definition hyjal.cpp:82
void UpdateAI(uint32 diff) override
Use to start attacking a target. Called just before JustEngagedWith()
Definition ScriptedEscortAI.cpp:233
void ActivateValimathrasPortal()
Definition zone_undercity.cpp:2525
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition zone_undercity.cpp:2292
void JumpToNextStep(uint32 uiTimer)
Definition zone_undercity.cpp:2507
void SpawnWave(uint32 waveId)
Definition zone_undercity.cpp:2534
@ WRYNN_SAY_THRONE_5
Definition zone_undercity.cpp:385
@ NPC_WRYNN
Definition zone_undercity.cpp:356
@ WRYNN_SAY_THRONE_6
Definition zone_undercity.cpp:386
@ WRYNN_SAY_THRONE_8
Definition zone_undercity.cpp:388
@ WRYNN_SAY_THRONE_7
Definition zone_undercity.cpp:387
@ JAINA_SAY_THRONE_2
Definition zone_undercity.cpp:412
@ JAINA_SAY_THRONE_3
Definition zone_undercity.cpp:413
@ NPC_JAINA
Definition zone_undercity.cpp:406
@ SPELL_DEEPFREEZE
Definition zone_undercity.cpp:419
@ NPC_SW_SOLDIER
Definition zone_undercity.cpp:666
@ NPC_HORDE_GUARD
Definition zone_undercity.cpp:668
@ SAY_PUTRESS_ANGER
Definition zone_undercity.cpp:689
@ SAY_BURN_UC
Definition zone_undercity.cpp:688
@ SYLVANAS_SAY_SANCTUM_4
Definition zone_undercity.cpp:545
@ SPELL_LEAP_TO_PLATFORM
Definition zone_undercity.cpp:552
@ SYLVANAS_SAY_SANCTUM_3
Definition zone_undercity.cpp:544
@ SYLVANAS_SAY_THRONE_1
Definition zone_undercity.cpp:547
@ SYLVANAS_SAY_SANCTUM_1
Definition zone_undercity.cpp:542
@ SYLVANAS_SAY_SANCTUM_2
Definition zone_undercity.cpp:543
@ SYLVANAS_SAY_SANCTUM_5
Definition zone_undercity.cpp:546
@ NPC_SYLVANAS
Definition zone_undercity.cpp:537
@ SYLVANAS_SAY_ELEVATOR_1
Definition zone_undercity.cpp:541
@ SPELL_PHASING_HORDE
Definition zone_undercity.cpp:698
@ ALLIANCE_FORCE_MAXCOUNT
Definition zone_undercity.cpp:706
@ QUEST_BATTLE_H
Definition zone_undercity.cpp:696
@ SAY_SAURFANG_ARRIVAL_2
Definition zone_undercity.cpp:566
@ SAY_SAURFANG_ARRIVAL_3
Definition zone_undercity.cpp:567
@ SAY_SAURFANG_ARRIVAL_1
Definition zone_undercity.cpp:565
static LocationXYZO AllianceSpawn[]
Definition zone_undercity.cpp:718
@ SAY_VALIMATHRAS_ATTACK
Definition zone_undercity.cpp:643
@ SAY_THRONE_2
Definition zone_undercity.cpp:638
@ SAY_THRONE_1
Definition zone_undercity.cpp:637
@ SAY_VALIMATHRAS_INTRO_1
Definition zone_undercity.cpp:632
@ SAY_VALIMATHRAS_INTRO_2
Definition zone_undercity.cpp:633
@ SAY_THRONE_6
Definition zone_undercity.cpp:642
@ SAY_VALIMATHRAS_INTRO_0
Definition zone_undercity.cpp:631
@ SAY_VALIMATHRAS_INNER_SANKTUM_0
Definition zone_undercity.cpp:634
@ SAY_THRONE_5
Definition zone_undercity.cpp:641
@ SAY_VALIMATHRAS_INNER_SANKTUM_1
Definition zone_undercity.cpp:635
@ SAY_THRONE_4
Definition zone_undercity.cpp:640
@ SAY_THRONE_3
Definition zone_undercity.cpp:639
@ THRALL_SAY_THRONE_11
Definition zone_undercity.cpp:477
@ NPC_SLINGER_TRIGGER
Definition zone_undercity.cpp:519
@ THRALL_SAY_COURTYARD_5
Definition zone_undercity.cpp:456
@ THRALL_SAY_THRONE_2
Definition zone_undercity.cpp:468
@ THRALL_SAY_THRONE_4
Definition zone_undercity.cpp:470
@ THRALL_SAY_SANCTUM_6
Definition zone_undercity.cpp:465
@ THRALL_SAY_PREP_1
Definition zone_undercity.cpp:444
@ SPELL_CALL_OF_AIR
Definition zone_undercity.cpp:489
@ THRALL_SAY_PREP_6
Definition zone_undercity.cpp:449
@ THRALL_SAY_ELEVATOR_1
Definition zone_undercity.cpp:457
@ THRALL_SAY_COURTYARD_3
Definition zone_undercity.cpp:454
@ THRALL_SAY_THRONE_9
Definition zone_undercity.cpp:475
@ THRALL_SAY_THRONE_7
Definition zone_undercity.cpp:473
@ THRALL_SAY_SANCTUM_4
Definition zone_undercity.cpp:463
@ SPELL_LAVA_BURST
Definition zone_undercity.cpp:502
@ THRALL_SAY_COURTYARD_1
Definition zone_undercity.cpp:452
@ THRALL_SAY_PREP_5
Definition zone_undercity.cpp:448
@ GO_HORDE_BANNER
Definition zone_undercity.cpp:527
@ THRALL_SAY_SANCTUM_3
Definition zone_undercity.cpp:462
@ SPELL_CALL_OF_EARTH
Definition zone_undercity.cpp:491
@ THRALL_SAY_THRONE_1
Definition zone_undercity.cpp:467
@ THRALL_SAY_PREP_7
Definition zone_undercity.cpp:450
@ THRALL_SAY_SANCTUM_5
Definition zone_undercity.cpp:464
@ THRALL_SAY_COURTYARD_4
Definition zone_undercity.cpp:455
@ THRALL_SAY_PREP_3
Definition zone_undercity.cpp:446
@ SPELL_TIDAL_WAVE_SUMMON
Definition zone_undercity.cpp:486
@ THRALL_SAY_PREP_8
Definition zone_undercity.cpp:451
@ THRALL_SAY_ELEVATOR_2
Definition zone_undercity.cpp:458
@ THRALL_SAY_ELEVATOR_3
Definition zone_undercity.cpp:459
@ THRALL_SAY_THRONE_3
Definition zone_undercity.cpp:469
@ THRALL_SAY_PREP_4
Definition zone_undercity.cpp:447
@ THRALL_SAY_THRONE_5
Definition zone_undercity.cpp:471
@ THRALL_SAY_SANCTUM_7
Definition zone_undercity.cpp:466
@ THRALL_SAY_PREP_2
Definition zone_undercity.cpp:445
@ THRALL_SAY_THRONE_10
Definition zone_undercity.cpp:476
@ SPELL_CHAIN_LIGHTNING
Definition zone_undercity.cpp:501
@ THRALL_SAY_THRONE_6
Definition zone_undercity.cpp:472
@ THRALL_SAY_SANCTUM_2
Definition zone_undercity.cpp:461
@ NPC_PLAGUE_TRIGGER
Definition zone_undercity.cpp:522
@ NPC_OVERLORD_SAURFANG
Definition zone_undercity.cpp:520
@ SPELL_THUNDER
Definition zone_undercity.cpp:503
@ THRALL_SAY_COURTYARD_2
Definition zone_undercity.cpp:453
static LocationXYZO AllianceWP[]
Definition zone_undercity.cpp:753

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(), npc_escortAI::SetRun(), Unit::SetStandState(), SpawnWave(), SPELL_AURA_OF_VARIMATHRAS, SPELL_CALL_OF_AIR, SPELL_CALL_OF_EARTH, SPELL_CHAIN_LIGHTNING, SPELL_DEEPFREEZE, SPELL_HEROIC_VANGUARD, SPELL_LAVA_BURST, SPELL_LEAP_TO_PLATFORM, SPELL_OPENING_LEGION_PORTALS, SPELL_PHASING_HORDE, SPELL_SYLVANAS_BUFF, SPELL_THRALL_BUFF, SPELL_THUNDER, SPELL_TIDAL_WAVE_SUMMON, SPELL_VALIMATHRAS_PORTAL, step, WorldObject::SummonCreature(), WorldObject::SummonGameObject(), SYLVANAS_SAY_ELEVATOR_1, SYLVANAS_SAY_SANCTUM_1, SYLVANAS_SAY_SANCTUM_2, SYLVANAS_SAY_SANCTUM_3, SYLVANAS_SAY_SANCTUM_4, SYLVANAS_SAY_SANCTUM_5, SYLVANAS_SAY_THRONE_1, sylvanasfollowGUID, TEAM_HORDE, TEMPSUMMON_MANUAL_DESPAWN, THRALL_SAY_COURTYARD_1, THRALL_SAY_COURTYARD_2, THRALL_SAY_COURTYARD_3, THRALL_SAY_COURTYARD_4, THRALL_SAY_COURTYARD_5, THRALL_SAY_ELEVATOR_1, THRALL_SAY_ELEVATOR_2, THRALL_SAY_ELEVATOR_3, THRALL_SAY_PREP_1, THRALL_SAY_PREP_2, THRALL_SAY_PREP_3, THRALL_SAY_PREP_4, THRALL_SAY_PREP_5, THRALL_SAY_PREP_6, THRALL_SAY_PREP_7, THRALL_SAY_PREP_8, THRALL_SAY_SANCTUM_2, THRALL_SAY_SANCTUM_3, THRALL_SAY_SANCTUM_4, THRALL_SAY_SANCTUM_5, THRALL_SAY_SANCTUM_6, THRALL_SAY_SANCTUM_7, THRALL_SAY_THRONE_1, THRALL_SAY_THRONE_10, THRALL_SAY_THRONE_11, THRALL_SAY_THRONE_2, THRALL_SAY_THRONE_3, THRALL_SAY_THRONE_4, THRALL_SAY_THRONE_5, THRALL_SAY_THRONE_6, THRALL_SAY_THRONE_7, THRALL_SAY_THRONE_9, ThrallSpawn, UNIT_NPC_EMOTESTATE, UNIT_NPC_FLAG_GOSSIP, UNIT_NPC_FLAG_QUESTGIVER, UNIT_STAND_STATE_SIT, UNIT_STATE_CASTING, EventMap::Update(), npc_escortAI::UpdateAI(), CreatureAI::UpdateVictim(), UpdateWorldState(), ValimathrasGUID, ValimathrasPortalGUID, WORLD_STATE_BATTLE_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
2489 {
2490 Map::PlayerList const& players = map->GetPlayers();
2491
2492 if (!players.IsEmpty())
2493 {
2494 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2495 {
2496 if (Player* player = itr->GetSource())
2497 player->SendUpdateWorldState(id, state);
2498 }
2499 }
2500 }
bool IsEmpty() const
Definition LinkedList.h:97
PlayerList const & GetPlayers() const
Definition Map.h:323

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

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

◆ WaypointReached()

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

Implements npc_escortAI.

2819 {
2820 switch (waypointId)
2821 {
2822 case 1:
2823 SetHoldState(true);
2824 bStepping = true;
2825 break;
2826 case 2:
2827 SetHoldState(true);
2828 bStepping = true;
2829 break;
2830 case 11:
2831 SetHoldState(true);
2832 bStepping = true;
2833 break;
2834 case 13:
2835 SetHoldState(true);
2836 bStepping = true;
2837 break;
2838 case 14:
2839 SetHoldState(true);
2840 bStepping = true;
2841 break;
2842 case 34:
2843 SetHoldState(true);
2844 bStepping = true;
2845 break;
2846 case 36:
2849 break;
2850 case 46:
2851 SetHoldState(true);
2852 bStepping = true;
2853 break;
2854 case 57:
2855 SetHoldState(true);
2856 bStepping = true;
2857 break;
2858 case 61:
2859 SetHoldState(true);
2860 bStepping = true;
2861 break;
2862 case 65:
2863 SetHoldState(true);
2864 bStepping = true;
2865 break;
2866 case 66:
2867 SetHoldState(true);
2868 bStepping = true;
2869 break;
2870 case 75:
2871 SetHoldState(true);
2872 bStepping = true;
2873 break;
2874 case 81:
2875 SetHoldState(true);
2876 bStepping = true;
2877 break;
2878 case 104:
2879 SetHoldState(true);
2880 bStepping = true;
2881 break;
2882 case 109:
2883 SetHoldState(true);
2884 bStepping = true;
2885 break;
2886 case 113:
2887 SetHoldState(true);
2888 bStepping = true;
2889 break;
2890 case 117:
2891 SetHoldState(true);
2892 bStepping = true;
2893 break;
2894 case 118:
2896 break;
2897 case 120:
2898 SetHoldState(true);
2899 bStepping = true;
2900 break;
2901 }
2902 }
void SetHoldState(bool bOnHold)
Definition zone_undercity.cpp:2502
@ THRALL_SAY_THRONE_8
Definition zone_undercity.cpp:474
@ THRALL_SAY_SANCTUM_1
Definition zone_undercity.cpp:460

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.

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: