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
 
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, 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 ()
 
void JustExitedCombat () override
 Called when the unit leaves combat.
 
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
2286 : npc_escortAI(creature)
2287 {
2288 hordeGuardsGUID.clear();
2289 }
Definition ScriptedEscortAI.h:53
GuidVector hordeGuardsGUID
Definition zone_undercity.cpp:2304

References hordeGuardsGUID.

Member Function Documentation

◆ ActivateValimathrasPortal()

void npc_thrall_bfu::npc_thrall_bfuAI::ActivateValimathrasPortal ( )
inline
2532 {
2533 if (Creature* portal = me->FindNearestCreature(NPC_VARIMATHRAS_PORTAL, 500.0f))
2534 {
2535 portal->SummonCreature(NPC_LEGION_OVERLORD, ThrallSpawn[81].x + rand32() % 5, ThrallSpawn[81].y + rand32() % 5, ThrallSpawn[81].z, TEMPSUMMON_DEAD_DESPAWN);
2536 portal->DespawnOrUnsummon();
2537 }
2538 }
@ 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:2499
Creature * me
Definition ScriptedCreature.h:281
@ NPC_LEGION_OVERLORD
Definition zone_undercity.cpp:687
@ NPC_VARIMATHRAS_PORTAL
Definition zone_undercity.cpp:632
static LocationXYZO ThrallSpawn[]
Definition zone_undercity.cpp:776

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.

2912 {
2913 return victim->GetEntry() != NPC_BLIGHT_SLINGER;
2914 }
@ NPC_BLIGHT_SLINGER
Definition zone_undercity.cpp:684

References Object::GetEntry(), and NPC_BLIGHT_SLINGER.

◆ EnterEvadeMode()

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

Reimplemented from npc_escortAI.

2309 {
2312 me->CombatStop(true);
2313 me->SetLootRecipient(nullptr);
2314
2316 {
2319 }
2320 else
2321 {
2323 Reset();
2324 }
2325 }
@ STATE_ESCORT_ESCORTING
Definition ScriptedEscortAI.h:47
@ STATE_ESCORT_RETURNING
Definition ScriptedEscortAI.h:48
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition Creature.cpp:1282
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:580
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:5024
MotionMaster * GetMotionMaster()
Definition Unit.h:1758
ThreatManager & GetThreatMgr()
Definition Unit.h:951
void CombatStop(bool includingCast=false, bool mutualPvP=true)
Definition Unit.cpp:7469
bool HasEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:98
void AddEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:110
void ReturnToLastPoint()
Definition ScriptedEscortAI.cpp:185
void Reset() override
Definition zone_undercity.cpp:2327
@ SPELL_HEROIC_VANGUARD
Definition zone_undercity.cpp:508

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
2520 {
2522 {
2523 sylvanas->GetMotionMaster()->Clear();
2524 sylvanas->SetImmuneToAll(false);
2525 sylvanas->SetReactState(REACT_AGGRESSIVE);
2526 sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
2527 sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
2528 }
2529 }
@ 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:2297

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
2514 {
2515 phaseTimer = uiTimer;
2516 ++step;
2517 }
uint32 phaseTimer
Definition zone_undercity.cpp:2295
uint32 step
Definition zone_undercity.cpp:2294

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

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

Reimplemented from CreatureAI.

2388 {
2389 switch (summoned->GetEntry())
2390 {
2392 summoned->SetHomePosition(me->GetPosition());
2393 summoned->AddThreat(me, 100.0f);
2394 break;
2398 break;
2401 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2403 break;
2404 case NPC_CAVE_DUMMY:
2406 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2408 summoned->AddAura(SPELL_CYCLONE_FALL, summoned);
2409 break;
2411 case NPC_DOCTOR_H:
2412 case NPC_CHEMIST_H:
2415 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2417 if (!EnableAttack)
2418 summoned->SetFaction(FACTION_FRIENDLY);
2419 summoned->AddThreat(me, 100.0f);
2420 me->AddThreat(summoned, 100.0f);
2421 summoned->AI()->AttackStart(me);
2422 break;
2423 case NPC_LEGION_INVADER:
2426 case NPC_DREADLORD:
2427 case NPC_BETRAYER_H:
2428 case NPC_FELBEAST_H:
2431 summoned->AddThreat(me, 100.0f);
2432 me->AddThreat(summoned, 100.0f);
2433 summoned->AI()->AttackStart(me);
2434 break;
2435 case NPC_KHANOK:
2436 summoned->SetHomePosition(me->GetPosition());
2437 summoned->AddThreat(me, 100.0f);
2438 summoned->AI()->AttackStart(me);
2439 default:
2440 break;
2441 }
2442 }
@ EMOTE_STATE_READY2H
Definition SharedDefines.h:1976
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition SharedDefines.h:910
@ SPELL_EFFECT_KNOCK_BACK
Definition SharedDefines.h:864
@ IMMUNITY_EFFECT
Definition SharedDefines.h:1400
@ IMMUNITY_ID
Definition SharedDefines.h:1406
@ 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:345
CreatureAI * AI() const
Definition Creature.h:143
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:10437
void SetFaction(uint32 faction)
Definition Unit.cpp:7056
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition Unit.cpp:11413
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:15088
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:17323
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:2292
@ NPC_DOCTOR_H
Definition zone_undercity.cpp:682
@ NPC_BETRAYER_H
Definition zone_undercity.cpp:679
@ NPC_DREADLORD
Definition zone_undercity.cpp:663
@ NPC_FELBEAST_H
Definition zone_undercity.cpp:677
@ NPC_LEGION_DREADWHISPER
Definition zone_undercity.cpp:689
@ NPC_CHEMIST_H
Definition zone_undercity.cpp:680
@ NPC_LEGION_INVADER
Definition zone_undercity.cpp:688
@ NPC_TREACHEROUS_GUARDIAN_H
Definition zone_undercity.cpp:675
@ NPC_FELGUARD_MORADEUR
Definition zone_undercity.cpp:686
@ NPC_KHANOK
Definition zone_undercity.cpp:625
@ SPELL_SYLVANAS_BUFF
Definition zone_undercity.cpp:554
@ NPC_BLIGHT_ABBERATION
Definition zone_undercity.cpp:527
@ NPC_CAVE_DUMMY
Definition zone_undercity.cpp:522
@ NPC_WARSONG_BATTLEGUARD
Definition zone_undercity.cpp:518
@ SPELL_CYCLONE_FALL
Definition zone_undercity.cpp:494
@ SPELL_THRALL_BUFF
Definition zone_undercity.cpp:488

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.

2328 {
2330 {
2333 me->SetCorpseDelay(1);
2334 me->SetRespawnTime(1);
2337
2338 bStepping = false;
2339 EnableAttack = false;
2340 step = 0;
2341 phaseTimer = 0;
2348
2350 {
2351 valimathras->DespawnOrUnsummon();
2353 }
2354
2356 {
2357 valimathrasportal->DespawnOrUnsummon();
2359 }
2360
2362 {
2363 wrynn->DespawnOrUnsummon();
2364 WrynnGUID.Clear();
2365 }
2366
2368 {
2369 jaina->DespawnOrUnsummon();
2370 JainaGUID.Clear();
2371 }
2372
2374 {
2375 saurfang->DespawnOrUnsummon();
2377 }
2378
2379 for (ObjectGuid const& guid : hordeGuardsGUID)
2380 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
2381 temp->DespawnOrUnsummon();
2382
2383 hordeGuardsGUID.clear();
2384 }
2385 }
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:35
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:322
void SetRespawnTime(uint32 respawn)
Definition Creature.cpp:3730
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:10479
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:764
void SetStandState(uint8 state)
Definition Unit.cpp:13089
Definition ObjectAccessor.h:61
bool bStepping
Definition zone_undercity.cpp:2291
ObjectGuid ValimathrasGUID
Definition zone_undercity.cpp:2299
ObjectGuid ValimathrasPortalGUID
Definition zone_undercity.cpp:2300
ObjectGuid SaurfangGUID
Definition zone_undercity.cpp:2303
ObjectGuid JainaGUID
Definition zone_undercity.cpp:2302
EventMap _events
Definition zone_undercity.cpp:2306
ObjectGuid WrynnGUID
Definition zone_undercity.cpp:2301
@ EVENT_CHAIN_LIGHTNING
Definition zone_undercity.cpp:511
@ EVENT_THRALL_BUFF
Definition zone_undercity.cpp:515
@ EVENT_AGGRO_SYLVANAS
Definition zone_undercity.cpp:514
@ MODEL_WHITE_WULF
Definition zone_undercity.cpp:535
@ EVENT_THUNDER
Definition zone_undercity.cpp:513
@ EVENT_LAVA_BURST
Definition zone_undercity.cpp:512

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
2509 {
2510 SetEscortPaused(bOnHold);
2511 }
void SetEscortPaused(bool on)
Definition ScriptedEscortAI.cpp:486

References npc_escortAI::SetEscortPaused().

Referenced by WaypointReached().

◆ SpawnWave()

void npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave ( uint32  waveId)
inline
2541 {
2542 switch (waveId)
2543 {
2544 case 0: // Vortex
2546 whirlwind1->GetMotionMaster()->MoveWaypoint(NPC_WHIRLWIND * 10, false);
2548 whirlwind2->GetMotionMaster()->MoveWaypoint(NPC_WHIRLWIND * 100, false);
2549 break;
2550 case 1:
2551 // BATTLING_COURTYARD Initial Spawn
2552 for (uint8 i = 0; i < 3; ++i)
2554 for (uint8 i = 0; i < 9; ++i)
2556 for (uint8 i = 0; i < 6; ++i)
2558 for (uint8 i = 0; i < 4; ++i)
2560 break;
2561 case 2:
2562 // Valimathras
2564 {
2565 ValimathrasGUID = temp->GetGUID();
2566 temp->SetImmuneToAll(true);
2567 }
2568 break;
2569 case 3:
2571 ValimathrasPortalGUID = temp->GetGUID();
2572 break;
2573 case 4:
2574 // COURTYARD_FIGHT Spawns
2575 for (uint8 i = 0; i < WAVE_COURTYARD_FIGHT; ++i)
2576 {
2577 switch (urand(0, 2))
2578 {
2579 case 0:
2581 break;
2582 case 1:
2584 break;
2585 case 2:
2587 break;
2588 }
2589 }
2590 break;
2591 case 5:
2592 // Bossspawn 1
2594 {
2595 me->AddThreat(temp, 100.0f);
2596 me->AI()->AttackStart(temp);
2597 }
2598 break;
2599 case 6:
2600 // COURTYARD_DONE Spawn
2602 {
2603 hordeGuardsGUID.push_back(temp->GetGUID());
2604 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
2605 }
2607 {
2608 hordeGuardsGUID.push_back(temp->GetGUID());
2609 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
2610 }
2612 {
2613 hordeGuardsGUID.push_back(temp->GetGUID());
2614 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
2615 }
2617 {
2618 hordeGuardsGUID.push_back(temp->GetGUID());
2619 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
2620 }
2621 for (uint8 i = 0; i < 2; ++i)
2623 hordeGuardsGUID.push_back(temp->GetGUID());
2624 break;
2625 case 7:
2626 for (uint8 i = 0; i < 9; ++i)
2628 break;
2629 case 8:
2630 for (uint8 i = 0; i < 2; ++i)
2632 hordeGuardsGUID.push_back(temp->GetGUID());
2633 break;
2634 case 9:
2635 // Top of Undercity - Attacktrashpack
2636 for (uint8 i = 0; i < 3; ++i)
2637 {
2638 switch (urand(0, 2))
2639 {
2640 case 0:
2642 break;
2643 case 1:
2645 break;
2646 case 2:
2648 break;
2649 }
2650 }
2651 break;
2652 case 10:
2653 // Top of Undercity - Attacktrashpack
2654 for (uint8 i = 0; i < 3; ++i)
2655 {
2656 switch (urand(0, 1))
2657 {
2658 case 0:
2660 break;
2661 case 1:
2663 break;
2664 }
2665 }
2666 break;
2667 case 11:
2668 // Bottom of Undercity - Attacktrashpack
2669 for (uint8 i = 0; i < 3; ++i)
2670 {
2671 switch (urand(0, 1))
2672 {
2673 case 0:
2675 break;
2676 case 1:
2678 break;
2679 }
2680 }
2681 break;
2682 case 12:
2683 // Valimathras 2
2685 {
2686 ValimathrasGUID = temp->GetGUID();
2687 temp->SetImmuneToAll(true);
2688 }
2689 break;
2690 case 13:
2692 ValimathrasPortalGUID = temp->GetGUID();
2693 break;
2694 // NPC_KHANOK - Inner Sunktum Spawn Left
2695 case 14:
2696 for (uint8 i = 0; i < 4; ++i)
2697 {
2698 switch (urand(0, 6))
2699 {
2700 case 0:
2702 break;
2703 case 1:
2705 break;
2706 case 2:
2708 break;
2709 case 3:
2711 break;
2712 case 4:
2714 break;
2715 case 5:
2717 break;
2718 case 6:
2720 break;
2721 }
2722 }
2723 break;
2724 // NPC_KHANOK - Inner Sunktum Spawn Right
2725 case 15:
2726 for (uint8 i = 0; i < 4; ++i)
2727 {
2728 switch (urand(0, 6))
2729 {
2730 case 0:
2732 break;
2733 case 1:
2735 break;
2736 case 2:
2738 break;
2739 case 3:
2741 break;
2742 case 4:
2744 break;
2745 case 5:
2747 break;
2748 case 6:
2750 break;
2751 }
2752 }
2753 break;
2754 // NPC_KHANOK - Inner Sunktum Spawn Top
2755 case 16:
2757 break;
2758 // NPC_KHANOK - Inner Sunktum Spawn Middle
2759 case 17:
2761 {
2762 me->AddThreat(temp, 100.0f);
2763 me->AI()->AttackStart(temp);
2764 }
2765 break;
2766 case 18:
2768 {
2769 hordeGuardsGUID.push_back(temp->GetGUID());
2770 temp->AI()->Talk(SAY_FOR_THE_HORDE);
2771 temp->GetMotionMaster()->MoveWaypoint(NPC_WARSONG_BATTLEGUARD * 100, false);
2772 }
2773 break;
2774 // Valimathras Room Preparation
2775 case 19:
2776 for (uint8 i = 0; i < 3; ++i)
2777 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);
2778 // Valimathras BossSpawn
2780 {
2781 ValimathrasGUID = temp->GetGUID();
2782 temp->SetImmuneToAll(true);
2783 temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
2784 temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
2785 temp->AI()->Talk(SAY_CLOSE_DOOR);
2786 }
2787 for (uint8 i = 0; i < 6; ++i)
2788 {
2790 temp->CastSpell(me, SPELL_VALIMATHRAS_PORTAL);
2791 }
2792 break;
2793 case 20:
2794 for (uint8 i = 0; i < 3; ++i)
2795 {
2796 switch (urand(0, 1))
2797 {
2798 case 0:
2800 break;
2801 case 1:
2803 break;
2804 }
2805 }
2806 break;
2807 case 21:
2808 for (uint8 i = 0; i < 3; ++i)
2809 {
2810 switch (urand(0, 1))
2811 {
2812 case 0:
2814 break;
2815 case 1:
2817 break;
2818 }
2819 }
2820 break;
2821 }
2822 }
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:2394
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:2408
float o
Definition zone_undercity.cpp:719
float y
Definition zone_undercity.cpp:719
float x
Definition zone_undercity.cpp:719
float z
Definition zone_undercity.cpp:719
@ NPC_DOOMGUARD_PILLARGER
Definition zone_undercity.cpp:683
@ SAY_FOR_THE_HORDE
Definition zone_undercity.cpp:694
@ WAVE_COURTYARD_FIGHT
Definition zone_undercity.cpp:712
@ NPC_VARIMATHRAS
Definition zone_undercity.cpp:631
@ SPELL_VALIMATHRAS_PORTAL
Definition zone_undercity.cpp:650
@ SPELL_OPENING_LEGION_PORTALS
Definition zone_undercity.cpp:657
@ SPELL_AURA_OF_VARIMATHRAS
Definition zone_undercity.cpp:655
@ SAY_CLOSE_DOOR
Definition zone_undercity.cpp:640
@ GO_BLOCKED_PASSAGE
Definition zone_undercity.cpp:530
@ NPC_VORTEX
Definition zone_undercity.cpp:519
@ NPC_WHIRLWIND
Definition zone_undercity.cpp:521

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.

2445 {
2446 switch (summon->GetEntry())
2447 {
2451 bStepping = true;
2452 break;
2453 case NPC_KHANOK:
2454 {
2457 FollowThrall();
2458 SetEscortPaused(false);
2459 std::list<Creature*> SanktumList;
2461 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DREADLORD, 1000.0f);
2463 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DOCTOR_H, 1000.0f);
2464 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_CHEMIST_H, 1000.0f);
2465 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_BETRAYER_H, 1000.0f);
2466 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_FELBEAST_H, 1000.0f);
2468 if (!SanktumList.empty())
2469 for (std::list<Creature*>::iterator itr = SanktumList.begin(); itr != SanktumList.end(); itr++)
2470 (*itr)->DespawnOrUnsummon();
2471 break;
2472 }
2473 case NPC_VARIMATHRAS:
2474 {
2477 std::list<Creature*> ThroneList;
2482 if (!ThroneList.empty())
2483 for (std::list<Creature*>::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++)
2484 (*itr)->DespawnOrUnsummon();
2485 SetEscortPaused(false);
2486 me->SetWalk(true);
2487 break;
2488 }
2489 default:
2490 break;
2491 }
2492 }
@ 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:3247
Map * GetMap() const
Definition Object.h:625
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2560
void FollowThrall()
Definition zone_undercity.cpp:2519
void UpdateWorldState(Map *map, uint32 id, uint32 state)
Definition zone_undercity.cpp:2494

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.

2917 {
2919
2920 if (bStepping)
2921 {
2922 if (phaseTimer <= diff)
2923 {
2924 switch (step)
2925 {
2926 //Preparation
2927 case 0:
2928 me->setActive(true);
2930 break;
2931 case 1:
2935 break;
2936 case 2:
2939 break;
2940 case 3:
2941 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2942 guard->AI()->Talk(SAY_BURN_UC);
2944 break;
2945 case 4:
2946 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2947 guard->AI()->Talk(SAY_PUTRESS_ANGER);
2949 break;
2950 case 5:
2953 break;
2954 case 6:
2957 break;
2958 case 7:
2961 break;
2962 case 8:
2965 break;
2966 case 9:
2969 break;
2970 case 10:
2973 break;
2974 // Start Event
2975 case 11:
2979 SetEscortPaused(false);
2980 bStepping = false;
2981 JumpToNextStep(0);
2982 me->SetWalk(false);
2984 {
2985 sylvanas->GetMotionMaster()->MoveWaypoint(NPC_SYLVANAS * 100, false);
2986 sylvanas->setActive(true);
2987 }
2988 break;
2989 case 12:
2990 me->Dismount();
2992 break;
2993 case 13:
2995 sylvanas->Dismount();
2997 break;
2998 case 14:
3001 break;
3002 case 15:
3004 SpawnWave(0);
3006 break;
3007 case 16:
3008 {
3009 std::list<Creature*> PlagueList;
3011 if (!PlagueList.empty())
3012 for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
3013 (*itr)->DespawnOrUnsummon();
3014 SetEscortPaused(false);
3015 me->SetWalk(true);
3017 sylvanas->GetMotionMaster()->MoveWaypoint(NPC_SYLVANAS * 1000, false);
3019 break;
3020 }
3021 case 17:
3022 bStepping = false;
3023 JumpToNextStep(0);
3024 break;
3025 case 18:
3026 SpawnWave(1);
3029 break;
3030 case 19:
3031 {
3032 SpawnWave(2);
3034 break;
3035 }
3036 case 20:
3038 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_0);
3040 break;
3041 case 21:
3043 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_1);
3045 break;
3046 case 22:
3048 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_2);
3050 break;
3051 case 23:
3052 SpawnWave(3);
3054 break;
3055 case 24:
3057 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3059 break;
3060 case 25:
3062 {
3063 valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
3064 valimathras->DespawnOrUnsummon(3s);
3065 }
3067 valimathrasportal->DespawnOrUnsummon(6s);
3069 break;
3070 case 26:
3071 {
3074 std::list<Creature*> HelperList;
3076 if (!HelperList.empty())
3077 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3078 (*itr)->DespawnOrUnsummon();
3080 break;
3081 }
3082 // Start COURTYARD_FIGHT
3083 case 27:
3084 FollowThrall();
3085 SetEscortPaused(false);
3086 bStepping = false;
3087 me->SetWalk(false);
3091 JumpToNextStep(0);
3092 break;
3093 case 28:
3094 {
3095 EnableAttack = true;
3097 std::list<Creature*> HostileEndList;
3099 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_DOCTOR_H, 1000.0f);
3100 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_CHEMIST_H, 1000.0f);
3101 if (!HostileEndList.empty())
3102 for (std::list<Creature*>::iterator itr = HostileEndList.begin(); itr != HostileEndList.end(); itr++) (*itr)->SetFaction(FACTION_MONSTER);
3103 SpawnWave(4);
3105 break;
3106 }
3107 case 29:
3108 SpawnWave(4);
3110 break;
3111 case 30:
3112 SpawnWave(4);
3114 break;
3115 case 31:
3116 SpawnWave(4);
3118 break;
3119 case 32:
3120 SpawnWave(4);
3122 break;
3123 case 33:
3124 SpawnWave(4);
3126 break;
3127 case 34:
3128 SpawnWave(4);
3130 break;
3131 case 35:
3132 SpawnWave(4);
3134 break;
3135 case 36:
3136 SpawnWave(4);
3138 break;
3139 case 37:
3140 SpawnWave(4);
3142 break;
3143 case 38:
3144 SpawnWave(4);
3146 break;
3147 case 39:
3148 SpawnWave(4);
3150 break;
3151 case 40:
3152 SpawnWave(4);
3154 break;
3155 case 41:
3156 SpawnWave(4);
3158 break;
3159 case 42:
3160 SpawnWave(4);
3162 break;
3163 case 43:
3164 SpawnWave(4);
3166 break;
3167 case 44:
3168 SpawnWave(4);
3170 break;
3171 case 45:
3172 SpawnWave(5);
3173 bStepping = false;
3175 break;
3176 // End COURTYARD_FIGHT
3177 case 46:
3178 {
3179 FollowThrall();
3180 std::list<Creature*> HostileList;
3182 me->GetCreatureListWithEntryInGrid(HostileList, NPC_DOCTOR_H, 1000.0f);
3183 me->GetCreatureListWithEntryInGrid(HostileList, NPC_CHEMIST_H, 1000.0f);
3185 for (auto& creature : HostileList)
3186 creature->DespawnOrUnsummon();
3187 for (uint8 i = 0; i < 7; ++i)
3188 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);
3189 SpawnWave(6);
3190 SetEscortPaused(false);
3191 bStepping = false;
3192 me->SetWalk(true);
3194 break;
3195 }
3196 case 47:
3199 break;
3200 case 48:
3201 SetEscortPaused(false);
3202 bStepping = false;
3204 break;
3205 // Elevator Event
3206 case 49:
3209 break;
3210 case 50:
3212 sylvanas->AI()->Talk(SYLVANAS_SAY_ELEVATOR_1);
3214 break;
3215 case 51:
3218 SpawnWave(7);
3220 break;
3221 case 52:
3224 break;
3225 case 53:
3226 SpawnWave(8);
3227 me->GetMotionMaster()->MoveJump(ThrallSpawn[55].x, ThrallSpawn[55].y, ThrallSpawn[55].z, 40.0f, 40.0f, 0);
3229 sylvanas->GetMotionMaster()->MoveJump(ThrallSpawn[56].x, ThrallSpawn[56].y, ThrallSpawn[56].z, 40.0f, 40.0f, 0);
3231 break;
3232 case 54:
3233 FollowThrall();
3234 SetEscortPaused(false);
3235 bStepping = false;
3236 me->SetWalk(true);
3238 break;
3239 // Top of Undercity Discussion
3240 case 55:
3242 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_1);
3244 break;
3245 case 56:
3247 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_2);
3249 break;
3250 case 57:
3253 break;
3254 case 58:
3256 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_3);
3258 break;
3259 // Top of Undercity - Fight
3260 case 59:
3261 SpawnWave(9);
3263 break;
3264 case 60:
3265 SpawnWave(9);
3267 break;
3268 case 61:
3269 SpawnWave(9);
3271 break;
3272 case 62:
3273 FollowThrall();
3274 SetEscortPaused(false);
3275 bStepping = false;
3276 me->SetWalk(true);
3278 break;
3279 case 63:
3281 break;
3282 case 64:
3283 SpawnWave(10);
3285 break;
3286 case 65:
3287 SpawnWave(10);
3289 break;
3290 case 66:
3291 FollowThrall();
3292 SetEscortPaused(false);
3293 bStepping = false;
3294 me->SetWalk(true);
3296 break;
3297 case 67:
3298 SpawnWave(11);
3300 break;
3301 case 68:
3302 SpawnWave(11);
3304 break;
3305 case 69:
3306 FollowThrall();
3307 SetEscortPaused(false);
3308 bStepping = false;
3309 me->SetWalk(true);
3311 break;
3312 // KHANOK - Valimathtas Intro
3313 case 70:
3315 break;
3316 case 71:
3318 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_4);
3319 SpawnWave(12);
3321 break;
3322 case 72:
3324 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_0);
3326 break;
3327 case 73:
3329 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_1);
3330 SpawnWave(13);
3332 break;
3333 case 74:
3335 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3337 break;
3338 case 75:
3340 {
3341 valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
3342 valimathras->DespawnOrUnsummon(3s);
3343 }
3345 valimathrasportal->DespawnOrUnsummon(3s);
3347 break;
3348 // KHANOK - Trashspawn
3349 case 76:
3350 SpawnWave(14);
3352 break;
3353 case 77:
3354 SpawnWave(15);
3356 break;
3357 case 78:
3358 SpawnWave(16);
3360 break;
3361 case 79:
3362 SpawnWave(14);
3364 break;
3365 case 80:
3366 SpawnWave(15);
3368 break;
3369 case 81:
3370 SpawnWave(16);
3372 break;
3373 case 82:
3374 SpawnWave(14);
3376 break;
3377 case 83:
3378 SpawnWave(15);
3380 break;
3381 case 84:
3382 SpawnWave(16);
3384 break;
3385 case 85:
3386 SpawnWave(14);
3388 break;
3389 case 86:
3390 SpawnWave(15);
3392 break;
3393 case 87:
3394 SpawnWave(16);
3396 break;
3397 case 88:
3398 SpawnWave(14);
3400 break;
3401 case 89:
3402 SpawnWave(15);
3404 break;
3405 case 90:
3406 SpawnWave(16);
3408 break;
3409 case 91:
3410 SpawnWave(14);
3412 break;
3413 case 92:
3414 SpawnWave(15);
3416 break;
3417 case 93:
3418 SpawnWave(16);
3420 break;
3421 case 94:
3422 // Spawn Boss 2 KHANOK
3423 SpawnWave(17);
3425 break;
3426 case 95:
3427 SpawnWave(14);
3429 break;
3430 case 96:
3431 SpawnWave(15);
3433 break;
3434 case 97:
3435 SpawnWave(16);
3437 bStepping = false;
3438 break;
3439 case 98:
3440 // KHANOK - Won
3443 break;
3444 case 99:
3445 SpawnWave(18);
3447 break;
3448 case 100:
3449 SpawnWave(18);
3451 break;
3452 case 101:
3453 SpawnWave(18);
3455 break;
3456 case 102:
3457 SpawnWave(18);
3459 break;
3460 case 103:
3461 SpawnWave(18);
3463 break;
3464 case 104:
3465 SpawnWave(18);
3467 break;
3468 case 105:
3469 SpawnWave(18);
3471 break;
3472 case 106:
3473 SpawnWave(18);
3475 break;
3476 case 107:
3477 SpawnWave(18);
3479 break;
3480 case 108:
3482 FollowThrall();
3483 SetEscortPaused(false);
3484 bStepping = false;
3485 me->SetWalk(true);
3487 break;
3488 case 109:
3490 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_5);
3492 break;
3493 case 110:
3494 SpawnWave(19);
3496 break;
3497 case 111:
3498 FollowThrall();
3499 SetEscortPaused(false);
3500 bStepping = false;
3501 me->SetWalk(false);
3503 break;
3504 case 112:
3506 break;
3507 case 113:
3510 break;
3511 case 114:
3515 break;
3516 case 115:
3517 {
3518 std::list<GameObject*> SaronitList;
3520 for (std::list<GameObject*>::const_iterator itr = SaronitList.begin(); itr != SaronitList.end(); ++itr)
3521 if (GameObject* saronit = (*itr))
3522 saronit->UseDoorOrButton();
3524 break;
3525 }
3526 case 116:
3529 FollowThrall();
3530 SetEscortPaused(false);
3531 bStepping = false;
3533 break;
3534 // Valimathras Intro
3535 case 117:
3538 break;
3539 case 118:
3541 {
3542 valimathras->AI()->Talk(SAY_THRONE_1);
3543 valimathras->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
3544 }
3546 break;
3547 case 119:
3548 SpawnWave(20);
3550 break;
3551 case 120:
3552 SpawnWave(21);
3554 break;
3555 case 121:
3558 valimathras->AI()->Talk(SAY_THRONE_2);
3560 break;
3561 case 122:
3562 SpawnWave(20);
3564 break;
3565 case 123:
3566 SpawnWave(21);
3568 break;
3569 case 124:
3572 valimathras->AI()->Talk(SAY_THRONE_3);
3574 break;
3575 case 125:
3576 SpawnWave(20);
3578 break;
3579 case 126:
3580 SpawnWave(21);
3582 break;
3583 case 127:
3586 valimathras->AI()->Talk(SAY_THRONE_4);
3588 break;
3589 case 128:
3590 SpawnWave(20);
3592 break;
3593 case 129:
3594 SpawnWave(21);
3596 break;
3597 case 130:
3600 valimathras->AI()->Talk(SAY_THRONE_5);
3602 break;
3603 case 131:
3604 SpawnWave(20);
3606 break;
3607 case 132:
3608 SpawnWave(21);
3610 break;
3611 case 133:
3614 valimathras->AI()->Talk(SAY_THRONE_6);
3616 break;
3617 case 134:
3618 SpawnWave(20);
3620 break;
3621 case 135:
3622 SpawnWave(21);
3624 break;
3625 case 136:
3628 break;
3629 // Valimathras Fight
3630 case 137:
3632 {
3633 valimathras->SetImmuneToAll(false);
3634 valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
3635 valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
3636 valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
3637 valimathras->SetHomePosition(me->GetPosition());
3638 valimathras->AddThreat(me, 100.0f);
3639 me->AddThreat(valimathras, 100.0f);
3640 valimathras->AI()->AttackStart(me);
3641 me->AI()->AttackStart(valimathras);
3642 }
3643 bStepping = false;
3645 break;
3646 // Valimathras Won
3647 case 138:
3650 break;
3651 case 139:
3654 break;
3655 case 140:
3656 SetEscortPaused(false);
3657 bStepping = false;
3659 break;
3660 case 141:
3662 break;
3663 case 142:
3665 me->SetFacingToObject(sylvanas);
3668 break;
3669 case 143:
3671 {
3672 sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f);
3673 sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
3674 }
3676 break;
3677 case 144:
3679 {
3680 sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
3681 me->SetFacingToObject(sylvanas);
3682 sylvanas->SetFacingToObject(me);
3684 }
3686 break;
3687 case 145:
3689 FollowThrall();
3690 SetEscortPaused(false);
3691 bStepping = false;
3693 break;
3694 case 146:
3697 break;
3698 case 147:
3699 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3700 {
3702 {
3703 allianceForcesGUID[i] = temp->GetGUID();
3704 temp->SetImmuneToAll(true);
3705 temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
3706 temp->SetReactState(REACT_PASSIVE);
3707 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3708 }
3709 }
3710 if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3711 {
3712 WrynnGUID = wrynn->GetGUID();
3713 wrynn->SetImmuneToAll(true);
3714 wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3715 wrynn->SetReactState(REACT_PASSIVE);
3716 wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f);
3717 }
3718 if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3719 {
3720 JainaGUID = jaina->GetGUID();
3721 jaina->SetImmuneToAll(true);
3722 jaina->SetReactState(REACT_PASSIVE);
3723 }
3725 break;
3726 // Wrynn Intro
3727 case 148:
3729 wrynn->AI()->Talk(WRYNN_SAY_THRONE_5);
3731 break;
3732 case 149:
3734 wrynn->AI()->Talk(WRYNN_SAY_THRONE_6);
3736 break;
3737 case 150:
3739 wrynn->AI()->Talk(WRYNN_SAY_THRONE_7);
3741 break;
3742 case 151:
3744 wrynn->AI()->Talk(WRYNN_SAY_THRONE_8);
3746 break;
3747 // Wrynn Fight
3748 case 152:
3749 me->SetImmuneToAll(false);
3751 {
3752 wrynn->SetImmuneToNPC(false);
3753 wrynn->SetImmuneToPC(true);
3754 wrynn->SetReactState(REACT_AGGRESSIVE);
3755 wrynn->AddThreat(me, 100.0f);
3756 me->AddThreat(wrynn, 100.0f);
3757 wrynn->AI()->AttackStart(me);
3758 }
3759
3760 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3761 {
3763 {
3764 temp->SetImmuneToAll(false);
3765 temp->SetReactState(REACT_AGGRESSIVE);
3766 temp->AddThreat(me, 100.0f);
3767 temp->AI()->AttackStart(me);
3768 }
3769 }
3771 break;
3772 case 153:
3774 {
3775 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
3776 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
3777 }
3779 break;
3780 case 154:
3782 {
3783 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
3784 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
3785 }
3787 break;
3788 case 155:
3789 {
3790 std::list<Creature*> HelperList;
3791 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
3792 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
3793 me->GetCreatureListWithEntryInGrid(HelperList, NPC_WRYNN, 100.0f);
3794 if (!HelperList.empty())
3795 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3796 (*itr)->DespawnOrUnsummon();
3798 break;
3799 }
3800 case 156:
3802 SetEscortPaused(false);
3803 bStepping = false;
3805 break;
3806 case 157:
3810 break;
3811 // Ending
3812 case 158:
3813 if (Creature* saurfang = me->SummonCreature(NPC_OVERLORD_SAURFANG, 1297.574f, 347.154f, -65.027f, TEMPSUMMON_MANUAL_DESPAWN))
3814 {
3815 SaurfangGUID = saurfang->GetGUID();
3816 saurfang->SetWalk(true);
3817 saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f);
3818 }
3820 break;
3821 case 159:
3823 {
3824 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_1);
3825 saurfang->SetStandState(UNIT_STAND_STATE_SIT);
3826 }
3828 break;
3829 case 160:
3831 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_2);
3833 break;
3834 case 161:
3836 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_3);
3837 if (Map* map = me->GetMap())
3838 {
3839 Map::PlayerList const& PlayerList = map->GetPlayers();
3840 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
3841 {
3842 if (Player* player = i->GetSource())
3843 {
3844 if (me->IsInRange(player, 0.0f, 50.0f))
3845 {
3846 if (player->GetTeamId() == TEAM_HORDE)
3847 {
3848 player->RemoveAura(SPELL_SYLVANAS_BUFF);
3849 player->RemoveAura(SPELL_THRALL_BUFF);
3850 player->CompleteQuest(QUEST_BATTLE_H);
3851 player->CastSpell(player, SPELL_PHASING_HORDE);
3852 }
3853 }
3854 }
3855 }
3856 }
3858 break;
3859 case 162:
3862 break;
3863 case 163:
3870 std::list<Creature*> HelperList;
3871 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
3873 if (!HelperList.empty())
3874 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3875 (*itr)->DespawnOrUnsummon(120s);
3876 me->DespawnOrUnsummon(120s);
3877 bStepping = false;
3879 break;
3880 }
3881 }
3882 else phaseTimer -= diff;
3883 }
3884
3885 if (!UpdateVictim())
3886 return;
3887
3888 _events.Update(diff);
3889
3891 return;
3892
3893 while (uint32 eventId = _events.ExecuteEvent())
3894 {
3895 switch (eventId)
3896 {
3900 break;
3901 case EVENT_LAVA_BURST:
3904 break;
3905 case EVENT_THUNDER:
3908 break;
3910 if (me->GetVictim())
3912 sylvanas->AI()->AttackStart(me->GetVictim());
3914 break;
3915 case EVENT_THRALL_BUFF:
3918 break;
3919 default:
3920 break;
3921 }
3922 }
3923
3925 }
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:1948
@ 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:353
void DespawnOrUnsummon(Milliseconds msTimeToDespawn=0ms, Seconds forcedRespawnTimer=0s)
Definition Creature.cpp:2126
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:164
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:16421
void Dismount()
Definition Unit.cpp:10539
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:1350
Unit * GetVictim() const
Definition Unit.h:903
bool HasUnitState(const uint32 f) const
Definition Unit.h:736
void HandleEmoteCommand(uint32 emoteId)
Definition Unit.cpp:2172
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:231
void ActivateValimathrasPortal()
Definition zone_undercity.cpp:2531
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition zone_undercity.cpp:2298
void JumpToNextStep(uint32 uiTimer)
Definition zone_undercity.cpp:2513
void SpawnWave(uint32 waveId)
Definition zone_undercity.cpp:2540
@ WRYNN_SAY_THRONE_5
Definition zone_undercity.cpp:389
@ NPC_WRYNN
Definition zone_undercity.cpp:360
@ WRYNN_SAY_THRONE_6
Definition zone_undercity.cpp:390
@ WRYNN_SAY_THRONE_8
Definition zone_undercity.cpp:392
@ WRYNN_SAY_THRONE_7
Definition zone_undercity.cpp:391
@ JAINA_SAY_THRONE_2
Definition zone_undercity.cpp:416
@ JAINA_SAY_THRONE_3
Definition zone_undercity.cpp:417
@ NPC_JAINA
Definition zone_undercity.cpp:410
@ SPELL_DEEPFREEZE
Definition zone_undercity.cpp:423
@ NPC_SW_SOLDIER
Definition zone_undercity.cpp:670
@ NPC_HORDE_GUARD
Definition zone_undercity.cpp:672
@ SAY_PUTRESS_ANGER
Definition zone_undercity.cpp:693
@ SAY_BURN_UC
Definition zone_undercity.cpp:692
@ SYLVANAS_SAY_SANCTUM_4
Definition zone_undercity.cpp:549
@ SPELL_LEAP_TO_PLATFORM
Definition zone_undercity.cpp:556
@ SYLVANAS_SAY_SANCTUM_3
Definition zone_undercity.cpp:548
@ SYLVANAS_SAY_THRONE_1
Definition zone_undercity.cpp:551
@ SYLVANAS_SAY_SANCTUM_1
Definition zone_undercity.cpp:546
@ SYLVANAS_SAY_SANCTUM_2
Definition zone_undercity.cpp:547
@ SYLVANAS_SAY_SANCTUM_5
Definition zone_undercity.cpp:550
@ NPC_SYLVANAS
Definition zone_undercity.cpp:541
@ SYLVANAS_SAY_ELEVATOR_1
Definition zone_undercity.cpp:545
@ SPELL_PHASING_HORDE
Definition zone_undercity.cpp:702
@ ALLIANCE_FORCE_MAXCOUNT
Definition zone_undercity.cpp:710
@ QUEST_BATTLE_H
Definition zone_undercity.cpp:700
@ SAY_SAURFANG_ARRIVAL_2
Definition zone_undercity.cpp:570
@ SAY_SAURFANG_ARRIVAL_3
Definition zone_undercity.cpp:571
@ SAY_SAURFANG_ARRIVAL_1
Definition zone_undercity.cpp:569
static LocationXYZO AllianceSpawn[]
Definition zone_undercity.cpp:722
@ SAY_VALIMATHRAS_ATTACK
Definition zone_undercity.cpp:647
@ SAY_THRONE_2
Definition zone_undercity.cpp:642
@ SAY_THRONE_1
Definition zone_undercity.cpp:641
@ SAY_VALIMATHRAS_INTRO_1
Definition zone_undercity.cpp:636
@ SAY_VALIMATHRAS_INTRO_2
Definition zone_undercity.cpp:637
@ SAY_THRONE_6
Definition zone_undercity.cpp:646
@ SAY_VALIMATHRAS_INTRO_0
Definition zone_undercity.cpp:635
@ SAY_VALIMATHRAS_INNER_SANKTUM_0
Definition zone_undercity.cpp:638
@ SAY_THRONE_5
Definition zone_undercity.cpp:645
@ SAY_VALIMATHRAS_INNER_SANKTUM_1
Definition zone_undercity.cpp:639
@ SAY_THRONE_4
Definition zone_undercity.cpp:644
@ SAY_THRONE_3
Definition zone_undercity.cpp:643
@ THRALL_SAY_THRONE_11
Definition zone_undercity.cpp:481
@ NPC_SLINGER_TRIGGER
Definition zone_undercity.cpp:523
@ THRALL_SAY_COURTYARD_5
Definition zone_undercity.cpp:460
@ THRALL_SAY_THRONE_2
Definition zone_undercity.cpp:472
@ THRALL_SAY_THRONE_4
Definition zone_undercity.cpp:474
@ THRALL_SAY_SANCTUM_6
Definition zone_undercity.cpp:469
@ THRALL_SAY_PREP_1
Definition zone_undercity.cpp:448
@ SPELL_CALL_OF_AIR
Definition zone_undercity.cpp:493
@ THRALL_SAY_PREP_6
Definition zone_undercity.cpp:453
@ THRALL_SAY_ELEVATOR_1
Definition zone_undercity.cpp:461
@ THRALL_SAY_COURTYARD_3
Definition zone_undercity.cpp:458
@ THRALL_SAY_THRONE_9
Definition zone_undercity.cpp:479
@ THRALL_SAY_THRONE_7
Definition zone_undercity.cpp:477
@ THRALL_SAY_SANCTUM_4
Definition zone_undercity.cpp:467
@ SPELL_LAVA_BURST
Definition zone_undercity.cpp:506
@ THRALL_SAY_COURTYARD_1
Definition zone_undercity.cpp:456
@ THRALL_SAY_PREP_5
Definition zone_undercity.cpp:452
@ GO_HORDE_BANNER
Definition zone_undercity.cpp:531
@ THRALL_SAY_SANCTUM_3
Definition zone_undercity.cpp:466
@ SPELL_CALL_OF_EARTH
Definition zone_undercity.cpp:495
@ THRALL_SAY_THRONE_1
Definition zone_undercity.cpp:471
@ THRALL_SAY_PREP_7
Definition zone_undercity.cpp:454
@ THRALL_SAY_SANCTUM_5
Definition zone_undercity.cpp:468
@ THRALL_SAY_COURTYARD_4
Definition zone_undercity.cpp:459
@ THRALL_SAY_PREP_3
Definition zone_undercity.cpp:450
@ SPELL_TIDAL_WAVE_SUMMON
Definition zone_undercity.cpp:490
@ THRALL_SAY_PREP_8
Definition zone_undercity.cpp:455
@ THRALL_SAY_ELEVATOR_2
Definition zone_undercity.cpp:462
@ THRALL_SAY_ELEVATOR_3
Definition zone_undercity.cpp:463
@ THRALL_SAY_THRONE_3
Definition zone_undercity.cpp:473
@ THRALL_SAY_PREP_4
Definition zone_undercity.cpp:451
@ THRALL_SAY_THRONE_5
Definition zone_undercity.cpp:475
@ THRALL_SAY_SANCTUM_7
Definition zone_undercity.cpp:470
@ THRALL_SAY_PREP_2
Definition zone_undercity.cpp:449
@ THRALL_SAY_THRONE_10
Definition zone_undercity.cpp:480
@ SPELL_CHAIN_LIGHTNING
Definition zone_undercity.cpp:505
@ THRALL_SAY_THRONE_6
Definition zone_undercity.cpp:476
@ THRALL_SAY_SANCTUM_2
Definition zone_undercity.cpp:465
@ NPC_PLAGUE_TRIGGER
Definition zone_undercity.cpp:526
@ NPC_OVERLORD_SAURFANG
Definition zone_undercity.cpp:524
@ SPELL_THUNDER
Definition zone_undercity.cpp:507
@ THRALL_SAY_COURTYARD_2
Definition zone_undercity.cpp:457
static LocationXYZO AllianceWP[]
Definition zone_undercity.cpp:757

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
2495 {
2496 Map::PlayerList const& players = map->GetPlayers();
2497
2498 if (!players.IsEmpty())
2499 {
2500 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2501 {
2502 if (Player* player = itr->GetSource())
2503 player->SendUpdateWorldState(id, state);
2504 }
2505 }
2506 }
bool IsEmpty() const
Definition LinkedList.h:97
PlayerList const & GetPlayers() const
Definition Map.h:326

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.

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

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.

193{ }

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: