AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
npc_arthas::npc_arthasAI Struct Reference
Inheritance diagram for npc_arthas::npc_arthasAI:
npc_escortAI ScriptedAI CreatureAI UnitAI

Public Member Functions

 npc_arthasAI (Creature *creature)
 
CreatureGetEventNpc (uint32 entry)
 
void ScheduleNextEvent (uint32 currentEvent, Milliseconds time)
 
void SummonNextWave ()
 
void ReorderInstance (uint32 data)
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged - this happens after JustEnteredCombat.
 
void SendNextWave (uint32 entry)
 
void SpawnTimeRift ()
 
void JustDied (Unit *) override
 
void JustSummoned (Creature *cr) override
 
void SummonedCreatureDespawn (Creature *cr) override
 
void SummonedCreatureDies (Creature *cr, Unit *) override
 
void DoAction (int32 param) override
 
void Reset () override
 
void WaypointReached (uint32 uiPointId) override
 
void UpdateAI (uint32 diff) override
 Use to start attacking a target. Called just before JustEngagedWith()
 
virtual void WaypointReached (uint32, uint32)
 
- Public Member Functions inherited from npc_escortAI
 npc_escortAI (Creature *creature)
 
 ~npc_escortAI () override
 
void AttackStart (Unit *who) override
 
void MoveInLineOfSight (Unit *who) override
 
void JustDied (Unit *) override
 
void JustRespawned () override
 
void ReturnToLastPoint ()
 
void EnterEvadeMode (EvadeReason=EVADE_REASON_OTHER) override
 
void UpdateAI (uint32 diff) override
 Use to start attacking a target. Called just before JustEngagedWith()
 
virtual void UpdateEscortAI (uint32 diff)
 
void MovementInform (uint32, uint32) override
 
void AddWaypoint (uint32 id, float x, float y, float z, uint32 waitTime=0)
 
bool SetNextWaypoint (uint32 pointId, float x, float y, float z, float orientation)
 
bool SetNextWaypoint (uint32 pointId, bool setPosition=true)
 
bool GetWaypointPosition (uint32 pointId, float &x, float &y, float &z)
 
void GenerateWaypointArray (Movement::PointsArray *points)
 
virtual void WaypointStart (uint32)
 
void Start (bool isActiveAttacker=true, ObjectGuid playerGUID=ObjectGuid::Empty, Quest const *quest=nullptr, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=true)
 
void SetEscortPaused (bool on)
 
bool HasEscortState (uint32 escortState)
 
bool IsEscorted () override
 
void SetMaxPlayerDistance (float newMax)
 
float GetMaxPlayerDistance ()
 
void SetDespawnAtEnd (bool despawn)
 
void SetDespawnAtFar (bool despawn)
 
bool GetAttack ()
 
void SetCanAttack (bool attack)
 
ObjectGuid GetEventStarterGUID ()
 
void AddEscortState (uint32 escortState)
 
void RemoveEscortState (uint32 escortState)
 
virtual void WaypointReached (uint32, uint32)
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
 ~ScriptedAI () override
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask) override
 Called at any Damage from any attacker (before damage apply)
 
void UpdateAI (uint32 diff) override
 Use to start attacking a target. Called just before JustEngagedWith()
 
void JustDied (Unit *) override
 
void KilledUnit (Unit *) override
 
void JustSummoned (Creature *) override
 
void SummonedCreatureDespawn (Creature *) override
 
void SpellHit (Unit *, SpellInfo const *) override
 
void SpellHitTarget (Unit *, SpellInfo const *) override
 
void MovementInform (uint32, uint32) override
 
void OnPossess (bool)
 
bool IsInRoom (const Position *pos, Axis axis, bool above)
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged - this happens after JustEnteredCombat.
 
void AttackStart (Unit *) override
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoRewardPlayersInArea ()
 
void DoCastSpell (Unit *target, SpellInfo const *spellInfo, bool triggered=false)
 
void DoPlaySoundToSet (WorldObject *source, uint32 soundId)
 
void DoPlayMusic (uint32 soundId, bool zone)
 
void DoAddThreat (Unit *unit, float amount)
 
void DoModifyThreatByPercent (Unit *unit, int32 pct)
 
void DoResetThreat (Unit *unit)
 
void DoResetThreatList ()
 
float DoGetThreat (Unit *unit)
 
void DoTeleportPlayer (Unit *unit, float x, float y, float z, float o)
 
void DoTeleportPlayer (Unit *unit, Position pos)
 
void DoTeleportAll (float x, float y, float z, float o)
 
UnitDoSelectLowestHpFriendly (float range, uint32 minHPDiff=1)
 
std::list< Creature * > DoFindFriendlyCC (float range)
 
std::list< Creature * > DoFindFriendlyMissingBuff (float range, uint32 spellId)
 
PlayerGetPlayerAtMinimumRange (float minRange)
 
CreatureDoSpawnCreature (uint32 entry, float offsetX, float offsetY, float offsetZ, float angle, uint32 type, uint32 despawntime)
 
bool IsUniqueTimedEventDone (uint32 id) const
 
void SetUniqueTimedEventDone (uint32 id)
 
void ResetUniqueTimedEvent (uint32 id)
 
void ClearUniqueTimedEventsDone ()
 
void ScheduleTimedEvent (Milliseconds timerMin, Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0ms, uint32 uniqueId=0)
 
void ScheduleTimedEvent (Milliseconds timerMax, std::function< void()> exec, Milliseconds repeatMin, Milliseconds repeatMax=0ms, uint32 uniqueId=0)
 
void ScheduleUniqueTimedEvent (Milliseconds timer, std::function< void()> exec, uint32 uniqueId)
 
bool HealthBelowPct (uint32 pct) const
 
bool HealthAbovePct (uint32 pct) const
 
SpellInfo const * SelectSpell (Unit *target, uint32 school, uint32 mechanic, SelectTargetType targets, uint32 powerCostMin, uint32 powerCostMax, float rangeMin, float rangeMax, SelectEffect effect)
 
void SetEquipmentSlots (bool loadDefault, int32 mainHand=EQUIP_NO_CHANGE, int32 offHand=EQUIP_NO_CHANGE, int32 ranged=EQUIP_NO_CHANGE)
 
virtual bool CheckEvadeIfOutOfCombatArea () const
 
bool IsHeroic () const
 
Difficulty GetDifficulty () const
 
bool Is25ManRaid () const
 
template<class T >
const T & DUNGEON_MODE (const T &normal5, const T &heroic10) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25) const
 
template<class T >
const T & RAID_MODE (const T &normal10, const T &normal25, const T &heroic10, const T &heroic25) const
 
PlayerSelectTargetFromPlayerList (float maxdist, uint32 excludeAura=0, bool mustBeInLOS=false) const
 
void SetInvincibility (bool apply)
 
bool IsInvincible () const
 
void SetAutoAttackAllowed (bool allow)
 
bool IsAutoAttackAllowed () const
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr, Milliseconds delay=0ms)
 Causes the creature to talk/say the text assigned to their entry in the creature_text database table.
 
void Talk (uint8 id, Milliseconds delay)
 
WorldObjectGetSummoner () const
 Returns the summoner creature/object, if the creature is a temporary summon.
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
bool IsEngaged () const
 Check if creature is currently engaged in combat.
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
void JustEnteredCombat (Unit *who) override
 Called when the unit enters combat.
 
virtual void JustStartedThreateningMe (Unit *who)
 
void EngagementStart (Unit *who)
 
void EngagementOver ()
 
void JustExitedCombat () override
 Called when the unit leaves combat.
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDespawnAll ()
 
virtual void SummonedCreatureEvade (Creature *)
 
virtual void OnSpellStart (SpellInfo const *)
 
virtual void OnSpellCast (SpellInfo const *)
 
virtual void OnSpellFailed (SpellInfo const *)
 
virtual void OnChannelFinished (SpellInfo const *)
 
virtual void AttackedBy (Unit *)
 
virtual void PathEndReached (uint32)
 
virtual void WaypointPathStarted (uint32)
 == Waypoints system =============================
 
virtual void WaypointStarted (uint32, uint32)
 
virtual void WaypointPathEnded (uint32, uint32)
 
void OnCharmed (bool apply) override
 Called when unit is charmed.
 
virtual void JustReachedHome ()
 
void DoZoneInCombat (Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *attacker)
 
virtual void OwnerAttacked (Unit *target)
 
void OnOwnerCombatInteraction (Unit *target)
 
virtual void CorpseRemoved (uint32 &)
 == Triggered Actions Requested ==================
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields =======================================
 
virtual bool BeforeSpellClick (Unit *)
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual bool CanAlwaysBeDetectable (WorldObject const *)
 
virtual void PetStopAttack ()
 
int32 VisualizeBoundary (uint32 duration, Unit *owner=nullptr, bool fill=false, bool checkZ=false) const
 
virtual bool CheckInRoom ()
 
CreatureBoundary const * GetBoundary () const
 
void SetBoundary (CreatureBoundary const *boundary, bool negativeBoundaries=false)
 
bool IsInBoundary (Position const *who=nullptr) const
 
virtual void CalculateThreat (Unit *, float &, SpellInfo const *)
 
virtual bool OnTeleportUnreacheablePlayer (Player *)
 
virtual void OnAuraRemove (AuraApplication *, AuraRemoveMode)
 
virtual void DistancingStarted ()
 
virtual void DistancingEnded ()
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual bool CanAIAttack (Unit const *) const
 
virtual void InitializeAI ()
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual void SetGUID (ObjectGuid const &, int32=0)
 
virtual ObjectGuid GetGUID (int32=0) const
 
UnitSelectTarget (SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 
template<class PREDICATE >
UnitSelectTarget (SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
 Select the best (up to) <num> targets (in <targetType> order) from the threat list that fulfill the following:
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 position, PREDICATE const &predicate)
 
virtual void EvadeTimerExpired ()
 Called when evade timer expires (target unreachable for too long)
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 Called at any Damage to any victim (before damage apply)
 
virtual void HealReceived (Unit *, uint32 &)
 Called when the creature receives heal.
 
virtual void OnPowerUpdate (Powers, int32, int32, uint32)
 Called when the creature power updates.
 
virtual void HealDone (Unit *, uint32 &)
 Called when the unit heals.
 
virtual void OnCalculateMeleeDamageReceived (uint32 &, Unit *)
 Called during damage calculations.
 
virtual void OnCalculateSpellDamageReceived (int32 &, Unit *)
 
virtual void OnCalculatePeriodicTickReceived (uint32 &, Unit *)
 Called during calculation when receiving periodic healing or damage (DoT or HoT)
 
void AttackStartCaster (Unit *victim, float dist)
 
SpellCastResult DoAddAuraToAllHostilePlayers (uint32 spellid)
 
SpellCastResult DoCast (uint32 spellId)
 
SpellCastResult DoCast (Unit *victim, uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastSelf (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastToAllHostilePlayers (uint32 spellid, bool triggered=false)
 To specify the caster as target if the spell is self-cast.
 
SpellCastResult DoCastVictim (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastAOE (uint32 spellId, bool triggered=false)
 
SpellCastResult DoCastRandomTarget (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false, bool withTank=true)
 Cast the spell on a random unit from the threat list.
 
SpellCastResult DoCastMaxThreat (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 Cast spell on the top threat target, which may not be the current victim.
 
float DoGetSpellMaxRange (uint32 spellId, bool positive=false)
 
void DoMeleeAttackIfReady ()
 
bool DoSpellAttackIfReady (uint32 spell)
 
void DoSpellAttackToRandomTargetIfReady (uint32 spell, uint32 threatTablePosition=0, float dist=0.f, bool playerOnly=true)
 
virtual void SummonMovementInform (Creature *, uint32, uint32)
 Called when a summon reaches a waypoint or point movement finished.
 
virtual void sGossipHello (Player *)
 
virtual void sGossipSelect (Player *, uint32, uint32)
 
virtual void sGossipSelectCode (Player *, uint32, uint32, char const *)
 
virtual void sQuestAccept (Player *, Quest const *)
 
virtual void sQuestSelect (Player *, Quest const *)
 
virtual void sQuestComplete (Player *, Quest const *)
 
virtual void sQuestReward (Player *, Quest const *, uint32)
 
virtual void sOnGameEvent (bool, uint16)
 
virtual std::string GetDebugInfo () const
 

Public Attributes

InstanceScriptpInstance
 
SummonList summons
 
bool eventInRun
 
EventMap actionEvents
 
EventMap combatEvents
 
uint8 waveGroupId
 
uint8 waveKillCount
 
uint8 timeRiftId
 
- Public Attributes inherited from ScriptedAI
Creatureme
 

Additional Inherited Members

- Public Types inherited from ScriptedAI
enum class  Axis {
  AXIS_X ,
  AXIS_Y
}
 
- Public Types inherited from CreatureAI
enum  EvadeReason {
  EVADE_REASON_NO_HOSTILES ,
  EVADE_REASON_BOUNDARY ,
  EVADE_REASON_SEQUENCE_BREAK ,
  EVADE_REASON_NO_PATH ,
  EVADE_REASON_OTHER
}
 
- Static Public Member Functions inherited from CreatureAI
static bool IsInBounds (CreatureBoundary const &boundary, Position const *who)
 
- Static Public Member Functions inherited from UnitAI
static void FillAISpellInfo ()
 
- Static Public Attributes inherited from UnitAI
static AISpellInfoTypeAISpellInfo
 
- Protected Member Functions inherited from npc_escortAI
PlayerGetPlayerForEscort ()
 
- Protected Member Functions inherited from CreatureAI
bool UpdateVictim ()
 
bool UpdateVictimWithGaze ()
 
void SetGazeOn (Unit *target)
 
CreatureDoSummon (uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummon (uint32 entry, WorldObject *obj, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummonFlyer (uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
bool _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
- Protected Attributes inherited from CreatureAI
Creature *const me
 
EventMap events
 
TaskScheduler scheduler
 
CreatureBoundary const * _boundary
 
bool _negateBoundary
 
bool _isEngaged
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Detailed Description

Constructor & Destructor Documentation

◆ npc_arthasAI()

npc_arthas::npc_arthasAI::npc_arthasAI ( Creature creature)
inline
384 : npc_escortAI(creature), summons(me)
385 {
386 pInstance = creature->GetInstanceScript();
387 }
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1238
Creature * me
Definition ScriptedCreature.h:281
InstanceScript * pInstance
Definition culling_of_stratholme.cpp:389
SummonList summons
Definition culling_of_stratholme.cpp:390
Definition ScriptedEscortAI.h:53

References WorldObject::GetInstanceScript(), and pInstance.

Member Function Documentation

◆ DoAction()

void npc_arthas::npc_arthasAI::DoAction ( int32  param)
inlineoverridevirtual

Reimplemented from UnitAI.

427 {
428 if (param == ACTION_START_EVENT)
429 {
430 // Event
431 eventInRun = true;
433 }
434 else if (param == ACTION_START_CITY)
435 {
438 me->SetWalk(true);
439 eventInRun = true;
440
443 }
444 else if (param == ACTION_KILLED_SALRAMM)
445 {
446 waveGroupId = 10;
447 eventInRun = true;
448 me->SetWalk(false);
450 }
451 else if (param == ACTION_START_TOWN_HALL)
452 {
454 SetEscortPaused(false);
455 me->SetWalk(true);
456
458 {
459 cr->AI()->DoAction(ACTION_FORCE_CHANGE_LOCK);
460 }
462 {
463 cr->AI()->DoAction(ACTION_FORCE_CHANGE_LOCK);
464 }
466 {
467 cr->AI()->DoAction(ACTION_FORCE_CHANGE_LOCK);
468 }
469 }
470 else if (param == ACTION_START_SECRET_PASSAGE)
471 {
473 SetEscortPaused(false);
474 me->SetWalk(true);
475 }
476 else if (param == ACTION_START_LAST_CITY)
477 {
479 SetEscortPaused(false);
480 me->SetWalk(false);
481 }
482 else if (param == ACTION_START_MALGANIS)
483 {
486 {
487 summons.Despawn(cr);
488 summons.Summon(cr);
489 cr->SetImmuneToAll(true);
490 cr->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
491 }
493 SetEscortPaused(false);
494 me->SetWalk(false);
495 }
496 else if (param == ACTION_KILLED_MALGANIS)
497 {
499 eventInRun = true;
501 me->SetFacingTo(1.84f);
502
503 if (!me->GetMap()->GetPlayers().IsEmpty())
504 if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource())
505 player->RewardPlayerAndGroupAtEvent(31006, player); // Malganis quest entry required
506 }
507 }
@ UNIT_FLAG_NON_ATTACKABLE
Definition UnitDefines.h:258
@ ACTION_START_EVENT
Definition chapter5.cpp:194
Definition Creature.h:47
bool SetWalk(bool enable) override
Enable or disable the creature's walk mode by removing: MOVEMENTFLAG_WALKING. Infom also the client.
Definition Creature.cpp:3247
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:48
bool IsEmpty() const
Definition LinkedList.h:97
MapReference * getFirst()
Definition MapRefMgr.h:31
PlayerList const & GetPlayers() const
Definition Map.h:326
Definition Player.h:1084
FROM * GetSource() const
Definition Reference.h:97
void Despawn(Creature const *summon)
Definition ScriptedCreature.h:89
void Summon(Creature const *summon)
Definition ScriptedCreature.h:88
void DespawnAll(Milliseconds delay=0ms)
Definition ScriptedCreature.cpp:72
void SetFacingTo(float ori)
Definition Unit.cpp:16411
Map * GetMap() const
Definition Object.h:625
TempSummon * SummonCreature(uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
Definition Object.cpp:2394
@ SAY_PHASE201
Definition culling_of_stratholme.cpp:44
@ SAY_PHASE501
Definition culling_of_stratholme.cpp:75
@ SAY_PHASE401
Definition culling_of_stratholme.cpp:66
@ SAY_PHASE404
Definition culling_of_stratholme.cpp:69
@ SAY_PHASE301
Definition culling_of_stratholme.cpp:52
@ ACTION_FORCE_CHANGE_LOCK
Definition culling_of_stratholme.cpp:175
@ NPC_CITY_MAN
Definition culling_of_stratholme.cpp:134
@ NPC_CITY_MAN2
Definition culling_of_stratholme.cpp:135
@ NPC_CITY_MAN4
Definition culling_of_stratholme.cpp:137
@ NPC_CITY_MAN3
Definition culling_of_stratholme.cpp:136
@ EVENT_ACTION_PHASE2
Definition culling_of_stratholme.cpp:197
@ EVENT_ACTION_PHASE5
Definition culling_of_stratholme.cpp:199
@ EVENT_ACTION_PHASE1
Definition culling_of_stratholme.cpp:196
@ ACTION_START_CITY
Definition culling_of_stratholme.h:135
@ ACTION_START_LAST_CITY
Definition culling_of_stratholme.h:139
@ ACTION_START_TOWN_HALL
Definition culling_of_stratholme.h:137
@ ACTION_KILLED_SALRAMM
Definition culling_of_stratholme.h:136
@ ACTION_KILLED_MALGANIS
Definition culling_of_stratholme.h:142
@ ACTION_START_SECRET_PASSAGE
Definition culling_of_stratholme.h:138
@ ACTION_START_MALGANIS
Definition culling_of_stratholme.h:141
@ NPC_MAL_GANIS
Definition culling_of_stratholme.h:54
@ EVENT_SRC_HALL_CITYMAN1
Definition culling_of_stratholme.h:107
@ EVENT_SRC_HALL_CITYMAN2
Definition culling_of_stratholme.h:108
@ EVENT_SRC_TOWN_CITYMAN1
Definition culling_of_stratholme.h:101
@ EVENT_SRC_HALL_CITYMAN3
Definition culling_of_stratholme.h:109
@ EVENT_SRC_MALGANIS_FINAL
Definition culling_of_stratholme.h:113
@ EVENT_SRC_TOWN_CITYMAN2
Definition culling_of_stratholme.h:102
const Position EventPos[]
Definition culling_of_stratholme.h:153
Talk
Definition hyjal.cpp:82
uint8 waveGroupId
Definition culling_of_stratholme.cpp:394
EventMap actionEvents
Definition culling_of_stratholme.cpp:392
bool eventInRun
Definition culling_of_stratholme.cpp:391
void EnterEvadeMode(EvadeReason=EVADE_REASON_OTHER) override
Definition ScriptedEscortAI.cpp:192
void SetEscortPaused(bool on)
Definition ScriptedEscortAI.cpp:486

References ACTION_FORCE_CHANGE_LOCK, ACTION_KILLED_MALGANIS, ACTION_KILLED_SALRAMM, ACTION_START_CITY, ACTION_START_EVENT, ACTION_START_LAST_CITY, ACTION_START_MALGANIS, ACTION_START_SECRET_PASSAGE, ACTION_START_TOWN_HALL, actionEvents, SummonList::Despawn(), SummonList::DespawnAll(), npc_escortAI::EnterEvadeMode(), EVENT_ACTION_PHASE1, EVENT_ACTION_PHASE2, EVENT_ACTION_PHASE5, EVENT_SRC_HALL_CITYMAN1, EVENT_SRC_HALL_CITYMAN2, EVENT_SRC_HALL_CITYMAN3, EVENT_SRC_MALGANIS_FINAL, EVENT_SRC_TOWN_CITYMAN1, EVENT_SRC_TOWN_CITYMAN2, eventInRun, EventPos, MapRefMgr::getFirst(), WorldObject::GetMap(), Map::GetPlayers(), Reference< TO, FROM >::GetSource(), LinkedListHead::IsEmpty(), ScriptedAI::me, NPC_CITY_MAN, NPC_CITY_MAN2, NPC_CITY_MAN3, NPC_CITY_MAN4, NPC_MAL_GANIS, SAY_PHASE201, SAY_PHASE301, SAY_PHASE401, SAY_PHASE404, SAY_PHASE501, EventMap::ScheduleEvent(), npc_escortAI::SetEscortPaused(), Unit::SetFacingTo(), Creature::SetWalk(), SummonList::Summon(), WorldObject::SummonCreature(), summons, UNIT_FLAG_NON_ATTACKABLE, and waveGroupId.

◆ GetEventNpc()

Creature * npc_arthas::npc_arthasAI::GetEventNpc ( uint32  entry)
1209{
1210 for (SummonList::iterator i = summons.begin(); i != summons.end();)
1211 {
1212 Creature* summon = ObjectAccessor::GetCreature(*me, *i);
1213 if (!summon)
1214 summons.erase(i++);
1215 else if (summon->GetEntry() == entry)
1216 return summon;
1217 else
1218 ++i;
1219 }
1220
1221 return nullptr;
1222}
uint32 GetEntry() const
Definition Object.h:117
iterator erase(iterator i)
Definition ScriptedCreature.h:68
iterator begin()
Definition ScriptedCreature.h:48
iterator end()
Definition ScriptedCreature.h:58
StorageType::iterator iterator
Definition ScriptedCreature.h:36
Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:210

References SummonList::begin(), SummonList::end(), SummonList::erase(), ObjectAccessor::GetCreature(), Object::GetEntry(), ScriptedAI::me, and summons.

Referenced by UpdateAI(), and WaypointReached().

◆ JustDied()

void npc_arthas::npc_arthasAI::JustDied ( Unit )
inlineoverridevirtual

Reimplemented from CreatureAI.

407 {
409 if (pInstance)
411 }
@ STATE_ESCORT_ESCORTING
Definition ScriptedEscortAI.h:47
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:52
@ DATA_ARTHAS_REPOSITION
Definition culling_of_stratholme.h:36
void RemoveEscortState(uint32 escortState)
Definition ScriptedEscortAI.h:111

References DATA_ARTHAS_REPOSITION, pInstance, npc_escortAI::RemoveEscortState(), ZoneScript::SetData(), and STATE_ESCORT_ESCORTING.

◆ JustEngagedWith()

void npc_arthas::npc_arthasAI::JustEngagedWith ( Unit )
overridevirtual

Called for reaction when initially engaged - this happens after JustEnteredCombat.

Reimplemented from CreatureAI.

1246{
1248
1249 // Fight
1252}
SpellCastResult DoCast(uint32 spellId)
Definition UnitAI.cpp:178
@ SPELL_ARTHAS_AURA
Definition culling_of_stratholme.cpp:143
@ EVENT_COMBAT_HEALTH_CHECK
Definition culling_of_stratholme.cpp:195
@ EVENT_COMBAT_EXORCISM
Definition culling_of_stratholme.cpp:194
EventMap combatEvents
Definition culling_of_stratholme.cpp:393

References EVENT_COMBAT_EXORCISM, EVENT_COMBAT_HEALTH_CHECK, and SPELL_ARTHAS_AURA.

◆ JustSummoned()

void npc_arthas::npc_arthasAI::JustSummoned ( Creature cr)
inlineoverridevirtual

Reimplemented from CreatureAI.

414 {
415 summons.Summon(cr);
416 }

References SummonList::Summon(), and summons.

◆ ReorderInstance()

void npc_arthas::npc_arthasAI::ReorderInstance ( uint32  data)
1255{
1256 me->SetWalk(false);
1257 Start(true);
1258 SetEscortPaused(true);
1259 SetDespawnAtEnd(false);
1260
1261 switch (data)
1262 {
1264 SetNextWaypoint(9, false);
1266 break;
1270 SetNextWaypoint(12, false);
1272
1274 {
1275 eventInRun = true;
1277 }
1278 else if (data == COS_PROGRESS_KILLED_MEATHOOK)
1279 {
1280 waveGroupId = 4;
1282 }
1283 else // if (data == COS_PROGRESS_KILLED_SALRAMM)
1284 {
1285 if (pInstance)
1288 }
1289 break;
1291 SetNextWaypoint(21, false);
1293 break;
1295 SetNextWaypoint(32, false);
1297 break;
1299 SetNextWaypoint(46, false);
1301 break;
1303 SetNextWaypoint(55, false);
1305 break;
1306 }
1307
1308 if (data >= COS_PROGRESS_KILLED_EPOCH)
1309 if (pInstance)
1311 pGate->SetGoState(GO_STATE_ACTIVE);
1312
1314}
@ GO_STATE_ACTIVE
Definition GameObjectData.h:708
@ UNIT_NPC_FLAG_GOSSIP
Definition UnitDefines.h:322
@ REACT_DEFENSIVE
Definition Unit.h:567
@ WORLD_STATE_CULLING_OF_STRATHOLME_WAVE_COUNT
Definition WorldStateDefines.h:557
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition Creature.h:99
void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:70
Definition GameObject.h:120
ObjectGuid GetGuidData(uint32 type) const override
Definition InstanceScript.cpp:110
Map * instance
Definition InstanceScript.h:149
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition InstanceScript.cpp:626
GameObject * GetGameObject(ObjectGuid const &guid)
Definition Map.cpp:2341
void SetNpcFlag(NPCFlags flags)
Definition Unit.h:764
@ NPC_MEATHOOK
Definition culling_of_stratholme.h:51
@ DATA_SHKAF_GATE
Definition culling_of_stratholme.h:45
@ COS_PROGRESS_REACHED_TOWN_HALL
Definition culling_of_stratholme.h:125
@ COS_PROGRESS_KILLED_EPOCH
Definition culling_of_stratholme.h:126
@ COS_PROGRESS_LAST_CITY
Definition culling_of_stratholme.h:127
@ COS_PROGRESS_KILLED_MEATHOOK
Definition culling_of_stratholme.h:123
@ COS_PROGRESS_FINISHED_CITY_INTRO
Definition culling_of_stratholme.h:122
@ COS_PROGRESS_FINISHED_INTRO
Definition culling_of_stratholme.h:121
@ COS_PROGRESS_KILLED_SALRAMM
Definition culling_of_stratholme.h:124
@ COS_PROGRESS_BEFORE_MALGANIS
Definition culling_of_stratholme.h:128
@ DATA_SHOW_INFINITE_TIMER
Definition culling_of_stratholme.h:35
void DoAction(int32 param) override
Definition culling_of_stratholme.cpp:426
void SendNextWave(uint32 entry)
Definition culling_of_stratholme.cpp:1316
void Start(bool isActiveAttacker=true, ObjectGuid playerGUID=ObjectGuid::Empty, Quest const *quest=nullptr, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=true)
Definition ScriptedEscortAI.cpp:419
void SetDespawnAtEnd(bool despawn)
Definition ScriptedEscortAI.h:104
bool SetNextWaypoint(uint32 pointId, float x, float y, float z, float orientation)
Definition ScriptedEscortAI.cpp:497

References ACTION_KILLED_SALRAMM, COS_PROGRESS_BEFORE_MALGANIS, COS_PROGRESS_FINISHED_CITY_INTRO, COS_PROGRESS_FINISHED_INTRO, COS_PROGRESS_KILLED_EPOCH, COS_PROGRESS_KILLED_MEATHOOK, COS_PROGRESS_KILLED_SALRAMM, COS_PROGRESS_LAST_CITY, COS_PROGRESS_REACHED_TOWN_HALL, DATA_SHKAF_GATE, DATA_SHOW_INFINITE_TIMER, EVENT_ACTION_PHASE2, GO_STATE_ACTIVE, NPC_MEATHOOK, REACT_DEFENSIVE, UNIT_NPC_FLAG_GOSSIP, and WORLD_STATE_CULLING_OF_STRATHOLME_WAVE_COUNT.

Referenced by Reset().

◆ Reset()

void npc_arthas::npc_arthasAI::Reset ( )
inlineoverridevirtual

Reimplemented from UnitAI.

510 {
514 eventInRun = false;
515 waveGroupId = 0;
516 waveKillCount = 0;
517 timeRiftId = 0;
518
520
521 if (pInstance)
522 {
525 if (data >= COS_PROGRESS_FINISHED_INTRO)
526 ReorderInstance(data);
527 }
528 }
std::uint32_t uint32
Definition Define.h:107
void Reset()
Definition EventMap.cpp:21
void RemoveNpcFlag(NPCFlags flags)
Definition Unit.h:765
virtual uint32 GetData(uint32) const
Definition ZoneScript.h:51
@ DATA_ARTHAS_EVENT
Definition culling_of_stratholme.h:28
uint8 waveKillCount
Definition culling_of_stratholme.cpp:395
uint8 timeRiftId
Definition culling_of_stratholme.cpp:396
void ReorderInstance(uint32 data)
Definition culling_of_stratholme.cpp:1254

References actionEvents, combatEvents, COS_PROGRESS_FINISHED_INTRO, DATA_ARTHAS_EVENT, DATA_ARTHAS_REPOSITION, SummonList::DespawnAll(), eventInRun, ZoneScript::GetData(), ScriptedAI::me, pInstance, Unit::RemoveNpcFlag(), ReorderInstance(), EventMap::Reset(), ZoneScript::SetData(), summons, timeRiftId, UNIT_NPC_FLAG_GOSSIP, waveGroupId, and waveKillCount.

◆ ScheduleNextEvent()

void npc_arthas::npc_arthasAI::ScheduleNextEvent ( uint32  currentEvent,
Milliseconds  time 
)
1225{
1226 actionEvents.ScheduleEvent(currentEvent + 1, time);
1227}

Referenced by UpdateAI().

◆ SendNextWave()

void npc_arthas::npc_arthasAI::SendNextWave ( uint32  entry)
1317{
1318 if (!pInstance)
1319 return;
1320
1321 if (entry == NPC_MEATHOOK)
1322 {
1323 waveKillCount = 4;
1325 }
1326 else if (entry == NPC_SALRAMM)
1327 {
1329 return;
1330 }
1331
1332 // Group is killed
1333 if (++waveKillCount >= 4)
1334 {
1335 waveGroupId++;
1336 if (waveGroupId == 4) // Meathook
1338 else if (waveGroupId == 9) // Salramm
1340 else
1342
1344 }
1345}
@ NPC_SALRAMM
Definition culling_of_stratholme.h:52
@ EVENT_SRC_SALRAMM
Definition culling_of_stratholme.h:106
@ EVENT_SRC_MEATHOOK
Definition culling_of_stratholme.h:105
void SummonNextWave()
Definition culling_of_stratholme.cpp:1229

References COS_PROGRESS_KILLED_MEATHOOK, COS_PROGRESS_KILLED_SALRAMM, DATA_ARTHAS_EVENT, EVENT_SRC_MEATHOOK, EVENT_SRC_SALRAMM, EventPos, NPC_MEATHOOK, NPC_SALRAMM, and WORLD_STATE_CULLING_OF_STRATHOLME_WAVE_COUNT.

Referenced by SummonedCreatureDies().

◆ SpawnTimeRift()

void npc_arthas::npc_arthasAI::SpawnTimeRift ( )
1348{
1349 if (timeRiftId >= 5)
1350 return;
1351
1353 {
1354 // Spawn everyone at time rift pos
1356 {
1357 if (cr->GetEntry() == NPC_TIME_RIFT)
1358 cr->DespawnOrUnsummon(10s);
1359 else // x, y, z (0 is entry)
1360 {
1361 // first infinite
1362 if (i == 1)
1363 AttackStart(cr);
1364
1365 cr->SetInCombatWithZone();
1366 cr->AddThreat(me, 0.0f);
1367 cr->SetReactState(REACT_AGGRESSIVE);
1369 }
1370 }
1371 }
1372
1373 timeRiftId++;
1374}
std::uint8_t uint8
Definition Define.h:109
@ REACT_AGGRESSIVE
Definition Unit.h:568
@ POINT_CHRONOS
Definition culling_of_stratholme.cpp:177
@ ENCOUNTER_CHRONO_MAX_SPAWNS_FIRST
Definition culling_of_stratholme.cpp:171
@ ENCOUNTER_CHRONO_MAX_SPAWNS_SECOND
Definition culling_of_stratholme.cpp:172
float RiftAndSpawnsLocations[ENCOUNTER_CHRONO_NUMBER][ENCOUNTER_CHRONO_MAX_SPAWNS_FIRST][5]
Definition culling_of_stratholme.cpp:256
@ NPC_TIME_RIFT
Definition culling_of_stratholme.h:61
void AttackStart(Unit *who) override
Definition ScriptedEscortAI.cpp:44

References ENCOUNTER_CHRONO_MAX_SPAWNS_FIRST, ENCOUNTER_CHRONO_MAX_SPAWNS_SECOND, NPC_TIME_RIFT, POINT_CHRONOS, REACT_AGGRESSIVE, RiftAndSpawnsLocations, and WorldObject::SummonCreature().

Referenced by WaypointReached().

◆ SummonedCreatureDespawn()

void npc_arthas::npc_arthasAI::SummonedCreatureDespawn ( Creature cr)
inlineoverridevirtual

Reimplemented from CreatureAI.

418{ summons.Despawn(cr); }

References SummonList::Despawn(), and summons.

◆ SummonedCreatureDies()

◆ SummonNextWave()

void npc_arthas::npc_arthasAI::SummonNextWave ( )
1230{
1231 Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
1232 if (!PlayerList.IsEmpty())
1233 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
1234 i->GetSource()->PlayerTalkClass->SendPointOfInterest(1000 + waveGroupId);
1235
1236 waveKillCount = 0; // this is forced condition!
1237 uint32 tableId = waveGroupId;
1238 if (tableId > 4)
1239 tableId--;
1240
1241 for (uint32 i = 0; i < ENCOUNTER_WAVES_MAX_SPAWNS; ++i)
1242 me->SummonCreature(/*entry*/(uint32)WavesLocations[tableId][i][0], WavesLocations[tableId][i][1], WavesLocations[tableId][i][2], WavesLocations[tableId][i][3], WavesLocations[tableId][i][4]);
1243}
Definition LinkedList.h:139
Definition MapRefMgr.h:26
iterator begin()
Definition MapRefMgr.h:36
iterator end()
Definition MapRefMgr.h:37
@ ENCOUNTER_WAVES_MAX_SPAWNS
Definition culling_of_stratholme.cpp:167
float WavesLocations[ENCOUNTER_WAVES_NUMBER][ENCOUNTER_WAVES_MAX_SPAWNS][5]
Definition culling_of_stratholme.cpp:203

References MapRefMgr::begin(), ENCOUNTER_WAVES_MAX_SPAWNS, MapRefMgr::end(), LinkedListHead::IsEmpty(), and WavesLocations.

Referenced by UpdateAI().

◆ UpdateAI()

void npc_arthas::npc_arthasAI::UpdateAI ( uint32  )
inlineoverridevirtual

Use to start attacking a target. Called just before JustEngagedWith()

Implements UnitAI.

680 {
682
683 if (eventInRun)
684 {
685 actionEvents.Update(diff);
686 switch (uint32 currentEvent = actionEvents.ExecuteEvent())
687 {
689 me->SetWalk(true);
692 {
694 uther->SetTarget(me->GetGUID());
695 me->SetTarget(uther->GetGUID());
696 }
697 for (int i = 0; i < 3; ++i)
699 horse->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_HORSE1 + i], FORCED_MOVEMENT_NONE, 0.f, false);
700
701 ScheduleNextEvent(currentEvent, 4s);
702 break;
703 case EVENT_ACTION_PHASE1+1:
704 // Start Event
705 me->SetWalk(true);
706 Start(true);
707 SetDespawnAtEnd(false);
708 SetDespawnAtFar(false);
709
710 ScheduleNextEvent(currentEvent, 9s);
711 break;
712 // After waypoint 0
713 case EVENT_ACTION_PHASE1+2:
715 ScheduleNextEvent(currentEvent, 2s);
716 break;
717 case EVENT_ACTION_PHASE1+3:
718 if (Creature* uther = GetEventNpc(NPC_UTHER))
719 uther->AI()->Talk(SAY_PHASE102);
720
721 ScheduleNextEvent(currentEvent, 8s);
722 break;
723 case EVENT_ACTION_PHASE1+4:
724 SetEscortPaused(false);
725 eventInRun = false;
727 ScheduleNextEvent(currentEvent, 2s);
728 break;
729 // After waypoint 1
730 case EVENT_ACTION_PHASE1+5:
731 if (Creature* jaina = GetEventNpc(NPC_JAINA))
732 jaina->SetTarget(me->GetGUID());
733
735 ScheduleNextEvent(currentEvent, 10s);
736 break;
737 case EVENT_ACTION_PHASE1+6:
738 if (Creature* uther = GetEventNpc(NPC_UTHER))
739 uther->AI()->Talk(SAY_PHASE105);
740
741 ScheduleNextEvent(currentEvent, 1s);
742 break;
743 case EVENT_ACTION_PHASE1+7:
745 ScheduleNextEvent(currentEvent, 4s);
746 break;
747 case EVENT_ACTION_PHASE1+8:
748 if (Creature* uther = GetEventNpc(NPC_UTHER))
749 uther->AI()->Talk(SAY_PHASE107);
750
751 ScheduleNextEvent(currentEvent, 6s);
752 break;
753 case EVENT_ACTION_PHASE1+9:
755 ScheduleNextEvent(currentEvent, 4s);
756 break;
757 case EVENT_ACTION_PHASE1+10:
758 if (Creature* uther = GetEventNpc(NPC_UTHER))
759 uther->AI()->Talk(SAY_PHASE109);
760
761 ScheduleNextEvent(currentEvent, 8s);
762 break;
763 case EVENT_ACTION_PHASE1+11:
765 ScheduleNextEvent(currentEvent, 4s);
766 break;
767 case EVENT_ACTION_PHASE1+12:
768 if (Creature* uther = GetEventNpc(NPC_UTHER))
769 uther->AI()->Talk(SAY_PHASE111);
770
771 ScheduleNextEvent(currentEvent, 4s);
772 break;
773 case EVENT_ACTION_PHASE1+13:
775 ScheduleNextEvent(currentEvent, 11s);
776 break;
777 case EVENT_ACTION_PHASE1+14:
778 if (Creature* jaina = GetEventNpc(NPC_JAINA))
779 jaina->AI()->Talk(SAY_PHASE113);
780
781 ScheduleNextEvent(currentEvent, 2500ms);
782 break;
783 case EVENT_ACTION_PHASE1+15:
785 ScheduleNextEvent(currentEvent, 9s);
786 break;
787 case EVENT_ACTION_PHASE1+16:
788 if (Creature* uther = GetEventNpc(NPC_UTHER))
789 uther->AI()->Talk(SAY_PHASE115);
790
791 ScheduleNextEvent(currentEvent, 4s);
792 break;
793 case EVENT_ACTION_PHASE1+17:
794 for (SummonList::const_iterator i = summons.begin(); i != summons.end(); ++i)
795 {
797 if (summon && summon->GetEntry() == NPC_HORSE_ESCORT)
799 }
800
801 ScheduleNextEvent(currentEvent, 1s);
802 break;
803 case EVENT_ACTION_PHASE1+18:
804 if (Creature* uther = GetEventNpc(NPC_UTHER))
805 {
806 uther->SetTarget();
807 uther->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
808 uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false);
809 }
810 ScheduleNextEvent(currentEvent, 1s);
811 break;
812 case EVENT_ACTION_PHASE1+19:
813 if (Creature* jaina = GetEventNpc(NPC_JAINA))
814 {
815 jaina->SetTarget();
816 jaina->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
817 jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false);
818 }
820 ScheduleNextEvent(currentEvent, 2s);
821 break;
822 case EVENT_ACTION_PHASE1+20:
823 if (Creature* jaina = GetEventNpc(NPC_JAINA))
824 {
825 jaina->GetMotionMaster()->MoveIdle();
826 jaina->AI()->Talk(SAY_PHASE117);
827 }
828
829 ScheduleNextEvent(currentEvent, 2s);
830 break;
831 case EVENT_ACTION_PHASE1+21:
832 if (Creature* jaina = GetEventNpc(NPC_JAINA))
833 {
834 jaina->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
835 jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false);
836 }
838 ScheduleNextEvent(currentEvent, 4s);
839 break;
840 case EVENT_ACTION_PHASE1+22:
841 SetEscortPaused(false);
842 eventInRun = false;
843 me->SetTarget();
844 // dont schedule next, do it in gossip select!
845 break;
846 //After Gossip 1 (waypoint 8)
848 summons.DespawnEntry(NPC_INVIS_TARGET); // remove trigger
849 me->SetTarget();
850 SetEscortPaused(false);
851 eventInRun = false;
852 ScheduleNextEvent(currentEvent, 1s);
853 break;
854 // After waypoint 9
855 case EVENT_ACTION_PHASE2+1:
856 if (Creature* cityman = GetEventNpc(NPC_CITY_MAN))
857 {
858 cityman->AI()->Talk(SAY_PHASE202);
859 cityman->SetTarget(me->GetGUID());
860 cityman->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
861 cityman->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_CITYMAN]);
862 }
863
864 ScheduleNextEvent(currentEvent, 9s);
865 break;
866 case EVENT_ACTION_PHASE2+2:
868 SetEscortPaused(false);
869 eventInRun = false;
870 ScheduleNextEvent(currentEvent, 1500ms);
871 break;
872 // After waypoint 11
873 case EVENT_ACTION_PHASE2+3:
874 if (Creature* stalker = me->SummonCreature(NPC_INVIS_TARGET, 2081.447f, 1287.770f, 141.3241f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 10000))
875 {
876 me->SetFacingToObject(stalker);
877 stalker->DespawnOrUnsummon(500ms);
878 }
880 ScheduleNextEvent(currentEvent, 4s);
881 break;
882 case EVENT_ACTION_PHASE2+4:
884 {
885 malganis->CastSpell(malganis, SPELL_MALGANIS_APPEAR, true);
886 malganis->AI()->Talk(SAY_PHASE206);
887 malganis->SetTarget(me->GetGUID());
888 me->SetTarget(malganis->GetGUID());
889 malganis->SetReactState(REACT_PASSIVE);
890
891 std::list<Creature*> unitList;
892 malganis->GetCreaturesWithEntryInRange(unitList, 20.0f, NPC_CITY_MAN);
893 malganis->GetCreaturesWithEntryInRange(unitList, 20.0f, NPC_CITY_MAN2);
894
895 for (std::list<Creature*>::const_iterator itr = unitList.begin(); itr != unitList.end(); ++itr)
896 if ((*itr)->ToCreature())
897 {
898 (*itr)->ToCreature()->AI()->DoAction(ACTION_INFECT_CITIZIEN);
899 (*itr)->GetMotionMaster()->MoveFleeing(malganis, 2000);
900 }
901
902 unitList.clear();
903 }
904
905 ScheduleNextEvent(currentEvent, 12s);
906 break;
907 case EVENT_ACTION_PHASE2+5:
908 if (Creature* malganis = GetEventNpc(NPC_MAL_GANIS))
909 malganis->AI()->Talk(SAY_PHASE207);
910
911 ScheduleNextEvent(currentEvent, 15s);
912 break;
913 case EVENT_ACTION_PHASE2+6:
914 if (Creature* malganis = GetEventNpc(NPC_MAL_GANIS))
915 {
916 me->SetTarget();
917 me->SetFacingToObject(malganis);
918 malganis->SetVisible(false);
919 }
920
922 ScheduleNextEvent(currentEvent, 11s);
923 break;
924 case EVENT_ACTION_PHASE2+7:
930 ScheduleNextEvent(currentEvent, 20s);
931 if (pInstance)
933 break;
934 case EVENT_ACTION_PHASE2+8:
935 if (pInstance)
937
939 break;
940 case EVENT_ACTION_PHASE2+9:
941 if (pInstance)
943
945 eventInRun = false;
946 SetEscortPaused(false);
947 break;
948 // After waypoint 22
952 cr->SetTarget(me->GetGUID());
954 cr->SetTarget(me->GetGUID());
956 cr->SetTarget(me->GetGUID());
957 ScheduleNextEvent(currentEvent, 1s);
958 break;
959 case EVENT_ACTION_PHASE3+1:
962 cr->AI()->Talk(SAY_PHASE302);
963
964 ScheduleNextEvent(currentEvent, 7s);
965 break;
966 case EVENT_ACTION_PHASE3+2:
968 SetEscortPaused(false);
969 eventInRun = false;
970 ScheduleNextEvent(currentEvent, 0ms);
971 break;
972 // After waypoint 23
973 case EVENT_ACTION_PHASE3+3:
974 me->SetWalk(false);
977 ScheduleNextEvent(currentEvent, 2s);
978 break;
979 case EVENT_ACTION_PHASE3+4:
981 ScheduleNextEvent(currentEvent, 2s);
982 break;
983 case EVENT_ACTION_PHASE3+5:
985 cr->AI()->Talk(SAY_PHASE305);
986 ScheduleNextEvent(currentEvent, 1s);
987 break;
988 // Trio citizen transformation right as we enter Town Hall
989 case EVENT_ACTION_PHASE3+6:
991 {
992 cr->UpdateEntry(NPC_INFINITE_HUNTER, nullptr, false);
993 cr->SetFullHealth();
994 cr->SetImmuneToAll(true);
995 cr->SetReactState(REACT_PASSIVE);
996 }
997 ScheduleNextEvent(currentEvent, 2s);
998 break;
999 case EVENT_ACTION_PHASE3+7:
1001 {
1002 cr->UpdateEntry(NPC_INFINITE_AGENT, nullptr, false);
1003 cr->SetFullHealth();
1004 cr->SetImmuneToAll(true);
1005 cr->SetReactState(REACT_PASSIVE);
1006 }
1007 ScheduleNextEvent(currentEvent, 2s);
1008 break;
1009 case EVENT_ACTION_PHASE3+8:
1011 {
1012 cr->UpdateEntry(NPC_INFINITE_ADVERSARY, nullptr, false);
1013 cr->SetFullHealth();
1014 cr->SetReactState(REACT_AGGRESSIVE);
1015 cr->SetInCombatWithZone();
1016 cr->AddThreat(me, 0.0f);
1017 }
1019 {
1020 cr->SetImmuneToAll(false);
1021 cr->SetReactState(REACT_AGGRESSIVE);
1022 cr->SetInCombatWithZone();
1023 cr->AddThreat(me, 0.0f);
1024 }
1026 {
1027 cr->SetImmuneToAll(false);
1028 cr->SetReactState(REACT_AGGRESSIVE);
1029 cr->SetInCombatWithZone();
1030 cr->AddThreat(me, 0.0f);
1031 }
1032 ScheduleNextEvent(currentEvent, 2s);
1033 break;
1034 case EVENT_ACTION_PHASE3+9:
1035 // Arthas is fighting infinites in town hall
1036 if (me->IsInCombat())
1037 {
1038 actionEvents.Repeat(1s);
1039 return;
1040 }
1041
1044 me->SetFacingTo(0.0f);
1045 ScheduleNextEvent(currentEvent, 5s);
1046 break;
1047 case EVENT_ACTION_PHASE3+10:
1049 ScheduleNextEvent(currentEvent, 5s);
1050 break;
1051 case EVENT_ACTION_PHASE3+11:
1052 SetEscortPaused(false);
1053 eventInRun = false;
1054 ScheduleNextEvent(currentEvent, 1s);
1055 break;
1056 case EVENT_ACTION_PHASE3+12:
1057 // Arthas is fighting first chronos
1058 if (me->IsInCombat())
1059 {
1060 actionEvents.Repeat(1s);
1061 return;
1062 }
1063
1064 eventInRun = false;
1065 SetEscortPaused(false);
1067 me->SetFacingTo(M_PI);
1068 ScheduleNextEvent(currentEvent, 0ms);
1069 break;
1070 case EVENT_ACTION_PHASE3+13:
1071 // Arthas is fighting second chronos
1072 if (me->IsInCombat())
1073 {
1074 actionEvents.Repeat(1s);
1075 return;
1076 }
1077
1078 eventInRun = false;
1079 SetEscortPaused(false);
1081 me->SetFacingTo(M_PI * 3 / 2);
1082 ScheduleNextEvent(currentEvent, 0ms);
1083 break;
1084 case EVENT_ACTION_PHASE3+14:
1085 // Arthas is fighting third chronos
1086 if (me->IsInCombat())
1087 {
1088 actionEvents.Repeat(1s);
1089 return;
1090 }
1091
1092 me->SetFacingTo(M_PI / 2);
1093 ScheduleNextEvent(currentEvent, 8s);
1094 break;
1095 case EVENT_ACTION_PHASE3+15:
1099 {
1100 cr->SetImmuneToAll(true);
1101 cr->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
1102 me->SetTarget(cr->GetGUID());
1103 cr->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_EPOCH]);
1104 }
1105
1106 ScheduleNextEvent(currentEvent, 3s);
1107 break;
1108 case EVENT_ACTION_PHASE3+16:
1109 if (Creature* cr = GetEventNpc(NPC_EPOCH))
1110 cr->AI()->Talk(SAY_PHASE314);
1111
1112 ScheduleNextEvent(currentEvent, 14s);
1113 break;
1114 case EVENT_ACTION_PHASE3+17:
1116 ScheduleNextEvent(currentEvent, 7s);
1117 break;
1118 case EVENT_ACTION_PHASE3+18:
1119 if (Creature* cr = GetEventNpc(NPC_EPOCH))
1120 {
1121 cr->SetImmuneToAll(false);
1122 cr->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
1123 cr->SetReactState(REACT_AGGRESSIVE);
1124 cr->AddThreat(me, 0.0f);
1125 cr->SetInCombatWithZone();
1126 }
1127 ScheduleNextEvent(currentEvent, 1s);
1128 break;
1129 case EVENT_ACTION_PHASE3+19:
1130 // Arthas is fighting epoch chronos
1131 if (me->IsInCombat())
1132 {
1133 actionEvents.Repeat(1s);
1134 return;
1135 }
1136
1137 if (pInstance)
1139
1141 eventInRun = false;
1142 break;
1145 {
1146 cr->SetImmuneToAll(false);
1147 cr->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
1148 cr->SetInCombatWithZone();
1149 cr->AddThreat(me, 0.0f);
1150 AttackStart(cr);
1151 }
1152 eventInRun = false;
1153 SetEscortPaused(true);
1154 break;
1155 case EVENT_ACTION_PHASE5+1:
1157 SetEscortPaused(false);
1158 eventInRun = false;
1159 ScheduleNextEvent(currentEvent, 5s);
1160 break;
1161 case EVENT_ACTION_PHASE5+2:
1162 me->SetFacingTo(5.28f);
1164 if (pInstance)
1165 {
1168 go->SetGoState(GO_STATE_ACTIVE);
1169 }
1170 ScheduleNextEvent(currentEvent, 10s);
1171 break;
1172 case EVENT_ACTION_PHASE5+3:
1173 eventInRun = false;
1174 me->SetVisible(false);
1175 break;
1176 }
1177 }
1178
1179 //Battling skills
1180 if (!me->GetVictim())
1181 return;
1182
1183 combatEvents.Update(diff);
1185 return;
1186
1187 switch (combatEvents.ExecuteEvent())
1188 {
1191 me->CastSpell(target, SPELL_ARTHAS_EXORCISM, false);
1192
1193 combatEvents.Repeat(7300ms);
1194 break;
1196 if (HealthBelowPct(40))
1198
1199 combatEvents.Repeat(1s);
1200 break;
1201 }
1202
1204 }
@ FORCED_MOVEMENT_NONE
Definition MotionMaster.h:86
@ TEMPSUMMON_DEAD_DESPAWN
Definition Object.h:55
@ TEMPSUMMON_TIMED_DESPAWN
Definition Object.h:51
@ MOVEMENTFLAG_WALKING
Definition UnitDefines.h:380
@ UNIT_STATE_CASTING
Definition UnitDefines.h:188
@ REACT_PASSIVE
Definition Unit.h:566
void SetTarget(ObjectGuid guid=ObjectGuid::Empty) override
Definition Creature.cpp:3464
void Update(uint32 time)
Definition EventMap.h:67
void Repeat(Milliseconds time)
Definition EventMap.cpp:76
EventId ExecuteEvent()
Definition EventMap.cpp:86
void MovePoint(uint32 id, const Position &pos, ForcedMovement forcedMovement=FORCED_MOVEMENT_NONE, float speed=0.f, bool generatePath=true, bool forceDestination=true, std::optional< AnimTier > animTier=std::nullopt)
Definition MotionMaster.h:240
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:114
StorageType::const_iterator const_iterator
Definition ScriptedCreature.h:37
void DespawnEntry(uint32 entry)
Definition ScriptedCreature.cpp:55
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:40
Unit * SelectTarget(SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition UnitAI.cpp:111
Definition Unit.h:664
void SetVisible(bool x)
Definition Unit.cpp:11072
void SetFacingToObject(WorldObject *object, Milliseconds timed=0ms)
Definition Unit.cpp:16421
MotionMaster * GetMotionMaster()
Definition Unit.h:1758
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1350
Unit * GetVictim() const
Definition Unit.h:903
bool HasUnitState(const uint32 f) const
Definition Unit.h:736
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition Unit.h:924
bool IsInCombat() const
Definition Unit.h:935
@ SAY_PHASE210
Definition culling_of_stratholme.cpp:49
@ SAY_PHASE203
Definition culling_of_stratholme.cpp:45
@ SAY_PHASE302
Definition culling_of_stratholme.cpp:107
@ SAY_PHASE105
Definition culling_of_stratholme.cpp:89
@ SAY_PHASE116
Definition culling_of_stratholme.cpp:40
@ SAY_PHASE202
Definition culling_of_stratholme.cpp:100
@ SAY_PHASE109
Definition culling_of_stratholme.cpp:91
@ SAY_PHASE305_1
Definition culling_of_stratholme.cpp:109
@ SAY_PHASE103
Definition culling_of_stratholme.cpp:33
@ SAY_PHASE205
Definition culling_of_stratholme.cpp:46
@ SAY_PHASE111
Definition culling_of_stratholme.cpp:92
@ SAY_PHASE308
Definition culling_of_stratholme.cpp:57
@ SAY_PHASE306
Definition culling_of_stratholme.cpp:55
@ SAY_PHASE315
Definition culling_of_stratholme.cpp:63
@ SAY_PHASE114
Definition culling_of_stratholme.cpp:39
@ SAY_PHASE303
Definition culling_of_stratholme.cpp:53
@ SAY_PHASE311
Definition culling_of_stratholme.cpp:60
@ SAY_PHASE207
Definition culling_of_stratholme.cpp:82
@ SAY_PHASE113
Definition culling_of_stratholme.cpp:96
@ SAY_PHASE209
Definition culling_of_stratholme.cpp:48
@ SAY_PHASE503
Definition culling_of_stratholme.cpp:77
@ SAY_PHASE206
Definition culling_of_stratholme.cpp:81
@ SAY_PHASE112
Definition culling_of_stratholme.cpp:38
@ SAY_PHASE108
Definition culling_of_stratholme.cpp:36
@ SAY_PHASE104
Definition culling_of_stratholme.cpp:34
@ SAY_PHASE117
Definition culling_of_stratholme.cpp:97
@ SAY_PHASE107
Definition culling_of_stratholme.cpp:90
@ SAY_PHASE504
Definition culling_of_stratholme.cpp:78
@ SAY_PHASE101
Definition culling_of_stratholme.cpp:32
@ SAY_PHASE314
Definition culling_of_stratholme.cpp:85
@ SAY_PHASE208
Definition culling_of_stratholme.cpp:47
@ SAY_PHASE102
Definition culling_of_stratholme.cpp:88
@ SAY_PHASE304
Definition culling_of_stratholme.cpp:54
@ SAY_PHASE313
Definition culling_of_stratholme.cpp:62
@ SAY_PHASE110
Definition culling_of_stratholme.cpp:37
@ SAY_PHASE305
Definition culling_of_stratholme.cpp:108
@ SAY_PHASE115
Definition culling_of_stratholme.cpp:93
@ SAY_PHASE106
Definition culling_of_stratholme.cpp:35
@ ACTION_INFECT_CITIZIEN
Definition culling_of_stratholme.cpp:174
@ SPELL_MALGANIS_APPEAR
Definition culling_of_stratholme.cpp:148
@ SPELL_ARTHAS_CRUSADER_STRIKE
Definition culling_of_stratholme.cpp:150
@ SPELL_ARTHAS_EXORCISM
Definition culling_of_stratholme.cpp:144
@ SPELL_ARTHAS_HOLY_LIGHT
Definition culling_of_stratholme.cpp:145
@ NPC_INVIS_TARGET
Definition culling_of_stratholme.cpp:130
@ NPC_INFINITE_ADVERSARY
Definition culling_of_stratholme.cpp:125
@ NPC_HORSE_ESCORT
Definition culling_of_stratholme.cpp:132
@ NPC_INFINITE_AGENT
Definition culling_of_stratholme.cpp:127
@ NPC_INFINITE_HUNTER
Definition culling_of_stratholme.cpp:126
@ EVENT_ACTION_PHASE3
Definition culling_of_stratholme.cpp:198
@ NPC_EPOCH
Definition culling_of_stratholme.h:53
@ NPC_UTHER
Definition culling_of_stratholme.h:58
@ DATA_EXIT_GATE
Definition culling_of_stratholme.h:46
@ COS_PROGRESS_FINISHED
Definition culling_of_stratholme.h:129
@ EVENT_POS_RETREAT
Definition culling_of_stratholme.h:100
@ EVENT_SRC_UTHER
Definition culling_of_stratholme.h:91
@ EVENT_DST_HORSE1
Definition culling_of_stratholme.h:97
@ EVENT_DST_CITYMAN
Definition culling_of_stratholme.h:103
@ EVENT_SRC_EPOCH
Definition culling_of_stratholme.h:110
@ EVENT_DST_UTHER
Definition culling_of_stratholme.h:96
@ EVENT_SRC_MALGANIS
Definition culling_of_stratholme.h:104
@ EVENT_DST_EPOCH
Definition culling_of_stratholme.h:111
@ EVENT_SRC_HORSE1
Definition culling_of_stratholme.h:93
@ EVENT_SRC_JAINA
Definition culling_of_stratholme.h:92
@ DATA_START_WAVES
Definition culling_of_stratholme.h:34
bool HealthBelowPct(uint32 pct) const
Definition ScriptedCreature.h:368
Creature * GetEventNpc(uint32 entry)
Definition culling_of_stratholme.cpp:1208
void ScheduleNextEvent(uint32 currentEvent, Milliseconds time)
Definition culling_of_stratholme.cpp:1224
void SetDespawnAtFar(bool despawn)
Definition ScriptedEscortAI.h:105
void UpdateAI(uint32 diff) override
Use to start attacking a target. Called just before JustEngagedWith()
Definition ScriptedEscortAI.cpp:231
@ NPC_JAINA
Definition zone_undercity.cpp:410

References ACTION_INFECT_CITIZIEN, actionEvents, npc_escortAI::AttackStart(), SummonList::begin(), Unit::CastSpell(), combatEvents, COS_PROGRESS_FINISHED, COS_PROGRESS_FINISHED_CITY_INTRO, COS_PROGRESS_KILLED_EPOCH, DATA_ARTHAS_EVENT, DATA_EXIT_GATE, DATA_START_WAVES, SummonList::DespawnAll(), SummonList::DespawnEntry(), UnitAI::DoMeleeAttackIfReady(), InstanceScript::DoUpdateWorldState(), SummonList::end(), EVENT_ACTION_PHASE1, EVENT_ACTION_PHASE2, EVENT_ACTION_PHASE3, EVENT_ACTION_PHASE5, EVENT_COMBAT_EXORCISM, EVENT_COMBAT_HEALTH_CHECK, EVENT_DST_CITYMAN, EVENT_DST_EPOCH, EVENT_DST_HORSE1, EVENT_DST_UTHER, EVENT_POS_RETREAT, EVENT_SRC_EPOCH, EVENT_SRC_HORSE1, EVENT_SRC_JAINA, EVENT_SRC_MALGANIS, EVENT_SRC_UTHER, eventInRun, EventPos, EventMap::ExecuteEvent(), FORCED_MOVEMENT_NONE, ObjectAccessor::GetCreature(), Object::GetEntry(), GetEventNpc(), Map::GetGameObject(), Object::GetGUID(), InstanceScript::GetGuidData(), Unit::GetMotionMaster(), Unit::GetVictim(), GO_STATE_ACTIVE, Unit::HasUnitState(), ScriptedAI::HealthBelowPct(), InstanceScript::instance, Unit::IsInCombat(), ScriptedAI::me, MOVEMENTFLAG_WALKING, MotionMaster::MovePoint(), NPC_CITY_MAN, NPC_CITY_MAN2, NPC_CITY_MAN3, NPC_CITY_MAN4, NPC_EPOCH, NPC_HORSE_ESCORT, NPC_INFINITE_ADVERSARY, NPC_INFINITE_AGENT, NPC_INFINITE_HUNTER, NPC_INVIS_TARGET, NPC_JAINA, NPC_MAL_GANIS, NPC_TIME_RIFT, NPC_UTHER, pInstance, Random, REACT_AGGRESSIVE, REACT_DEFENSIVE, REACT_PASSIVE, EventMap::Repeat(), SAY_PHASE101, SAY_PHASE102, SAY_PHASE103, SAY_PHASE104, SAY_PHASE105, SAY_PHASE106, SAY_PHASE107, SAY_PHASE108, SAY_PHASE109, SAY_PHASE110, SAY_PHASE111, SAY_PHASE112, SAY_PHASE113, SAY_PHASE114, SAY_PHASE115, SAY_PHASE116, SAY_PHASE117, SAY_PHASE202, SAY_PHASE203, SAY_PHASE205, SAY_PHASE206, SAY_PHASE207, SAY_PHASE208, SAY_PHASE209, SAY_PHASE210, SAY_PHASE302, SAY_PHASE303, SAY_PHASE304, SAY_PHASE305, SAY_PHASE305_1, SAY_PHASE306, SAY_PHASE308, SAY_PHASE311, SAY_PHASE313, SAY_PHASE314, SAY_PHASE315, SAY_PHASE503, SAY_PHASE504, ScheduleNextEvent(), UnitAI::SelectTarget(), ZoneScript::SetData(), npc_escortAI::SetDespawnAtEnd(), npc_escortAI::SetDespawnAtFar(), npc_escortAI::SetEscortPaused(), Unit::SetFacingTo(), Unit::SetFacingToObject(), Unit::SetImmuneToAll(), Unit::SetNpcFlag(), Creature::SetReactState(), Creature::SetTarget(), Unit::SetVisible(), Creature::SetWalk(), SPELL_ARTHAS_CRUSADER_STRIKE, SPELL_ARTHAS_EXORCISM, SPELL_ARTHAS_HOLY_LIGHT, SPELL_MALGANIS_APPEAR, npc_escortAI::Start(), WorldObject::SummonCreature(), SummonNextWave(), summons, TEMPSUMMON_DEAD_DESPAWN, TEMPSUMMON_TIMED_DESPAWN, UNIT_FLAG_NON_ATTACKABLE, UNIT_NPC_FLAG_GOSSIP, UNIT_STATE_CASTING, EventMap::Update(), npc_escortAI::UpdateAI(), and WORLD_STATE_CULLING_OF_STRATHOLME_WAVE_COUNT.

◆ WaypointReached() [1/2]

void npc_arthas::npc_arthasAI::WaypointReached ( uint32  uiPointId)
inlineoverridevirtual

Implements npc_escortAI.

532 {
533 switch (uiPointId)
534 {
535 // Starting waypoint, After reaching uther and jaina
536 case 0:
537 // On the mountain with uther and jaina
538 case 1:
539 // Reaching city man in city
540 case 9:
541 // Reaching city man in town hall
542 case 23:
543 SetEscortPaused(true);
544 eventInRun = true;
545 break;
546 // After intro, in front of bridge
547 case 3:
548 me->SetWalk(false);
550 summons.DespawnAll(); // uther, jaina and horses
551 break;
552 // Reached City
553 case 8:
555 SetEscortPaused(true);
556 if (pInstance)
558
559 if (Creature* stalker = me->SummonCreature(NPC_INVIS_TARGET, 2026.469f, 1287.088f, 143.596f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 14000))
560 {
561 me->SetFacingToObject(stalker);
562 stalker->DespawnOrUnsummon(500ms);
563 }
564 break;
565 // Reached first cityman
566 case 10:
567 if (Creature* cityman = GetEventNpc(NPC_CITY_MAN))
568 {
569 cityman->AI()->Talk(SAY_PHASE204);
571 }
572 break;
573 // Reached second cityman
574 case 11:
575 if (Creature* cityman = GetEventNpc(NPC_CITY_MAN2))
576 {
577 cityman->AI()->Talk(SAY_PHASE204_1);
579 }
581 SetEscortPaused(true);
582 eventInRun = true;
583 break;
584 // Reached Town Hall
585 case 20:
586 if (pInstance)
589 me->SetWalk(true);
590 SetEscortPaused(true);
591 break;
592 // Inside Town Hall first scene pos
593 case 22:
595 eventInRun = true;
596 SetEscortPaused(true);
597 break;
598 // Town Hall, upper floor first fight
599 case 26:
600 SetEscortPaused(true);
601 eventInRun = true;
604 break;
605 // Town Hall, upper floor second fight
606 case 29:
610 SetEscortPaused(true);
611 eventInRun = true;
612 break;
613 // Town Hall, upper floor third fight
614 case 31:
615 me->SetWalk(true);
619 SetEscortPaused(true);
620 eventInRun = true;
621 break;
622 // Book Shelf
623 case 34:
625 break;
626 case 35:
628 break;
629 // Reached book shelf
630 case 36:
631 me->SetWalk(false);
632 if (pInstance)
634 pGate->SetGoState(GO_STATE_ACTIVE);
635 break;
636 // Behind secred passage
637 case 45:
638 me->SetWalk(false);
640 SetEscortPaused(true);
641 if (pInstance)
643 break;
644 // Some walk talk
645 case 47:
646 me->SetWalk(true);
648 break;
649 case 48:
650 me->SetWalk(false);
652 break;
653 case 53:
655 break;
656 // Before Malganis event
657 case 54:
658 if (pInstance)
660
662 SetEscortPaused(true);
663 break;
664 // Infront of malganis
665 case 55:
668 SetEscortPaused(true);
669 eventInRun = true;
670 break;
671 // After malganis defeat
672 case 56:
673 SetEscortPaused(true);
674 eventInRun = true;
675 break;
676 }
677 }
@ SAY_PHASE307
Definition culling_of_stratholme.cpp:56
@ SAY_PHASE405
Definition culling_of_stratholme.cpp:70
@ SAY_PHASE312
Definition culling_of_stratholme.cpp:61
@ SAY_PHASE406
Definition culling_of_stratholme.cpp:71
@ SAY_PHASE407
Definition culling_of_stratholme.cpp:72
@ SAY_PHASE502
Definition culling_of_stratholme.cpp:76
@ SAY_PHASE309
Definition culling_of_stratholme.cpp:58
@ SAY_PHASE204_1
Definition culling_of_stratholme.cpp:101
@ SAY_PHASE402
Definition culling_of_stratholme.cpp:67
@ SAY_PHASE118
Definition culling_of_stratholme.cpp:41
@ SAY_PHASE204
Definition culling_of_stratholme.cpp:104
@ SAY_PHASE403
Definition culling_of_stratholme.cpp:68
void SpawnTimeRift()
Definition culling_of_stratholme.cpp:1347

References actionEvents, Unit::CastSpell(), COS_PROGRESS_BEFORE_MALGANIS, COS_PROGRESS_FINISHED_INTRO, COS_PROGRESS_LAST_CITY, COS_PROGRESS_REACHED_TOWN_HALL, DATA_ARTHAS_EVENT, DATA_SHKAF_GATE, SummonList::DespawnAll(), EVENT_ACTION_PHASE3, EVENT_ACTION_PHASE5, eventInRun, GetEventNpc(), Map::GetGameObject(), InstanceScript::GetGuidData(), GO_STATE_ACTIVE, InstanceScript::instance, ScriptedAI::me, NPC_CITY_MAN, NPC_CITY_MAN2, NPC_INVIS_TARGET, pInstance, REACT_DEFENSIVE, SAY_PHASE118, SAY_PHASE204, SAY_PHASE204_1, SAY_PHASE307, SAY_PHASE309, SAY_PHASE312, SAY_PHASE402, SAY_PHASE403, SAY_PHASE405, SAY_PHASE406, SAY_PHASE407, SAY_PHASE502, EventMap::ScheduleEvent(), ZoneScript::SetData(), npc_escortAI::SetEscortPaused(), Unit::SetFacingToObject(), Unit::SetNpcFlag(), Creature::SetReactState(), Creature::SetWalk(), SpawnTimeRift(), SPELL_ARTHAS_CRUSADER_STRIKE, WorldObject::SummonCreature(), summons, TEMPSUMMON_TIMED_DESPAWN, and UNIT_NPC_FLAG_GOSSIP.

◆ WaypointReached() [2/2]

virtual void CreatureAI::WaypointReached ( uint32  ,
uint32   
)
inlinevirtual

Reimplemented from CreatureAI.

193{ }

Member Data Documentation

◆ actionEvents

EventMap npc_arthas::npc_arthasAI::actionEvents

◆ combatEvents

EventMap npc_arthas::npc_arthasAI::combatEvents

Referenced by Reset(), and UpdateAI().

◆ eventInRun

bool npc_arthas::npc_arthasAI::eventInRun

◆ pInstance

InstanceScript* npc_arthas::npc_arthasAI::pInstance

◆ summons

◆ timeRiftId

uint8 npc_arthas::npc_arthasAI::timeRiftId

Referenced by Reset().

◆ waveGroupId

uint8 npc_arthas::npc_arthasAI::waveGroupId

Referenced by DoAction(), and Reset().

◆ waveKillCount

uint8 npc_arthas::npc_arthasAI::waveKillCount

Referenced by Reset().


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