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, uint32 time)
 
void SummonNextWave ()
 
void ReorderInstance (uint32 data)
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged. More...
 
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() More...
 
- 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() More...
 
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 WaypointReached (uint32 pointId)=0
 
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) More...
 
void UpdateAI (uint32 diff) override
 Use to start attacking a target. Called just before JustEngagedWith() More...
 
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. More...
 
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
 
- 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. More...
 
void Talk (uint8 id, Milliseconds delay)
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At ================================= More...
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
virtual void JustEngagedWith (Unit *)
 Called for reaction when initially engaged. More...
 
virtual void JustDied (Unit *)
 
virtual void KilledUnit (Unit *)
 
virtual void JustSummoned (Creature *)
 
virtual void IsSummonedBy (WorldObject *)
 
virtual void SummonedCreatureDespawn (Creature *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void SummonedCreatureDespawnAll ()
 
virtual void SummonedCreatureEvade (Creature *)
 
virtual void SpellHit (Unit *, SpellInfo const *)
 
virtual void SpellHitTarget (Unit *, SpellInfo const *)
 
virtual void AttackedBy (Unit *)
 
virtual bool IsEscorted ()
 
virtual void JustRespawned ()
 
virtual void MovementInform (uint32, uint32)
 
virtual void PathEndReached (uint32)
 
void OnCharmed (bool apply) override
 Called when unit is charmed. More...
 
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 ================== More...
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields ======================================= More...
 
virtual bool BeforeSpellClick (Unit *)
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual bool CanAlwaysBeDetectable (WorldObject const *)
 
virtual void PetStopAttack ()
 
virtual bool CheckInRoom ()
 
CreatureBoundary const * GetBoundary () const
 
void SetBoundary (CreatureBoundary const *boundary, bool negativeBoundaries=false)
 
bool IsInBoundary (Position const *who=nullptr) const
 
virtual void CalculateThreat (Unit *, float &, SpellInfo const *)
 
virtual bool OnTeleportUnreacheablePlayer (Player *)
 
virtual void OnAuraRemove (AuraApplication *, AuraRemoveMode)
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual bool CanAIAttack (Unit const *) const
 
virtual void AttackStart (Unit *)
 
virtual void UpdateAI (uint32)=0
 Use to start attacking a target. Called just before JustEngagedWith() More...
 
virtual void InitializeAI ()
 
virtual void Reset ()
 
virtual void OnCharmed (bool apply)=0
 Called when unit is charmed. More...
 
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: More...
 
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. More...
 
virtual void JustExitedCombat ()
 Called when the unit leaves combat. More...
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType)
 Called at any Damage to any victim (before damage apply) More...
 
virtual void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 Called at any Damage from any attacker (before damage apply) More...
 
virtual void HealReceived (Unit *, uint32 &)
 Called when the creature receives heal. More...
 
virtual void OnPowerUpdate (Powers, int32, int32, uint32)
 Called when the creature power updates. More...
 
virtual void HealDone (Unit *, uint32 &)
 Called when the unit heals. More...
 
virtual void OnCalculateMeleeDamageReceived (uint32 &, Unit *)
 Called during damage calculations. More...
 
virtual void OnCalculateSpellDamageReceived (int32 &, Unit *)
 
virtual void OnCalculatePeriodicTickReceived (uint32 &, Unit *)
 Called during calculation when receiving periodic healing or damage (DoT or HoT) More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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)
 
virtual void MoveInLineOfSight (Unit *)
 
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_arthasAI()

npc_arthas::npc_arthasAI::npc_arthasAI ( Creature creature)
inline
372 : npc_escortAI(creature), summons(me)
373 {
374 pInstance = creature->GetInstanceScript();
375 }
Creature * me
Definition: ScriptedCreature.h:280
Definition: ScriptedEscortAI.h:53
InstanceScript * GetInstanceScript() const
Definition: Object.cpp:1192
InstanceScript * pInstance
Definition: culling_of_stratholme.cpp:377
SummonList summons
Definition: culling_of_stratholme.cpp:378

References WorldObject::GetInstanceScript(), and pInstance.

Member Function Documentation

◆ DoAction()

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

Reimplemented from UnitAI.

415 {
416 if (param == ACTION_START_EVENT)
417 {
418 // Event
419 eventInRun = true;
421 }
422 else if (param == ACTION_START_CITY)
423 {
426 SetRun(false);
427 eventInRun = true;
428
431 }
432 else if (param == ACTION_KILLED_SALRAMM)
433 {
434 waveGroupId = 10;
435 eventInRun = true;
436 SetRun(true);
438 }
439 else if (param == ACTION_START_TOWN_HALL)
440 {
442 SetEscortPaused(false);
443 SetRun(false);
444
446 {
447 cr->AI()->DoAction(ACTION_FORCE_CHANGE_LOCK);
448 }
450 {
451 cr->AI()->DoAction(ACTION_FORCE_CHANGE_LOCK);
452 }
454 {
455 cr->AI()->DoAction(ACTION_FORCE_CHANGE_LOCK);
456 }
457 }
458 else if (param == ACTION_START_SECRET_PASSAGE)
459 {
461 SetEscortPaused(false);
462 SetRun(false);
463 }
464 else if (param == ACTION_START_LAST_CITY)
465 {
467 SetEscortPaused(false);
468 SetRun(true);
469 }
470 else if (param == ACTION_START_MALGANIS)
471 {
474 {
475 summons.Despawn(cr);
476 summons.Summon(cr);
477 cr->SetImmuneToAll(true);
478 cr->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
479 }
481 SetEscortPaused(false);
482 SetRun(true);
483 }
484 else if (param == ACTION_KILLED_MALGANIS)
485 {
487 eventInRun = true;
489 me->SetFacingTo(1.84f);
490
491 if (!me->GetMap()->GetPlayers().IsEmpty())
492 if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource())
493 player->RewardPlayerAndGroupAtEvent(31006, player); // Malganis quest entry required
494 }
495 }
@ UNIT_FLAG_NON_ATTACKABLE
Definition: UnitDefines.h:230
@ ACTION_START_EVENT
Definition: chapter5.cpp:193
@ ACTION_START_CITY
Definition: culling_of_stratholme.h:142
@ ACTION_START_LAST_CITY
Definition: culling_of_stratholme.h:146
@ ACTION_START_TOWN_HALL
Definition: culling_of_stratholme.h:144
@ ACTION_KILLED_SALRAMM
Definition: culling_of_stratholme.h:143
@ ACTION_KILLED_MALGANIS
Definition: culling_of_stratholme.h:149
@ ACTION_START_SECRET_PASSAGE
Definition: culling_of_stratholme.h:145
@ ACTION_START_MALGANIS
Definition: culling_of_stratholme.h:148
@ NPC_MAL_GANIS
Definition: culling_of_stratholme.h:52
@ EVENT_SRC_HALL_CITYMAN1
Definition: culling_of_stratholme.h:114
@ EVENT_SRC_HALL_CITYMAN2
Definition: culling_of_stratholme.h:115
@ EVENT_SRC_TOWN_CITYMAN1
Definition: culling_of_stratholme.h:108
@ EVENT_SRC_HALL_CITYMAN3
Definition: culling_of_stratholme.h:116
@ EVENT_SRC_MALGANIS_FINAL
Definition: culling_of_stratholme.h:120
@ EVENT_SRC_TOWN_CITYMAN2
Definition: culling_of_stratholme.h:109
const Position EventPos[]
Definition: culling_of_stratholme.h:160
@ SAY_PHASE201
Definition: culling_of_stratholme.cpp:43
@ SAY_PHASE501
Definition: culling_of_stratholme.cpp:74
@ SAY_PHASE401
Definition: culling_of_stratholme.cpp:65
@ SAY_PHASE404
Definition: culling_of_stratholme.cpp:68
@ SAY_PHASE301
Definition: culling_of_stratholme.cpp:51
@ ACTION_FORCE_CHANGE_LOCK
Definition: culling_of_stratholme.cpp:175
@ NPC_CITY_MAN
Definition: culling_of_stratholme.cpp:133
@ NPC_CITY_MAN2
Definition: culling_of_stratholme.cpp:134
@ NPC_CITY_MAN4
Definition: culling_of_stratholme.cpp:136
@ NPC_CITY_MAN3
Definition: culling_of_stratholme.cpp:135
@ EVENT_ACTION_PHASE2
Definition: culling_of_stratholme.cpp:185
@ EVENT_ACTION_PHASE5
Definition: culling_of_stratholme.cpp:187
@ EVENT_ACTION_PHASE1
Definition: culling_of_stratholme.cpp:184
Talk
Definition: hyjal.cpp:82
bool IsEmpty() const
Definition: LinkedList.h:97
FROM * GetSource() const
Definition: Reference.h:97
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group=0, uint32 phase=0)
Definition: EventMap.cpp:56
void Despawn(Creature const *summon)
Definition: ScriptedCreature.h:89
void Summon(Creature const *summon)
Definition: ScriptedCreature.h:88
void DespawnAll(uint32 delay=0)
Definition: ScriptedCreature.cpp:71
void EnterEvadeMode(EvadeReason=EVADE_REASON_OTHER) override
Definition: ScriptedEscortAI.cpp:201
void SetRun(bool on=true)
Definition: ScriptedEscortAI.cpp:428
void SetEscortPaused(bool on)
Definition: ScriptedEscortAI.cpp:523
Definition: Creature.h:46
Map * GetMap() const
Definition: Object.h:531
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:2355
Definition: Player.h:1064
void SetFacingTo(float ori)
Definition: Unit.cpp:20483
PlayerList const & GetPlayers() const
Definition: Map.h:486
MapReference * getFirst()
Definition: MapRefMgr.h:31
uint8 waveGroupId
Definition: culling_of_stratholme.cpp:382
EventMap actionEvents
Definition: culling_of_stratholme.cpp:380
bool eventInRun
Definition: culling_of_stratholme.cpp:379

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(), npc_escortAI::SetRun(), SummonList::Summon(), WorldObject::SummonCreature(), summons, UNIT_FLAG_NON_ATTACKABLE, and waveGroupId.

◆ GetEventNpc()

Creature * npc_arthas::npc_arthasAI::GetEventNpc ( uint32  entry)
1201{
1202 for (SummonList::iterator i = summons.begin(); i != summons.end();)
1203 {
1204 Creature* summon = ObjectAccessor::GetCreature(*me, *i);
1205 if (!summon)
1206 summons.erase(i++);
1207 else if (summon->GetEntry() == entry)
1208 return summon;
1209 else
1210 ++i;
1211 }
1212
1213 return nullptr;
1214}
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:213
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
uint32 GetEntry() const
Definition: Object.h:112

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 npc_escortAI.

395 {
397 if (pInstance)
399 }
@ STATE_ESCORT_ESCORTING
Definition: ScriptedEscortAI.h:47
@ DATA_ARTHAS_REPOSITION
Definition: culling_of_stratholme.h:36
void RemoveEscortState(uint32 escortState)
Definition: ScriptedEscortAI.h:111
virtual void SetData(uint32, uint32)
Definition: ZoneScript.h:53

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.

Reimplemented from ScriptedAI.

1238{
1240
1241 // Fight
1244}
@ SPELL_ARTHAS_AURA
Definition: culling_of_stratholme.cpp:142
@ EVENT_COMBAT_HEALTH_CHECK
Definition: culling_of_stratholme.cpp:183
@ EVENT_COMBAT_EXORCISM
Definition: culling_of_stratholme.cpp:182
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:177
EventMap combatEvents
Definition: culling_of_stratholme.cpp:381

References EVENT_COMBAT_EXORCISM, EVENT_COMBAT_HEALTH_CHECK, and SPELL_ARTHAS_AURA.

◆ JustSummoned()

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

Reimplemented from ScriptedAI.

402 {
403 summons.Summon(cr);
404 }

References SummonList::Summon(), and summons.

◆ ReorderInstance()

void npc_arthas::npc_arthasAI::ReorderInstance ( uint32  data)
1247{
1248 Start(true, true);
1249 SetEscortPaused(true);
1250 SetDespawnAtEnd(false);
1251
1252 switch (data)
1253 {
1255 SetNextWaypoint(9, false);
1257 break;
1261 SetNextWaypoint(12, false);
1263
1265 {
1266 eventInRun = true;
1268 }
1269 else if (data == COS_PROGRESS_KILLED_MEATHOOK)
1270 {
1271 waveGroupId = 4;
1273 }
1274 else // if (data == COS_PROGRESS_KILLED_SALRAMM)
1275 {
1276 if (pInstance)
1279 }
1280 break;
1282 SetNextWaypoint(21, false);
1284 break;
1286 SetNextWaypoint(32, false);
1288 break;
1290 SetNextWaypoint(46, false);
1292 break;
1294 SetNextWaypoint(55, false);
1296 break;
1297 }
1298
1299 if (data >= COS_PROGRESS_KILLED_EPOCH)
1300 if (pInstance)
1302 pGate->SetGoState(GO_STATE_READY);
1303
1305}
@ REACT_DEFENSIVE
Definition: Unit.h:549
@ UNIT_NPC_FLAG_GOSSIP
Definition: UnitDefines.h:294
@ GO_STATE_READY
Definition: GameObjectData.h:691
@ NPC_MEATHOOK
Definition: culling_of_stratholme.h:49
@ DATA_SHKAF_GATE
Definition: culling_of_stratholme.h:43
@ COS_PROGRESS_REACHED_TOWN_HALL
Definition: culling_of_stratholme.h:132
@ COS_PROGRESS_KILLED_EPOCH
Definition: culling_of_stratholme.h:133
@ COS_PROGRESS_LAST_CITY
Definition: culling_of_stratholme.h:134
@ COS_PROGRESS_KILLED_MEATHOOK
Definition: culling_of_stratholme.h:130
@ COS_PROGRESS_FINISHED_CITY_INTRO
Definition: culling_of_stratholme.h:129
@ COS_PROGRESS_FINISHED_INTRO
Definition: culling_of_stratholme.h:128
@ COS_PROGRESS_KILLED_SALRAMM
Definition: culling_of_stratholme.h:131
@ COS_PROGRESS_BEFORE_MALGANIS
Definition: culling_of_stratholme.h:135
@ WORLDSTATE_WAVE_COUNT
Definition: culling_of_stratholme.h:80
@ DATA_SHOW_INFINITE_TIMER
Definition: culling_of_stratholme.h:35
void RescheduleEvent(uint32 eventId, uint32 time, uint32 groupId=0, uint32 phase=0)
Definition: EventMap.cpp:81
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)
Definition: ScriptedEscortAI.cpp:449
void SetDespawnAtEnd(bool despawn)
Definition: ScriptedEscortAI.h:104
bool SetNextWaypoint(uint32 pointId, float x, float y, float z, float orientation)
Definition: ScriptedEscortAI.cpp:534
void SetReactState(ReactStates state)
A creature can have 3 ReactStates : Agressive, Passive, Neutral.
Definition: Creature.h:97
Definition: GameObject.h:121
void SetNpcFlag(NPCFlags flags)
Definition: Unit.h:695
ObjectGuid GetGuidData(uint32 type) const override
Definition: InstanceScript.cpp:95
Map * instance
Definition: InstanceScript.h:148
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition: InstanceScript.cpp:577
GameObject * GetGameObject(ObjectGuid const guid)
Definition: Map.cpp:3319
void DoAction(int32 param) override
Definition: culling_of_stratholme.cpp:414
void SendNextWave(uint32 entry)
Definition: culling_of_stratholme.cpp:1307

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_READY, NPC_MEATHOOK, REACT_DEFENSIVE, UNIT_NPC_FLAG_GOSSIP, and WORLDSTATE_WAVE_COUNT.

Referenced by Reset().

◆ Reset()

void npc_arthas::npc_arthasAI::Reset ( )
inlineoverridevirtual

Reimplemented from ScriptedAI.

498 {
502 eventInRun = false;
503 waveGroupId = 0;
504 waveKillCount = 0;
505 timeRiftId = 0;
506
508
509 if (pInstance)
510 {
513 if (data >= COS_PROGRESS_FINISHED_INTRO)
514 ReorderInstance(data);
515 }
516 }
std::uint32_t uint32
Definition: Define.h:107
@ DATA_ARTHAS_EVENT
Definition: culling_of_stratholme.h:28
void Reset()
Definition: EventMap.cpp:21
void RemoveNpcFlag(NPCFlags flags)
Definition: Unit.h:696
virtual uint32 GetData(uint32) const
Definition: ZoneScript.h:52
uint8 waveKillCount
Definition: culling_of_stratholme.cpp:383
uint8 timeRiftId
Definition: culling_of_stratholme.cpp:384
void ReorderInstance(uint32 data)
Definition: culling_of_stratholme.cpp:1246

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,
uint32  time 
)
1217{
1218 actionEvents.ScheduleEvent(currentEvent + 1, time);
1219}

Referenced by UpdateAI().

◆ SendNextWave()

void npc_arthas::npc_arthasAI::SendNextWave ( uint32  entry)
1308{
1309 if (!pInstance)
1310 return;
1311
1312 if (entry == NPC_MEATHOOK)
1313 {
1314 waveKillCount = 4;
1316 }
1317 else if (entry == NPC_SALRAMM)
1318 {
1320 return;
1321 }
1322
1323 // Group is killed
1324 if (++waveKillCount >= 4)
1325 {
1326 waveGroupId++;
1327 if (waveGroupId == 4) // Meathook
1329 else if (waveGroupId == 9) // Salramm
1331 else
1333
1335 }
1336}
@ NPC_SALRAMM
Definition: culling_of_stratholme.h:50
@ EVENT_SRC_SALRAMM
Definition: culling_of_stratholme.h:113
@ EVENT_SRC_MEATHOOK
Definition: culling_of_stratholme.h:112
void SummonNextWave()
Definition: culling_of_stratholme.cpp:1221

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

Referenced by SummonedCreatureDies().

◆ SpawnTimeRift()

void npc_arthas::npc_arthasAI::SpawnTimeRift ( )
1339{
1340 if (timeRiftId >= 5)
1341 return;
1342
1344 {
1345 // Spawn everyone at time rift pos
1347 {
1348 if (cr->GetEntry() == NPC_TIME_RIFT)
1349 cr->DespawnOrUnsummon(10000);
1350 else // x, y, z (0 is entry)
1351 {
1352 // first infinite
1353 if (i == 1)
1354 AttackStart(cr);
1355
1356 cr->SetInCombatWithZone();
1357 cr->AddThreat(me, 0.0f);
1358 cr->SetReactState(REACT_AGGRESSIVE);
1360 }
1361 }
1362 }
1363
1364 timeRiftId++;
1365}
std::uint8_t uint8
Definition: Define.h:109
@ REACT_AGGRESSIVE
Definition: Unit.h:550
@ NPC_TIME_RIFT
Definition: culling_of_stratholme.h:59
@ 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:244
void AttackStart(Unit *who) override
Definition: ScriptedEscortAI.cpp:52

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 ScriptedAI.

406{ summons.Despawn(cr); }

References SummonList::Despawn(), and summons.

◆ SummonedCreatureDies()

◆ SummonNextWave()

void npc_arthas::npc_arthasAI::SummonNextWave ( )
1222{
1223 Map::PlayerList const& PlayerList = me->GetMap()->GetPlayers();
1224 if (!PlayerList.IsEmpty())
1225 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
1226 i->GetSource()->PlayerTalkClass->SendPointOfInterest(1000 + waveGroupId);
1227
1228 waveKillCount = 0; // this is forced condition!
1229 uint32 tableId = waveGroupId;
1230 if (tableId > 4)
1231 tableId--;
1232
1233 for (uint32 i = 0; i < ENCOUNTER_WAVES_MAX_SPAWNS; ++i)
1234 me->SummonCreature(/*entry*/(uint32)WavesLocations[tableId][i][0], WavesLocations[tableId][i][1], WavesLocations[tableId][i][2], WavesLocations[tableId][i][3], WavesLocations[tableId][i][4]);
1235}
@ 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:191
Definition: LinkedList.h:139
Definition: MapRefMgr.h:26
iterator begin()
Definition: MapRefMgr.h:36
iterator end()
Definition: MapRefMgr.h:37

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()

Reimplemented from npc_escortAI.

667 {
669
670 if (eventInRun)
671 {
672 actionEvents.Update(diff);
673 switch (uint32 currentEvent = actionEvents.ExecuteEvent())
674 {
676 SetRun(false);
679 {
681 uther->SetTarget(me->GetGUID());
682 me->SetTarget(uther->GetGUID());
683 }
684 for (int i = 0; i < 3; ++i)
686 horse->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_HORSE1 + i], false);
687
688 ScheduleNextEvent(currentEvent, 4000);
689 break;
690 case EVENT_ACTION_PHASE1+1:
691 // Start Event
692 Start(true, false);
693 SetDespawnAtEnd(false);
694
695 ScheduleNextEvent(currentEvent, 9000);
696 break;
697 // After waypoint 0
698 case EVENT_ACTION_PHASE1+2:
700 ScheduleNextEvent(currentEvent, 2000);
701 break;
702 case EVENT_ACTION_PHASE1+3:
703 if (Creature* uther = GetEventNpc(NPC_UTHER))
704 uther->AI()->Talk(SAY_PHASE102);
705
706 ScheduleNextEvent(currentEvent, 8000);
707 break;
708 case EVENT_ACTION_PHASE1+4:
709 SetEscortPaused(false);
710 eventInRun = false;
712 ScheduleNextEvent(currentEvent, 2000);
713 break;
714 // After waypoint 1
715 case EVENT_ACTION_PHASE1+5:
716 if (Creature* jaina = GetEventNpc(NPC_JAINA))
717 jaina->SetTarget(me->GetGUID());
718
720 ScheduleNextEvent(currentEvent, 10000);
721 break;
722 case EVENT_ACTION_PHASE1+6:
723 if (Creature* uther = GetEventNpc(NPC_UTHER))
724 uther->AI()->Talk(SAY_PHASE105);
725
726 ScheduleNextEvent(currentEvent, 1000);
727 break;
728 case EVENT_ACTION_PHASE1+7:
730 ScheduleNextEvent(currentEvent, 4000);
731 break;
732 case EVENT_ACTION_PHASE1+8:
733 if (Creature* uther = GetEventNpc(NPC_UTHER))
734 uther->AI()->Talk(SAY_PHASE107);
735
736 ScheduleNextEvent(currentEvent, 6000);
737 break;
738 case EVENT_ACTION_PHASE1+9:
740 ScheduleNextEvent(currentEvent, 4000);
741 break;
742 case EVENT_ACTION_PHASE1+10:
743 if (Creature* uther = GetEventNpc(NPC_UTHER))
744 uther->AI()->Talk(SAY_PHASE109);
745
746 ScheduleNextEvent(currentEvent, 8000);
747 break;
748 case EVENT_ACTION_PHASE1+11:
750 ScheduleNextEvent(currentEvent, 4000);
751 break;
752 case EVENT_ACTION_PHASE1+12:
753 if (Creature* uther = GetEventNpc(NPC_UTHER))
754 uther->AI()->Talk(SAY_PHASE111);
755
756 ScheduleNextEvent(currentEvent, 4000);
757 break;
758 case EVENT_ACTION_PHASE1+13:
760 ScheduleNextEvent(currentEvent, 11000);
761 break;
762 case EVENT_ACTION_PHASE1+14:
763 if (Creature* jaina = GetEventNpc(NPC_JAINA))
764 jaina->AI()->Talk(SAY_PHASE113);
765
766 ScheduleNextEvent(currentEvent, 2500);
767 break;
768 case EVENT_ACTION_PHASE1+15:
770 ScheduleNextEvent(currentEvent, 9000);
771 break;
772 case EVENT_ACTION_PHASE1+16:
773 if (Creature* uther = GetEventNpc(NPC_UTHER))
774 uther->AI()->Talk(SAY_PHASE115);
775
776 ScheduleNextEvent(currentEvent, 4000);
777 break;
778 case EVENT_ACTION_PHASE1+17:
779 for (SummonList::const_iterator i = summons.begin(); i != summons.end(); ++i)
780 {
782 if (summon && summon->GetEntry() == NPC_HORSE_ESCORT)
784 }
785
786 ScheduleNextEvent(currentEvent, 1000);
787 break;
788 case EVENT_ACTION_PHASE1+18:
789 if (Creature* uther = GetEventNpc(NPC_UTHER))
790 {
791 uther->SetTarget();
792 uther->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
793 uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false);
794 }
795 ScheduleNextEvent(currentEvent, 1000);
796 break;
797 case EVENT_ACTION_PHASE1+19:
798 if (Creature* jaina = GetEventNpc(NPC_JAINA))
799 {
800 jaina->SetTarget();
801 jaina->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
802 jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false);
803 }
805 ScheduleNextEvent(currentEvent, 2000);
806 break;
807 case EVENT_ACTION_PHASE1+20:
808 if (Creature* jaina = GetEventNpc(NPC_JAINA))
809 {
810 jaina->GetMotionMaster()->MoveIdle();
811 jaina->AI()->Talk(SAY_PHASE117);
812 }
813
814 ScheduleNextEvent(currentEvent, 2000);
815 break;
816 case EVENT_ACTION_PHASE1+21:
817 if (Creature* jaina = GetEventNpc(NPC_JAINA))
818 {
819 jaina->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
820 jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false);
821 }
823 ScheduleNextEvent(currentEvent, 4000);
824 break;
825 case EVENT_ACTION_PHASE1+22:
826 SetEscortPaused(false);
827 eventInRun = false;
828 me->SetTarget();
829 // dont schedule next, do it in gossip select!
830 break;
831 //After Gossip 1 (waypoint 8)
833 summons.DespawnEntry(NPC_INVIS_TARGET); // remove trigger
834 me->SetTarget();
835 SetEscortPaused(false);
836 eventInRun = false;
837 ScheduleNextEvent(currentEvent, 1000);
838 break;
839 // After waypoint 9
840 case EVENT_ACTION_PHASE2+1:
841 if (Creature* cityman = GetEventNpc(NPC_CITY_MAN))
842 {
843 cityman->AI()->Talk(SAY_PHASE202);
844 cityman->SetTarget(me->GetGUID());
845 cityman->AddUnitMovementFlag(MOVEMENTFLAG_WALKING);
846 cityman->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_CITYMAN]);
847 }
848
849 ScheduleNextEvent(currentEvent, 9000);
850 break;
851 case EVENT_ACTION_PHASE2+2:
853 SetEscortPaused(false);
854 eventInRun = false;
855 ScheduleNextEvent(currentEvent, 1500);
856 break;
857 // After waypoint 11
858 case EVENT_ACTION_PHASE2+3:
859 if (Creature* stalker = me->SummonCreature(NPC_INVIS_TARGET, 2081.447f, 1287.770f, 141.3241f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 10000))
860 {
861 me->SetFacingToObject(stalker);
862 stalker->DespawnOrUnsummon(500);
863 }
865 ScheduleNextEvent(currentEvent, 4000);
866 break;
867 case EVENT_ACTION_PHASE2+4:
869 {
870 malganis->CastSpell(malganis, SPELL_MALGANIS_APPEAR, true);
871 malganis->AI()->Talk(SAY_PHASE206);
872 malganis->SetTarget(me->GetGUID());
873 me->SetTarget(malganis->GetGUID());
874 malganis->SetReactState(REACT_PASSIVE);
875
876 std::list<Creature*> unitList;
877 malganis->GetCreaturesWithEntryInRange(unitList, 20.0f, NPC_CITY_MAN);
878 malganis->GetCreaturesWithEntryInRange(unitList, 20.0f, NPC_CITY_MAN2);
879
880 for (std::list<Creature*>::const_iterator itr = unitList.begin(); itr != unitList.end(); ++itr)
881 if ((*itr)->ToCreature())
882 {
883 (*itr)->ToCreature()->AI()->DoAction(ACTION_INFECT_CITIZIEN);
884 (*itr)->GetMotionMaster()->MoveFleeing(malganis, 2000);
885 }
886
887 unitList.clear();
888 }
889
890 ScheduleNextEvent(currentEvent, 12000);
891 break;
892 case EVENT_ACTION_PHASE2+5:
893 if (Creature* malganis = GetEventNpc(NPC_MAL_GANIS))
894 malganis->AI()->Talk(SAY_PHASE207);
895
896 ScheduleNextEvent(currentEvent, 15000);
897 break;
898 case EVENT_ACTION_PHASE2+6:
899 if (Creature* malganis = GetEventNpc(NPC_MAL_GANIS))
900 {
901 me->SetTarget();
902 me->SetFacingToObject(malganis);
903 malganis->SetVisible(false);
904 }
905
907 ScheduleNextEvent(currentEvent, 11000);
908 break;
909 case EVENT_ACTION_PHASE2+7:
915 ScheduleNextEvent(currentEvent, 20000);
916 if (pInstance)
918 break;
919 case EVENT_ACTION_PHASE2+8:
920 if (pInstance)
922
924 break;
925 case EVENT_ACTION_PHASE2+9:
926 if (pInstance)
928
930 eventInRun = false;
931 SetEscortPaused(false);
932 break;
933 // After waypoint 22
937 cr->SetTarget(me->GetGUID());
939 cr->SetTarget(me->GetGUID());
941 cr->SetTarget(me->GetGUID());
942 ScheduleNextEvent(currentEvent, 1000);
943 break;
944 case EVENT_ACTION_PHASE3+1:
947 cr->AI()->Talk(SAY_PHASE302);
948
949 ScheduleNextEvent(currentEvent, 7000);
950 break;
951 case EVENT_ACTION_PHASE3+2:
953 SetEscortPaused(false);
954 eventInRun = false;
955 ScheduleNextEvent(currentEvent, 0);
956 break;
957 //After waypoint 23
958 case EVENT_ACTION_PHASE3+3:
959 SetRun(true);
962 ScheduleNextEvent(currentEvent, 2000);
963 break;
964 case EVENT_ACTION_PHASE3+4:
966 ScheduleNextEvent(currentEvent, 2000);
967 break;
968 case EVENT_ACTION_PHASE3+5:
970 cr->AI()->Talk(SAY_PHASE305);
971 ScheduleNextEvent(currentEvent, 1000);
972 break;
973 case EVENT_ACTION_PHASE3+6:
975 {
976 cr->UpdateEntry(NPC_INFINITE_HUNTER, nullptr, false);
977 cr->SetImmuneToAll(true);
978 cr->SetReactState(REACT_PASSIVE);
979 }
980 ScheduleNextEvent(currentEvent, 2000);
981 break;
982 case EVENT_ACTION_PHASE3+7:
984 {
985 cr->UpdateEntry(NPC_INFINITE_AGENT, nullptr, false);
986 cr->SetImmuneToAll(true);
987 cr->SetReactState(REACT_PASSIVE);
988 }
989 ScheduleNextEvent(currentEvent, 2000);
990 break;
991 case EVENT_ACTION_PHASE3+8:
993 {
994 cr->UpdateEntry(NPC_INFINITE_ADVERSARY, nullptr, false);
995 cr->SetReactState(REACT_AGGRESSIVE);
996 cr->SetInCombatWithZone();
997 cr->AddThreat(me, 0.0f);
998 }
999 if (Creature* cr = GetEventNpc(NPC_INFINITE_AGENT)) // it is infinite agent now :)
1000 {
1001 cr->SetImmuneToAll(false);
1002 cr->SetReactState(REACT_AGGRESSIVE);
1003 cr->SetInCombatWithZone();
1004 cr->AddThreat(me, 0.0f);
1005 }
1006 if (Creature* cr = GetEventNpc(NPC_INFINITE_HUNTER)) // it is infinite hunter now :)
1007 {
1008 cr->SetImmuneToAll(false);
1009 cr->SetReactState(REACT_AGGRESSIVE);
1010 cr->SetInCombatWithZone();
1011 cr->AddThreat(me, 0.0f);
1012 }
1013 ScheduleNextEvent(currentEvent, 2000);
1014 break;
1015 case EVENT_ACTION_PHASE3+9:
1016 // Arthas is fighting infinites in town hall
1017 if (me->IsInCombat())
1018 {
1020 return;
1021 }
1022
1025 me->SetFacingTo(0.0f);
1026 ScheduleNextEvent(currentEvent, 5000);
1027 break;
1028 case EVENT_ACTION_PHASE3+10:
1030 ScheduleNextEvent(currentEvent, 5000);
1031 break;
1032 case EVENT_ACTION_PHASE3+11:
1033 SetEscortPaused(false);
1034 eventInRun = false;
1035 ScheduleNextEvent(currentEvent, 1000);
1036 break;
1037 case EVENT_ACTION_PHASE3+12:
1038 // Arthas is fighting first chronos
1039 if (me->IsInCombat())
1040 {
1042 return;
1043 }
1044
1045 eventInRun = false;
1046 SetEscortPaused(false);
1048 me->SetFacingTo(M_PI);
1049 ScheduleNextEvent(currentEvent, 0);
1050 break;
1051 case EVENT_ACTION_PHASE3+13:
1052 // Arthas is fighting second chronos
1053 if (me->IsInCombat())
1054 {
1056 return;
1057 }
1058
1059 eventInRun = false;
1060 SetEscortPaused(false);
1062 me->SetFacingTo(M_PI * 3 / 2);
1063 ScheduleNextEvent(currentEvent, 0);
1064 break;
1065 case EVENT_ACTION_PHASE3+14:
1066 // Arthas is fighting third chronos
1067 if (me->IsInCombat())
1068 {
1070 return;
1071 }
1072
1073 me->SetFacingTo(M_PI / 2);
1074 ScheduleNextEvent(currentEvent, 8000);
1075 break;
1076 case EVENT_ACTION_PHASE3+15:
1080 {
1081 cr->SetImmuneToAll(true);
1082 cr->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
1083 me->SetTarget(cr->GetGUID());
1084 cr->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_EPOCH]);
1085 }
1086
1087 ScheduleNextEvent(currentEvent, 3000);
1088 break;
1089 case EVENT_ACTION_PHASE3+16:
1090 if (Creature* cr = GetEventNpc(NPC_EPOCH))
1091 cr->AI()->Talk(SAY_PHASE314);
1092
1093 ScheduleNextEvent(currentEvent, 14000);
1094 break;
1095 case EVENT_ACTION_PHASE3+17:
1097 ScheduleNextEvent(currentEvent, 7000);
1098 break;
1099 case EVENT_ACTION_PHASE3+18:
1100 if (Creature* cr = GetEventNpc(NPC_EPOCH))
1101 {
1102 cr->SetImmuneToAll(false);
1103 cr->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
1104 cr->SetReactState(REACT_AGGRESSIVE);
1105 cr->AddThreat(me, 0.0f);
1106 cr->SetInCombatWithZone();
1107 }
1108 ScheduleNextEvent(currentEvent, 1000);
1109 break;
1110 case EVENT_ACTION_PHASE3+19:
1111 // Arthas is fighting epoch chronos
1112 if (me->IsInCombat())
1113 {
1115 return;
1116 }
1117
1118 if (pInstance)
1120
1122 eventInRun = false;
1123 break;
1126 {
1127 cr->SetImmuneToAll(false);
1128 cr->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
1129 cr->SetInCombatWithZone();
1130 cr->AddThreat(me, 0.0f);
1131 AttackStart(cr);
1132 }
1133 eventInRun = false;
1134 SetEscortPaused(true);
1135 break;
1136 case EVENT_ACTION_PHASE5+1:
1138 SetEscortPaused(false);
1139 eventInRun = false;
1140 ScheduleNextEvent(currentEvent, 5000);
1141 break;
1142 case EVENT_ACTION_PHASE5+2:
1143 me->SetFacingTo(5.28f);
1145 if (pInstance)
1146 {
1149 go->SetGoState(GO_STATE_ACTIVE);
1150
1151 if (!me->GetMap()->GetPlayers().IsEmpty())
1152 {
1153 if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource())
1154 {
1155 if (GameObject* chest = player->SummonGameObject(DUNGEON_MODE(GO_MALGANIS_CHEST_N, GO_MALGANIS_CHEST_H), 2288.35f, 1498.73f, 128.414f, -0.994837f, 0, 0, 0, 0, 0))
1156 {
1157 chest->SetLootRecipient(me->GetMap());
1158 }
1159 }
1160 }
1161 }
1162 ScheduleNextEvent(currentEvent, 10000);
1163 break;
1164 case EVENT_ACTION_PHASE5+3:
1165 eventInRun = false;
1166 me->SetVisible(false);
1167 break;
1168 }
1169 }
1170
1171 //Battling skills
1172 if (!me->GetVictim())
1173 return;
1174
1175 combatEvents.Update(diff);
1177 return;
1178
1179 switch (combatEvents.ExecuteEvent())
1180 {
1182 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
1184
1186 break;
1188 if (HealthBelowPct(40))
1190
1192 break;
1193 }
1194
1196 }
@ REACT_PASSIVE
Definition: Unit.h:548
@ MOVEMENTFLAG_WALKING
Definition: UnitDefines.h:352
@ UNIT_STATE_CASTING
Definition: UnitDefines.h:164
@ TEMPSUMMON_DEAD_DESPAWN
Definition: Object.h:51
@ TEMPSUMMON_TIMED_DESPAWN
Definition: Object.h:47
@ GO_STATE_ACTIVE
Definition: GameObjectData.h:690
@ NPC_JAINA
Definition: zone_undercity.cpp:418
@ GO_MALGANIS_CHEST_N
Definition: culling_of_stratholme.h:70
@ GO_MALGANIS_CHEST_H
Definition: culling_of_stratholme.h:71
@ NPC_EPOCH
Definition: culling_of_stratholme.h:51
@ NPC_UTHER
Definition: culling_of_stratholme.h:56
@ DATA_EXIT_GATE
Definition: culling_of_stratholme.h:44
@ COS_PROGRESS_FINISHED
Definition: culling_of_stratholme.h:136
@ EVENT_POS_RETREAT
Definition: culling_of_stratholme.h:107
@ EVENT_SRC_UTHER
Definition: culling_of_stratholme.h:98
@ EVENT_DST_HORSE1
Definition: culling_of_stratholme.h:104
@ EVENT_DST_CITYMAN
Definition: culling_of_stratholme.h:110
@ EVENT_SRC_EPOCH
Definition: culling_of_stratholme.h:117
@ EVENT_DST_UTHER
Definition: culling_of_stratholme.h:103
@ EVENT_SRC_MALGANIS
Definition: culling_of_stratholme.h:111
@ EVENT_DST_EPOCH
Definition: culling_of_stratholme.h:118
@ EVENT_SRC_HORSE1
Definition: culling_of_stratholme.h:100
@ EVENT_SRC_JAINA
Definition: culling_of_stratholme.h:99
@ DATA_START_WAVES
Definition: culling_of_stratholme.h:34
@ SAY_PHASE210
Definition: culling_of_stratholme.cpp:48
@ SAY_PHASE203
Definition: culling_of_stratholme.cpp:44
@ SAY_PHASE302
Definition: culling_of_stratholme.cpp:106
@ SAY_PHASE105
Definition: culling_of_stratholme.cpp:88
@ SAY_PHASE116
Definition: culling_of_stratholme.cpp:39
@ SAY_PHASE202
Definition: culling_of_stratholme.cpp:99
@ SAY_PHASE109
Definition: culling_of_stratholme.cpp:90
@ SAY_PHASE305_1
Definition: culling_of_stratholme.cpp:108
@ SAY_PHASE103
Definition: culling_of_stratholme.cpp:32
@ SAY_PHASE205
Definition: culling_of_stratholme.cpp:45
@ SAY_PHASE111
Definition: culling_of_stratholme.cpp:91
@ SAY_PHASE308
Definition: culling_of_stratholme.cpp:56
@ SAY_PHASE306
Definition: culling_of_stratholme.cpp:54
@ SAY_PHASE315
Definition: culling_of_stratholme.cpp:62
@ SAY_PHASE114
Definition: culling_of_stratholme.cpp:38
@ SAY_PHASE303
Definition: culling_of_stratholme.cpp:52
@ SAY_PHASE311
Definition: culling_of_stratholme.cpp:59
@ SAY_PHASE207
Definition: culling_of_stratholme.cpp:81
@ SAY_PHASE113
Definition: culling_of_stratholme.cpp:95
@ SAY_PHASE209
Definition: culling_of_stratholme.cpp:47
@ SAY_PHASE503
Definition: culling_of_stratholme.cpp:76
@ SAY_PHASE206
Definition: culling_of_stratholme.cpp:80
@ SAY_PHASE112
Definition: culling_of_stratholme.cpp:37
@ SAY_PHASE108
Definition: culling_of_stratholme.cpp:35
@ SAY_PHASE104
Definition: culling_of_stratholme.cpp:33
@ SAY_PHASE117
Definition: culling_of_stratholme.cpp:96
@ SAY_PHASE107
Definition: culling_of_stratholme.cpp:89
@ SAY_PHASE504
Definition: culling_of_stratholme.cpp:77
@ SAY_PHASE101
Definition: culling_of_stratholme.cpp:31
@ SAY_PHASE314
Definition: culling_of_stratholme.cpp:84
@ SAY_PHASE208
Definition: culling_of_stratholme.cpp:46
@ SAY_PHASE102
Definition: culling_of_stratholme.cpp:87
@ SAY_PHASE304
Definition: culling_of_stratholme.cpp:53
@ SAY_PHASE313
Definition: culling_of_stratholme.cpp:61
@ SAY_PHASE110
Definition: culling_of_stratholme.cpp:36
@ SAY_PHASE305
Definition: culling_of_stratholme.cpp:107
@ SAY_PHASE115
Definition: culling_of_stratholme.cpp:92
@ SAY_PHASE106
Definition: culling_of_stratholme.cpp:34
@ ACTION_INFECT_CITIZIEN
Definition: culling_of_stratholme.cpp:174
@ SPELL_MALGANIS_APPEAR
Definition: culling_of_stratholme.cpp:148
@ SPELL_ARTHAS_EXORCISM_N
Definition: culling_of_stratholme.cpp:143
@ SPELL_ARTHAS_CRUSADER_STRIKE
Definition: culling_of_stratholme.cpp:150
@ SPELL_ARTHAS_HOLY_LIGHT
Definition: culling_of_stratholme.cpp:145
@ SPELL_ARTHAS_EXORCISM_H
Definition: culling_of_stratholme.cpp:144
@ NPC_INVIS_TARGET
Definition: culling_of_stratholme.cpp:129
@ NPC_INFINITE_ADVERSARY
Definition: culling_of_stratholme.cpp:124
@ NPC_HORSE_ESCORT
Definition: culling_of_stratholme.cpp:131
@ NPC_INFINITE_AGENT
Definition: culling_of_stratholme.cpp:126
@ NPC_INFINITE_HUNTER
Definition: culling_of_stratholme.cpp:125
@ EVENT_ACTION_PHASE3
Definition: culling_of_stratholme.cpp:186
uint32 ExecuteEvent()
Definition: EventMap.cpp:114
void Update(uint32 time)
Definition: EventMap.h:54
void RepeatEvent(uint32 time)
Definition: EventMap.cpp:99
void DoMeleeAttackIfReady()
Definition: UnitAI.cpp:39
Unit * SelectTarget(SelectTargetMethod targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition: UnitAI.cpp:110
StorageType::const_iterator const_iterator
Definition: ScriptedCreature.h:37
void DespawnEntry(uint32 entry)
Definition: ScriptedCreature.cpp:54
const T & DUNGEON_MODE(const T &normal5, const T &heroic10) const
Definition: ScriptedCreature.h:388
bool HealthBelowPct(uint32 pct) const
Definition: ScriptedCreature.h:364
void UpdateAI(uint32 diff) override
Use to start attacking a target. Called just before JustEngagedWith()
Definition: ScriptedEscortAI.cpp:240
void SetTarget(ObjectGuid guid=ObjectGuid::Empty) override
Definition: Creature.cpp:3532
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:109
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:2369
Definition: Unit.h:630
void SetVisible(bool x)
Definition: Unit.cpp:14189
MotionMaster * GetMotionMaster()
Definition: Unit.h:1601
void SetFacingToObject(WorldObject *object)
Definition: Unit.cpp:20493
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:1168
Unit * GetVictim() const
Definition: Unit.h:789
bool HasUnitState(const uint32 f) const
Definition: Unit.h:673
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition: Unit.h:810
bool IsInCombat() const
Definition: Unit.h:820
void MovePoint(uint32 id, const Position &pos, bool generatePath=true, bool forceDestination=true)
Definition: MotionMaster.h:211
void ScheduleNextEvent(uint32 currentEvent, uint32 time)
Definition: culling_of_stratholme.cpp:1216
Creature * GetEventNpc(uint32 entry)
Definition: culling_of_stratholme.cpp:1200

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(), ScriptedAI::DUNGEON_MODE(), 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(), ObjectAccessor::GetCreature(), Object::GetEntry(), GetEventNpc(), MapRefMgr::getFirst(), Map::GetGameObject(), Object::GetGUID(), InstanceScript::GetGuidData(), WorldObject::GetMap(), Unit::GetMotionMaster(), Map::GetPlayers(), Reference< TO, FROM >::GetSource(), Unit::GetVictim(), GO_MALGANIS_CHEST_H, GO_MALGANIS_CHEST_N, GO_STATE_ACTIVE, Unit::HasUnitState(), ScriptedAI::HealthBelowPct(), InstanceScript::instance, LinkedListHead::IsEmpty(), 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, REACT_AGGRESSIVE, REACT_DEFENSIVE, REACT_PASSIVE, EventMap::RepeatEvent(), 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::SetEscortPaused(), Unit::SetFacingTo(), Unit::SetFacingToObject(), Unit::SetImmuneToAll(), Unit::SetNpcFlag(), Creature::SetReactState(), npc_escortAI::SetRun(), Creature::SetTarget(), Unit::SetVisible(), SPELL_ARTHAS_CRUSADER_STRIKE, SPELL_ARTHAS_EXORCISM_H, SPELL_ARTHAS_EXORCISM_N, SPELL_ARTHAS_HOLY_LIGHT, SPELL_MALGANIS_APPEAR, npc_escortAI::Start(), WorldObject::SummonCreature(), WorldObject::SummonGameObject(), 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 WORLDSTATE_WAVE_COUNT.

◆ WaypointReached()

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

Implements npc_escortAI.

519 {
520 switch (uiPointId)
521 {
522 // Starting waypoint, After reaching uther and jaina
523 case 0:
524 // On the mountain with uther and jaina
525 case 1:
526 // Reaching city man in city
527 case 9:
528 // Reaching city man in town hall
529 case 23:
530 SetEscortPaused(true);
531 eventInRun = true;
532 break;
533 // After intro, in front of bridge
534 case 3:
535 SetRun(true);
537 summons.DespawnAll(); // uther, jaina and horses
538 break;
539 // Reached City
540 case 8:
542 SetEscortPaused(true);
543 if (pInstance)
545
546 if (Creature* stalker = me->SummonCreature(NPC_INVIS_TARGET, 2026.469f, 1287.088f, 143.596f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 14000))
547 {
548 me->SetFacingToObject(stalker);
549 stalker->DespawnOrUnsummon(500);
550 }
551 break;
552 // Reached first cityman
553 case 10:
554 if (Creature* cityman = GetEventNpc(NPC_CITY_MAN))
555 {
556 cityman->AI()->Talk(SAY_PHASE204);
558 }
559 break;
560 // Reached second cityman
561 case 11:
562 if (Creature* cityman = GetEventNpc(NPC_CITY_MAN2))
563 {
564 cityman->AI()->Talk(SAY_PHASE204_1);
566 }
568 SetEscortPaused(true);
569 eventInRun = true;
570 break;
571 // Reached Town Hall
572 case 20:
573 if (pInstance)
576 SetRun(false);
577 SetEscortPaused(true);
578 break;
579 // Inside Town Hall first scene pos
580 case 22:
582 eventInRun = true;
583 SetEscortPaused(true);
584 break;
585 // Town Hall, upper floor first fight
586 case 26:
587 SetEscortPaused(true);
588 eventInRun = true;
591 break;
592 // Town Hall, upper floor second fight
593 case 29:
597 SetEscortPaused(true);
598 eventInRun = true;
599 break;
600 // Town Hall, upper floor third fight
601 case 31:
602 SetRun(false);
606 SetEscortPaused(true);
607 eventInRun = true;
608 break;
609 // Book Shelf
610 case 34:
612 break;
613 case 35:
615 break;
616 // Reached book shelf
617 case 36:
618 SetRun(true);
619 if (pInstance)
621 pGate->SetGoState(GO_STATE_ACTIVE);
622 break;
623 // Behind secred passage
624 case 45:
625 SetRun(true);
627 SetEscortPaused(true);
628 if (pInstance)
630 break;
631 // Some walk talk
632 case 47:
633 SetRun(false);
635 break;
636 case 48:
637 SetRun(true);
639 break;
640 case 53:
642 break;
643 // Before Malganis event
644 case 54:
645 if (pInstance)
647
649 SetEscortPaused(true);
650 break;
651 // Infront of malganis
652 case 55:
655 SetEscortPaused(true);
656 eventInRun = true;
657 break;
658 // After malganis defeat
659 case 56:
660 SetEscortPaused(true);
661 eventInRun = true;
662 break;
663 }
664 }
@ SAY_PHASE307
Definition: culling_of_stratholme.cpp:55
@ SAY_PHASE405
Definition: culling_of_stratholme.cpp:69
@ SAY_PHASE312
Definition: culling_of_stratholme.cpp:60
@ SAY_PHASE406
Definition: culling_of_stratholme.cpp:70
@ SAY_PHASE407
Definition: culling_of_stratholme.cpp:71
@ SAY_PHASE502
Definition: culling_of_stratholme.cpp:75
@ SAY_PHASE309
Definition: culling_of_stratholme.cpp:57
@ SAY_PHASE204_1
Definition: culling_of_stratholme.cpp:100
@ SAY_PHASE402
Definition: culling_of_stratholme.cpp:66
@ SAY_PHASE118
Definition: culling_of_stratholme.cpp:40
@ SAY_PHASE204
Definition: culling_of_stratholme.cpp:103
@ SAY_PHASE403
Definition: culling_of_stratholme.cpp:67
void SpawnTimeRift()
Definition: culling_of_stratholme.cpp:1338

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(), npc_escortAI::SetRun(), SpawnTimeRift(), SPELL_ARTHAS_CRUSADER_STRIKE, WorldObject::SummonCreature(), summons, TEMPSUMMON_TIMED_DESPAWN, and UNIT_NPC_FLAG_GOSSIP.

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().