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 ()
 
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)
 
- 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
2279 : npc_escortAI(creature)
2280 {
2281 hordeGuardsGUID.clear();
2282 }
Definition ScriptedEscortAI.h:53
GuidVector hordeGuardsGUID
Definition zone_undercity.cpp:2297

References hordeGuardsGUID.

Member Function Documentation

◆ ActivateValimathrasPortal()

void npc_thrall_bfu::npc_thrall_bfuAI::ActivateValimathrasPortal ( )
inline
2520 {
2521 if (Creature* portal = me->FindNearestCreature(NPC_VARIMATHRAS_PORTAL, 500.0f))
2522 {
2523 portal->SummonCreature(NPC_LEGION_OVERLORD, ThrallSpawn[81].x + rand32() % 5, ThrallSpawn[81].y + rand32() % 5, ThrallSpawn[81].z, TEMPSUMMON_DEAD_DESPAWN);
2524 portal->DespawnOrUnsummon();
2525 }
2526 }
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:53
uint32 rand32()
Definition Random.cpp:80
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:683
@ NPC_VARIMATHRAS_PORTAL
Definition zone_undercity.cpp:628
static LocationXYZO ThrallSpawn[]
Definition zone_undercity.cpp:772

References WorldObject::FindNearestCreature(), ScriptedAI::me, NPC_LEGION_OVERLORD, NPC_VARIMATHRAS_PORTAL, rand32(), TEMPSUMMON_DEAD_DESPAWN, and ThrallSpawn.

Referenced by UpdateAI().

◆ CanAIAttack()

bool npc_thrall_bfu::npc_thrall_bfuAI::CanAIAttack ( Unit const *  victim) const
inlineoverridevirtual

Reimplemented from UnitAI.

2897 {
2898 return victim->GetEntry() != NPC_BLIGHT_SLINGER;
2899 }
@ NPC_BLIGHT_SLINGER
Definition zone_undercity.cpp:680

References Object::GetEntry(), and NPC_BLIGHT_SLINGER.

◆ EnterEvadeMode()

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

Reimplemented from npc_escortAI.

2302 {
2305 me->CombatStop(true);
2306 me->SetLootRecipient(nullptr);
2307
2309 {
2312 }
2313 else
2314 {
2316 Reset();
2317 }
2318 }
@ 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:10480
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:4809
MotionMaster * GetMotionMaster()
Definition Unit.h:1664
ThreatMgr & GetThreatMgr()
Definition Unit.h:896
bool HasEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:98
void AddEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:110
void ReturnToLastPoint()
Definition ScriptedEscortAI.cpp:186
void Reset() override
Definition zone_undercity.cpp:2320
@ SPELL_HEROIC_VANGUARD
Definition zone_undercity.cpp:504

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

◆ FollowThrall()

void npc_thrall_bfu::npc_thrall_bfuAI::FollowThrall ( )
inline
2508 {
2510 {
2511 sylvanas->GetMotionMaster()->Clear();
2512 sylvanas->SetImmuneToAll(false);
2513 sylvanas->SetReactState(REACT_AGGRESSIVE);
2514 sylvanas->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
2515 sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
2516 }
2517 }
@ FACTION_ESCORT_N_NEUTRAL_ACTIVE
Definition ScriptSystem.h:37
@ REACT_AGGRESSIVE
Definition Unit.h:551
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition ObjectAccessor.cpp:210
ObjectGuid sylvanasfollowGUID
Definition zone_undercity.cpp:2290

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
2502 {
2503 phaseTimer = uiTimer;
2504 ++step;
2505 }
uint32 phaseTimer
Definition zone_undercity.cpp:2288
uint32 step
Definition zone_undercity.cpp:2287

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

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

Reimplemented from CreatureAI.

2381 {
2382 switch (summoned->GetEntry())
2383 {
2385 summoned->AI()->AttackStart(me);
2386 break;
2390 break;
2393 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2395 break;
2396 case NPC_CAVE_DUMMY:
2398 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2400 summoned->AddAura(SPELL_CYCLONE_FALL, summoned);
2401 break;
2403 case NPC_DOCTOR_H:
2404 case NPC_CHEMIST_H:
2407 summoned->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
2409 if (!EnableAttack)
2410 summoned->SetFaction(FACTION_FRIENDLY);
2411 summoned->AddThreat(me, 100.0f);
2412 me->AddThreat(summoned, 100.0f);
2413 summoned->AI()->AttackStart(me);
2414 break;
2415 case NPC_LEGION_INVADER:
2418 case NPC_DREADLORD:
2419 case NPC_BETRAYER_H:
2420 case NPC_FELBEAST_H:
2423 summoned->AddThreat(me, 100.0f);
2424 me->AddThreat(summoned, 100.0f);
2425 summoned->AI()->AttackStart(me);
2426 break;
2427 default:
2428 break;
2429 }
2430 }
@ 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:116
virtual void AttackStart(Unit *)
Definition UnitAI.cpp:27
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition Unit.cpp:13433
void SetFaction(uint32 faction)
Definition Unit.cpp:10096
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition Unit.cpp:14704
Aura * AddAura(uint32 spellId, Unit *target)
Definition Unit.cpp:18910
void SetUInt32Value(uint16 index, uint32 value)
Definition Unit.cpp:21136
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:703
bool EnableAttack
Definition zone_undercity.cpp:2285
@ NPC_DOCTOR_H
Definition zone_undercity.cpp:678
@ NPC_BETRAYER_H
Definition zone_undercity.cpp:675
@ NPC_DREADLORD
Definition zone_undercity.cpp:659
@ NPC_FELBEAST_H
Definition zone_undercity.cpp:673
@ NPC_LEGION_DREADWHISPER
Definition zone_undercity.cpp:685
@ NPC_CHEMIST_H
Definition zone_undercity.cpp:676
@ NPC_LEGION_INVADER
Definition zone_undercity.cpp:684
@ NPC_TREACHEROUS_GUARDIAN_H
Definition zone_undercity.cpp:671
@ NPC_FELGUARD_MORADEUR
Definition zone_undercity.cpp:682
@ SPELL_SYLVANAS_BUFF
Definition zone_undercity.cpp:550
@ NPC_BLIGHT_ABBERATION
Definition zone_undercity.cpp:523
@ NPC_CAVE_DUMMY
Definition zone_undercity.cpp:518
@ NPC_WARSONG_BATTLEGUARD
Definition zone_undercity.cpp:514
@ SPELL_CYCLONE_FALL
Definition zone_undercity.cpp:490
@ SPELL_THRALL_BUFF
Definition zone_undercity.cpp:484

References Unit::AddAura(), Unit::AddThreat(), Creature::AI(), Unit::ApplySpellImmune(), UnitAI::AttackStart(), EMOTE_STATE_READY2H, EnableAttack, FACTION_FRIENDLY, Object::GetEntry(), 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.

2321 {
2323 {
2326 me->SetCorpseDelay(1);
2327 me->SetRespawnTime(1);
2330
2331 bStepping = false;
2332 EnableAttack = false;
2333 step = 0;
2334 phaseTimer = 0;
2341
2343 {
2344 valimathras->DespawnOrUnsummon();
2346 }
2347
2349 {
2350 valimathrasportal->DespawnOrUnsummon();
2352 }
2353
2355 {
2356 wrynn->DespawnOrUnsummon();
2357 WrynnGUID.Clear();
2358 }
2359
2361 {
2362 jaina->DespawnOrUnsummon();
2363 JainaGUID.Clear();
2364 }
2365
2367 {
2368 saurfang->DespawnOrUnsummon();
2370 }
2371
2372 for (ObjectGuid const& guid : hordeGuardsGUID)
2373 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
2374 temp->DespawnOrUnsummon();
2375
2376 hordeGuardsGUID.clear();
2377 }
2378 }
@ UNIT_STAND_STATE_STAND
Definition UnitDefines.h:32
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:315
void SetRespawnTime(uint32 respawn)
Definition Creature.cpp:3800
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:13509
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:719
void SetStandState(uint8 state)
Definition Unit.cpp:16759
Definition ObjectAccessor.h:61
bool bStepping
Definition zone_undercity.cpp:2284
ObjectGuid ValimathrasGUID
Definition zone_undercity.cpp:2292
ObjectGuid ValimathrasPortalGUID
Definition zone_undercity.cpp:2293
ObjectGuid SaurfangGUID
Definition zone_undercity.cpp:2296
ObjectGuid JainaGUID
Definition zone_undercity.cpp:2295
EventMap _events
Definition zone_undercity.cpp:2299
ObjectGuid WrynnGUID
Definition zone_undercity.cpp:2294
@ EVENT_CHAIN_LIGHTNING
Definition zone_undercity.cpp:507
@ EVENT_THRALL_BUFF
Definition zone_undercity.cpp:511
@ EVENT_AGGRO_SYLVANAS
Definition zone_undercity.cpp:510
@ MODEL_WHITE_WULF
Definition zone_undercity.cpp:531
@ EVENT_THUNDER
Definition zone_undercity.cpp:509
@ EVENT_LAVA_BURST
Definition zone_undercity.cpp:508

References _events, Unit::ApplySpellImmune(), bStepping, ObjectGuid::Clear(), EnableAttack, EVENT_AGGRO_SYLVANAS, EVENT_CHAIN_LIGHTNING, EVENT_LAVA_BURST, EVENT_THRALL_BUFF, EVENT_THUNDER, ObjectAccessor::GetCreature(), npc_escortAI::HasEscortState(), hordeGuardsGUID, IMMUNITY_ID, JainaGUID, ScriptedAI::me, MODEL_WHITE_WULF, Unit::Mount(), phaseTimer, SaurfangGUID, EventMap::ScheduleEvent(), Creature::SetCorpseDelay(), Unit::SetNpcFlag(), Creature::SetRespawnTime(), Unit::SetStandState(), SPELL_SYLVANAS_BUFF, STATE_ESCORT_ESCORTING, step, sylvanasfollowGUID, UNIT_NPC_FLAG_GOSSIP, UNIT_STAND_STATE_STAND, ValimathrasGUID, ValimathrasPortalGUID, and WrynnGUID.

Referenced by EnterEvadeMode().

◆ SetHoldState()

void npc_thrall_bfu::npc_thrall_bfuAI::SetHoldState ( bool  bOnHold)
inline
2497 {
2498 SetEscortPaused(bOnHold);
2499 }
void SetEscortPaused(bool on)
Definition ScriptedEscortAI.cpp:516

References npc_escortAI::SetEscortPaused().

Referenced by WaypointReached().

◆ SpawnWave()

void npc_thrall_bfu::npc_thrall_bfuAI::SpawnWave ( uint32  waveId)
inline
2529 {
2530 switch (waveId)
2531 {
2532 case 0: // Vortex
2534 whirlwind1->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 10, false);
2536 whirlwind2->GetMotionMaster()->MovePath(NPC_WHIRLWIND * 100, false);
2537 break;
2538 case 1:
2539 // BATTLING_COURTYARD Initial Spawn
2540 for (uint8 i = 0; i < 3; ++i)
2542 for (uint8 i = 0; i < 9; ++i)
2544 for (uint8 i = 0; i < 6; ++i)
2546 for (uint8 i = 0; i < 4; ++i)
2548 break;
2549 case 2:
2550 // Valimathras
2552 {
2553 ValimathrasGUID = temp->GetGUID();
2554 temp->SetImmuneToAll(true);
2555 }
2556 break;
2557 case 3:
2559 ValimathrasPortalGUID = temp->GetGUID();
2560 break;
2561 case 4:
2562 // COURTYARD_FIGHT Spawns
2563 for (uint8 i = 0; i < WAVE_COURTYARD_FIGHT; ++i)
2564 {
2565 switch (urand(0, 2))
2566 {
2567 case 0:
2569 break;
2570 case 1:
2572 break;
2573 case 2:
2575 break;
2576 }
2577 }
2578 break;
2579 case 5:
2580 // Bossspawn 1
2582 {
2583 temp->GetMotionMaster()->MoveJump(ThrallSpawn[62].x, ThrallSpawn[62].y, ThrallSpawn[62].z, 10.0f, 20.0f, 0);
2584 temp->AddThreat(me, 100.0f);
2585 me->AddThreat(temp, 100.0f);
2586 temp->AI()->AttackStart(me);
2587 }
2588 break;
2589 case 6:
2590 // COURTYARD_DONE Spawn
2592 {
2593 hordeGuardsGUID.push_back(temp->GetGUID());
2594 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
2595 }
2597 {
2598 hordeGuardsGUID.push_back(temp->GetGUID());
2599 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
2600 }
2602 {
2603 hordeGuardsGUID.push_back(temp->GetGUID());
2604 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
2605 }
2607 {
2608 hordeGuardsGUID.push_back(temp->GetGUID());
2609 temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
2610 }
2611 for (uint8 i = 0; i < 2; ++i)
2613 hordeGuardsGUID.push_back(temp->GetGUID());
2614 break;
2615 case 7:
2616 for (uint8 i = 0; i < 9; ++i)
2618 break;
2619 case 8:
2620 for (uint8 i = 0; i < 2; ++i)
2622 hordeGuardsGUID.push_back(temp->GetGUID());
2623 break;
2624 case 9:
2625 // Top of Undercity - Attacktrashpack
2626 for (uint8 i = 0; i < 3; ++i)
2627 {
2628 switch (urand(0, 2))
2629 {
2630 case 0:
2632 break;
2633 case 1:
2635 break;
2636 case 2:
2638 break;
2639 }
2640 }
2641 break;
2642 case 10:
2643 // Top of Undercity - Attacktrashpack
2644 for (uint8 i = 0; i < 3; ++i)
2645 {
2646 switch (urand(0, 1))
2647 {
2648 case 0:
2650 break;
2651 case 1:
2653 break;
2654 }
2655 }
2656 break;
2657 case 11:
2658 // Bottom of Undercity - Attacktrashpack
2659 for (uint8 i = 0; i < 3; ++i)
2660 {
2661 switch (urand(0, 1))
2662 {
2663 case 0:
2665 break;
2666 case 1:
2668 break;
2669 }
2670 }
2671 break;
2672 case 12:
2673 // Valimathras 2
2675 {
2676 ValimathrasGUID = temp->GetGUID();
2677 temp->SetImmuneToAll(true);
2678 }
2679 break;
2680 case 13:
2682 ValimathrasPortalGUID = temp->GetGUID();
2683 break;
2684 // NPC_KHANOK - Inner Sunktum Spawn Left
2685 case 14:
2686 for (uint8 i = 0; i < 4; ++i)
2687 {
2688 switch (urand(0, 6))
2689 {
2690 case 0:
2692 break;
2693 case 1:
2695 break;
2696 case 2:
2698 break;
2699 case 3:
2701 break;
2702 case 4:
2704 break;
2705 case 5:
2707 break;
2708 case 6:
2710 break;
2711 }
2712 }
2713 break;
2714 // NPC_KHANOK - Inner Sunktum Spawn Right
2715 case 15:
2716 for (uint8 i = 0; i < 4; ++i)
2717 {
2718 switch (urand(0, 6))
2719 {
2720 case 0:
2722 break;
2723 case 1:
2725 break;
2726 case 2:
2728 break;
2729 case 3:
2731 break;
2732 case 4:
2734 break;
2735 case 5:
2737 break;
2738 case 6:
2740 break;
2741 }
2742 }
2743 break;
2744 // NPC_KHANOK - Inner Sunktum Spawn Top
2745 case 16:
2747 break;
2748 // NPC_KHANOK - Inner Sunktum Spawn Middle
2749 case 17:
2751 break;
2752 case 18:
2754 {
2755 hordeGuardsGUID.push_back(temp->GetGUID());
2756 temp->AI()->Talk(SAY_FOR_THE_HORDE);
2757 temp->GetMotionMaster()->MovePath(NPC_WARSONG_BATTLEGUARD * 100, false);
2758 }
2759 break;
2760 // Valimathras Room Preparation
2761 case 19:
2762 for (uint8 i = 0; i < 3; ++i)
2763 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);
2764 // Valimathras BossSpawn
2766 {
2767 ValimathrasGUID = temp->GetGUID();
2768 temp->SetImmuneToAll(true);
2769 temp->CastSpell(me, SPELL_AURA_OF_VARIMATHRAS);
2770 temp->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
2771 temp->AI()->Talk(SAY_CLOSE_DOOR);
2772 }
2773 for (uint8 i = 0; i < 6; ++i)
2774 {
2776 temp->CastSpell(me, SPELL_VALIMATHRAS_PORTAL);
2777 }
2778 break;
2779 case 20:
2780 for (uint8 i = 0; i < 3; ++i)
2781 {
2782 switch (urand(0, 1))
2783 {
2784 case 0:
2786 break;
2787 case 1:
2789 break;
2790 }
2791 }
2792 break;
2793 case 21:
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 }
2808 }
constexpr auto IN_MILLISECONDS
Definition Common.h:53
std::uint8_t uint8
Definition Define.h:109
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:54
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:47
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:52
void MoveJump(Position const &pos, float speedXY, float speedZ, uint32 id=0)
Definition MotionMaster.h:229
Definition Unit.h:620
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition Object.cpp: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:715
float y
Definition zone_undercity.cpp:715
float x
Definition zone_undercity.cpp:715
float z
Definition zone_undercity.cpp:715
@ NPC_DOOMGUARD_PILLARGER
Definition zone_undercity.cpp:679
@ SAY_FOR_THE_HORDE
Definition zone_undercity.cpp:690
@ NPC_KHANOK
Definition zone_undercity.cpp:621
@ WAVE_COURTYARD_FIGHT
Definition zone_undercity.cpp:708
@ NPC_VARIMATHRAS
Definition zone_undercity.cpp:627
@ SPELL_VALIMATHRAS_PORTAL
Definition zone_undercity.cpp:646
@ SPELL_OPENING_LEGION_PORTALS
Definition zone_undercity.cpp:653
@ SPELL_AURA_OF_VARIMATHRAS
Definition zone_undercity.cpp:651
@ SAY_CLOSE_DOOR
Definition zone_undercity.cpp:636
@ GO_BLOCKED_PASSAGE
Definition zone_undercity.cpp:526
@ NPC_VORTEX
Definition zone_undercity.cpp:515
@ NPC_WHIRLWIND
Definition zone_undercity.cpp:517

References Unit::AddThreat(), Creature::AI(), 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.

2433 {
2434 switch (summon->GetEntry())
2435 {
2439 bStepping = true;
2440 break;
2441 case NPC_KHANOK:
2442 {
2445 FollowThrall();
2446 SetEscortPaused(false);
2447 std::list<Creature*> SanktumList;
2449 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DREADLORD, 1000.0f);
2451 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_DOCTOR_H, 1000.0f);
2452 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_CHEMIST_H, 1000.0f);
2453 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_BETRAYER_H, 1000.0f);
2454 me->GetCreatureListWithEntryInGrid(SanktumList, NPC_FELBEAST_H, 1000.0f);
2456 if (!SanktumList.empty())
2457 for (std::list<Creature*>::iterator itr = SanktumList.begin(); itr != SanktumList.end(); itr++)
2458 (*itr)->DespawnOrUnsummon();
2459 break;
2460 }
2461 case NPC_VARIMATHRAS:
2462 {
2465 std::list<Creature*> ThroneList;
2470 if (!ThroneList.empty())
2471 for (std::list<Creature*>::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++)
2472 (*itr)->DespawnOrUnsummon();
2473 SetEscortPaused(false);
2474 SetRun(false);
2475 break;
2476 }
2477 default:
2478 break;
2479 }
2480 }
@ 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:537
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition Object.cpp:2513
void SetRun(bool on=true)
Definition ScriptedEscortAI.cpp:421
void FollowThrall()
Definition zone_undercity.cpp:2507
void UpdateWorldState(Map *map, uint32 id, uint32 state)
Definition zone_undercity.cpp:2482

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.

2902 {
2904
2905 if (bStepping)
2906 {
2907 if (phaseTimer <= diff)
2908 {
2909 switch (step)
2910 {
2911 //Preparation
2912 case 0:
2913 me->setActive(true);
2915 break;
2916 case 1:
2920 break;
2921 case 2:
2924 break;
2925 case 3:
2926 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2927 guard->AI()->Talk(SAY_BURN_UC);
2929 break;
2930 case 4:
2931 if (Creature* guard = me->FindNearestCreature(NPC_HORDE_GUARD, 100.0f))
2932 guard->AI()->Talk(SAY_PUTRESS_ANGER);
2934 break;
2935 case 5:
2938 break;
2939 case 6:
2942 break;
2943 case 7:
2946 break;
2947 case 8:
2950 break;
2951 case 9:
2954 break;
2955 case 10:
2958 break;
2959 // Start Event
2960 case 11:
2964 SetEscortPaused(false);
2965 bStepping = false;
2966 JumpToNextStep(0);
2967 SetRun(true);
2969 {
2970 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 100, false);
2971 sylvanas->setActive(true);
2972 }
2973 break;
2974 case 12:
2975 me->Dismount();
2977 break;
2978 case 13:
2980 sylvanas->Dismount();
2982 break;
2983 case 14:
2986 break;
2987 case 15:
2989 SpawnWave(0);
2991 break;
2992 case 16:
2993 {
2994 std::list<Creature*> PlagueList;
2996 if (!PlagueList.empty())
2997 for (std::list<Creature*>::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++)
2998 (*itr)->DespawnOrUnsummon();
2999 SetEscortPaused(false);
3000 SetRun(false);
3002 sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 1000, false);
3004 break;
3005 }
3006 case 17:
3007 bStepping = false;
3008 JumpToNextStep(0);
3009 break;
3010 case 18:
3011 SpawnWave(1);
3014 break;
3015 case 19:
3016 {
3017 SpawnWave(2);
3019 break;
3020 }
3021 case 20:
3023 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_0);
3025 break;
3026 case 21:
3028 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_1);
3030 break;
3031 case 22:
3033 valimathras->AI()->Talk(SAY_VALIMATHRAS_INTRO_2);
3035 break;
3036 case 23:
3037 SpawnWave(3);
3039 break;
3040 case 24:
3042 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3044 break;
3045 case 25:
3047 {
3048 valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f);
3049 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3050 }
3052 valimathrasportal->DespawnOrUnsummon(6 * IN_MILLISECONDS);
3054 break;
3055 case 26:
3056 {
3059 std::list<Creature*> HelperList;
3061 if (!HelperList.empty())
3062 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3063 (*itr)->DespawnOrUnsummon();
3065 break;
3066 }
3067 // Start COURTYARD_FIGHT
3068 case 27:
3069 FollowThrall();
3070 SetEscortPaused(false);
3071 bStepping = false;
3072 SetRun(true);
3076 JumpToNextStep(0);
3077 break;
3078 case 28:
3079 {
3080 EnableAttack = true;
3082 std::list<Creature*> HostileEndList;
3084 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_DOCTOR_H, 1000.0f);
3085 me->GetCreatureListWithEntryInGrid(HostileEndList, NPC_CHEMIST_H, 1000.0f);
3086 if (!HostileEndList.empty())
3087 for (std::list<Creature*>::iterator itr = HostileEndList.begin(); itr != HostileEndList.end(); itr++) (*itr)->SetFaction(FACTION_MONSTER);
3088 SpawnWave(4);
3090 break;
3091 }
3092 case 29:
3093 SpawnWave(4);
3095 break;
3096 case 30:
3097 SpawnWave(4);
3099 break;
3100 case 31:
3101 SpawnWave(4);
3103 break;
3104 case 32:
3105 SpawnWave(4);
3107 break;
3108 case 33:
3109 SpawnWave(4);
3111 break;
3112 case 34:
3113 SpawnWave(4);
3115 break;
3116 case 35:
3117 SpawnWave(4);
3119 break;
3120 case 36:
3121 SpawnWave(4);
3123 break;
3124 case 37:
3125 SpawnWave(4);
3127 break;
3128 case 38:
3129 SpawnWave(4);
3131 break;
3132 case 39:
3133 SpawnWave(4);
3135 break;
3136 case 40:
3137 SpawnWave(4);
3139 break;
3140 case 41:
3141 SpawnWave(4);
3143 break;
3144 case 42:
3145 SpawnWave(4);
3147 break;
3148 case 43:
3149 SpawnWave(4);
3151 break;
3152 case 44:
3153 SpawnWave(4);
3155 break;
3156 case 45:
3157 SpawnWave(5);
3158 bStepping = false;
3160 break;
3161 // End COURTYARD_FIGHT
3162 case 46:
3163 {
3164 FollowThrall();
3165 std::list<Creature*> HostileList;
3167 me->GetCreatureListWithEntryInGrid(HostileList, NPC_DOCTOR_H, 1000.0f);
3168 me->GetCreatureListWithEntryInGrid(HostileList, NPC_CHEMIST_H, 1000.0f);
3170 if (!HostileList.empty())
3171 for (std::list<Creature*>::iterator itr = HostileList.begin(); itr != HostileList.end(); itr++)
3172 (*itr)->DespawnOrUnsummon();
3173 for (uint8 i = 0; i < 7; ++i)
3174 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);
3175 SpawnWave(6);
3176 SetEscortPaused(false);
3177 bStepping = false;
3178 SetRun(false);
3180 break;
3181 }
3182 case 47:
3185 break;
3186 case 48:
3187 SetEscortPaused(false);
3188 bStepping = false;
3190 break;
3191 // Elevator Event
3192 case 49:
3195 break;
3196 case 50:
3198 sylvanas->AI()->Talk(SYLVANAS_SAY_ELEVATOR_1);
3200 break;
3201 case 51:
3204 SpawnWave(7);
3206 break;
3207 case 52:
3210 break;
3211 case 53:
3212 SpawnWave(8);
3213 me->GetMotionMaster()->MoveJump(ThrallSpawn[55].x, ThrallSpawn[55].y, ThrallSpawn[55].z, 40.0f, 40.0f, 0);
3215 sylvanas->GetMotionMaster()->MoveJump(ThrallSpawn[56].x, ThrallSpawn[56].y, ThrallSpawn[56].z, 40.0f, 40.0f, 0);
3217 break;
3218 case 54:
3219 FollowThrall();
3220 SetEscortPaused(false);
3221 bStepping = false;
3222 SetRun(false);
3224 break;
3225 // Top of Undercity Discussion
3226 case 55:
3228 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_1);
3230 break;
3231 case 56:
3233 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_2);
3235 break;
3236 case 57:
3239 break;
3240 case 58:
3242 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_3);
3244 break;
3245 // Top of Undercity - Fight
3246 case 59:
3247 SpawnWave(9);
3249 break;
3250 case 60:
3251 SpawnWave(9);
3253 break;
3254 case 61:
3255 SpawnWave(9);
3257 break;
3258 case 62:
3259 FollowThrall();
3260 SetEscortPaused(false);
3261 bStepping = false;
3262 SetRun(false);
3264 break;
3265 case 63:
3267 break;
3268 case 64:
3269 SpawnWave(10);
3271 break;
3272 case 65:
3273 SpawnWave(10);
3275 break;
3276 case 66:
3277 FollowThrall();
3278 SetEscortPaused(false);
3279 bStepping = false;
3280 SetRun(false);
3282 break;
3283 case 67:
3284 SpawnWave(11);
3286 break;
3287 case 68:
3288 SpawnWave(11);
3290 break;
3291 case 69:
3292 FollowThrall();
3293 SetEscortPaused(false);
3294 bStepping = false;
3295 SetRun(false);
3297 break;
3298 // KHANOK - Valimathtas Intro
3299 case 70:
3301 break;
3302 case 71:
3304 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_4);
3305 SpawnWave(12);
3307 break;
3308 case 72:
3310 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_0);
3312 break;
3313 case 73:
3315 valimathras->AI()->Talk(SAY_VALIMATHRAS_INNER_SANKTUM_1);
3316 SpawnWave(13);
3318 break;
3319 case 74:
3321 valimathrasportal->CastSpell(valimathrasportal, SPELL_VALIMATHRAS_PORTAL);
3323 break;
3324 case 75:
3326 {
3327 valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f);
3328 valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3329 }
3331 valimathrasportal->DespawnOrUnsummon(3 * IN_MILLISECONDS);
3333 break;
3334 // KHANOK - Trashspawn
3335 case 76:
3336 SpawnWave(14);
3338 break;
3339 case 77:
3340 SpawnWave(15);
3342 break;
3343 case 78:
3344 SpawnWave(16);
3346 break;
3347 case 79:
3348 SpawnWave(14);
3350 break;
3351 case 80:
3352 SpawnWave(15);
3354 break;
3355 case 81:
3356 SpawnWave(16);
3358 break;
3359 case 82:
3360 SpawnWave(14);
3362 break;
3363 case 83:
3364 SpawnWave(15);
3366 break;
3367 case 84:
3368 SpawnWave(16);
3370 break;
3371 case 85:
3372 SpawnWave(14);
3374 break;
3375 case 86:
3376 SpawnWave(15);
3378 break;
3379 case 87:
3380 SpawnWave(16);
3382 break;
3383 case 88:
3384 SpawnWave(14);
3386 break;
3387 case 89:
3388 SpawnWave(15);
3390 break;
3391 case 90:
3392 SpawnWave(16);
3394 break;
3395 case 91:
3396 SpawnWave(14);
3398 break;
3399 case 92:
3400 SpawnWave(15);
3402 break;
3403 case 93:
3404 SpawnWave(16);
3406 break;
3407 case 94:
3408 // Spawn Boss 2 KHANOK
3409 SpawnWave(17);
3411 break;
3412 case 95:
3413 SpawnWave(14);
3415 break;
3416 case 96:
3417 SpawnWave(15);
3419 break;
3420 case 97:
3421 SpawnWave(16);
3423 bStepping = false;
3424 break;
3425 case 98:
3426 // KHANOK - Won
3429 break;
3430 case 99:
3431 SpawnWave(18);
3433 break;
3434 case 100:
3435 SpawnWave(18);
3437 break;
3438 case 101:
3439 SpawnWave(18);
3441 break;
3442 case 102:
3443 SpawnWave(18);
3445 break;
3446 case 103:
3447 SpawnWave(18);
3449 break;
3450 case 104:
3451 SpawnWave(18);
3453 break;
3454 case 105:
3455 SpawnWave(18);
3457 break;
3458 case 106:
3459 SpawnWave(18);
3461 break;
3462 case 107:
3463 SpawnWave(18);
3465 break;
3466 case 108:
3468 FollowThrall();
3469 SetEscortPaused(false);
3470 bStepping = false;
3471 SetRun(false);
3473 break;
3474 case 109:
3476 sylvanas->AI()->Talk(SYLVANAS_SAY_SANCTUM_5);
3478 break;
3479 case 110:
3480 SpawnWave(19);
3482 break;
3483 case 111:
3484 FollowThrall();
3485 SetEscortPaused(false);
3486 bStepping = false;
3487 SetRun(true);
3489 break;
3490 case 112:
3492 break;
3493 case 113:
3496 break;
3497 case 114:
3501 break;
3502 case 115:
3503 {
3504 std::list<GameObject*> SaronitList;
3506 for (std::list<GameObject*>::const_iterator itr = SaronitList.begin(); itr != SaronitList.end(); ++itr)
3507 if (GameObject* saronit = (*itr))
3508 saronit->UseDoorOrButton();
3510 break;
3511 }
3512 case 116:
3515 FollowThrall();
3516 SetEscortPaused(false);
3517 bStepping = false;
3519 break;
3520 // Valimathras Intro
3521 case 117:
3524 break;
3525 case 118:
3527 {
3528 valimathras->AI()->Talk(SAY_THRONE_1);
3529 valimathras->CastSpell(me, SPELL_OPENING_LEGION_PORTALS);
3530 }
3532 break;
3533 case 119:
3534 SpawnWave(20);
3536 break;
3537 case 120:
3538 SpawnWave(21);
3540 break;
3541 case 121:
3544 valimathras->AI()->Talk(SAY_THRONE_2);
3546 break;
3547 case 122:
3548 SpawnWave(20);
3550 break;
3551 case 123:
3552 SpawnWave(21);
3554 break;
3555 case 124:
3558 valimathras->AI()->Talk(SAY_THRONE_3);
3560 break;
3561 case 125:
3562 SpawnWave(20);
3564 break;
3565 case 126:
3566 SpawnWave(21);
3568 break;
3569 case 127:
3572 valimathras->AI()->Talk(SAY_THRONE_4);
3574 break;
3575 case 128:
3576 SpawnWave(20);
3578 break;
3579 case 129:
3580 SpawnWave(21);
3582 break;
3583 case 130:
3586 valimathras->AI()->Talk(SAY_THRONE_5);
3588 break;
3589 case 131:
3590 SpawnWave(20);
3592 break;
3593 case 132:
3594 SpawnWave(21);
3596 break;
3597 case 133:
3600 valimathras->AI()->Talk(SAY_THRONE_6);
3602 break;
3603 case 134:
3604 SpawnWave(20);
3606 break;
3607 case 135:
3608 SpawnWave(21);
3610 break;
3611 case 136:
3614 break;
3615 // Valimathras Fight
3616 case 137:
3618 {
3619 valimathras->SetImmuneToAll(false);
3620 valimathras->RemoveAura(SPELL_AURA_OF_VARIMATHRAS);
3621 valimathras->RemoveAura(SPELL_OPENING_LEGION_PORTALS);
3622 valimathras->AI()->Talk(SAY_VALIMATHRAS_ATTACK);
3623 valimathras->AddThreat(me, 100.0f);
3624 me->AddThreat(valimathras, 100.0f);
3625 valimathras->AI()->AttackStart(me);
3626 }
3627 bStepping = false;
3629 break;
3630 // Valimathras Won
3631 case 138:
3634 break;
3635 case 139:
3638 break;
3639 case 140:
3640 SetEscortPaused(false);
3641 bStepping = false;
3643 break;
3644 case 141:
3646 break;
3647 case 142:
3649 me->SetFacingToObject(sylvanas);
3652 break;
3653 case 143:
3655 {
3656 sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f, true);
3657 sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
3658 }
3660 break;
3661 case 144:
3663 {
3664 sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
3665 me->SetFacingToObject(sylvanas);
3666 sylvanas->SetFacingToObject(me);
3668 }
3670 break;
3671 case 145:
3673 FollowThrall();
3674 SetEscortPaused(false);
3675 bStepping = false;
3677 break;
3678 case 146:
3681 break;
3682 case 147:
3683 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3684 {
3686 {
3687 allianceForcesGUID[i] = temp->GetGUID();
3688 temp->SetImmuneToAll(true);
3689 temp->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
3690 temp->SetReactState(REACT_PASSIVE);
3691 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3692 }
3693 }
3694 if (Creature* wrynn = me->SummonCreature(NPC_WRYNN, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3695 {
3696 WrynnGUID = wrynn->GetGUID();
3697 wrynn->SetImmuneToAll(true);
3698 wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
3699 wrynn->SetReactState(REACT_PASSIVE);
3700 wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f, true);
3701 }
3702 if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN))
3703 {
3704 JainaGUID = jaina->GetGUID();
3705 jaina->SetImmuneToAll(true);
3706 jaina->SetReactState(REACT_PASSIVE);
3707 }
3709 break;
3710 // Wrynn Intro
3711 case 148:
3713 wrynn->AI()->Talk(WRYNN_SAY_THRONE_5);
3715 break;
3716 case 149:
3718 wrynn->AI()->Talk(WRYNN_SAY_THRONE_6);
3720 break;
3721 case 150:
3723 wrynn->AI()->Talk(WRYNN_SAY_THRONE_7);
3725 break;
3726 case 151:
3728 wrynn->AI()->Talk(WRYNN_SAY_THRONE_8);
3730 break;
3731 // Wrynn Fight
3732 case 152:
3733 me->SetImmuneToAll(false);
3735 {
3736 wrynn->SetImmuneToNPC(false);
3737 wrynn->SetImmuneToPC(true);
3738 wrynn->SetReactState(REACT_AGGRESSIVE);
3739 wrynn->AddThreat(me, 100.0f);
3740 me->AddThreat(wrynn, 100.0f);
3741 wrynn->AI()->AttackStart(me);
3742 }
3743
3744 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
3745 {
3747 {
3748 temp->SetImmuneToAll(false);
3749 temp->SetReactState(REACT_AGGRESSIVE);
3750 temp->AddThreat(me, 100.0f);
3751 temp->AI()->AttackStart(me);
3752 }
3753 }
3755 break;
3756 case 153:
3758 {
3759 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
3760 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
3761 }
3763 break;
3764 case 154:
3766 {
3767 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
3768 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
3769 }
3771 break;
3772 case 155:
3773 {
3774 std::list<Creature*> HelperList;
3775 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
3776 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
3777 me->GetCreatureListWithEntryInGrid(HelperList, NPC_WRYNN, 100.0f);
3778 if (!HelperList.empty())
3779 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3780 (*itr)->DespawnOrUnsummon();
3782 break;
3783 }
3784 case 156:
3786 SetEscortPaused(false);
3787 bStepping = false;
3789 break;
3790 case 157:
3794 break;
3795 // Ending
3796 case 158:
3797 if (Creature* saurfang = me->SummonCreature(NPC_OVERLORD_SAURFANG, 1297.574f, 347.154f, -65.027f, TEMPSUMMON_MANUAL_DESPAWN))
3798 {
3799 SaurfangGUID = saurfang->GetGUID();
3800 saurfang->SetWalk(true);
3801 saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f, true);
3802 }
3804 break;
3805 case 159:
3807 {
3808 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_1);
3809 saurfang->SetStandState(UNIT_STAND_STATE_SIT);
3810 }
3812 break;
3813 case 160:
3815 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_2);
3817 break;
3818 case 161:
3820 saurfang->AI()->Talk(SAY_SAURFANG_ARRIVAL_3);
3821 if (Map* map = me->GetMap())
3822 {
3823 Map::PlayerList const& PlayerList = map->GetPlayers();
3824 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
3825 {
3826 if (Player* player = i->GetSource())
3827 {
3828 if (me->IsInRange(player, 0.0f, 50.0f))
3829 {
3830 if (player->GetTeamId() == TEAM_HORDE)
3831 {
3832 player->RemoveAura(SPELL_SYLVANAS_BUFF);
3833 player->RemoveAura(SPELL_THRALL_BUFF);
3834 player->CompleteQuest(QUEST_BATTLE_H);
3835 player->CastSpell(player, SPELL_PHASING_HORDE);
3836 }
3837 }
3838 }
3839 }
3840 }
3842 break;
3843 case 162:
3846 break;
3847 case 163:
3854 std::list<Creature*> HelperList;
3855 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
3857 if (!HelperList.empty())
3858 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
3859 (*itr)->DespawnOrUnsummon(120 * IN_MILLISECONDS);
3861 bStepping = false;
3863 break;
3864 }
3865 }
3866 else phaseTimer -= diff;
3867 }
3868
3869 if (!UpdateVictim())
3870 return;
3871
3872 _events.Update(diff);
3873
3875 return;
3876
3877 while (uint32 eventId = _events.ExecuteEvent())
3878 {
3879 switch (eventId)
3880 {
3884 break;
3885 case EVENT_LAVA_BURST:
3888 break;
3889 case EVENT_THUNDER:
3892 break;
3894 if (me->GetVictim())
3896 sylvanas->AI()->AttackStart(me->GetVictim());
3898 break;
3899 case EVENT_THRALL_BUFF:
3902 break;
3903 default:
3904 break;
3905 }
3906 }
3907
3909 }
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:549
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_START_H
Definition WorldStateDefines.h:530
@ WORLD_STATE_BATTLE_FOR_UNDERCITY_COUNTDOWN_H
Definition WorldStateDefines.h:531
bool UpdateVictim()
Definition CreatureAI.cpp:282
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition Creature.cpp:2177
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:1082
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:13568
void SetFacingToObject(WorldObject *object)
Definition Unit.cpp:20337
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:1179
Unit * GetVictim() const
Definition Unit.h:846
bool HasUnitState(const uint32 f) const
Definition Unit.h:691
void HandleEmoteCommand(uint32 emoteId)
Definition Unit.cpp:2012
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition Unit.h:867
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:233
void ActivateValimathrasPortal()
Definition zone_undercity.cpp:2519
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition zone_undercity.cpp:2291
void JumpToNextStep(uint32 uiTimer)
Definition zone_undercity.cpp:2501
void SpawnWave(uint32 waveId)
Definition zone_undercity.cpp:2528
@ WRYNN_SAY_THRONE_5
Definition zone_undercity.cpp:385
@ NPC_WRYNN
Definition zone_undercity.cpp:356
@ WRYNN_SAY_THRONE_6
Definition zone_undercity.cpp:386
@ WRYNN_SAY_THRONE_8
Definition zone_undercity.cpp:388
@ WRYNN_SAY_THRONE_7
Definition zone_undercity.cpp:387
@ JAINA_SAY_THRONE_2
Definition zone_undercity.cpp:412
@ JAINA_SAY_THRONE_3
Definition zone_undercity.cpp:413
@ NPC_JAINA
Definition zone_undercity.cpp:406
@ SPELL_DEEPFREEZE
Definition zone_undercity.cpp:419
@ NPC_SW_SOLDIER
Definition zone_undercity.cpp:666
@ NPC_HORDE_GUARD
Definition zone_undercity.cpp:668
@ SAY_PUTRESS_ANGER
Definition zone_undercity.cpp:689
@ SAY_BURN_UC
Definition zone_undercity.cpp:688
@ SYLVANAS_SAY_SANCTUM_4
Definition zone_undercity.cpp:545
@ SPELL_LEAP_TO_PLATFORM
Definition zone_undercity.cpp:552
@ SYLVANAS_SAY_SANCTUM_3
Definition zone_undercity.cpp:544
@ SYLVANAS_SAY_THRONE_1
Definition zone_undercity.cpp:547
@ SYLVANAS_SAY_SANCTUM_1
Definition zone_undercity.cpp:542
@ SYLVANAS_SAY_SANCTUM_2
Definition zone_undercity.cpp:543
@ SYLVANAS_SAY_SANCTUM_5
Definition zone_undercity.cpp:546
@ NPC_SYLVANAS
Definition zone_undercity.cpp:537
@ SYLVANAS_SAY_ELEVATOR_1
Definition zone_undercity.cpp:541
@ SPELL_PHASING_HORDE
Definition zone_undercity.cpp:698
@ ALLIANCE_FORCE_MAXCOUNT
Definition zone_undercity.cpp:706
@ QUEST_BATTLE_H
Definition zone_undercity.cpp:696
@ SAY_SAURFANG_ARRIVAL_2
Definition zone_undercity.cpp:566
@ SAY_SAURFANG_ARRIVAL_3
Definition zone_undercity.cpp:567
@ SAY_SAURFANG_ARRIVAL_1
Definition zone_undercity.cpp:565
static LocationXYZO AllianceSpawn[]
Definition zone_undercity.cpp:718
@ SAY_VALIMATHRAS_ATTACK
Definition zone_undercity.cpp:643
@ SAY_THRONE_2
Definition zone_undercity.cpp:638
@ SAY_THRONE_1
Definition zone_undercity.cpp:637
@ SAY_VALIMATHRAS_INTRO_1
Definition zone_undercity.cpp:632
@ SAY_VALIMATHRAS_INTRO_2
Definition zone_undercity.cpp:633
@ SAY_THRONE_6
Definition zone_undercity.cpp:642
@ SAY_VALIMATHRAS_INTRO_0
Definition zone_undercity.cpp:631
@ SAY_VALIMATHRAS_INNER_SANKTUM_0
Definition zone_undercity.cpp:634
@ SAY_THRONE_5
Definition zone_undercity.cpp:641
@ SAY_VALIMATHRAS_INNER_SANKTUM_1
Definition zone_undercity.cpp:635
@ SAY_THRONE_4
Definition zone_undercity.cpp:640
@ SAY_THRONE_3
Definition zone_undercity.cpp:639
@ THRALL_SAY_THRONE_11
Definition zone_undercity.cpp:477
@ NPC_SLINGER_TRIGGER
Definition zone_undercity.cpp:519
@ THRALL_SAY_COURTYARD_5
Definition zone_undercity.cpp:456
@ THRALL_SAY_THRONE_2
Definition zone_undercity.cpp:468
@ THRALL_SAY_THRONE_4
Definition zone_undercity.cpp:470
@ THRALL_SAY_SANCTUM_6
Definition zone_undercity.cpp:465
@ THRALL_SAY_PREP_1
Definition zone_undercity.cpp:444
@ SPELL_CALL_OF_AIR
Definition zone_undercity.cpp:489
@ THRALL_SAY_PREP_6
Definition zone_undercity.cpp:449
@ THRALL_SAY_ELEVATOR_1
Definition zone_undercity.cpp:457
@ THRALL_SAY_COURTYARD_3
Definition zone_undercity.cpp:454
@ THRALL_SAY_THRONE_9
Definition zone_undercity.cpp:475
@ THRALL_SAY_THRONE_7
Definition zone_undercity.cpp:473
@ THRALL_SAY_SANCTUM_4
Definition zone_undercity.cpp:463
@ SPELL_LAVA_BURST
Definition zone_undercity.cpp:502
@ THRALL_SAY_COURTYARD_1
Definition zone_undercity.cpp:452
@ THRALL_SAY_PREP_5
Definition zone_undercity.cpp:448
@ GO_HORDE_BANNER
Definition zone_undercity.cpp:527
@ THRALL_SAY_SANCTUM_3
Definition zone_undercity.cpp:462
@ SPELL_CALL_OF_EARTH
Definition zone_undercity.cpp:491
@ THRALL_SAY_THRONE_1
Definition zone_undercity.cpp:467
@ THRALL_SAY_PREP_7
Definition zone_undercity.cpp:450
@ THRALL_SAY_SANCTUM_5
Definition zone_undercity.cpp:464
@ THRALL_SAY_COURTYARD_4
Definition zone_undercity.cpp:455
@ THRALL_SAY_PREP_3
Definition zone_undercity.cpp:446
@ SPELL_TIDAL_WAVE_SUMMON
Definition zone_undercity.cpp:486
@ THRALL_SAY_PREP_8
Definition zone_undercity.cpp:451
@ THRALL_SAY_ELEVATOR_2
Definition zone_undercity.cpp:458
@ THRALL_SAY_ELEVATOR_3
Definition zone_undercity.cpp:459
@ THRALL_SAY_THRONE_3
Definition zone_undercity.cpp:469
@ THRALL_SAY_PREP_4
Definition zone_undercity.cpp:447
@ THRALL_SAY_THRONE_5
Definition zone_undercity.cpp:471
@ THRALL_SAY_SANCTUM_7
Definition zone_undercity.cpp:466
@ THRALL_SAY_PREP_2
Definition zone_undercity.cpp:445
@ THRALL_SAY_THRONE_10
Definition zone_undercity.cpp:476
@ SPELL_CHAIN_LIGHTNING
Definition zone_undercity.cpp:501
@ THRALL_SAY_THRONE_6
Definition zone_undercity.cpp:472
@ THRALL_SAY_SANCTUM_2
Definition zone_undercity.cpp:461
@ NPC_PLAGUE_TRIGGER
Definition zone_undercity.cpp:522
@ NPC_OVERLORD_SAURFANG
Definition zone_undercity.cpp:520
@ SPELL_THUNDER
Definition zone_undercity.cpp:503
@ THRALL_SAY_COURTYARD_2
Definition zone_undercity.cpp:453
static LocationXYZO AllianceWP[]
Definition zone_undercity.cpp:753

References _events, ActivateValimathrasPortal(), Unit::AddThreat(), 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
2483 {
2484 Map::PlayerList const& players = map->GetPlayers();
2485
2486 if (!players.IsEmpty())
2487 {
2488 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
2489 {
2490 if (Player* player = itr->GetSource())
2491 player->SendUpdateWorldState(id, state);
2492 }
2493 }
2494 }
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.

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

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

Member Data Documentation

◆ _events

EventMap npc_thrall_bfu::npc_thrall_bfuAI::_events

Referenced by Reset(), and UpdateAI().

◆ allianceForcesGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]

Referenced by UpdateAI().

◆ bStepping

bool npc_thrall_bfu::npc_thrall_bfuAI::bStepping

◆ EnableAttack

bool npc_thrall_bfu::npc_thrall_bfuAI::EnableAttack

Referenced by JustSummoned(), Reset(), and UpdateAI().

◆ hordeGuardsGUID

GuidVector npc_thrall_bfu::npc_thrall_bfuAI::hordeGuardsGUID

Referenced by npc_thrall_bfuAI(), Reset(), and SpawnWave().

◆ JainaGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::JainaGUID

Referenced by Reset(), and UpdateAI().

◆ phaseTimer

uint32 npc_thrall_bfu::npc_thrall_bfuAI::phaseTimer

Referenced by JumpToNextStep(), Reset(), and UpdateAI().

◆ SaurfangGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::SaurfangGUID

Referenced by Reset(), and UpdateAI().

◆ step

uint32 npc_thrall_bfu::npc_thrall_bfuAI::step

Referenced by JumpToNextStep(), Reset(), and UpdateAI().

◆ sylvanasfollowGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::sylvanasfollowGUID

Referenced by FollowThrall(), Reset(), and UpdateAI().

◆ ValimathrasGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::ValimathrasGUID

Referenced by Reset(), SpawnWave(), and UpdateAI().

◆ ValimathrasPortalGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::ValimathrasPortalGUID

Referenced by Reset(), SpawnWave(), and UpdateAI().

◆ WrynnGUID

ObjectGuid npc_thrall_bfu::npc_thrall_bfuAI::WrynnGUID

Referenced by Reset(), and UpdateAI().


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