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

Public Member Functions

 npc_varian_wrynnAI (Creature *creature)
 
void EnterEvadeMode (EvadeReason) override
 
void Reset () override
 
void JustSummoned (Creature *summonedCreature) override
 
void SummonedCreatureDies (Creature *summon, Unit *) override
 
void UpdateWorldState (Map *map, uint32 id, uint32 state)
 
void SetHoldState (bool bOnHold)
 
void JumpToNextStep (uint32 uiTimer)
 
void SpawnWave (uint32 waveId)
 
void WaypointReached (uint32 waypointId) override
 
void UpdateAI (uint32 diff) override
 
- 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
 
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
 
void UpdateAI (uint32 diff) override
 
void JustDied (Unit *) override
 
void KilledUnit (Unit *) override
 
void JustSummoned (Creature *) override
 
void SummonedCreatureDespawn (Creature *) override
 
void SpellHit (Unit *, SpellInfo const *) override
 
void SpellHitTarget (Unit *, SpellInfo const *) override
 
void MovementInform (uint32, uint32) override
 
void OnPossess (bool)
 
bool IsInRoom (const Position *pos, Axis axis, bool above)
 
void Reset () override
 
void JustEngagedWith (Unit *) override
 Called for reaction when initially engaged.
 
void AttackStart (Unit *) override
 
void DoStartMovement (Unit *target, float distance=0.0f, float angle=0.0f)
 
void DoStartNoMovement (Unit *target)
 
void DoStopAttack ()
 
void DoCastSpell (Unit *target, SpellInfo const *spellInfo, bool triggered=false)
 
void DoPlaySoundToSet (WorldObject *source, uint32 soundId)
 
void DoPlayMusic (uint32 soundId, bool zone)
 
void DoAddThreat (Unit *unit, float amount)
 
void DoModifyThreatByPercent (Unit *unit, int32 pct)
 
void DoResetThreat (Unit *unit)
 
void DoResetThreatList ()
 
float DoGetThreat (Unit *unit)
 
void DoTeleportPlayer (Unit *unit, float x, float y, float z, float o)
 
void 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 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)
 
void SetCombatMovement (bool allowMovement)
 
bool IsCombatMovementAllowed () const
 
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.
 
void Talk (uint8 id, Milliseconds delay)
 
 CreatureAI (Creature *creature)
 
 ~CreatureAI () override
 
void MoveCircleChecks ()
 
void MoveBackwardsChecks ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At =================================
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
virtual void JustEngagedWith (Unit *)
 Called for reaction when initially engaged.
 
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 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
 
virtual void JustReachedHome ()
 
void DoZoneInCombat (Creature *creature=nullptr, float maxRangeToNearestTarget=250.0f)
 
virtual void ReceiveEmote (Player *, uint32)
 
virtual void OwnerAttackedBy (Unit *)
 
virtual void OwnerAttacked (Unit *)
 
virtual void CorpseRemoved (uint32 &)
 == Triggered Actions Requested ==================
 
virtual void PassengerBoarded (Unit *, int8, bool)
 == Fields =======================================
 
virtual bool BeforeSpellClick (Unit *)
 
virtual void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
virtual bool CanBeSeen (Player const *)
 
virtual bool CanAlwaysBeDetectable (WorldObject const *)
 
virtual void PetStopAttack ()
 
virtual bool CheckInRoom ()
 
CreatureBoundary const * GetBoundary () const
 
void SetBoundary (CreatureBoundary const *boundary, bool negativeBoundaries=false)
 
bool IsInBoundary (Position const *who=nullptr) const
 
virtual void CalculateThreat (Unit *, float &, SpellInfo const *)
 
virtual bool OnTeleportUnreacheablePlayer (Player *)
 
- 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
 
virtual void InitializeAI ()
 
virtual void Reset ()
 
virtual void OnCharmed (bool apply)=0
 
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)
 
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 (NOTE: Creature engage logic should NOT be here, but in JustEngagedWith, which happens once threat is established!)
 
virtual void JustExitedCombat ()
 Called when the unit leaves combat.
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType)
 
virtual void DamageTaken (Unit *, uint32 &, DamageEffectType, SpellSchoolMask)
 
virtual void HealReceived (Unit *, uint32 &)
 
virtual void HealDone (Unit *, uint32 &)
 
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)
 
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)
 
SpellCastResult DoCastMaxThreat (uint32 spellId, uint32 threatTablePosition=0, float dist=0.0f, bool playerOnly=true, bool triggered=false)
 Cast spell on the max threat target, which may not always 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)
 
virtual void sGossipHello (Player *)
 
virtual void sGossipSelect (Player *, uint32, uint32)
 
virtual void sGossipSelectCode (Player *, uint32, uint32, char const *)
 
virtual void sQuestAccept (Player *, Quest const *)
 
virtual void sQuestSelect (Player *, Quest const *)
 
virtual void sQuestComplete (Player *, Quest const *)
 
virtual void sQuestReward (Player *, Quest const *, uint32)
 
virtual void sOnGameEvent (bool, uint16)
 
virtual std::string GetDebugInfo () const
 

Public Attributes

bool bStepping
 
bool summoned
 
uint32 step
 
uint32 phaseTimer
 
uint32 whirlwindTimer
 
ObjectGuid jainaGUID
 
ObjectGuid putressGUID
 
ObjectGuid blightWormGUID
 
ObjectGuid khanokGUID
 
ObjectGuid thrallGUID
 
ObjectGuid sylvanasGUID
 
ObjectGuid generatorGUID [GENERATOR_MAXCOUNT]
 
ObjectGuid allianceForcesGUID [ALLIANCE_FORCE_MAXCOUNT]
 
ObjectGuid hordeForcesGUID [HORDE_FORCE_MAXCOUNT]
 
GuidVector allianceGuardsGUID
 
EventMap _events
 
- Public Attributes inherited from ScriptedAI
Creatureme
 
bool IsFleeing
 

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
 
CreatureBoundary const * _boundary
 
bool _negateBoundary
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Detailed Description

Constructor & Destructor Documentation

◆ npc_varian_wrynnAI()

npc_varian_wrynn::npc_varian_wrynnAI::npc_varian_wrynnAI ( Creature creature)
inline
986 : npc_escortAI(creature)
987 {
988 allianceGuardsGUID.clear();
989 }
Definition: ScriptedEscortAI.h:53
GuidVector allianceGuardsGUID
Definition: zone_undercity.cpp:1009

References allianceGuardsGUID.

Member Function Documentation

◆ EnterEvadeMode()

void npc_varian_wrynn::npc_varian_wrynnAI::EnterEvadeMode ( EvadeReason  )
inlineoverridevirtual

Reimplemented from npc_escortAI.

1014 {
1016 me->CombatStop(true);
1017 me->SetLootRecipient(nullptr);
1018
1020 {
1023 }
1024 else
1025 {
1027 Reset();
1028 }
1029 }
@ STATE_ESCORT_ESCORTING
Definition: ScriptedEscortAI.h:47
@ STATE_ESCORT_RETURNING
Definition: ScriptedEscortAI.h:48
Creature * me
Definition: ScriptedCreature.h:282
bool HasEscortState(uint32 escortState)
Definition: ScriptedEscortAI.h:98
void AddEscortState(uint32 escortState)
Definition: ScriptedEscortAI.h:110
void ReturnToLastPoint()
Definition: ScriptedEscortAI.cpp:193
void ClearAllThreat()
Definition: ThreatMgr.cpp:418
void SetLootRecipient(Unit *unit, bool withGroup=true)
Definition: Creature.cpp:1292
void CombatStop(bool includingCast=false)
Definition: Unit.cpp:10401
MotionMaster * GetMotionMaster()
Definition: Unit.h:2262
ThreatMgr & GetThreatMgr()
Definition: Unit.h:2145
void MoveTargetedHome(bool walk=false)
Definition: MotionMaster.cpp:251
void Reset() override
Definition: zone_undercity.cpp:1031

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

◆ JumpToNextStep()

void npc_varian_wrynn::npc_varian_wrynnAI::JumpToNextStep ( uint32  uiTimer)
inline
1168 {
1169 phaseTimer = uiTimer;
1170 ++step;
1171 }
uint32 step
Definition: zone_undercity.cpp:994
uint32 phaseTimer
Definition: zone_undercity.cpp:995

References phaseTimer, and step.

Referenced by UpdateAI().

◆ JustSummoned()

void npc_varian_wrynn::npc_varian_wrynnAI::JustSummoned ( Creature summonedCreature)
inlineoverridevirtual

Reimplemented from ScriptedAI.

1115 {
1116 switch (summonedCreature->GetEntry())
1117 {
1118 case NPC_GENERATOR:
1119 summonedCreature->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
1120 summonedCreature->ApplySpellImmune(0, IMMUNITY_ID, SPELL_WRYNN_BUFF, true);
1121 summonedCreature->ApplySpellImmune(0, IMMUNITY_ID, SPELL_THRALL_BUFF, true);
1122 summonedCreature->ApplySpellImmune(0, IMMUNITY_ID, SPELL_SYLVANAS_BUFF, true);
1123 break;
1124 default:
1125 break;
1126 }
1127 }
@ UNIT_FLAG_NOT_SELECTABLE
Definition: Unit.h:473
@ SPELL_WRYNN_BUFF
Definition: zone_undercity.cpp:405
@ SPELL_SYLVANAS_BUFF
Definition: zone_undercity.cpp:562
@ NPC_GENERATOR
Definition: zone_undercity.cpp:607
@ SPELL_THRALL_BUFF
Definition: zone_undercity.cpp:496
@ IMMUNITY_ID
Definition: SharedDefines.h:1372
uint32 GetEntry() const
Definition: Object.h:109
void ApplySpellImmune(uint32 spellId, uint32 op, uint32 type, bool apply, SpellImmuneBlockType blockType=SPELL_BLOCK_TYPE_ALL)
Definition: Unit.cpp:13300
void SetUnitFlag(UnitFlags flags)
Definition: Unit.h:1481

References Unit::ApplySpellImmune(), Object::GetEntry(), IMMUNITY_ID, NPC_GENERATOR, Unit::SetUnitFlag(), SPELL_SYLVANAS_BUFF, SPELL_THRALL_BUFF, SPELL_WRYNN_BUFF, and UNIT_FLAG_NOT_SELECTABLE.

◆ Reset()

void npc_varian_wrynn::npc_varian_wrynnAI::Reset ( )
inlineoverridevirtual

Reimplemented from ScriptedAI.

1032 {
1034 {
1035 me->SetCorpseDelay(1);
1036 me->SetRespawnTime(1);
1038
1039 bStepping = false;
1040 step = 0;
1041 phaseTimer = 0;
1042 jainaGUID.Clear();
1048
1050 {
1051 putress->DespawnOrUnsummon();
1053 }
1054
1056 {
1057 blightWorm->DespawnOrUnsummon();
1059 }
1060
1062 {
1063 khanok->DespawnOrUnsummon();
1064 khanokGUID.Clear();
1065 }
1066
1068 {
1069 thrall->DespawnOrUnsummon();
1070 thrallGUID.Clear();
1071 }
1072
1074 {
1075 sylvanas->DespawnOrUnsummon();
1077 }
1078
1079 for (uint8 i = 0; i < GENERATOR_MAXCOUNT; ++i)
1080 {
1082 {
1083 generatorGUID[i].Clear();
1084 temp->DespawnOrUnsummon();
1085 }
1086 }
1087
1088 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
1089 {
1091 {
1093 temp->DespawnOrUnsummon();
1094 }
1095 }
1096
1097 for (ObjectGuid const& guid : allianceGuardsGUID)
1098 if (Creature* temp = ObjectAccessor::GetCreature(*me, guid))
1099 temp->DespawnOrUnsummon();
1100
1101 allianceGuardsGUID.clear();
1102
1103 for (uint8 i = 0; i < HORDE_FORCE_MAXCOUNT; ++i)
1104 {
1106 {
1108 temp->DespawnOrUnsummon();
1109 }
1110 }
1111 }
1112 }
std::uint8_t uint8
Definition: Define.h:110
@ UNIT_NPC_FLAG_GOSSIP
Definition: Unit.h:516
@ EVENT_HEROIC_LEAP
Definition: zone_undercity.cpp:410
@ EVENT_WRYNN_BUFF
Definition: zone_undercity.cpp:412
@ EVENT_WHIRLWIND
Definition: zone_undercity.cpp:409
@ EVENT_AGGRO_JAINA
Definition: zone_undercity.cpp:411
@ HORDE_FORCE_MAXCOUNT
Definition: zone_undercity.cpp:719
@ ALLIANCE_FORCE_MAXCOUNT
Definition: zone_undercity.cpp:718
@ GENERATOR_MAXCOUNT
Definition: zone_undercity.cpp:717
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:215
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group=0, uint32 phase=0)
Definition: EventMap.cpp:56
Definition: Creature.h:46
void SetRespawnTime(uint32 respawn)
Definition: Creature.cpp:3658
void SetCorpseDelay(uint32 delay)
Definition: Creature.h:72
Definition: ObjectGuid.h:120
void Clear()
Definition: ObjectGuid.h:140
void SetNpcFlag(NPCFlags flags)
Definition: Unit.h:1647
bool bStepping
Definition: zone_undercity.cpp:991
ObjectGuid jainaGUID
Definition: zone_undercity.cpp:999
ObjectGuid putressGUID
Definition: zone_undercity.cpp:1000
ObjectGuid blightWormGUID
Definition: zone_undercity.cpp:1001
EventMap _events
Definition: zone_undercity.cpp:1011
ObjectGuid sylvanasGUID
Definition: zone_undercity.cpp:1004
ObjectGuid allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]
Definition: zone_undercity.cpp:1007
ObjectGuid generatorGUID[GENERATOR_MAXCOUNT]
Definition: zone_undercity.cpp:1006
ObjectGuid khanokGUID
Definition: zone_undercity.cpp:1002
ObjectGuid hordeForcesGUID[HORDE_FORCE_MAXCOUNT]
Definition: zone_undercity.cpp:1008
ObjectGuid thrallGUID
Definition: zone_undercity.cpp:1003

References _events, ALLIANCE_FORCE_MAXCOUNT, allianceForcesGUID, allianceGuardsGUID, Unit::ApplySpellImmune(), blightWormGUID, bStepping, ObjectGuid::Clear(), EVENT_AGGRO_JAINA, EVENT_HEROIC_LEAP, EVENT_WHIRLWIND, EVENT_WRYNN_BUFF, GENERATOR_MAXCOUNT, generatorGUID, ObjectAccessor::GetCreature(), npc_escortAI::HasEscortState(), HORDE_FORCE_MAXCOUNT, hordeForcesGUID, IMMUNITY_ID, jainaGUID, khanokGUID, ScriptedAI::me, phaseTimer, putressGUID, EventMap::ScheduleEvent(), Creature::SetCorpseDelay(), Unit::SetNpcFlag(), Creature::SetRespawnTime(), SPELL_SYLVANAS_BUFF, STATE_ESCORT_ESCORTING, step, sylvanasGUID, thrallGUID, and UNIT_NPC_FLAG_GOSSIP.

Referenced by EnterEvadeMode().

◆ SetHoldState()

void npc_varian_wrynn::npc_varian_wrynnAI::SetHoldState ( bool  bOnHold)
inline
1163 {
1164 SetEscortPaused(bOnHold);
1165 }
void SetEscortPaused(bool on)
Definition: ScriptedEscortAI.cpp:524

References npc_escortAI::SetEscortPaused().

Referenced by WaypointReached().

◆ SpawnWave()

void npc_varian_wrynn::npc_varian_wrynnAI::SpawnWave ( uint32  waveId)
inline
1174 {
1175 switch (waveId)
1176 {
1177 case 0:
1179 break;
1180 case 1:
1181 for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i)
1182 {
1183 switch (urand(0, 12))
1184 {
1185 case 0:
1187 break;
1188 case 1:
1189 case 2:
1190 case 3:
1192 break;
1193 case 4:
1194 case 5:
1195 case 6:
1197 break;
1198 case 7:
1199 case 8:
1200 case 9:
1202 break;
1203 case 10:
1204 case 11:
1205 case 12:
1207 break;
1208 }
1209 }
1210 break;
1211 case 2:
1212 for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i)
1213 {
1214 switch (urand(0, 3))
1215 {
1216 case 0:
1218 break;
1219 case 1:
1221 break;
1222 case 2:
1224 break;
1225 case 3:
1227 break;
1228 }
1229 }
1230 break;
1231 case 3:
1232 for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i)
1233 {
1234 switch (urand(0, 4))
1235 {
1236 case 0:
1238 break;
1239 case 1:
1240 case 2:
1242 break;
1243 case 3:
1244 case 4:
1246 break;
1247 }
1248 }
1249 break;
1250 case 4:
1251 for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i)
1252 {
1253 switch (urand(0, 5))
1254 {
1255 case 0:
1257 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
1258 break;
1259 case 1:
1261 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
1262 break;
1263 case 2:
1265 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
1266 break;
1267 case 3:
1269 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
1270 break;
1271 case 4:
1273 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
1274 break;
1275 case 5:
1277 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
1278 break;
1279 }
1280 }
1281 break;
1282 case 5:
1283 for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i)
1285 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false);
1286 break;
1287 case 6:
1289 {
1290 blightWormGUID = temp->GetGUID();
1291 temp->AddThreat(me, 100.0f);
1292 me->AddThreat(temp, 100.0f);
1294 {
1295 temp->AddThreat(jaina, 100.0f);
1296 jaina->AddThreat(temp, 100.0f);
1297 }
1298 }
1300 {
1301 khanokGUID = temp->GetGUID();
1303 khanok->setDeathState(JUST_DIED);
1304 }
1306 {
1307 putressGUID = temp->GetGUID();
1308 temp->CastSpell(temp, SPELL_PUTRESS_CASTING_STATE);
1309 }
1310 for (uint8 i = 0; i < GENERATOR_MAXCOUNT; ++i)
1311 {
1312 switch (i)
1313 {
1314 case 0:
1315 if (Unit* temp = me->SummonCreature(NPC_GENERATOR, 1433.142212f, 402.493835f, -80.515945f, TEMPSUMMON_MANUAL_DESPAWN))
1316 {
1317 generatorGUID[i] = temp->GetGUID();
1319 temp->CastSpell(putress, SPELL_BLIGHT_EMPOWERMENT);
1320 }
1321 break;
1322 case 1:
1323 if (Unit* temp = me->SummonCreature(NPC_GENERATOR, 1428.677979f, 399.753418f, -79.141609f, TEMPSUMMON_MANUAL_DESPAWN))
1324 {
1325 generatorGUID[i] = temp->GetGUID();
1327 temp->CastSpell(putress, SPELL_BLIGHT_EMPOWERMENT, false, 0, 0, generatorGUID[0]);
1328 }
1329 break;
1330 case 2:
1331 if (Unit* temp = me->SummonCreature(NPC_GENERATOR, 1425.163330f, 402.268951f, -79.299744f, TEMPSUMMON_MANUAL_DESPAWN))
1332 {
1333 generatorGUID[i] = temp->GetGUID();
1335 temp->CastSpell(putress, SPELL_BLIGHT_EMPOWERMENT, false, 0, 0, generatorGUID[0]);
1336 }
1337 break;
1338 case 3:
1339 if (Unit* temp = me->SummonCreature(NPC_GENERATOR, 1427.323242f, 406.853088f, -78.195641f, TEMPSUMMON_MANUAL_DESPAWN))
1340 {
1341 generatorGUID[i] = temp->GetGUID();
1343 temp->CastSpell(putress, SPELL_BLIGHT_EMPOWERMENT, false, 0, 0, generatorGUID[0]);
1344 }
1345 break;
1346 case 4:
1347 if (Unit* temp = me->SummonCreature(NPC_GENERATOR, 1432.465210f, 407.460022f, -81.689384f, TEMPSUMMON_MANUAL_DESPAWN))
1348 {
1349 generatorGUID[i] = temp->GetGUID();
1351 temp->CastSpell(putress, SPELL_BLIGHT_EMPOWERMENT, false, 0, 0, generatorGUID[0]);
1352 }
1353 break;
1354 }
1355 }
1356 break;
1357 case 7:
1359 {
1360 allianceGuardsGUID.push_back(temp->GetGUID());
1361 temp->GetMotionMaster()->MovePath(NPC_SW_SOLDIER * 10, false);
1362 }
1364 {
1365 allianceGuardsGUID.push_back(temp->GetGUID());
1366 temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 1, false);
1367 }
1369 {
1370 allianceGuardsGUID.push_back(temp->GetGUID());
1371 temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 2, false);
1372 }
1374 {
1375 allianceGuardsGUID.push_back(temp->GetGUID());
1376 temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 3, false);
1377 }
1378 break;
1379 case 8:
1380 break;
1381 case 9:
1382 for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i)
1384 break;
1385 case 10:
1387 {
1388 temp->GetMotionMaster()->MovePath(NPC_DREADLORD * 10, false);
1389 temp->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);
1390 temp->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK_DEST, true);
1391 }
1392 break;
1393 case 11:
1394 for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i)
1395 {
1396 switch (urand(0, 3))
1397 {
1398 case 0:
1400 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
1401 break;
1402 case 1:
1404 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
1405 break;
1406 case 2:
1408 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
1409 break;
1410 case 3:
1412 temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ());
1413 break;
1414 }
1415 }
1416 break;
1417 case 12:
1419 {
1420 thrallGUID = temp->GetGUID();
1421 temp->SetReactState(REACT_PASSIVE);
1422 temp->SetImmuneToAll(true);
1423 temp->CastSpell(temp, SPELL_THRALL_BUFF);
1424 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
1425 }
1427 {
1428 sylvanasGUID = temp->GetGUID();
1429 temp->SetReactState(REACT_PASSIVE);
1430 temp->SetImmuneToAll(true);
1431 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
1432 }
1433 for (uint8 i = 0; i < HORDE_FORCE_MAXCOUNT; ++i)
1434 {
1436 {
1437 hordeForcesGUID[i] = temp->GetGUID();
1438 temp->SetReactState(REACT_PASSIVE);
1439 temp->SetImmuneToAll(true);
1440 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
1441 }
1442 }
1443 break;
1444 case 13:
1445 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
1446 {
1448 {
1449 allianceForcesGUID[i] = temp->GetGUID();
1450 temp->SetImmuneToAll(true);
1451 temp->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H);
1452 }
1453 }
1454 break;
1455 }
1456 }
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:44
uint32 rand32()
Definition: Random.cpp:72
@ TEMPSUMMON_DEAD_DESPAWN
Definition: Object.h:48
@ TEMPSUMMON_MANUAL_DESPAWN
Definition: Object.h:49
@ TEMPSUMMON_TIMED_DESPAWN
Definition: Object.h:44
@ UNIT_NPC_EMOTESTATE
Definition: UpdateFields.h:140
@ REACT_PASSIVE
Definition: Unit.h:1023
@ JUST_DIED
Definition: Unit.h:317
@ NPC_GUARDIAN
Definition: zone_undercity.cpp:672
@ NPC_CHEMIST
Definition: zone_undercity.cpp:673
@ NPC_DOCTOR
Definition: zone_undercity.cpp:676
@ NPC_SW_SOLDIER
Definition: zone_undercity.cpp:678
@ NPC_FELBEAST
Definition: zone_undercity.cpp:675
@ NPC_DREADLORD
Definition: zone_undercity.cpp:671
@ NPC_BETRAYER
Definition: zone_undercity.cpp:674
@ NPC_COLLABORATOR
Definition: zone_undercity.cpp:677
@ NPC_HORDE_SOLDIER
Definition: zone_undercity.cpp:679
@ NPC_KHANOK
Definition: zone_undercity.cpp:633
@ NPC_SYLVANAS
Definition: zone_undercity.cpp:549
static LocationXYZO HordeSpawn[]
Definition: zone_undercity.cpp:804
@ WAVE_MAXCOUNT
Definition: zone_undercity.cpp:716
static LocationXYZO AllianceSpawn[]
Definition: zone_undercity.cpp:755
@ NPC_BLIGHTWORM
Definition: zone_undercity.cpp:589
@ NPC_PUTRESS
Definition: zone_undercity.cpp:604
@ SPELL_PUTRESS_CASTING_STATE
Definition: zone_undercity.cpp:614
@ SPELL_BLIGHT_EMPOWERMENT
Definition: zone_undercity.cpp:610
@ NPC_EXPERIMENT
Definition: zone_undercity.cpp:606
@ NPC_THRALL
Definition: zone_undercity.cpp:447
@ EMOTE_STATE_READY2H
Definition: SharedDefines.h:1942
@ SPELL_EFFECT_KNOCK_BACK_DEST
Definition: SharedDefines.h:894
@ SPELL_EFFECT_KNOCK_BACK
Definition: SharedDefines.h:848
@ IMMUNITY_EFFECT
Definition: SharedDefines.h:1366
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:2318
float GetPositionZ() const
Definition: Position.h:119
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
Definition: Unit.h:1290
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=nullptr)
Definition: Unit.cpp:14548
void MovePoint(uint32 id, const Position &pos, bool generatePath=true, bool forceDestination=true)
Definition: MotionMaster.h:210
void MovePath(uint32 path_id, bool repeatable)
Definition: MotionMaster.cpp:758
float o
Definition: zone_undercity.cpp:752
float y
Definition: zone_undercity.cpp:752
float x
Definition: zone_undercity.cpp:752
float z
Definition: zone_undercity.cpp:752

References Unit::AddThreat(), ALLIANCE_FORCE_MAXCOUNT, allianceForcesGUID, allianceGuardsGUID, AllianceSpawn, blightWormGUID, EMOTE_STATE_READY2H, GENERATOR_MAXCOUNT, generatorGUID, ObjectAccessor::GetCreature(), Unit::GetMotionMaster(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), HORDE_FORCE_MAXCOUNT, hordeForcesGUID, HordeSpawn, IMMUNITY_EFFECT, jainaGUID, JUST_DIED, khanokGUID, ScriptedAI::me, MotionMaster::MovePath(), MotionMaster::MovePoint(), NPC_BETRAYER, NPC_BLIGHTWORM, NPC_CHEMIST, NPC_COLLABORATOR, NPC_DOCTOR, NPC_DREADLORD, NPC_EXPERIMENT, NPC_FELBEAST, NPC_GENERATOR, NPC_GUARDIAN, NPC_HORDE_SOLDIER, NPC_KHANOK, NPC_PUTRESS, NPC_SW_SOLDIER, NPC_SYLVANAS, NPC_THRALL, LocationXYZO::o, putressGUID, rand32(), REACT_PASSIVE, SPELL_BLIGHT_EMPOWERMENT, SPELL_EFFECT_KNOCK_BACK, SPELL_EFFECT_KNOCK_BACK_DEST, SPELL_PUTRESS_CASTING_STATE, SPELL_THRALL_BUFF, WorldObject::SummonCreature(), sylvanasGUID, TEMPSUMMON_DEAD_DESPAWN, TEMPSUMMON_MANUAL_DESPAWN, TEMPSUMMON_TIMED_DESPAWN, thrallGUID, UNIT_NPC_EMOTESTATE, urand(), WAVE_MAXCOUNT, LocationXYZO::x, LocationXYZO::y, and LocationXYZO::z.

Referenced by UpdateAI().

◆ SummonedCreatureDies()

void npc_varian_wrynn::npc_varian_wrynnAI::SummonedCreatureDies ( Creature summon,
Unit  
)
inlineoverridevirtual

Reimplemented from CreatureAI.

1130 {
1131 switch (summon->GetEntry())
1132 {
1133 case NPC_BLIGHTWORM:
1136 bStepping = true;
1137 break;
1138 case NPC_PUTRESS:
1141 bStepping = true;
1142 break;
1143 default:
1144 break;
1145 }
1146 }
@ WORLD_STATE_SEWERS_FIGHT_A
Definition: zone_undercity.cpp:731
@ WORLD_STATE_APOTHECARIUM_DONE_A
Definition: zone_undercity.cpp:734
@ WORLD_STATE_SEWERS_DONE_A
Definition: zone_undercity.cpp:732
@ WORLD_STATE_APOTHECARIUM_FIGHT_A
Definition: zone_undercity.cpp:733
Map * GetMap() const
Definition: Object.h:517
void UpdateWorldState(Map *map, uint32 id, uint32 state)
Definition: zone_undercity.cpp:1148

References bStepping, Object::GetEntry(), WorldObject::GetMap(), ScriptedAI::me, NPC_BLIGHTWORM, NPC_PUTRESS, UpdateWorldState(), WORLD_STATE_APOTHECARIUM_DONE_A, WORLD_STATE_APOTHECARIUM_FIGHT_A, WORLD_STATE_SEWERS_DONE_A, and WORLD_STATE_SEWERS_FIGHT_A.

◆ UpdateAI()

void npc_varian_wrynn::npc_varian_wrynnAI::UpdateAI ( uint32  diff)
inlineoverridevirtual

Reimplemented from npc_escortAI.

1527 {
1529
1530 if (bStepping)
1531 {
1532 if (phaseTimer <= diff)
1533 {
1534 switch (step)
1535 {
1536 //Preparation
1537 case 0:
1538 me->setActive(true);
1542 break;
1543 case 1:
1546 break;
1547 case 2:
1550 break;
1551 case 3:
1554 break;
1555 case 4:
1560 break;
1561 case 5:
1564 break;
1565 case 6:
1568 break;
1569 case 7:
1570 SetEscortPaused(false);
1572 break;
1573 case 8:
1575 {
1576 jaina->GetMotionMaster()->MovePath(NPC_JAINA * 10, false);
1577 jaina->setActive(true);
1578 }
1579 bStepping = false;
1580 JumpToNextStep(0);
1581 break;
1582 //Sewers
1583 case 9:
1585 SpawnWave(0);
1586 SpawnWave(1);
1587 SpawnWave(2);
1588 SpawnWave(3);
1589 JumpToNextStep(9500);
1590 break;
1591 case 10:
1593 jaina->AI()->Talk(JAINA_SAY_SEWERS_1);
1595 break;
1596 case 11:
1598 jaina->AI()->DoCast(SPELL_JAINA_BUFF);
1600 break;
1601 case 12:
1602 SetEscortPaused(false);
1606 break;
1607 case 13:
1609 {
1610 jaina->GetMotionMaster()->MoveFollow(me, 5, PET_FOLLOW_ANGLE);
1611 jaina->SetReactState(REACT_AGGRESSIVE);
1612 jaina->SetFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
1613 }
1614 bStepping = false;
1615 JumpToNextStep(0);
1616 break;
1617 case 14:
1620 break;
1621 case 15:
1622 SpawnWave(4);
1624 break;
1625 case 16:
1626 SpawnWave(5);
1628 break;
1629 case 17:
1630 SpawnWave(4);
1632 break;
1633 case 18:
1634 SpawnWave(4);
1636 break;
1637 case 19:
1638 SpawnWave(5);
1640 break;
1641 case 20:
1642 SpawnWave(6);
1643 bStepping = false;
1644 JumpToNextStep(0);
1645 break;
1646 case 21:
1648 SpawnWave(7);
1650 break;
1651 case 22:
1653 SetRun(false);
1655 {
1656 jaina->GetMotionMaster()->Clear();
1657 jaina->GetMotionMaster()->MoveFollow(me, 1, 0);
1658 }
1660 break;
1661 case 23:
1662 bStepping = false;
1663 SetEscortPaused(false);
1664 JumpToNextStep(0);
1665 break;
1666 //Apothecarium
1667 case 24:
1669 jaina->AI()->Talk(JAINA_SAY_APO_1);
1671 break;
1672 case 25:
1673 SetEscortPaused(false);
1674 bStepping = false;
1675 JumpToNextStep(0);
1676 break;
1677 case 26:
1681 break;
1682 case 27:
1685 break;
1686 case 28:
1689 break;
1690 case 29:
1693 break;
1694 case 30:
1697 putress->AI()->Talk(PUTRESS_SAY_1);
1698 if (Player* player = GetPlayerForEscort())
1699 player->PlayDirectSound(SOUND_PUTRESS, player);
1700 SpawnWave(9);
1702 break;
1703 case 31:
1704 SetRun(true);
1706 jaina->GetMotionMaster()->MoveFollow(me, 1, 0);
1707 SetEscortPaused(false);
1708 bStepping = false;
1709 JumpToNextStep(0);
1710 break;
1711 case 32:
1713 SpawnWave(10);
1715 break;
1716 case 33:
1717 SpawnWave(10);
1719 break;
1720 case 34:
1721 SpawnWave(10);
1723 break;
1724 case 35:
1725 SpawnWave(10);
1727 break;
1728 case 36:
1729 SpawnWave(10);
1731 break;
1732 case 37:
1733 SpawnWave(10);
1735 break;
1736 case 38:
1737 SpawnWave(10);
1739 break;
1740 case 39:
1741 SpawnWave(10);
1743 break;
1744 case 40:
1745 SpawnWave(10);
1747 break;
1748 case 41:
1749 SpawnWave(10);
1751 break;
1752 case 42:
1753 SpawnWave(10);
1755 break;
1756 case 43:
1757 SetEscortPaused(false);
1758 bStepping = false;
1759 JumpToNextStep(0);
1760 break;
1761 case 44:
1764 {
1765 jaina->GetMotionMaster()->Clear();
1766 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[7].x, AllianceWP[7].y, AllianceWP[7].z, false);
1767 }
1769 break;
1770 case 45:
1771 SetEscortPaused(false);
1772 bStepping = false;
1773 JumpToNextStep(0);
1774 break;
1775 case 46:
1778 break;
1779 case 47:
1781 putress->AI()->Talk(PUTRESS_SAY_3);
1782 SpawnWave(11);
1784 break;
1785 case 48:
1787 putress->AI()->Talk(PUTRESS_SAY_4);
1789 break;
1790 case 49:
1792 putress->AI()->Talk(PUTRESS_SAY_5);
1793 SpawnWave(11);
1795 break;
1796 case 50:
1798 putress->AI()->Talk(PUTRESS_SAY_6);
1800 break;
1801 case 51:
1803 putress->AI()->Talk(PUTRESS_SAY_7);
1804 SpawnWave(11);
1806 break;
1807 case 52:
1809 {
1810 putress->AI()->Talk(PUTRESS_SAY_8);
1811 putress->AI()->DoCast(SPELL_BLIGHT_OVERLOAD);
1812 }
1814 break;
1815 case 53:
1817 {
1818 putress->SetImmuneToAll(false);
1819 putress->AddThreat(me, 100.0f);
1820 me->AddThreat(putress, 100.0f);
1821 putress->RemoveAura(SPELL_PUTRESS_CASTING_STATE);
1822 }
1823 bStepping = false;
1824 JumpToNextStep(0);
1825 break;
1826 case 54:
1828 SetRun(false);
1830 break;
1831 case 55:
1836 break;
1837 case 56:
1841 SetEscortPaused(false);
1842 bStepping = false;
1843 JumpToNextStep(0);
1844 break;
1845 case 57:
1847 break;
1848 case 58:
1851 break;
1852 case 59:
1855 break;
1856 case 60:
1858 SpawnWave(12); // thrall sylvanas horde soldiers
1860 break;
1861 case 61:
1863 thrall->AI()->Talk(THRALL_SAY_THRONE_A_1);
1864 if (Player* player = GetPlayerForEscort())
1865 player->PlayDirectSound(SOUND_THRALL_1, player);
1867 break;
1868 case 62:
1870 thrall->AI()->Talk(THRALL_SAY_THRONE_A_2);
1871 if (Player* player = GetPlayerForEscort())
1872 player->PlayDirectSound(SOUND_THRALL_2, player);
1874 break;
1875 case 63:
1878 break;
1879 case 64:
1882 break;
1883 case 65:
1884 SetRun(true);
1885 SetEscortPaused(false);
1887 break;
1888 case 66:
1890 jaina->AI()->Talk(JAINA_SAY_THRONE_1);
1891 me->SetImmuneToNPC(true);
1892 bStepping = false;
1893 JumpToNextStep(0);
1894 break;
1895 case 67:
1898 break;
1899 case 68:
1902 {
1903 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[8].x, AllianceWP[8].y, AllianceWP[8].z);
1904 jaina->SetImmuneToAll(true);
1905 }
1906 SetEscortPaused(false);
1907 bStepping = false;
1908 JumpToNextStep(0);
1909 break;
1910 case 69:
1912 SpawnWave(13); //alliance soldiers
1914 break;
1915 case 70:
1918 break;
1919 case 71:
1922 break;
1923 case 72:
1926 break;
1927 case 73:
1929 me->SetImmuneToAll(false);
1931 {
1932 thrall->SetReactState(REACT_AGGRESSIVE);
1933 thrall->SetImmuneToNPC(false);
1934 thrall->SetImmuneToPC(true);
1935 thrall->AddThreat(me, 100.0f);
1936 me->AddThreat(thrall, 100.0f);
1937 thrall->AI()->AttackStart(me);
1938 }
1940 {
1941 sylvanas->SetReactState(REACT_AGGRESSIVE);
1942 sylvanas->SetImmuneToNPC(false);
1943 sylvanas->SetImmuneToPC(true);
1944 sylvanas->AddThreat(me, 100.0f);
1945 sylvanas->AI()->AttackStart(me);
1946 me->AddThreat(sylvanas, 100.0f);
1947 }
1948 for (uint8 i = 0; i < HORDE_FORCE_MAXCOUNT; ++i)
1949 {
1951 {
1952 temp->SetReactState(REACT_AGGRESSIVE);
1953 temp->SetImmuneToNPC(false);
1954 temp->SetImmuneToPC(true);
1955 }
1956 }
1957 for (uint8 i = 0; i < ALLIANCE_FORCE_MAXCOUNT; ++i)
1958 {
1960 {
1962 {
1963 temp->SetReactState(REACT_AGGRESSIVE);
1964 temp2->SetReactState(REACT_AGGRESSIVE);
1965 temp->SetImmuneToAll(false);
1966 temp2->SetImmuneToAll(false);
1967 temp->AddThreat(temp2, 100.0f);
1968 temp->AI()->AttackStart(temp2);
1969 temp2->AddThreat(temp, 100.0f);
1970 }
1971 }
1972 }
1974 break;
1975 case 74:
1977 {
1978 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[9].x, AllianceWP[9].y, AllianceWP[9].z);
1979 jaina->AI()->Talk(JAINA_SAY_THRONE_2);
1980 }
1982 break;
1983 case 75:
1985 {
1986 jaina->AI()->DoCastAOE(SPELL_DEEPFREEZE);
1987 jaina->AI()->Talk(JAINA_SAY_THRONE_3);
1988 }
1990 break;
1991 case 76:
1992 std::list<Creature*> HelperList;
1993 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SW_SOLDIER, 100.0f);
1995 me->GetCreatureListWithEntryInGrid(HelperList, NPC_JAINA, 100.0f);
1996 me->GetCreatureListWithEntryInGrid(HelperList, NPC_SYLVANAS, 100.0f);
1997 me->GetCreatureListWithEntryInGrid(HelperList, NPC_THRALL, 100.0f);
1998 if (!HelperList.empty())
1999 for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
2000 (*itr)->DespawnOrUnsummon();
2001 if (Map* map = me->GetMap())
2002 {
2003 Map::PlayerList const& PlayerList = map->GetPlayers();
2004 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
2005 {
2006 if (Player* player = i->GetSource())
2007 {
2008 if (me->IsInRange(player, 0.0f, 50.0f))
2009 {
2010 if (player->GetTeamId() == TEAM_ALLIANCE)
2011 {
2012 player->RemoveAura(SPELL_WRYNN_BUFF);
2013 player->RemoveAura(SPELL_JAINA_BUFF);
2014 player->CompleteQuest(QUEST_BATTLE_A);
2015 player->NearTeleportTo(-8445.213867f, 337.384277f, 121.746056f, 5.401534f, false);
2016 }
2017 }
2018 }
2019 }
2020 }
2025 break;
2026 }
2027 }
2028 else phaseTimer -= diff;
2029 }
2030
2031 if (!UpdateVictim())
2032 return;
2033
2034 _events.Update(diff);
2035
2037 return;
2038
2039 while (uint32 eventId = _events.ExecuteEvent())
2040 {
2041 switch (eventId)
2042 {
2043 case EVENT_WHIRLWIND:
2046 break;
2047 case EVENT_HEROIC_LEAP:
2050 break;
2051 case EVENT_AGGRO_JAINA:
2052 if (me->GetVictim())
2053 {
2055 {
2056 jaina->AI()->AttackStart(me->GetVictim());
2057 }
2058 }
2061 break;
2062 case EVENT_WRYNN_BUFF:
2065 break;
2066 default:
2067 break;
2068 }
2069 }
2070
2072 }
constexpr auto IN_MILLISECONDS
Definition: Common.h:62
std::uint32_t uint32
Definition: Define.h:108
#define PET_FOLLOW_ANGLE
Definition: PetDefines.h:194
@ REACT_AGGRESSIVE
Definition: Unit.h:1025
@ UNIT_STAND_STATE_KNEEL
Definition: Unit.h:61
@ UNIT_STAND_STATE_STAND
Definition: Unit.h:53
@ UNIT_STATE_CASTING
Definition: Unit.h:340
@ FACTION_ESCORT_N_NEUTRAL_ACTIVE
Definition: ScriptSystem.h:37
@ WRYNN_SAY_APO_12
Definition: zone_undercity.cpp:392
@ WRYNN_SAY_SEWERS_4
Definition: zone_undercity.cpp:380
@ WRYNN_SAY_APO_6
Definition: zone_undercity.cpp:386
@ WRYNN_SAY_THRONE_9
Definition: zone_undercity.cpp:401
@ WRYNN_SAY_THRONE_2
Definition: zone_undercity.cpp:394
@ WRYNN_SAY_THRONE_4
Definition: zone_undercity.cpp:396
@ SPELL_HEROIC_LEAP
Definition: zone_undercity.cpp:406
@ WRYNN_SAY_PREP_1
Definition: zone_undercity.cpp:371
@ WRYNN_SAY_THRONE_5
Definition: zone_undercity.cpp:397
@ WRYNN_SAY_APO_2
Definition: zone_undercity.cpp:382
@ WRYNN_SAY_APO_11
Definition: zone_undercity.cpp:391
@ WRYNN_SAY_APO_4
Definition: zone_undercity.cpp:384
@ WRYNN_SAY_APO_7
Definition: zone_undercity.cpp:387
@ WRYNN_SAY_APO_5
Definition: zone_undercity.cpp:385
@ WRYNN_SAY_APO_3
Definition: zone_undercity.cpp:383
@ WRYNN_SAY_THRONE_3
Definition: zone_undercity.cpp:395
@ WRYNN_SAY_SEWERS_2
Definition: zone_undercity.cpp:378
@ WRYNN_SAY_APO_8
Definition: zone_undercity.cpp:388
@ WRYNN_SAY_THRONE_1
Definition: zone_undercity.cpp:393
@ WRYNN_SAY_THRONE_6
Definition: zone_undercity.cpp:398
@ WRYNN_SAY_SEWERS_1
Definition: zone_undercity.cpp:377
@ WRYNN_SAY_APO_10
Definition: zone_undercity.cpp:390
@ WRYNN_SAY_PREP_4
Definition: zone_undercity.cpp:374
@ WRYNN_SAY_PREP_2
Definition: zone_undercity.cpp:372
@ WRYNN_SAY_THRONE_8
Definition: zone_undercity.cpp:400
@ WRYNN_SAY_PREP_6
Definition: zone_undercity.cpp:376
@ WRYNN_SAY_THRONE_7
Definition: zone_undercity.cpp:399
@ WRYNN_SAY_PREP_5
Definition: zone_undercity.cpp:375
@ WRYNN_SAY_PREP_3
Definition: zone_undercity.cpp:373
@ SPELL_WHIRLWIND
Definition: zone_undercity.cpp:404
@ WRYNN_SAY_APO_1
Definition: zone_undercity.cpp:381
@ WRYNN_SAY_APO_9
Definition: zone_undercity.cpp:389
@ WRYNN_SAY_SEWERS_3
Definition: zone_undercity.cpp:379
@ SPELL_JAINA_BUFF
Definition: zone_undercity.cpp:432
@ JAINA_SAY_THRONE_1
Definition: zone_undercity.cpp:423
@ JAINA_SAY_THRONE_2
Definition: zone_undercity.cpp:424
@ JAINA_SAY_THRONE_3
Definition: zone_undercity.cpp:425
@ NPC_JAINA
Definition: zone_undercity.cpp:418
@ JAINA_SAY_SEWERS_1
Definition: zone_undercity.cpp:421
@ JAINA_SAY_APO_1
Definition: zone_undercity.cpp:422
@ SPELL_DEEPFREEZE
Definition: zone_undercity.cpp:431
@ QUEST_BATTLE_A
Definition: zone_undercity.cpp:707
@ WORLD_STATE_MANHUNT_COUNTDOWN_A
Definition: zone_undercity.cpp:729
@ WORLD_STATE_MANHUNT_STARTS_A
Definition: zone_undercity.cpp:730
@ PUTRESS_SAY_3
Definition: zone_undercity.cpp:619
@ SPELL_BLIGHT_OVERLOAD
Definition: zone_undercity.cpp:611
@ PUTRESS_SAY_6
Definition: zone_undercity.cpp:622
@ PUTRESS_SAY_5
Definition: zone_undercity.cpp:621
@ SOUND_PUTRESS
Definition: zone_undercity.cpp:627
@ PUTRESS_SAY_8
Definition: zone_undercity.cpp:624
@ PUTRESS_SAY_7
Definition: zone_undercity.cpp:623
@ PUTRESS_SAY_4
Definition: zone_undercity.cpp:620
@ PUTRESS_SAY_1
Definition: zone_undercity.cpp:617
@ THRALL_SAY_THRONE_A_2
Definition: zone_undercity.cpp:454
@ SOUND_THRALL_1
Definition: zone_undercity.cpp:492
@ SPELL_THUNDER
Definition: zone_undercity.cpp:515
@ SOUND_THRALL_2
Definition: zone_undercity.cpp:493
@ THRALL_SAY_THRONE_A_1
Definition: zone_undercity.cpp:453
static LocationXYZO AllianceWP[]
Definition: zone_undercity.cpp:790
Talk
Definition: boss_fathomlord_karathress.cpp:23
@ TEAM_ALLIANCE
Definition: SharedDefines.h:732
Definition: LinkedList.h:139
uint32 ExecuteEvent()
Definition: EventMap.cpp:114
void Update(uint32 time)
Definition: EventMap.h:54
void DoMeleeAttackIfReady()
Definition: UnitAI.cpp:40
SpellCastResult DoCastVictim(uint32 spellId, bool triggered=false)
Definition: UnitAI.cpp:241
SpellCastResult DoCast(uint32 spellId)
Definition: UnitAI.cpp:178
bool UpdateVictim()
Definition: CreatureAI.cpp:269
void UpdateAI(uint32 diff) override
Definition: ScriptedEscortAI.cpp:241
Player * GetPlayerForEscort()
Definition: ScriptedEscortAI.h:114
void SetRun(bool on=true)
Definition: ScriptedEscortAI.cpp:429
void SetTarget(ObjectGuid guid=ObjectGuid::Empty) override
Definition: Creature.cpp:3424
void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer)
Definition: Creature.cpp:2108
void setActive(bool isActiveObject)
Definition: Object.cpp:1085
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
Definition: Object.cpp:2463
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
Definition: Object.cpp:1404
Definition: Player.h:1046
void SetImmuneToNPC(bool apply, bool keepCombat=false)
Definition: Unit.cpp:13527
void RemoveStandFlags(uint8 flags)
Definition: Unit.h:1540
Unit * GetVictim() const
Definition: Unit.h:1386
bool HasUnitState(const uint32 f) const
Definition: Unit.h:1398
void SetStandState(uint8 state)
Definition: Unit.cpp:16900
void SetImmuneToAll(bool apply, bool keepCombat=false)
Definition: Unit.h:1678
void SetStandFlags(uint8 flags)
Definition: Unit.h:1539
Definition: Map.h:312
Definition: MapRefMgr.h:26
iterator begin()
Definition: MapRefMgr.h:36
iterator end()
Definition: MapRefMgr.h:37
void SpawnWave(uint32 waveId)
Definition: zone_undercity.cpp:1173
void JumpToNextStep(uint32 uiTimer)
Definition: zone_undercity.cpp:1167

References _events, Unit::AddThreat(), ALLIANCE_FORCE_MAXCOUNT, allianceForcesGUID, AllianceWP, MapRefMgr::begin(), bStepping, Creature::DespawnOrUnsummon(), UnitAI::DoCast(), UnitAI::DoCastVictim(), UnitAI::DoMeleeAttackIfReady(), MapRefMgr::end(), EVENT_AGGRO_JAINA, EVENT_HEROIC_LEAP, EVENT_WHIRLWIND, EVENT_WRYNN_BUFF, EventMap::ExecuteEvent(), FACTION_ESCORT_N_NEUTRAL_ACTIVE, ObjectAccessor::GetCreature(), WorldObject::GetCreatureListWithEntryInGrid(), WorldObject::GetMap(), npc_escortAI::GetPlayerForEscort(), Unit::GetVictim(), Unit::HasUnitState(), HORDE_FORCE_MAXCOUNT, hordeForcesGUID, IN_MILLISECONDS, WorldObject::IsInRange(), JAINA_SAY_APO_1, JAINA_SAY_SEWERS_1, JAINA_SAY_THRONE_1, JAINA_SAY_THRONE_2, JAINA_SAY_THRONE_3, jainaGUID, JumpToNextStep(), khanokGUID, ScriptedAI::me, NPC_HORDE_SOLDIER, NPC_JAINA, NPC_SW_SOLDIER, NPC_SYLVANAS, NPC_THRALL, PET_FOLLOW_ANGLE, phaseTimer, PUTRESS_SAY_1, PUTRESS_SAY_3, PUTRESS_SAY_4, PUTRESS_SAY_5, PUTRESS_SAY_6, PUTRESS_SAY_7, PUTRESS_SAY_8, putressGUID, QUEST_BATTLE_A, REACT_AGGRESSIVE, Unit::RemoveStandFlags(), EventMap::ScheduleEvent(), WorldObject::setActive(), npc_escortAI::SetEscortPaused(), Unit::SetImmuneToAll(), Unit::SetImmuneToNPC(), npc_escortAI::SetRun(), Unit::SetStandFlags(), Unit::SetStandState(), Creature::SetTarget(), SOUND_PUTRESS, SOUND_THRALL_1, SOUND_THRALL_2, SpawnWave(), SPELL_BLIGHT_OVERLOAD, SPELL_DEEPFREEZE, SPELL_HEROIC_LEAP, SPELL_JAINA_BUFF, SPELL_PUTRESS_CASTING_STATE, SPELL_THUNDER, SPELL_WHIRLWIND, SPELL_WRYNN_BUFF, step, sylvanasGUID, TEAM_ALLIANCE, THRALL_SAY_THRONE_A_1, THRALL_SAY_THRONE_A_2, thrallGUID, UNIT_STAND_STATE_KNEEL, UNIT_STAND_STATE_STAND, UNIT_STATE_CASTING, EventMap::Update(), npc_escortAI::UpdateAI(), CreatureAI::UpdateVictim(), UpdateWorldState(), WORLD_STATE_APOTHECARIUM_DONE_A, WORLD_STATE_APOTHECARIUM_FIGHT_A, WORLD_STATE_MANHUNT_COUNTDOWN_A, WORLD_STATE_MANHUNT_STARTS_A, WORLD_STATE_SEWERS_DONE_A, WORLD_STATE_SEWERS_FIGHT_A, WRYNN_SAY_APO_1, WRYNN_SAY_APO_10, WRYNN_SAY_APO_11, WRYNN_SAY_APO_12, WRYNN_SAY_APO_2, WRYNN_SAY_APO_3, WRYNN_SAY_APO_4, WRYNN_SAY_APO_5, WRYNN_SAY_APO_6, WRYNN_SAY_APO_7, WRYNN_SAY_APO_8, WRYNN_SAY_APO_9, WRYNN_SAY_PREP_1, WRYNN_SAY_PREP_2, WRYNN_SAY_PREP_3, WRYNN_SAY_PREP_4, WRYNN_SAY_PREP_5, WRYNN_SAY_PREP_6, WRYNN_SAY_SEWERS_1, WRYNN_SAY_SEWERS_2, WRYNN_SAY_SEWERS_3, WRYNN_SAY_SEWERS_4, WRYNN_SAY_THRONE_1, WRYNN_SAY_THRONE_2, WRYNN_SAY_THRONE_3, WRYNN_SAY_THRONE_4, WRYNN_SAY_THRONE_5, WRYNN_SAY_THRONE_6, WRYNN_SAY_THRONE_7, WRYNN_SAY_THRONE_8, and WRYNN_SAY_THRONE_9.

◆ UpdateWorldState()

void npc_varian_wrynn::npc_varian_wrynnAI::UpdateWorldState ( Map map,
uint32  id,
uint32  state 
)
inline
1149 {
1150 Map::PlayerList const& players = map->GetPlayers();
1151
1152 if (!players.IsEmpty())
1153 {
1154 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
1155 {
1156 if (Player* player = itr->GetSource())
1157 player->SendUpdateWorldState(id, state);
1158 }
1159 }
1160 }
bool IsEmpty() const
Definition: LinkedList.h:97
PlayerList const & GetPlayers() const
Definition: Map.h:484

References MapRefMgr::begin(), MapRefMgr::end(), Map::GetPlayers(), and LinkedListHead::IsEmpty().

Referenced by SummonedCreatureDies(), and UpdateAI().

◆ WaypointReached()

void npc_varian_wrynn::npc_varian_wrynnAI::WaypointReached ( uint32  waypointId)
inlineoverridevirtual

Implements npc_escortAI.

1459 {
1460 switch (waypointId)
1461 {
1462 case 0:
1463 SetHoldState(true);
1464 bStepping = true;
1465 break;
1466 case 2:
1467 SetHoldState(true);
1468 bStepping = true;
1469 break;
1470 case 38:
1472 {
1473 jaina->GetMotionMaster()->Clear();
1474 jaina->SetImmuneToNPC(false);
1475 jaina->SetReactState(REACT_AGGRESSIVE);
1476 }
1477 SetHoldState(true);
1478 bStepping = true;
1479 break;
1480 case 45:
1481 SetHoldState(true);
1482 bStepping = true;
1484 {
1485 jaina->GetMotionMaster()->Clear();
1486 jaina->GetMotionMaster()->MovePoint(0, AllianceWP[6].x, AllianceWP[6].y, AllianceWP[6].z);
1487 }
1488 break;
1489 case 46:
1490 SetHoldState(true);
1491 bStepping = true;
1492 break;
1493 case 48:
1495 putress->AI()->Talk(PUTRESS_SAY_2);
1496 if (Player* player = GetPlayerForEscort())
1497 player->PlayDirectSound(SOUND_PUTRESS, player);
1498 break;
1499 case 50:
1500 SetHoldState(true);
1501 bStepping = true;
1502 break;
1503 case 63:
1504 SetHoldState(true);
1505 bStepping = true;
1506 break;
1507 case 65:
1508 SetHoldState(true);
1509 bStepping = true;
1510 break;
1511 case 66:
1512 SetHoldState(true);
1513 bStepping = true;
1514 break;
1515 case 87:
1516 SetHoldState(true);
1517 bStepping = true;
1518 break;
1519 case 88:
1520 SetHoldState(true);
1521 bStepping = true;
1522 break;
1523 }
1524 }
@ PUTRESS_SAY_2
Definition: zone_undercity.cpp:618
void SetHoldState(bool bOnHold)
Definition: zone_undercity.cpp:1162

References AllianceWP, bStepping, ObjectAccessor::GetCreature(), npc_escortAI::GetPlayerForEscort(), jainaGUID, ScriptedAI::me, PUTRESS_SAY_2, putressGUID, REACT_AGGRESSIVE, SetHoldState(), and SOUND_PUTRESS.

Member Data Documentation

◆ _events

EventMap npc_varian_wrynn::npc_varian_wrynnAI::_events

Referenced by Reset(), and UpdateAI().

◆ allianceForcesGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT]

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

◆ allianceGuardsGUID

GuidVector npc_varian_wrynn::npc_varian_wrynnAI::allianceGuardsGUID

◆ blightWormGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::blightWormGUID

Referenced by Reset(), and SpawnWave().

◆ bStepping

bool npc_varian_wrynn::npc_varian_wrynnAI::bStepping

◆ generatorGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::generatorGUID[GENERATOR_MAXCOUNT]

Referenced by Reset(), and SpawnWave().

◆ hordeForcesGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::hordeForcesGUID[HORDE_FORCE_MAXCOUNT]

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

◆ jainaGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::jainaGUID

◆ khanokGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::khanokGUID

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

◆ phaseTimer

uint32 npc_varian_wrynn::npc_varian_wrynnAI::phaseTimer

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

◆ putressGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::putressGUID

◆ step

uint32 npc_varian_wrynn::npc_varian_wrynnAI::step

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

◆ summoned

bool npc_varian_wrynn::npc_varian_wrynnAI::summoned

◆ sylvanasGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::sylvanasGUID

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

◆ thrallGUID

ObjectGuid npc_varian_wrynn::npc_varian_wrynnAI::thrallGUID

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

◆ whirlwindTimer

uint32 npc_varian_wrynn::npc_varian_wrynnAI::whirlwindTimer