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 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 ()
 
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)
 
- 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
2292 : npc_escortAI(creature)
2293 {
2294 hordeGuardsGUID.clear();
2295 }
Definition ScriptedEscortAI.h:53
GuidVector hordeGuardsGUID
Definition zone_undercity.cpp:2310

References hordeGuardsGUID.

Member Function Documentation

◆ ActivateValimathrasPortal()

void npc_thrall_bfu::npc_thrall_bfuAI::ActivateValimathrasPortal ( )
inline
2533 {
2534 if (Creature* portal = me->FindNearestCreature(NPC_VARIMATHRAS_PORTAL, 500.0f))
2535 {
2536 portal->SummonCreature(NPC_LEGION_OVERLORD, ThrallSpawn[81].x + rand32() % 5, ThrallSpawn[81].y + rand32() % 5, ThrallSpawn[81].z, TEMPSUMMON_DEAD_DESPAWN);
2537 portal->DespawnOrUnsummon();
2538 }
2539 }
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:52
uint32 rand32()
Definition Random.cpp:72
Definition Creature.h:43
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition Object.cpp:2459
Creature * me
Definition ScriptedCreature.h:280
@ NPC_LEGION_OVERLORD
Definition zone_undercity.cpp:696
@ NPC_VARIMATHRAS_PORTAL
Definition zone_undercity.cpp:641
static LocationXYZO ThrallSpawn[]
Definition zone_undercity.cpp:785

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.

2910 {
2911 return victim->GetEntry() != NPC_BLIGHT_SLINGER;
2912 }
@ NPC_BLIGHT_SLINGER
Definition zone_undercity.cpp:693

References Object::GetEntry(), and NPC_BLIGHT_SLINGER.

◆ EnterEvadeMode()

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

Reimplemented from npc_escortAI.

2315 {
2318 me->CombatStop(true);
2319 me->SetLootRecipient(nullptr);
2320
2322 {
2325 }
2326 else
2327 {
2329 Reset();
2330 }
2331 }
@ STATE_ESCORT_ESCORTING
Definition ScriptedEscortAI.h:47
@ STATE_ESCORT_RETURNING
Definition ScriptedEscortAI.h:48
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition Creature.cpp:1326
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:10481
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4808
MotionMaster * GetMotionMaster()
Definition Unit.h:1673
ThreatMgr & GetThreatMgr()
Definition Unit.h:912
bool HasEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:98
void AddEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:110
void ReturnToLastPoint()
Definition ScriptedEscortAI.cpp:193
void Reset() override
Definition zone_undercity.cpp:2333
@ SPELL_HEROIC_VANGUARD
Definition zone_undercity.cpp:517

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
2521 {
2523 {
2524 sylvanas->GetMotionMaster()->Clear();
2525 sylvanas->SetImmuneToAll(false);
2526 sylvanas->SetReactState(REACT_AGGRESSIVE);
2527 sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
2528 sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
2529 }
2530 }
@ FACTION_ESCORT_N_NEUTRAL_ACTIVE
Definition ScriptSystem.h:37
@ REACT_AGGRESSIVE
Definition Unit.h:550
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition ObjectAccessor.cpp:210
ObjectGuid sylvanasfollowGUID
Definition zone_undercity.cpp:2303

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

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

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

Reimplemented from CreatureAI.

2394 {
2395 switch (summoned->GetEntry())
2396 {
2398 summoned->AI()->AttackStart(me);
2399 break;
2403 break;
2406 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2408 break;
2409 case NPC_CAVE_DUMMY:
2411 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2413 summoned->AddAura(SPELL_CYCLONE_FALL, summoned);
2414 break;
2416 case NPC_DOCTOR_H:
2417 case NPC_CHEMIST_H:
2420 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2422 if (!EnableAttack)
2423 summoned->SetFaction(FACTION_FRIENDLY);
2424 summoned->AddThreat(me, 100.0f);
2425 me->AddThreat(summoned, 100.0f);
2426 summoned->AI()->AttackStart(me);
2427 break;
2428 case NPC_LEGION_INVADER:
2431 case NPC_DREADLORD:
2432 case NPC_BETRAYER_H:
2433 case NPC_FELBEAST_H:
2436 summoned->AddThreat(me, 100.0f);
2437 me->AddThreat(summoned, 100.0f);
2438 summoned->AI()->AttackStart(me);
2439 break;
2440 default:
2441 break;
2442 }
2443 }
@ EMOTE_STATE_READY2H
Definition SharedDefines.h:1970
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition SharedDefines.h:922
@ SPELL_EFFECT_KNOCK_BACK
Definition SharedDefines.h:876
@ IMMUNITY_EFFECT
Definition SharedDefines.h:1394
@ IMMUNITY_ID
Definition SharedDefines.h:1400
@ FACTION_FRIENDLY
Definition SharedDefines.h:201
@ UNIT_FLAG_NOT_SELECTABLE
Definition UnitDefines.h:275
@ UNIT_NPC_EMOTESTATE
Definition UpdateFields.h:140
CreatureAI * AI() const
Definition Creature.h:141
uint32 GetEntry() const
Definition Object.h:115
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:13434
void SetFaction(uint32 faction)
Definition Unit.cpp:10097
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition Unit.cpp:14705
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:18915
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:21372
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:719
bool EnableAttack
Definition zone_undercity.cpp:2298
@ NPC_DOCTOR_H
Definition zone_undercity.cpp:691
@ NPC_BETRAYER_H
Definition zone_undercity.cpp:688
@ NPC_DREADLORD
Definition zone_undercity.cpp:672
@ NPC_FELBEAST_H
Definition zone_undercity.cpp:686
@ NPC_LEGION_DREADWHISPER
Definition zone_undercity.cpp:698
@ NPC_CHEMIST_H
Definition zone_undercity.cpp:689
@ NPC_LEGION_INVADER
Definition zone_undercity.cpp:697
@ NPC_TREACHEROUS_GUARDIAN_H
Definition zone_undercity.cpp:684
@ NPC_FELGUARD_MORADEUR
Definition zone_undercity.cpp:695
@ SPELL_SYLVANAS_BUFF
Definition zone_undercity.cpp:563
@ NPC_BLIGHT_ABBERATION
Definition zone_undercity.cpp:536
@ NPC_CAVE_DUMMY
Definition zone_undercity.cpp:531
@ NPC_WARSONG_BATTLEGUARD
Definition zone_undercity.cpp:527
@ SPELL_CYCLONE_FALL
Definition zone_undercity.cpp:503
@ SPELL_THRALL_BUFF
Definition zone_undercity.cpp:497

References Unit::AddAura(), Unit::AddThreat(), Creature::AI(), Unit::ApplySpellImmune(), UnitAI::AttackStart(), EMOTE_STATE_READY2H, EnableAttack, FACTION_FRIENDLY, Object::GetEntry(), IMMUNITY_EFFECT, IMMUNITY_ID, ScriptedAI::me, NPC_BETRAYER_H, NPC_BLIGHT_ABBERATION, NPC_CAVE_DUMMY, NPC_CHEMIST_H, NPC_DOCTOR_H, NPC_DREADLORD, NPC_FELBEAST_H, NPC_FELGUARD_MORADEUR, NPC_LEGION_DREADWHISPER, NPC_LEGION_INVADER, NPC_TREACHEROUS_GUARDIAN_H, NPC_VARIMATHRAS_PORTAL, NPC_WARSONG_BATTLEGUARD, Unit::SetFaction(), 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.

2334 {
2336 {
2339 me->SetCorpseDelay(1);
2340 me->SetRespawnTime(1);
2343
2344 bStepping = false;
2345 EnableAttack = false;
2346 step = 0;
2347 phaseTimer = 0;
2354
2356 {
2357 valimathras->DespawnOrUnsummon();
2359 }
2360
2362 {
2363 valimathrasportal->DespawnOrUnsummon();
2365 }
2366
2368 {
2369 wrynn->DespawnOrUnsummon();
2370 WrynnGUID.Clear();
2371 }
2372
2374 {
2375 jaina->DespawnOrUnsummon();
2376 JainaGUID.Clear();
2377 }
2378
2380 {
2381 saurfang->DespawnOrUnsummon();
2383 }
2384
2385 for (ObjectGuid const& guid : hordeGuardsGUID)
2386 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
2387 temp->DespawnOrUnsummon();
2388
2389 hordeGuardsGUID.clear();
2390 }
2391 }
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:32
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:315
void SetRespawnTime(uint32 respawn)
Definition Creature.cpp:3792
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:13510
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:735
void SetStandState(uint8 state)
Definition Unit.cpp:16778
Definition ObjectAccessor.h:61
bool bStepping
Definition zone_undercity.cpp:2297
ObjectGuid ValimathrasGUID
Definition zone_undercity.cpp:2305
ObjectGuid ValimathrasPortalGUID
Definition zone_undercity.cpp:2306
ObjectGuid SaurfangGUID
Definition zone_undercity.cpp:2309
ObjectGuid JainaGUID
Definition zone_undercity.cpp:2308
EventMap _events
Definition zone_undercity.cpp:2312
ObjectGuid WrynnGUID
Definition zone_undercity.cpp:2307
@ EVENT_CHAIN_LIGHTNING
Definition zone_undercity.cpp:520
@ EVENT_THRALL_BUFF
Definition zone_undercity.cpp:524
@ EVENT_AGGRO_SYLVANAS
Definition zone_undercity.cpp:523
@ MODEL_WHITE_WULF
Definition zone_undercity.cpp:544
@ EVENT_THUNDER
Definition zone_undercity.cpp:522
@ EVENT_LAVA_BURST
Definition zone_undercity.cpp:521

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

References npc_escortAI::SetEscortPaused().

Referenced by WaypointReached().

◆ SpawnWave()

void npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave ( uint32  waveId)
inline
2542 {
2543 switch (waveId)
2544 {
2545 case 0: // Vortex
2547 whirlwind1->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 10, false);
2549 whirlwind2->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 100, false);
2550 break;
2551 case 1:
2552 // BATTLING_COURTYARD Initial Spawn
2553 for (uint8 i = 0; i < 3; ++i)
2555 for (uint8 i = 0; i < 9; ++i)
2557 for (uint8 i = 0; i < 6; ++i)
2559 for (uint8 i = 0; i < 4; ++i)
2561 break;
2562 case 2:
2563 // Valimathras
2565 {
2566 ValimathrasGUID = temp->GetGUID();
2567 temp->SetImmuneToAll(true);
2568 }
2569 break;
2570 case 3:
2572 ValimathrasPortalGUID = temp->GetGUID();
2573 break;
2574 case 4:
2575 // COURTYARD_FIGHT Spawns
2576 for (uint8 i = 0; i < WAVE_COURTYARD_FIGHT; ++i)
2577 {
2578 switch (urand(0, 2))
2579 {
2580 case 0:
2582 break;
2583 case 1:
2585 break;
2586 case 2:
2588 break;
2589 }
2590 }
2591 break;
2592 case 5:
2593 // Bossspawn 1
2595 {
2596 temp->GetMotionMaster()->MoveJump(ThrallSpawn[62].x, ThrallSpawn[62].y, ThrallSpawn[62].z, 10.0f, 20.0f, 0);
2597 temp->AddThreat(me, 100.0f);
2598 me->AddThreat(temp, 100.0f);
2599 temp->AI()->AttackStart(me);
2600 }
2601 break;
2602 case 6:
2603 // COURTYARD_DONE Spawn
2605 {
2606 hordeGuardsGUID.push_back(temp->GetGUID());
2607 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
2608 }
2610 {
2611 hordeGuardsGUID.push_back(temp->GetGUID());
2612 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
2613 }
2615 {
2616 hordeGuardsGUID.push_back(temp->GetGUID());
2617 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
2618 }
2620 {
2621 hordeGuardsGUID.push_back(temp->GetGUID());
2622 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
2623 }
2624 for (uint8 i = 0; i < 2; ++i)
2626 hordeGuardsGUID.push_back(temp->GetGUID());
2627 break;
2628 case 7:
2629 for (uint8 i = 0; i < 9; ++i)
2631 break;
2632 case 8:
2633 for (uint8 i = 0; i < 2; ++i)
2635 hordeGuardsGUID.push_back(temp->GetGUID());
2636 break;
2637 case 9:
2638 // Top of Undercity - Attacktrashpack
2639 for (uint8 i = 0; i < 3; ++i)
2640 {
2641 switch (urand(0, 2))
2642 {
2643 case 0:
2645 break;
2646 case 1:
2648 break;
2649 case 2:
2651 break;
2652 }
2653 }
2654 break;
2655 case 10:
2656 // Top of Undercity - Attacktrashpack
2657 for (uint8 i = 0; i < 3; ++i)
2658 {
2659 switch (urand(0, 1))
2660 {
2661 case 0:
2663 break;
2664 case 1:
2666 break;
2667 }
2668 }
2669 break;
2670 case 11:
2671 // Bottom of Undercity - Attacktrashpack
2672 for (uint8 i = 0; i < 3; ++i)
2673 {
2674 switch (urand(0, 1))
2675 {
2676 case 0:
2678 break;
2679 case 1:
2681 break;
2682 }
2683 }
2684 break;
2685 case 12:
2686 // Valimathras 2
2688 {
2689 ValimathrasGUID = temp->GetGUID();
2690 temp->SetImmuneToAll(true);
2691 }
2692 break;
2693 case 13:
2695 ValimathrasPortalGUID = temp->GetGUID();
2696 break;
2697 // NPC_KHANOK - Inner Sunktum Spawn Left
2698 case 14:
2699 for (uint8 i = 0; i < 4; ++i)
2700 {
2701 switch (urand(0, 6))
2702 {
2703 case 0:
2705 break;
2706 case 1:
2708 break;
2709 case 2:
2711 break;
2712 case 3:
2714 break;
2715 case 4:
2717 break;
2718 case 5:
2720 break;
2721 case 6:
2723 break;
2724 }
2725 }
2726 break;
2727 // NPC_KHANOK - Inner Sunktum Spawn Right
2728 case 15:
2729 for (uint8 i = 0; i < 4; ++i)
2730 {
2731 switch (urand(0, 6))
2732 {
2733 case 0:
2735 break;
2736 case 1:
2738 break;
2739 case 2:
2741 break;
2742 case 3:
2744 break;
2745 case 4:
2747 break;
2748 case 5:
2750 break;
2751 case 6:
2753 break;
2754 }
2755 }
2756 break;
2757 // NPC_KHANOK - Inner Sunktum Spawn Top
2758 case 16:
2760 break;
2761 // NPC_KHANOK - Inner Sunktum Spawn Middle
2762 case 17:
2764 break;
2765 case 18:
2767 {
2768 hordeGuardsGUID.push_back(temp->GetGUID());
2769 temp->AI()->Talk(SAY_FOR_THE_HORDE);
2770 temp->GetMotionMaster()->MovePath(NPC_WARSONG_BATTLEGUARD * 100, false);
2771 }
2772 break;
2773 // Valimathras Room Preparation
2774 case 19:
2775 for (uint8 i = 0; i < 3; ++i)
2776 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);
2777 // Valimathras BossSpawn
2779 {
2780 ValimathrasGUID = temp->GetGUID();
2781 temp->SetImmuneToAll(true);
2782 temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
2783 temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
2784 temp->AI()->Talk(SAY_CLOSE_DOOR);
2785 }
2786 for (uint8 i = 0; i < 6; ++i)
2787 {
2789 temp->CastSpell(me, SPELL_VALIMATHRAS_PORTAL);
2790 }
2791 break;
2792 case 20:
2793 for (uint8 i = 0; i < 3; ++i)
2794 {
2795 switch (urand(0, 1))
2796 {
2797 case 0:
2799 break;
2800 case 1:
2802 break;
2803 }
2804 }
2805 break;
2806 case 21:
2807 for (uint8 i = 0; i < 3; ++i)
2808 {
2809 switch (urand(0, 1))
2810 {
2811 case 0:
2813 break;
2814 case 1:
2816 break;
2817 }
2818 }
2819 break;
2820 }
2821 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::uint8_t uint8
Definition Define.h:109
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:53
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:46
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
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.
Definition CreatureAI.cpp:50
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition MotionMaster.h:229
Definition Unit.h:636
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:2368
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:2382
float o
Definition zone_undercity.cpp:728
float y
Definition zone_undercity.cpp:728
float x
Definition zone_undercity.cpp:728
float z
Definition zone_undercity.cpp:728
@ NPC_DOOMGUARD_PILLARGER
Definition zone_undercity.cpp:692
@ SAY_FOR_THE_HORDE
Definition zone_undercity.cpp:703
@ NPC_KHANOK
Definition zone_undercity.cpp:634
@ WAVE_COURTYARD_FIGHT
Definition zone_undercity.cpp:721
@ NPC_VARIMATHRAS
Definition zone_undercity.cpp:640
@ SPELL_VALIMATHRAS_PORTAL
Definition zone_undercity.cpp:659
@ SPELL_OPENING_LEGION_PORTALS
Definition zone_undercity.cpp:666
@ SPELL_AURA_OF_VARIMATHRAS
Definition zone_undercity.cpp:664
@ SAY_CLOSE_DOOR
Definition zone_undercity.cpp:649
@ GO_BLOCKED_PASSAGE
Definition zone_undercity.cpp:539
@ NPC_VORTEX
Definition zone_undercity.cpp:528
@ NPC_WHIRLWIND
Definition zone_undercity.cpp:530

References Unit::AddThreat(), Creature::AI(), Unit::GetMotionMaster(), GO_BLOCKED_PASSAGE, hordeGuardsGUID, IN_MILLISECONDS, ScriptedAI::me, MotionMaster::MoveJump(), NPC_BETRAYER_H, NPC_BLIGHT_ABBERATION, NPC_BLIGHT_SLINGER, NPC_CAVE_DUMMY, NPC_CHEMIST_H, NPC_DOCTOR_H, NPC_DOOMGUARD_PILLARGER, NPC_DREADLORD, NPC_FELBEAST_H, NPC_FELGUARD_MORADEUR, NPC_KHANOK, NPC_LEGION_DREADWHISPER, NPC_LEGION_INVADER, NPC_TREACHEROUS_GUARDIAN_H, NPC_VARIMATHRAS, NPC_VARIMATHRAS_PORTAL, NPC_VORTEX, NPC_WARSONG_BATTLEGUARD, NPC_WHIRLWIND, LocationXYZO::o, rand32(), SAY_CLOSE_DOOR, SAY_FOR_THE_HORDE, SPELL_AURA_OF_VARIMATHRAS, SPELL_OPENING_LEGION_PORTALS, SPELL_VALIMATHRAS_PORTAL, WorldObject::SummonCreature(), WorldObject::SummonGameObject(), CreatureAI::Talk(), 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.

2446 {
2447 switch (summon->GetEntry())
2448 {
2452 bStepping = true;
2453 break;
2454 case NPC_KHANOK:
2455 {
2458 FollowThrall();
2459 SetEscortPaused(false);
2460 std::list<Creature*> SanktumList;
2462 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DREADLORD, 1000.0f);
2464 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DOCTOR_H, 1000.0f);
2465 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_CHEMIST_H, 1000.0f);
2466 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_BETRAYER_H, 1000.0f);
2467 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_FELBEAST_H, 1000.0f);
2469 if (!SanktumList.empty())
2470 for (std::list<Creature*>::iterator itr = SanktumList.begin(); itr != SanktumList.end(); itr++)
2471 (*itr)->DespawnOrUnsummon();
2472 break;
2473 }
2474 case NPC_VARIMATHRAS:
2475 {
2478 std::list<Creature*> ThroneList;
2483 if (!ThroneList.empty())
2484 for (std::list<Creature*>::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++)
2485 (*itr)->DespawnOrUnsummon();
2486 SetEscortPaused(false);
2487 SetRun(false);
2488 break;
2489 }
2490 default:
2491 break;
2492 }
2493 }
@ 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:536
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2513
void SetRun(bool on=true)
Definition ScriptedEscortAI.cpp:428
void FollowThrall()
Definition zone_undercity.cpp:2520
void UpdateWorldState(Map *map, uint32 id, uint32 state)
Definition zone_undercity.cpp:2495

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.

2915 {
2917
2918 if (bStepping)
2919 {
2920 if (phaseTimer <= diff)
2921 {
2922 switch (step)
2923 {
2924 //Preparation
2925 case 0:
2926 me->setActive(true);
2928 break;
2929 case 1:
2933 break;
2934 case 2:
2937 break;
2938 case 3:
2939 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2940 guard->AI()->Talk(SAY_BURN_UC);
2942 break;
2943 case 4:
2944 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2945 guard->AI()->Talk(SAY_PUTRESS_ANGER);
2947 break;
2948 case 5:
2951 break;
2952 case 6:
2955 break;
2956 case 7:
2959 break;
2960 case 8:
2963 break;
2964 case 9:
2967 break;
2968 case 10:
2971 break;
2972 // Start Event
2973 case 11:
2977 SetEscortPaused(false);
2978 bStepping = false;
2979 JumpToNextStep(0);
2980 SetRun(true);
2982 {
2983 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 100, false);
2984 sylvanas->setActive(true);
2985 }
2986 break;
2987 case 12:
2988 me->Dismount();
2990 break;
2991 case 13:
2993 sylvanas->Dismount();
2995 break;
2996 case 14:
2999 break;
3000 case 15:
3002 SpawnWave(0);
3004 break;
3005 case 16:
3006 {
3007 std::list<Creature*> PlagueList;
3009 if (!PlagueList.empty())
3010 for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
3011 (*itr)->DespawnOrUnsummon();
3012 SetEscortPaused(false);
3013 SetRun(false);
3015 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 1000, false);
3017 break;
3018 }
3019 case 17:
3020 bStepping = false;
3021 JumpToNextStep(0);
3022 break;
3023 case 18:
3024 SpawnWave(1);
3027 break;
3028 case 19:
3029 {
3030 SpawnWave(2);
3032 break;
3033 }
3034 case 20:
3036 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_0);
3038 break;
3039 case 21:
3041 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_1);
3043 break;
3044 case 22:
3046 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_2);
3048 break;
3049 case 23:
3050 SpawnWave(3);
3052 break;
3053 case 24:
3055 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3057 break;
3058 case 25:
3060 {
3061 valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
3062 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3063 }
3065 valimathrasportal->DespawnOrUnsummon(6 * IN_MILLISECONDS);
3067 break;
3068 case 26:
3069 {
3072 std::list<Creature*> HelperList;
3074 if (!HelperList.empty())
3075 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3076 (*itr)->DespawnOrUnsummon();
3078 break;
3079 }
3080 // Start COURTYARD_FIGHT
3081 case 27:
3082 FollowThrall();
3083 SetEscortPaused(false);
3084 bStepping = false;
3085 SetRun(true);
3089 JumpToNextStep(0);
3090 break;
3091 case 28:
3092 {
3093 EnableAttack = true;
3095 std::list<Creature*> HostileEndList;
3097 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_DOCTOR_H, 1000.0f);
3098 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_CHEMIST_H, 1000.0f);
3099 if (!HostileEndList.empty())
3100 for (std::list<Creature*>::iterator itr = HostileEndList.begin(); itr != HostileEndList.end(); itr++) (*itr)->SetFaction(FACTION_MONSTER);
3101 SpawnWave(4);
3103 break;
3104 }
3105 case 29:
3106 SpawnWave(4);
3108 break;
3109 case 30:
3110 SpawnWave(4);
3112 break;
3113 case 31:
3114 SpawnWave(4);
3116 break;
3117 case 32:
3118 SpawnWave(4);
3120 break;
3121 case 33:
3122 SpawnWave(4);
3124 break;
3125 case 34:
3126 SpawnWave(4);
3128 break;
3129 case 35:
3130 SpawnWave(4);
3132 break;
3133 case 36:
3134 SpawnWave(4);
3136 break;
3137 case 37:
3138 SpawnWave(4);
3140 break;
3141 case 38:
3142 SpawnWave(4);
3144 break;
3145 case 39:
3146 SpawnWave(4);
3148 break;
3149 case 40:
3150 SpawnWave(4);
3152 break;
3153 case 41:
3154 SpawnWave(4);
3156 break;
3157 case 42:
3158 SpawnWave(4);
3160 break;
3161 case 43:
3162 SpawnWave(4);
3164 break;
3165 case 44:
3166 SpawnWave(4);
3168 break;
3169 case 45:
3170 SpawnWave(5);
3171 bStepping = false;
3173 break;
3174 // End COURTYARD_FIGHT
3175 case 46:
3176 {
3177 FollowThrall();
3178 std::list<Creature*> HostileList;
3180 me->GetCreatureListWithEntryInGrid(HostileList, NPC_DOCTOR_H, 1000.0f);
3181 me->GetCreatureListWithEntryInGrid(HostileList, NPC_CHEMIST_H, 1000.0f);
3183 if (!HostileList.empty())
3184 for (std::list<Creature*>::iterator itr = HostileList.begin(); itr != HostileList.end(); itr++)
3185 (*itr)->DespawnOrUnsummon();
3186 for (uint8 i = 0; i < 7; ++i)
3187 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);
3188 SpawnWave(6);
3189 SetEscortPaused(false);
3190 bStepping = false;
3191 SetRun(false);
3193 break;
3194 }
3195 case 47:
3198 break;
3199 case 48:
3200 SetEscortPaused(false);
3201 bStepping = false;
3203 break;
3204 // Elevator Event
3205 case 49:
3208 break;
3209 case 50:
3211 sylvanas->AI()->Talk(SYLVANAS_SAY_ELEVATOR_1);
3213 break;
3214 case 51:
3217 SpawnWave(7);
3219 break;
3220 case 52:
3223 break;
3224 case 53:
3225 SpawnWave(8);
3226 me->GetMotionMaster()->MoveJump(ThrallSpawn[55].x, ThrallSpawn[55].y, ThrallSpawn[55].z, 40.0f, 40.0f, 0);
3228 sylvanas->GetMotionMaster()->MoveJump(ThrallSpawn[56].x, ThrallSpawn[56].y, ThrallSpawn[56].z, 40.0f, 40.0f, 0);
3230 break;
3231 case 54:
3232 FollowThrall();
3233 SetEscortPaused(false);
3234 bStepping = false;
3235 SetRun(false);
3237 break;
3238 // Top of Undercity Discussion
3239 case 55:
3241 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_1);
3243 break;
3244 case 56:
3246 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_2);
3248 break;
3249 case 57:
3252 break;
3253 case 58:
3255 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_3);
3257 break;
3258 // Top of Undercity - Fight
3259 case 59:
3260 SpawnWave(9);
3262 break;
3263 case 60:
3264 SpawnWave(9);
3266 break;
3267 case 61:
3268 SpawnWave(9);
3270 break;
3271 case 62:
3272 FollowThrall();
3273 SetEscortPaused(false);
3274 bStepping = false;
3275 SetRun(false);
3277 break;
3278 case 63:
3280 break;
3281 case 64:
3282 SpawnWave(10);
3284 break;
3285 case 65:
3286 SpawnWave(10);
3288 break;
3289 case 66:
3290 FollowThrall();
3291 SetEscortPaused(false);
3292 bStepping = false;
3293 SetRun(false);
3295 break;
3296 case 67:
3297 SpawnWave(11);
3299 break;
3300 case 68:
3301 SpawnWave(11);
3303 break;
3304 case 69:
3305 FollowThrall();
3306 SetEscortPaused(false);
3307 bStepping = false;
3308 SetRun(false);
3310 break;
3311 // KHANOK - Valimathtas Intro
3312 case 70:
3314 break;
3315 case 71:
3317 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_4);
3318 SpawnWave(12);
3320 break;
3321 case 72:
3323 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_0);
3325 break;
3326 case 73:
3328 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_1);
3329 SpawnWave(13);
3331 break;
3332 case 74:
3334 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3336 break;
3337 case 75:
3339 {
3340 valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
3341 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3342 }
3344 valimathrasportal->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3346 break;
3347 // KHANOK - Trashspawn
3348 case 76:
3349 SpawnWave(14);
3351 break;
3352 case 77:
3353 SpawnWave(15);
3355 break;
3356 case 78:
3357 SpawnWave(16);
3359 break;
3360 case 79:
3361 SpawnWave(14);
3363 break;
3364 case 80:
3365 SpawnWave(15);
3367 break;
3368 case 81:
3369 SpawnWave(16);
3371 break;
3372 case 82:
3373 SpawnWave(14);
3375 break;
3376 case 83:
3377 SpawnWave(15);
3379 break;
3380 case 84:
3381 SpawnWave(16);
3383 break;
3384 case 85:
3385 SpawnWave(14);
3387 break;
3388 case 86:
3389 SpawnWave(15);
3391 break;
3392 case 87:
3393 SpawnWave(16);
3395 break;
3396 case 88:
3397 SpawnWave(14);
3399 break;
3400 case 89:
3401 SpawnWave(15);
3403 break;
3404 case 90:
3405 SpawnWave(16);
3407 break;
3408 case 91:
3409 SpawnWave(14);
3411 break;
3412 case 92:
3413 SpawnWave(15);
3415 break;
3416 case 93:
3417 SpawnWave(16);
3419 break;
3420 case 94:
3421 // Spawn Boss 2 KHANOK
3422 SpawnWave(17);
3424 break;
3425 case 95:
3426 SpawnWave(14);
3428 break;
3429 case 96:
3430 SpawnWave(15);
3432 break;
3433 case 97:
3434 SpawnWave(16);
3436 bStepping = false;
3437 break;
3438 case 98:
3439 // KHANOK - Won
3442 break;
3443 case 99:
3444 SpawnWave(18);
3446 break;
3447 case 100:
3448 SpawnWave(18);
3450 break;
3451 case 101:
3452 SpawnWave(18);
3454 break;
3455 case 102:
3456 SpawnWave(18);
3458 break;
3459 case 103:
3460 SpawnWave(18);
3462 break;
3463 case 104:
3464 SpawnWave(18);
3466 break;
3467 case 105:
3468 SpawnWave(18);
3470 break;
3471 case 106:
3472 SpawnWave(18);
3474 break;
3475 case 107:
3476 SpawnWave(18);
3478 break;
3479 case 108:
3481 FollowThrall();
3482 SetEscortPaused(false);
3483 bStepping = false;
3484 SetRun(false);
3486 break;
3487 case 109:
3489 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_5);
3491 break;
3492 case 110:
3493 SpawnWave(19);
3495 break;
3496 case 111:
3497 FollowThrall();
3498 SetEscortPaused(false);
3499 bStepping = false;
3500 SetRun(true);
3502 break;
3503 case 112:
3505 break;
3506 case 113:
3509 break;
3510 case 114:
3514 break;
3515 case 115:
3516 {
3517 std::list<GameObject*> SaronitList;
3519 for (std::list<GameObject*>::const_iterator itr = SaronitList.begin(); itr != SaronitList.end(); ++itr)
3520 if (GameObject* saronit = (*itr))
3521 saronit->UseDoorOrButton();
3523 break;
3524 }
3525 case 116:
3528 FollowThrall();
3529 SetEscortPaused(false);
3530 bStepping = false;
3532 break;
3533 // Valimathras Intro
3534 case 117:
3537 break;
3538 case 118:
3540 {
3541 valimathras->AI()->Talk(SAY_THRONE_1);
3542 valimathras->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
3543 }
3545 break;
3546 case 119:
3547 SpawnWave(20);
3549 break;
3550 case 120:
3551 SpawnWave(21);
3553 break;
3554 case 121:
3557 valimathras->AI()->Talk(SAY_THRONE_2);
3559 break;
3560 case 122:
3561 SpawnWave(20);
3563 break;
3564 case 123:
3565 SpawnWave(21);
3567 break;
3568 case 124:
3571 valimathras->AI()->Talk(SAY_THRONE_3);
3573 break;
3574 case 125:
3575 SpawnWave(20);
3577 break;
3578 case 126:
3579 SpawnWave(21);
3581 break;
3582 case 127:
3585 valimathras->AI()->Talk(SAY_THRONE_4);
3587 break;
3588 case 128:
3589 SpawnWave(20);
3591 break;
3592 case 129:
3593 SpawnWave(21);
3595 break;
3596 case 130:
3599 valimathras->AI()->Talk(SAY_THRONE_5);
3601 break;
3602 case 131:
3603 SpawnWave(20);
3605 break;
3606 case 132:
3607 SpawnWave(21);
3609 break;
3610 case 133:
3613 valimathras->AI()->Talk(SAY_THRONE_6);
3615 break;
3616 case 134:
3617 SpawnWave(20);
3619 break;
3620 case 135:
3621 SpawnWave(21);
3623 break;
3624 case 136:
3627 break;
3628 // Valimathras Fight
3629 case 137:
3631 {
3632 valimathras->SetImmuneToAll(false);
3633 valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
3634 valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
3635 valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
3636 valimathras->AddThreat(me, 100.0f);
3637 me->AddThreat(valimathras, 100.0f);
3638 valimathras->AI()->AttackStart(me);
3639 }
3640 bStepping = false;
3642 break;
3643 // Valimathras Won
3644 case 138:
3647 break;
3648 case 139:
3651 break;
3652 case 140:
3653 SetEscortPaused(false);
3654 bStepping = false;
3656 break;
3657 case 141:
3659 break;
3660 case 142:
3662 me->SetFacingToObject(sylvanas);
3665 break;
3666 case 143:
3668 {
3669 sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f, true);
3670 sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
3671 }
3673 break;
3674 case 144:
3676 {
3677 sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
3678 me->SetFacingToObject(sylvanas);
3679 sylvanas->SetFacingToObject(me);
3681 }
3683 break;
3684 case 145:
3686 FollowThrall();
3687 SetEscortPaused(false);
3688 bStepping = false;
3690 break;
3691 case 146:
3694 break;
3695 case 147:
3696 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3697 {
3699 {
3700 allianceForcesGUID[i] = temp->GetGUID();
3701 temp->SetImmuneToAll(true);
3702 temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
3703 temp->SetReactState(REACT_PASSIVE);
3704 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3705 }
3706 }
3707 if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3708 {
3709 WrynnGUID = wrynn->GetGUID();
3710 wrynn->SetImmuneToAll(true);
3711 wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3712 wrynn->SetReactState(REACT_PASSIVE);
3713 wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f, true);
3714 }
3715 if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3716 {
3717 JainaGUID = jaina->GetGUID();
3718 jaina->SetImmuneToAll(true);
3719 jaina->SetReactState(REACT_PASSIVE);
3720 }
3722 break;
3723 // Wrynn Intro
3724 case 148:
3726 wrynn->AI()->Talk(WRYNN_SAY_THRONE_5);
3728 break;
3729 case 149:
3731 wrynn->AI()->Talk(WRYNN_SAY_THRONE_6);
3733 break;
3734 case 150:
3736 wrynn->AI()->Talk(WRYNN_SAY_THRONE_7);
3738 break;
3739 case 151:
3741 wrynn->AI()->Talk(WRYNN_SAY_THRONE_8);
3743 break;
3744 // Wrynn Fight
3745 case 152:
3746 me->SetImmuneToAll(false);
3748 {
3749 wrynn->SetImmuneToNPC(false);
3750 wrynn->SetImmuneToPC(true);
3751 wrynn->SetReactState(REACT_AGGRESSIVE);
3752 wrynn->AddThreat(me, 100.0f);
3753 me->AddThreat(wrynn, 100.0f);
3754 wrynn->AI()->AttackStart(me);
3755 }
3756
3757 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3758 {
3760 {
3761 temp->SetImmuneToAll(false);
3762 temp->SetReactState(REACT_AGGRESSIVE);
3763 temp->AddThreat(me, 100.0f);
3764 temp->AI()->AttackStart(me);
3765 }
3766 }
3768 break;
3769 case 153:
3771 {
3772 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
3773 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
3774 }
3776 break;
3777 case 154:
3779 {
3780 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
3781 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
3782 }
3784 break;
3785 case 155:
3786 {
3787 std::list<Creature*> HelperList;
3788 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
3789 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
3790 me->GetCreatureListWithEntryInGrid(HelperList, NPC_WRYNN, 100.0f);
3791 if (!HelperList.empty())
3792 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3793 (*itr)->DespawnOrUnsummon();
3795 break;
3796 }
3797 case 156:
3799 SetEscortPaused(false);
3800 bStepping = false;
3802 break;
3803 case 157:
3807 break;
3808 // Ending
3809 case 158:
3810 if (Creature* saurfang = me->SummonCreature(NPC_OVERLORD_SAURFANG, 1297.574f, 347.154f, -65.027f, TEMPSUMMON_MANUAL_DESPAWN))
3811 {
3812 SaurfangGUID = saurfang->GetGUID();
3813 saurfang->SetWalk(true);
3814 saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f, true);
3815 }
3817 break;
3818 case 159:
3820 {
3821 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_1);
3822 saurfang->SetStandState(UNIT_STAND_STATE_SIT);
3823 }
3825 break;
3826 case 160:
3828 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_2);
3830 break;
3831 case 161:
3833 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_3);
3834 if (Map* map = me->GetMap())
3835 {
3836 Map::PlayerList const& PlayerList = map->GetPlayers();
3837 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
3838 {
3839 if (Player* player = i->GetSource())
3840 {
3841 if (me->IsInRange(player, 0.0f, 50.0f))
3842 {
3843 if (player->GetTeamId() == TEAM_HORDE)
3844 {
3845 player->RemoveAura(SPELL_SYLVANAS_BUFF);
3846 player->RemoveAura(SPELL_THRALL_BUFF);
3847 player->CompleteQuest(QUEST_BATTLE_H);
3848 player->CastSpell(player, SPELL_PHASING_HORDE);
3849 }
3850 }
3851 }
3852 }
3853 }
3855 break;
3856 case 162:
3859 break;
3860 case 163:
3867 std::list<Creature*> HelperList;
3868 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
3870 if (!HelperList.empty())
3871 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3872 (*itr)->DespawnOrUnsummon(120 * IN_MILLISECONDS);
3874 bStepping = false;
3876 break;
3877 }
3878 }
3879 else phaseTimer -= diff;
3880 }
3881
3882 if (!UpdateVictim())
3883 return;
3884
3885 _events.Update(diff);
3886
3888 return;
3889
3890 while (uint32 eventId = _events.ExecuteEvent())
3891 {
3892 switch (eventId)
3893 {
3897 break;
3898 case EVENT_LAVA_BURST:
3901 break;
3902 case EVENT_THUNDER:
3905 break;
3907 if (me->GetVictim())
3909 sylvanas->AI()->AttackStart(me->GetVictim());
3911 break;
3912 case EVENT_THRALL_BUFF:
3915 break;
3916 default:
3917 break;
3918 }
3919 }
3920
3922 }
std::uint32_t uint32
Definition Define.h:107
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &list, WorldObject *source, uint32 entry, float maxSearchRange)
Definition ScriptedCreature.cpp:880
@ EMOTE_ONESHOT_SALUTE
Definition SharedDefines.h:1942
@ TEAM_HORDE
Definition SharedDefines.h:761
@ FACTION_MONSTER
Definition SharedDefines.h:195
@ UNIT_STAND_STATE_SIT
Definition UnitDefines.h:33
@ UNIT_NPC_FLAG_QUESTGIVER
Definition UnitDefines.h:316
@ UNIT_STATE_CASTING
Definition UnitDefines.h:185
@ REACT_PASSIVE
Definition Unit.h:548
@ 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:280
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition Creature.cpp:2183
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:156
Definition Player.h:1081
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:39
SpellCastResult DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:240
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:177
void Dismount()
Definition Unit.cpp:13569
void SetFacingToObject(WorldObject *object)
Definition Unit.cpp:20591
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:1178
Unit * GetVictim() const
Definition Unit.h:862
bool HasUnitState(const uint32 f) const
Definition Unit.h:707
void HandleEmoteCommand(uint32 emoteId)
Definition Unit.cpp:2011
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition Unit.h:883
void setActive(bool isActiveObject)
Definition Object.cpp:1094
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
Definition Object.cpp:1415
Talk
Definition hyjal.cpp:82
void UpdateAI(uint32 diff) override
Use to start attacking a target. Called just before JustEngagedWith()
Definition ScriptedEscortAI.cpp:240
void ActivateValimathrasPortal()
Definition zone_undercity.cpp:2532
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition zone_undercity.cpp:2304
void JumpToNextStep(uint32 uiTimer)
Definition zone_undercity.cpp:2514
void SpawnWave(uint32 waveId)
Definition zone_undercity.cpp:2541
@ WRYNN_SAY_THRONE_5
Definition zone_undercity.cpp:398
@ NPC_WRYNN
Definition zone_undercity.cpp:369
@ WRYNN_SAY_THRONE_6
Definition zone_undercity.cpp:399
@ WRYNN_SAY_THRONE_8
Definition zone_undercity.cpp:401
@ WRYNN_SAY_THRONE_7
Definition zone_undercity.cpp:400
@ JAINA_SAY_THRONE_2
Definition zone_undercity.cpp:425
@ JAINA_SAY_THRONE_3
Definition zone_undercity.cpp:426
@ NPC_JAINA
Definition zone_undercity.cpp:419
@ SPELL_DEEPFREEZE
Definition zone_undercity.cpp:432
@ NPC_SW_SOLDIER
Definition zone_undercity.cpp:679
@ NPC_HORDE_GUARD
Definition zone_undercity.cpp:681
@ SAY_PUTRESS_ANGER
Definition zone_undercity.cpp:702
@ SAY_BURN_UC
Definition zone_undercity.cpp:701
@ SYLVANAS_SAY_SANCTUM_4
Definition zone_undercity.cpp:558
@ SPELL_LEAP_TO_PLATFORM
Definition zone_undercity.cpp:565
@ SYLVANAS_SAY_SANCTUM_3
Definition zone_undercity.cpp:557
@ SYLVANAS_SAY_THRONE_1
Definition zone_undercity.cpp:560
@ SYLVANAS_SAY_SANCTUM_1
Definition zone_undercity.cpp:555
@ SYLVANAS_SAY_SANCTUM_2
Definition zone_undercity.cpp:556
@ SYLVANAS_SAY_SANCTUM_5
Definition zone_undercity.cpp:559
@ NPC_SYLVANAS
Definition zone_undercity.cpp:550
@ SYLVANAS_SAY_ELEVATOR_1
Definition zone_undercity.cpp:554
@ SPELL_PHASING_HORDE
Definition zone_undercity.cpp:711
@ ALLIANCE_FORCE_MAXCOUNT
Definition zone_undercity.cpp:719
@ QUEST_BATTLE_H
Definition zone_undercity.cpp:709
@ SAY_SAURFANG_ARRIVAL_2
Definition zone_undercity.cpp:579
@ SAY_SAURFANG_ARRIVAL_3
Definition zone_undercity.cpp:580
@ SAY_SAURFANG_ARRIVAL_1
Definition zone_undercity.cpp:578
static LocationXYZO AllianceSpawn[]
Definition zone_undercity.cpp:731
@ SAY_VALIMATHRAS_ATTACK
Definition zone_undercity.cpp:656
@ SAY_THRONE_2
Definition zone_undercity.cpp:651
@ SAY_THRONE_1
Definition zone_undercity.cpp:650
@ SAY_VALIMATHRAS_INTRO_1
Definition zone_undercity.cpp:645
@ SAY_VALIMATHRAS_INTRO_2
Definition zone_undercity.cpp:646
@ SAY_THRONE_6
Definition zone_undercity.cpp:655
@ SAY_VALIMATHRAS_INTRO_0
Definition zone_undercity.cpp:644
@ SAY_VALIMATHRAS_INNER_SANKTUM_0
Definition zone_undercity.cpp:647
@ SAY_THRONE_5
Definition zone_undercity.cpp:654
@ SAY_VALIMATHRAS_INNER_SANKTUM_1
Definition zone_undercity.cpp:648
@ SAY_THRONE_4
Definition zone_undercity.cpp:653
@ SAY_THRONE_3
Definition zone_undercity.cpp:652
@ THRALL_SAY_THRONE_11
Definition zone_undercity.cpp:490
@ NPC_SLINGER_TRIGGER
Definition zone_undercity.cpp:532
@ THRALL_SAY_COURTYARD_5
Definition zone_undercity.cpp:469
@ THRALL_SAY_THRONE_2
Definition zone_undercity.cpp:481
@ THRALL_SAY_THRONE_4
Definition zone_undercity.cpp:483
@ THRALL_SAY_SANCTUM_6
Definition zone_undercity.cpp:478
@ THRALL_SAY_PREP_1
Definition zone_undercity.cpp:457
@ SPELL_CALL_OF_AIR
Definition zone_undercity.cpp:502
@ THRALL_SAY_PREP_6
Definition zone_undercity.cpp:462
@ THRALL_SAY_ELEVATOR_1
Definition zone_undercity.cpp:470
@ THRALL_SAY_COURTYARD_3
Definition zone_undercity.cpp:467
@ THRALL_SAY_THRONE_9
Definition zone_undercity.cpp:488
@ THRALL_SAY_THRONE_7
Definition zone_undercity.cpp:486
@ THRALL_SAY_SANCTUM_4
Definition zone_undercity.cpp:476
@ SPELL_LAVA_BURST
Definition zone_undercity.cpp:515
@ THRALL_SAY_COURTYARD_1
Definition zone_undercity.cpp:465
@ THRALL_SAY_PREP_5
Definition zone_undercity.cpp:461
@ GO_HORDE_BANNER
Definition zone_undercity.cpp:540
@ THRALL_SAY_SANCTUM_3
Definition zone_undercity.cpp:475
@ SPELL_CALL_OF_EARTH
Definition zone_undercity.cpp:504
@ THRALL_SAY_THRONE_1
Definition zone_undercity.cpp:480
@ THRALL_SAY_PREP_7
Definition zone_undercity.cpp:463
@ THRALL_SAY_SANCTUM_5
Definition zone_undercity.cpp:477
@ THRALL_SAY_COURTYARD_4
Definition zone_undercity.cpp:468
@ THRALL_SAY_PREP_3
Definition zone_undercity.cpp:459
@ SPELL_TIDAL_WAVE_SUMMON
Definition zone_undercity.cpp:499
@ THRALL_SAY_PREP_8
Definition zone_undercity.cpp:464
@ THRALL_SAY_ELEVATOR_2
Definition zone_undercity.cpp:471
@ THRALL_SAY_ELEVATOR_3
Definition zone_undercity.cpp:472
@ THRALL_SAY_THRONE_3
Definition zone_undercity.cpp:482
@ THRALL_SAY_PREP_4
Definition zone_undercity.cpp:460
@ THRALL_SAY_THRONE_5
Definition zone_undercity.cpp:484
@ THRALL_SAY_SANCTUM_7
Definition zone_undercity.cpp:479
@ THRALL_SAY_PREP_2
Definition zone_undercity.cpp:458
@ THRALL_SAY_THRONE_10
Definition zone_undercity.cpp:489
@ SPELL_CHAIN_LIGHTNING
Definition zone_undercity.cpp:514
@ THRALL_SAY_THRONE_6
Definition zone_undercity.cpp:485
@ THRALL_SAY_SANCTUM_2
Definition zone_undercity.cpp:474
@ NPC_PLAGUE_TRIGGER
Definition zone_undercity.cpp:535
@ NPC_OVERLORD_SAURFANG
Definition zone_undercity.cpp:533
@ SPELL_THUNDER
Definition zone_undercity.cpp:516
@ THRALL_SAY_COURTYARD_2
Definition zone_undercity.cpp:466
static LocationXYZO AllianceWP[]
Definition zone_undercity.cpp:766

References _events, ActivateValimathrasPortal(), Unit::AddThreat(), ALLIANCE_FORCE_MAXCOUNT, allianceForcesGUID, AllianceSpawn, AllianceWP, MapRefMgr::begin(), bStepping, Unit::CastSpell(), Creature::DespawnOrUnsummon(), Unit::Dismount(), UnitAI::DoCast(), UnitAI::DoCastVictim(), UnitAI::DoMeleeAttackIfReady(), EMOTE_ONESHOT_SALUTE, EMOTE_STATE_READY2H, EnableAttack, MapRefMgr::end(), EVENT_AGGRO_SYLVANAS, EVENT_CHAIN_LIGHTNING, EVENT_LAVA_BURST, EVENT_THRALL_BUFF, EVENT_THUNDER, EventMap::ExecuteEvent(), FACTION_MONSTER, WorldObject::FindNearestCreature(), FollowThrall(), ObjectAccessor::GetCreature(), WorldObject::GetCreatureListWithEntryInGrid(), GetGameObjectListWithEntryInGrid(), WorldObject::GetMap(), Unit::GetMotionMaster(), Unit::GetVictim(), GO_BLOCKED_PASSAGE, GO_HORDE_BANNER, Unit::HandleEmoteCommand(), Unit::HasUnitState(), IMMUNITY_ID, IN_MILLISECONDS, WorldObject::IsInRange(), JAINA_SAY_THRONE_2, JAINA_SAY_THRONE_3, JainaGUID, JumpToNextStep(), ScriptedAI::me, MotionMaster::MoveJump(), NPC_BLIGHT_SLINGER, NPC_CHEMIST_H, NPC_DOCTOR_H, NPC_HORDE_GUARD, NPC_JAINA, NPC_OVERLORD_SAURFANG, NPC_PLAGUE_TRIGGER, NPC_SLINGER_TRIGGER, NPC_SW_SOLDIER, NPC_SYLVANAS, NPC_TREACHEROUS_GUARDIAN_H, NPC_WRYNN, LocationXYZO::o, phaseTimer, QUEST_BATTLE_H, REACT_AGGRESSIVE, REACT_PASSIVE, SaurfangGUID, SAY_BURN_UC, SAY_PUTRESS_ANGER, SAY_SAURFANG_ARRIVAL_1, SAY_SAURFANG_ARRIVAL_2, SAY_SAURFANG_ARRIVAL_3, SAY_THRONE_1, SAY_THRONE_2, SAY_THRONE_3, SAY_THRONE_4, SAY_THRONE_5, SAY_THRONE_6, SAY_VALIMATHRAS_ATTACK, SAY_VALIMATHRAS_INNER_SANKTUM_0, SAY_VALIMATHRAS_INNER_SANKTUM_1, SAY_VALIMATHRAS_INTRO_0, SAY_VALIMATHRAS_INTRO_1, SAY_VALIMATHRAS_INTRO_2, EventMap::ScheduleEvent(), WorldObject::setActive(), npc_escortAI::SetEscortPaused(), Unit::SetFacingToObject(), Unit::SetImmuneToAll(), Unit::SetNpcFlag(), npc_escortAI::SetRun(), Unit::SetStandState(), SpawnWave(), SPELL_AURA_OF_VARIMATHRAS, SPELL_CALL_OF_AIR, SPELL_CALL_OF_EARTH, SPELL_CHAIN_LIGHTNING, SPELL_DEEPFREEZE, SPELL_HEROIC_VANGUARD, SPELL_LAVA_BURST, SPELL_LEAP_TO_PLATFORM, SPELL_OPENING_LEGION_PORTALS, SPELL_PHASING_HORDE, SPELL_SYLVANAS_BUFF, SPELL_THRALL_BUFF, SPELL_THUNDER, SPELL_TIDAL_WAVE_SUMMON, SPELL_VALIMATHRAS_PORTAL, step, WorldObject::SummonCreature(), WorldObject::SummonGameObject(), SYLVANAS_SAY_ELEVATOR_1, SYLVANAS_SAY_SANCTUM_1, SYLVANAS_SAY_SANCTUM_2, SYLVANAS_SAY_SANCTUM_3, SYLVANAS_SAY_SANCTUM_4, SYLVANAS_SAY_SANCTUM_5, SYLVANAS_SAY_THRONE_1, sylvanasfollowGUID, TEAM_HORDE, TEMPSUMMON_MANUAL_DESPAWN, THRALL_SAY_COURTYARD_1, THRALL_SAY_COURTYARD_2, THRALL_SAY_COURTYARD_3, THRALL_SAY_COURTYARD_4, THRALL_SAY_COURTYARD_5, THRALL_SAY_ELEVATOR_1, THRALL_SAY_ELEVATOR_2, THRALL_SAY_ELEVATOR_3, THRALL_SAY_PREP_1, THRALL_SAY_PREP_2, THRALL_SAY_PREP_3, THRALL_SAY_PREP_4, THRALL_SAY_PREP_5, THRALL_SAY_PREP_6, THRALL_SAY_PREP_7, THRALL_SAY_PREP_8, THRALL_SAY_SANCTUM_2, THRALL_SAY_SANCTUM_3, THRALL_SAY_SANCTUM_4, THRALL_SAY_SANCTUM_5, THRALL_SAY_SANCTUM_6, THRALL_SAY_SANCTUM_7, THRALL_SAY_THRONE_1, THRALL_SAY_THRONE_10, THRALL_SAY_THRONE_11, THRALL_SAY_THRONE_2, THRALL_SAY_THRONE_3, THRALL_SAY_THRONE_4, THRALL_SAY_THRONE_5, THRALL_SAY_THRONE_6, THRALL_SAY_THRONE_7, THRALL_SAY_THRONE_9, ThrallSpawn, UNIT_NPC_EMOTESTATE, UNIT_NPC_FLAG_GOSSIP, UNIT_NPC_FLAG_QUESTGIVER, UNIT_STAND_STATE_SIT, UNIT_STATE_CASTING, EventMap::Update(), npc_escortAI::UpdateAI(), CreatureAI::UpdateVictim(), UpdateWorldState(), ValimathrasGUID, ValimathrasPortalGUID, WORLD_STATE_BATTLE_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
2496 {
2497 Map::PlayerList const& players = map->GetPlayers();
2498
2499 if (!players.IsEmpty())
2500 {
2501 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2502 {
2503 if (Player* player = itr->GetSource())
2504 player->SendUpdateWorldState(id, state);
2505 }
2506 }
2507 }
bool IsEmpty() const
Definition LinkedList.h:97
PlayerList const & GetPlayers() const
Definition Map.h:333

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.

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

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: