TrinityCore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI Struct Reference

Public Member Functions

 boss_blood_queen_lana_thelAI (Creature *creature)
 
void Initialize ()
 
void Reset () override
 
void EnterCombat (Unit *who) override
 
void JustDied (Unit *killer) override
 
void CleanAuras ()
 
void DoAction (int32 action) override
 
void EnterEvadeMode (EvadeReason why) override
 
void JustReachedHome () override
 
void KilledUnit (Unit *victim) override
 
void SetGUID (ObjectGuid guid, int32 type=0) override
 
void MovementInform (uint32 type, uint32 id) override
 
void UpdateAI (uint32 diff) override
 
bool WasVampire (ObjectGuid guid) const
 
bool WasBloodbolted (ObjectGuid guid) const
 
- Public Member Functions inherited from BossAI
 BossAI (Creature *creature, uint32 bossId)
 
virtual ~BossAI ()
 
void JustSummoned (Creature *summon) override
 
void SummonedCreatureDespawn (Creature *summon) override
 
virtual void ExecuteEvent (uint32)
 
virtual void ScheduleTasks ()
 
bool CanAIAttack (Unit const *target) const override
 
- Public Member Functions inherited from ScriptedAI
 ScriptedAI (Creature *creature)
 
virtual ~ScriptedAI ()
 
void AttackStartNoMove (Unit *target)
 
void DamageTaken (Unit *, uint32 &) override
 
void SpellHit (Unit *, SpellInfo const *) override
 
void SpellHitTarget (Unit *, SpellInfo const *) override
 
void OnPossess (bool)
 
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 DoResetThreat ()
 
float DoGetThreat (Unit *unit)
 
void DoModifyThreatPercent (Unit *unit, int32 pct)
 
void DoTeleportTo (float x, float y, float z, uint32 time=0)
 
void DoTeleportTo (float const pos[4])
 
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 constSelectSpell (Unit *target, uint32 school, uint32 mechanic, SelectTargetType targets, 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
 
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
 
- Public Member Functions inherited from CreatureAI
void Talk (uint8 id, WorldObject const *whisperTarget=nullptr)
 
 CreatureAI (Creature *creature)
 
virtual ~CreatureAI ()
 
void MoveInLineOfSight_Safe (Unit *who)
 == Reactions At ================================= More...
 
void TriggerAlert (Unit const *who) const
 
virtual bool CanRespawn ()
 
virtual void IsSummonedBy (Unit *)
 
virtual void SummonedCreatureDies (Creature *, Unit *)
 
virtual void AttackedBy (Unit *)
 
virtual bool IsEscorted () const
 
virtual void JustRespawned ()
 
void OnCharmed (bool apply) override
 
void DoZoneInCombat (Creature *creature=NULL, float maxRangeToNearestTarget=50.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 void OnSpellClick (Unit *, bool &)
 
virtual bool CanSeeAlways (WorldObject const *)
 
int32 VisualizeBoundary (uint32 duration, Unit *owner=nullptr, bool fill=false) const
 
virtual bool CheckInRoom ()
 
CreatureBoundary constGetBoundary () const
 
- Public Member Functions inherited from UnitAI
 UnitAI (Unit *unit)
 
virtual ~UnitAI ()
 
virtual void InitializeAI ()
 
virtual uint32 GetData (uint32) const
 
virtual void SetData (uint32, uint32)
 
virtual ObjectGuid GetGUID (int32=0) const
 
UnitSelectTarget (SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
 
template<class PREDICATE >
UnitSelectTarget (SelectAggroTarget targetType, uint32 position, PREDICATE const &predicate)
 
void SelectTargetList (std::list< Unit * > &targetList, uint32 num, SelectAggroTarget targetType, float dist=0.0f, bool playerOnly=false, int32 aura=0)
 
template<class PREDICATE >
void SelectTargetList (std::list< Unit * > &targetList, PREDICATE const &predicate, uint32 maxTargets, SelectAggroTarget targetType)
 
virtual void DamageDealt (Unit *, uint32 &, DamageEffectType)
 
virtual void HealReceived (Unit *, uint32 &)
 
virtual void HealDone (Unit *, uint32 &)
 
virtual void SpellInterrupted (uint32, uint32)
 
void AttackStartCaster (Unit *victim, float dist)
 
void DoCast (uint32 spellId)
 
void DoCast (Unit *victim, uint32 spellId, bool triggered=false)
 
void DoCastVictim (uint32 spellId, bool triggered=false)
 
void DoCastAOE (uint32 spellId, bool triggered=false)
 
void DoMeleeAttackIfReady ()
 
bool DoSpellAttackIfReady (uint32 spellId)
 
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 sQuestReward (Player *, Quest const *, uint32)
 
virtual bool sOnDummyEffect (Unit *, uint32, SpellEffIndex)
 
virtual void sOnGameEvent (bool, uint16)
 

Private Member Functions

PlayerSelectRandomTarget (bool includeOfftank, std::list< Player * > *targetList=NULL)
 

Private Attributes

GuidSet _vampires
 
GuidSet _bloodboltedPlayers
 
ObjectGuid _offtankGUID
 
bool _creditBloodQuickening
 
bool _killMinchar
 

Additional Inherited Members

- Public Types inherited from CreatureAI
enum  EvadeReason { EVADE_REASON_NO_HOSTILES, EVADE_REASON_BOUNDARY, EVADE_REASON_SEQUENCE_BREAK, EVADE_REASON_OTHER }
 
- Static Public Member Functions inherited from UnitAI
static void FillAISpellInfo ()
 
- Public Attributes inherited from BossAI
InstanceScript *const instance
 
- Public Attributes inherited from ScriptedAI
bool IsFleeing
 
- Static Public Attributes inherited from UnitAI
static AISpellInfoTypeAISpellInfo
 
- Protected Member Functions inherited from BossAI
void _Reset ()
 
void _EnterCombat ()
 
void _JustDied ()
 
void _JustReachedHome ()
 
void _DespawnAtEvade ()
 
void TeleportCheaters ()
 
- Protected Member Functions inherited from CreatureAI
bool UpdateVictim ()
 
bool UpdateVictimWithGaze ()
 
void SetGazeOn (Unit *target)
 
CreatureDoSummon (uint32 entry, Position const &pos, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummon (uint32 entry, WorldObject *obj, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
CreatureDoSummonFlyer (uint32 entry, WorldObject *obj, float flightZ, float radius=5.0f, uint32 despawnTime=30000, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
 
bool CheckBoundary (Position const *who=nullptr) const
 
void SetBoundary (CreatureBoundary const *boundary)
 
virtual void MoveInLineOfSight (Unit *)
 
bool _EnterEvadeMode (EvadeReason why=EVADE_REASON_OTHER)
 
- Protected Attributes inherited from BossAI
EventMap events
 
SummonList summons
 
TaskScheduler scheduler
 
- Protected Attributes inherited from CreatureAI
Creature *const me
 
CreatureBoundary const_boundary
 
- Protected Attributes inherited from UnitAI
Unit *const me
 

Constructor & Destructor Documentation

boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::boss_blood_queen_lana_thelAI ( Creature creature)
inline
145  {
146  Initialize();
147  }
void Initialize()
Definition: boss_blood_queen_lana_thel.cpp:149
Definition: icecrown_citadel.h:83
BossAI(Creature *creature, uint32 bossId)
Definition: ScriptedCreature.cpp:444

+ Here is the call graph for this function:

Member Function Documentation

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::CleanAuras ( )
inline
219  {
230  }
#define ESSENCE_OF_BLOOD_QUEEN
Definition: boss_blood_queen_lana_thel.cpp:88
Definition: boss_blood_queen_lana_thel.cpp:57
Definition: boss_blood_queen_lana_thel.cpp:55
Definition: boss_blood_queen_lana_thel.cpp:60
#define ESSENCE_OF_BLOOD_QUEEN_PLR
Definition: boss_blood_queen_lana_thel.cpp:89
#define PRESENCE_OF_THE_DARKFALLEN
Definition: boss_blood_queen_lana_thel.cpp:92
#define DELIRIOUS_SLASH
Definition: boss_blood_queen_lana_thel.cpp:91
Definition: boss_blood_queen_lana_thel.cpp:56
Definition: boss_blood_queen_lana_thel.cpp:52
#define FRENZIED_BLOODTHIRST
Definition: boss_blood_queen_lana_thel.cpp:90
InstanceScript *const instance
Definition: ScriptedCreature.h:340
void DoRemoveAurasDueToSpellOnPlayers(uint32 spell)
Definition: InstanceScript.cpp:540

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::DoAction ( int32  action)
inlineoverridevirtual

Reimplemented from UnitAI.

233  {
234  if (action != ACTION_KILL_MINCHAR)
235  return;
236 
238  _killMinchar = true;
239  else
240  {
241  me->SetDisableGravity(true);
244  }
245  }
MotionMaster * GetMotionMaster()
Definition: Unit.h:2101
Definition: Unit.h:253
bool SetDisableGravity(bool disable, bool packetOnly=false)
Definition: Unit.cpp:15818
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition: Object.cpp:1252
Definition: icecrown_citadel.h:484
Creature *const me
Definition: CreatureAI.h:71
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
Definition: MotionMaster.h:172
Definition: InstanceScript.h:59
Definition: icecrown_citadel.h:83
Position const mincharPos
Definition: boss_blood_queen_lana_thel.cpp:127
bool _killMinchar
Definition: boss_blood_queen_lana_thel.cpp:511
Definition: UpdateFields.h:124
EncounterState GetBossState(uint32 id) const
Definition: InstanceScript.h:227
Definition: boss_blood_queen_lana_thel.cpp:122
InstanceScript *const instance
Definition: ScriptedCreature.h:340

+ Here is the call graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::EnterCombat ( Unit who)
inlineoverridevirtual

Reimplemented from BossAI.

173  {
175  {
178  return;
179  }
180 
181  me->setActive(true);
182  DoZoneInCombat();
183  Talk(SAY_AGGRO);
185  CleanAuras();
186 
190  }
void DoCastSpellOnPlayers(uint32 spell)
Definition: InstanceScript.cpp:558
Definition: boss_blood_queen_lana_thel.cpp:46
void setActive(bool isActiveObject)
Definition: Object.cpp:1473
Definition: boss_blood_queen_lana_thel.cpp:45
virtual uint32 GetData(uint32) const
Definition: ZoneScript.h:51
void DoZoneInCombat(Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
Definition: CreatureAI.cpp:47
void EnterEvadeMode(EvadeReason why) override
Definition: boss_blood_queen_lana_thel.cpp:247
Player * ToPlayer()
Definition: Object.h:191
void CleanAuras()
Definition: boss_blood_queen_lana_thel.cpp:218
Creature *const me
Definition: CreatureAI.h:71
Definition: CreatureAI.h:90
Definition: InstanceScript.h:59
Definition: icecrown_citadel.h:105
void DoCast(uint32 spellId)
Definition: UnitAI.cpp:101
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
virtual bool SetBossState(uint32 id, EncounterState state)
Definition: InstanceScript.cpp:273
bool _creditBloodQuickening
Definition: boss_blood_queen_lana_thel.cpp:510
Definition: icecrown_citadel.h:83
Definition: boss_blood_queen_lana_thel.cpp:28
virtual bool CheckRequiredBosses(uint32, Player const *=nullptr) const
Definition: InstanceScript.h:236
Definition: icecrown_citadel.h:63
InstanceScript *const instance
Definition: ScriptedCreature.h:340

+ Here is the call graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::EnterEvadeMode ( EvadeReason  why)
inlineoverridevirtual

Reimplemented from CreatureAI.

248  {
249  if (!_EnterEvadeMode(why))
250  return;
251 
252  CleanAuras();
253  if (_killMinchar)
254  {
255  _killMinchar = false;
256  me->SetDisableGravity(true);
259  }
260  else
261  {
264  Reset();
265  }
266  }
void AddUnitState(uint32 f)
Definition: Unit.h:1394
MotionMaster * GetMotionMaster()
Definition: Unit.h:2101
void MoveTargetedHome()
Definition: MotionMaster.cpp:201
Definition: Unit.h:253
bool SetDisableGravity(bool disable, bool packetOnly=false)
Definition: Unit.cpp:15818
bool _EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
Definition: CreatureAI.cpp:255
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition: Object.cpp:1252
void CleanAuras()
Definition: boss_blood_queen_lana_thel.cpp:218
Creature *const me
Definition: CreatureAI.h:71
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
Definition: MotionMaster.h:172
Definition: Unit.h:571
void Reset() override
Definition: boss_blood_queen_lana_thel.cpp:156
Position const mincharPos
Definition: boss_blood_queen_lana_thel.cpp:127
bool _killMinchar
Definition: boss_blood_queen_lana_thel.cpp:511
Definition: UpdateFields.h:124
Definition: boss_blood_queen_lana_thel.cpp:122

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::Initialize ( void  )
inline
150  {
152  _creditBloodQuickening = false;
153  _killMinchar = false;
154  }
bool _creditBloodQuickening
Definition: boss_blood_queen_lana_thel.cpp:510
void Clear()
Definition: ObjectGuid.h:215
bool _killMinchar
Definition: boss_blood_queen_lana_thel.cpp:511
ObjectGuid _offtankGUID
Definition: boss_blood_queen_lana_thel.cpp:509

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::JustDied ( Unit killer)
inlineoverridevirtual

Reimplemented from BossAI.

193  {
194  _JustDied();
195  Talk(SAY_DEATH);
196 
199 
200  CleanAuras();
201  // Blah, credit the quest
203  {
205  if (Player* player = killer->ToPlayer())
206  player->RewardPlayerAndGroupAtEvent(Is25ManRaid() ? NPC_INFILTRATOR_MINCHAR_BQ_25 : NPC_INFILTRATOR_MINCHAR_BQ, player);
207  if (Creature* minchar = me->FindNearestCreature(NPC_INFILTRATOR_MINCHAR_BQ, 200.0f))
208  {
209  minchar->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0);
210  minchar->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, UNIT_BYTE1_FLAG_ALWAYS_STAND);
211  minchar->SetCanFly(false);
212  minchar->RemoveAllAuras();
213  minchar->GetMotionMaster()->MoveCharge(4629.3711f, 2782.6089f, 401.5301f, SPEED_CHARGE / 3.0f);
214  }
215  }
216  }
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
Definition: Unit.cpp:4240
Definition: UpdateFields.h:136
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition: UnitAI.cpp:167
Definition: icecrown_citadel.h:58
Definition: inflate.h:49
void _JustDied()
Definition: ScriptedCreature.cpp:471
Definition: icecrown_citadel.h:159
Definition: Unit.h:253
Definition: Creature.h:467
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
Definition: Object.cpp:2443
Player * ToPlayer()
Definition: Object.h:191
void CleanAuras()
Definition: boss_blood_queen_lana_thel.cpp:218
Definition: boss_blood_queen_lana_thel.cpp:39
Definition: icecrown_citadel.h:158
Creature *const me
Definition: CreatureAI.h:71
Definition: boss_blood_queen_lana_thel.cpp:70
virtual void SetData(uint32, uint32)
Definition: ZoneScript.h:52
Definition: icecrown_citadel.h:105
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
bool _creditBloodQuickening
Definition: boss_blood_queen_lana_thel.cpp:510
#define SPEED_CHARGE
Definition: MotionMaster.h:80
Definition: UpdateFields.h:124
InstanceScript *const instance
Definition: ScriptedCreature.h:340
bool Is25ManRaid() const
Definition: ScriptedCreature.h:274

+ Here is the call graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::JustReachedHome ( )
inlineoverridevirtual

Reimplemented from BossAI.

269  {
270  me->SetDisableGravity(false);
274  Talk(SAY_WIPE);
276  }
Definition: Unit.h:1131
Definition: Unit.h:253
bool SetDisableGravity(bool disable, bool packetOnly=false)
Definition: Unit.cpp:15818
Definition: InstanceScript.h:60
Creature *const me
Definition: CreatureAI.h:71
void _JustReachedHome()
Definition: ScriptedCreature.h:366
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition: Object.cpp:1271
Definition: boss_blood_queen_lana_thel.cpp:37
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
virtual bool SetBossState(uint32 id, EncounterState state)
Definition: InstanceScript.cpp:273
Definition: icecrown_citadel.h:83
Definition: UpdateFields.h:124
void SetReactState(ReactStates st)
Definition: Creature.h:502
InstanceScript *const instance
Definition: ScriptedCreature.h:340

+ Here is the call graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::KilledUnit ( Unit victim)
inlineoverridevirtual

Reimplemented from ScriptedAI.

279  {
280  if (victim->GetTypeId() == TYPEID_PLAYER)
281  Talk(SAY_KILL);
282  }
TypeID GetTypeId() const
Definition: Object.h:113
Definition: boss_blood_queen_lana_thel.cpp:36
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
Definition: ObjectGuid.h:33

+ Here is the call graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::MovementInform ( uint32  type,
uint32  id 
)
inlineoverridevirtual

Reimplemented from CreatureAI.

300  {
301  if (type != POINT_MOTION_TYPE)
302  return;
303 
304  switch (id)
305  {
306  case POINT_CENTER:
308  events.ScheduleEvent(EVENT_AIR_PHASE, 100000 + uint32(Is25ManRaid() ? 0 : 20000));
312  break;
313  case POINT_AIR:
314  _bloodboltedPlayers.clear();
318  break;
319  case POINT_GROUND:
320  me->SetDisableGravity(false);
323  if (Unit* victim = me->SelectVictim())
324  AttackStart(victim);
326  break;
327  case POINT_MINCHAR:
328  DoCast(me, SPELL_ANNIHILATE, true);
329  // already in evade mode
331  Reset();
332  default:
333  break;
334  }
335  }
Definition: boss_blood_queen_lana_thel.cpp:107
Definition: boss_blood_queen_lana_thel.cpp:66
Definition: boss_blood_queen_lana_thel.cpp:119
Definition: boss_blood_queen_lana_thel.cpp:35
Definition: Unit.h:1131
GuidSet _bloodboltedPlayers
Definition: boss_blood_queen_lana_thel.cpp:508
Definition: boss_blood_queen_lana_thel.cpp:121
Definition: boss_blood_queen_lana_thel.cpp:105
Definition: boss_blood_queen_lana_thel.cpp:100
Definition: boss_blood_queen_lana_thel.cpp:67
MotionMaster * GetMotionMaster()
Definition: Unit.h:2101
void MoveTargetedHome()
Definition: MotionMaster.cpp:201
Definition: Unit.h:253
bool SetDisableGravity(bool disable, bool packetOnly=false)
Definition: Unit.cpp:15818
Definition: boss_blood_queen_lana_thel.cpp:103
Definition: boss_blood_queen_lana_thel.cpp:108
Definition: boss_blood_queen_lana_thel.cpp:65
Creature *const me
Definition: CreatureAI.h:71
Definition: boss_blood_queen_lana_thel.cpp:101
Definition: boss_blood_queen_lana_thel.cpp:98
Definition: boss_blood_queen_lana_thel.cpp:120
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition: Object.cpp:1271
void DoCast(uint32 spellId)
Definition: UnitAI.cpp:101
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
void Reset() override
Definition: boss_blood_queen_lana_thel.cpp:156
void ScheduleEvent(uint32 eventId, Milliseconds const &time, uint32 group=0, uint8 phase=0)
Definition: EventMap.h:123
void RescheduleEvent(uint32 eventId, Milliseconds const &time, uint32 group=0, uint8 phase=0)
Definition: EventMap.h:146
void AttackStart(Unit *) override
Definition: ScriptedCreature.cpp:117
Unit * SelectVictim()
Definition: Unit.cpp:10775
Definition: UpdateFields.h:124
EventMap events
Definition: ScriptedCreature.h:371
Definition: boss_blood_queen_lana_thel.cpp:104
uint32_t uint32
Definition: g3dmath.h:168
Definition: Unit.h:1305
Definition: boss_blood_queen_lana_thel.cpp:122
void SetReactState(ReactStates st)
Definition: Creature.h:502
Definition: MotionMaster.h:46
bool Is25ManRaid() const
Definition: ScriptedCreature.h:274

+ Here is the call graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::Reset ( )
inlineoverridevirtual

Reimplemented from BossAI.

157  {
158  _Reset();
166  events.ScheduleEvent(EVENT_AIR_PHASE, 124000 + uint32(Is25ManRaid() ? 3000 : 0));
167  CleanAuras();
168  _vampires.clear();
169  Initialize();
170  }
Definition: boss_blood_queen_lana_thel.cpp:107
Definition: boss_blood_queen_lana_thel.cpp:97
Definition: boss_blood_queen_lana_thel.cpp:96
Definition: boss_blood_queen_lana_thel.cpp:100
void Initialize()
Definition: boss_blood_queen_lana_thel.cpp:149
Definition: boss_blood_queen_lana_thel.cpp:103
Definition: boss_blood_queen_lana_thel.cpp:108
void CleanAuras()
Definition: boss_blood_queen_lana_thel.cpp:218
Definition: boss_blood_queen_lana_thel.cpp:99
Definition: boss_blood_queen_lana_thel.cpp:101
Definition: boss_blood_queen_lana_thel.cpp:98
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:45
void _Reset()
Definition: ScriptedCreature.cpp:457
void ScheduleEvent(uint32 eventId, Milliseconds const &time, uint32 group=0, uint8 phase=0)
Definition: EventMap.h:123
Definition: boss_blood_queen_lana_thel.cpp:102
EventMap events
Definition: ScriptedCreature.h:371
uint32_t uint32
Definition: g3dmath.h:168
GuidSet _vampires
Definition: boss_blood_queen_lana_thel.cpp:507
bool Is25ManRaid() const
Definition: ScriptedCreature.h:274

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Player* boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::SelectRandomTarget ( bool  includeOfftank,
std::list< Player * > *  targetList = NULL 
)
inlineprivate
477  {
478  std::list<HostileReference*> const& threatlist = me->getThreatManager().getThreatList();
479  std::list<Player*> tempTargets;
480 
481  if (threatlist.empty())
482  return NULL;
483 
484  for (std::list<HostileReference*>::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
485  if (Unit* refTarget = (*itr)->getTarget())
486  if (refTarget != me->GetVictim() && refTarget->GetTypeId() == TYPEID_PLAYER && (includeOfftank || (refTarget->GetGUID() != _offtankGUID)))
487  tempTargets.push_back(refTarget->ToPlayer());
488 
489  if (tempTargets.empty())
490  return NULL;
491 
492  if (targetList)
493  {
494  *targetList = tempTargets;
495  return NULL;
496  }
497 
498  if (includeOfftank)
499  {
500  tempTargets.sort(Trinity::ObjectDistanceOrderPred(me->GetVictim()));
501  return tempTargets.front();
502  }
503 
505  }
C::value_type const & SelectRandomContainerElement(C const &container)
Definition: Containers.h:68
arena_t NULL
Definition: jemalloc_internal.h:624
ThreatContainer::StorageType const & getThreatList() const
Definition: ThreatManager.h:263
Definition: Object.h:668
Creature *const me
Definition: CreatureAI.h:71
TypeID GetTypeId() const
Definition: Object.h:113
Unit * GetVictim() const
Definition: Unit.h:1379
Definition: ObjectGuid.h:33
ThreatManager & getThreatManager()
Definition: Unit.h:1998
ObjectGuid _offtankGUID
Definition: boss_blood_queen_lana_thel.cpp:509
Definition: Unit.h:1305

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::SetGUID ( ObjectGuid  guid,
int32  type = 0 
)
inlineoverridevirtual

Reimplemented from UnitAI.

285  {
286  switch (type)
287  {
288  case GUID_VAMPIRE:
289  _vampires.insert(guid);
290  break;
291  case GUID_BLOODBOLT:
292  _bloodboltedPlayers.insert(guid);
293  break;
294  default:
295  break;
296  }
297  }
GuidSet _bloodboltedPlayers
Definition: boss_blood_queen_lana_thel.cpp:508
Definition: boss_blood_queen_lana_thel.cpp:113
Definition: boss_blood_queen_lana_thel.cpp:114
GuidSet _vampires
Definition: boss_blood_queen_lana_thel.cpp:507
void boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::UpdateAI ( uint32  diff)
inlineoverridevirtual

Reimplemented from BossAI.

338  {
339  if (!UpdateVictim())
340  return;
341 
342  events.Update(diff);
343 
345  return;
346 
347  while (uint32 eventId = events.ExecuteEvent())
348  {
349  switch (eventId)
350  {
351  case EVENT_BERSERK:
353  Talk(SAY_BERSERK);
355  break;
356  case EVENT_VAMPIRIC_BITE:
357  {
358  std::list<Player*> targets;
359  SelectRandomTarget(false, &targets);
360  if (!targets.empty())
361  {
362  Unit* target = targets.front();
363  DoCast(target, SPELL_VAMPIRIC_BITE);
366  _vampires.insert(target->GetGUID());
369  }
370  break;
371  }
372  case EVENT_BLOOD_MIRROR:
373  {
374  // victim can be NULL when this is processed in the same update tick as EVENT_AIR_PHASE
375  if (me->GetVictim())
376  {
377  Player* newOfftank = SelectRandomTarget(true);
378  if (newOfftank)
379  {
380  if (_offtankGUID != newOfftank->GetGUID())
381  {
382  _offtankGUID = newOfftank->GetGUID();
383 
384  // both spells have SPELL_ATTR5_SINGLE_TARGET_SPELL, no manual removal needed
385  newOfftank->CastSpell(me->GetVictim(), SPELL_BLOOD_MIRROR_DAMAGE, true);
386  me->EnsureVictim()->CastSpell(newOfftank, SPELL_BLOOD_MIRROR_DUMMY, true);
388  if (Is25ManRaid() && newOfftank->GetQuestStatus(QUEST_BLOOD_INFUSION) == QUEST_STATUS_INCOMPLETE &&
389  newOfftank->HasAura(SPELL_UNSATED_CRAVING) && !newOfftank->HasAura(SPELL_THIRST_QUENCHED) &&
390  !newOfftank->HasAura(SPELL_GUSHING_WOUND))
391  newOfftank->CastSpell(newOfftank, SPELL_GUSHING_WOUND, TRIGGERED_FULL_MASK);
392 
393  }
394  }
395  else
397  }
399  break;
400  }
403  if (Player* _offtank = ObjectAccessor::GetPlayer(*me, _offtankGUID))
404  DoCast(_offtank, SPELL_DELIRIOUS_SLASH);
406  break;
408  {
409  std::list<Player*> targets;
410  SelectRandomTarget(false, &targets);
412  if (targets.size() > 1)
413  {
415  for (std::list<Player*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
417  }
419  break;
420  }
422  if (Player* target = SelectRandomTarget(false))
423  {
424  Talk(EMOTE_SWARMING_SHADOWS, target);
427  }
429  break;
431  {
432  std::list<Player*> targets;
433  SelectRandomTarget(false, &targets);
434  Trinity::Containers::RandomResizeList<Player*>(targets, uint32(Is25ManRaid() ? 4 : 2));
435  for (std::list<Player*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
439  break;
440  }
441  case EVENT_AIR_PHASE:
442  DoStopAttack();
447  break;
449  me->SetDisableGravity(true);
452  break;
453  case EVENT_AIR_FLY_DOWN:
455  break;
456  default:
457  break;
458  }
459  }
460 
462  }
Definition: boss_blood_queen_lana_thel.cpp:77
Unit * EnsureVictim() const
Definition: Unit.h:1381
Definition: boss_blood_queen_lana_thel.cpp:107
Definition: boss_blood_queen_lana_thel.cpp:97
void DoCastAOE(uint32 spellId, bool triggered=false)
Definition: UnitAI.cpp:167
Definition: boss_blood_queen_lana_thel.cpp:96
Definition: boss_blood_queen_lana_thel.cpp:119
bool UpdateVictim()
Definition: CreatureAI.cpp:233
void CancelEventGroup(uint32 group)
Definition: EventMap.cpp:103
Definition: boss_blood_queen_lana_thel.cpp:29
Definition: boss_blood_queen_lana_thel.cpp:62
Definition: Unit.h:565
Definition: boss_blood_queen_lana_thel.cpp:57
Definition: boss_blood_queen_lana_thel.cpp:121
Definition: Unit.h:1129
Position const centerPos
Definition: boss_blood_queen_lana_thel.cpp:125
Definition: boss_blood_queen_lana_thel.cpp:105
Definition: boss_blood_queen_lana_thel.cpp:100
Definition: boss_blood_queen_lana_thel.cpp:78
MotionMaster * GetMotionMaster()
Definition: Unit.h:2101
Definition: Unit.h:254
Definition: boss_blood_queen_lana_thel.cpp:53
void RandomResizeList(std::list< T > &list, uint32 size)
Definition: Containers.h:34
bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
Definition: Object.cpp:1298
Will ignore most target checks (mostly DBC target checks)
Definition: Unit.h:479
Definition: boss_blood_queen_lana_thel.cpp:38
Definition: Unit.h:253
bool SetDisableGravity(bool disable, bool packetOnly=false)
Definition: Unit.cpp:15818
void DoStopAttack()
Definition: ScriptedCreature.cpp:148
Definition: boss_blood_queen_lana_thel.cpp:34
Definition: boss_blood_queen_lana_thel.cpp:55
Definition: boss_blood_queen_lana_thel.cpp:103
Definition: boss_blood_queen_lana_thel.cpp:108
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition: Object.cpp:1252
Definition: boss_blood_queen_lana_thel.cpp:99
Creature *const me
Definition: CreatureAI.h:71
Definition: boss_blood_queen_lana_thel.cpp:101
Definition: boss_blood_queen_lana_thel.cpp:64
void MovePoint(uint32 id, Position const &pos, bool generatePath=true)
Definition: MotionMaster.h:172
Definition: boss_blood_queen_lana_thel.cpp:98
Definition: boss_blood_queen_lana_thel.cpp:60
Player * SelectRandomTarget(bool includeOfftank, std::list< Player * > *targetList=NULL)
Definition: boss_blood_queen_lana_thel.cpp:476
Definition: boss_blood_queen_lana_thel.cpp:120
Definition: boss_blood_queen_lana_thel.cpp:33
Unit * GetVictim() const
Definition: Unit.h:1379
TC_GAME_API Player * GetPlayer(Map const *, ObjectGuid const &guid)
Definition: ObjectAccessor.cpp:184
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:45
Definition: boss_blood_queen_lana_thel.cpp:47
uint32_t uint32
Definition: Define.h:150
Definition: boss_blood_queen_lana_thel.cpp:75
void DoCast(uint32 spellId)
Definition: UnitAI.cpp:101
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
Definition: CreatureAI.cpp:42
#define SPELL_BERSERK
Definition: boss_four_horsemen.cpp:74
Definition: icecrown_citadel.h:57
void ScheduleEvent(uint32 eventId, Milliseconds const &time, uint32 group=0, uint8 phase=0)
Definition: EventMap.h:123
Definition: boss_blood_queen_lana_thel.cpp:58
void Update(uint32 time)
Definition: EventMap.h:54
Definition: boss_blood_queen_lana_thel.cpp:102
void Clear()
Definition: ObjectGuid.h:215
Definition: boss_blood_queen_lana_thel.cpp:32
ObjectGuid const & GetGUID() const
Definition: Object.h:105
Definition: boss_blood_queen_lana_thel.cpp:56
Definition: boss_blood_queen_lana_thel.cpp:40
uint32 ExecuteEvent()
Definition: EventMap.cpp:46
Definition: boss_blood_queen_lana_thel.cpp:63
Definition: QuestDef.h:113
Definition: UpdateFields.h:124
void DoMeleeAttackIfReady()
Definition: UnitAI.cpp:49
bool HasUnitState(const uint32 f) const
Definition: Unit.h:1395
EventMap events
Definition: ScriptedCreature.h:371
Definition: boss_blood_queen_lana_thel.cpp:104
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition: UnitAI.cpp:159
Definition: boss_blood_queen_lana_thel.cpp:54
uint32_t uint32
Definition: g3dmath.h:168
ObjectGuid _offtankGUID
Definition: boss_blood_queen_lana_thel.cpp:509
Position const airPos
Definition: boss_blood_queen_lana_thel.cpp:126
Definition: Unit.h:1305
void SetReactState(ReactStates st)
Definition: Creature.h:502
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition: Unit.cpp:869
void DelayEvents(Milliseconds const &delay)
Definition: EventMap.h:219
bool IsEmpty() const
Definition: ObjectGuid.h:242
Definition: boss_blood_queen_lana_thel.cpp:48
GuidSet _vampires
Definition: boss_blood_queen_lana_thel.cpp:507
bool Is25ManRaid() const
Definition: ScriptedCreature.h:274

+ Here is the call graph for this function:

bool boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::WasBloodbolted ( ObjectGuid  guid) const
inline
470  {
471  return _bloodboltedPlayers.count(guid) != 0;
472  }
GuidSet _bloodboltedPlayers
Definition: boss_blood_queen_lana_thel.cpp:508

+ Here is the caller graph for this function:

bool boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::WasVampire ( ObjectGuid  guid) const
inline
465  {
466  return _vampires.count(guid) != 0;
467  }
GuidSet _vampires
Definition: boss_blood_queen_lana_thel.cpp:507

Member Data Documentation

GuidSet boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::_bloodboltedPlayers
private
bool boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::_creditBloodQuickening
private
bool boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::_killMinchar
private
ObjectGuid boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::_offtankGUID
private
GuidSet boss_blood_queen_lana_thel::boss_blood_queen_lana_thelAI::_vampires
private

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