AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
npc_halion_controller::npc_halion_controllerAI Struct Reference
Inheritance diagram for npc_halion_controller::npc_halion_controllerAI:
NullCreatureAI CreatureAI UnitAI

Public Member Functions

 npc_halion_controllerAI (Creature *creature)
 
void Reset () override
 
void SetData (uint32 id, uint32 value) override
 
void DoAction (int32 action) override
 
void UpdateAI (uint32 diff) override
 
- Public Member Functions inherited from NullCreatureAI
 NullCreatureAI (Creature *c)
 
void MoveInLineOfSight (Unit *) override
 
void AttackStart (Unit *) override
 
void UpdateAI (uint32) override
 
void EnterEvadeMode (EvadeReason) override
 
void OnCharmed (bool) override
 
- 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
 

Private Member Functions

void UpdateCorporeality ()
 

Private Attributes

EventMap _events
 
InstanceScript_instance
 
uint8 _corporeality
 
uint32 _materialDamage
 
uint32 _twilightDamage
 

Additional Inherited Members

- 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 NullCreatureAI
static int32 Permissible (Creature const *creature)
 
- 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 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_halion_controllerAI()

npc_halion_controller::npc_halion_controllerAI::npc_halion_controllerAI ( Creature creature)
inline
592 : NullCreatureAI(creature), _instance(creature->GetInstanceScript())
593 {
594 }
Definition: PassiveAI.h:53
InstanceScript * GetInstanceScript() const
Definition: Object.cpp:1192
InstanceScript * _instance
Definition: boss_halion.cpp:741

Member Function Documentation

◆ DoAction()

void npc_halion_controller::npc_halion_controllerAI::DoAction ( int32  action)
inlineoverridevirtual

Reimplemented from UnitAI.

613 {
614 if (action == ACTION_INTRO_HALION)
616 else if (action == ACTION_CHECK_CORPOREALITY)
617 {
618 _materialDamage = 1;
619 _twilightDamage = 1;
620 _corporeality = 5;
622 }
623 else if (action == ACTION_RESET_ENCOUNTER)
624 {
625 _events.Reset();
626 _materialDamage = 1;
627 _twilightDamage = 1;
628 _corporeality = 5;
629 }
630 }
@ ACTION_RESET_ENCOUNTER
Definition: boss_halion.cpp:155
@ ACTION_CHECK_CORPOREALITY
Definition: boss_halion.cpp:154
@ EVENT_START_INTRO
Definition: boss_halion.cpp:144
@ EVENT_CHECK_CORPOREALITY
Definition: boss_halion.cpp:139
@ ACTION_INTRO_HALION
Definition: ruby_sanctum.h:54
void ScheduleEvent(uint32 eventId, uint32 time, uint32 group=0, uint32 phase=0)
Definition: EventMap.cpp:56
void Reset()
Definition: EventMap.cpp:21
uint32 _twilightDamage
Definition: boss_halion.cpp:744
uint8 _corporeality
Definition: boss_halion.cpp:742
EventMap _events
Definition: boss_halion.cpp:740
uint32 _materialDamage
Definition: boss_halion.cpp:743

References _corporeality, _events, _materialDamage, _twilightDamage, ACTION_CHECK_CORPOREALITY, ACTION_INTRO_HALION, ACTION_RESET_ENCOUNTER, EVENT_CHECK_CORPOREALITY, EVENT_START_INTRO, EventMap::Reset(), and EventMap::ScheduleEvent().

Referenced by UpdateCorporeality().

◆ Reset()

void npc_halion_controller::npc_halion_controllerAI::Reset ( )
inlineoverridevirtual

Reimplemented from UnitAI.

597 {
598 _events.Reset();
599 }

References _events, and EventMap::Reset().

◆ SetData()

void npc_halion_controller::npc_halion_controllerAI::SetData ( uint32  id,
uint32  value 
)
inlineoverridevirtual

Reimplemented from UnitAI.

602 {
604 return;
605
607 _materialDamage += value;
608 else
609 _twilightDamage += value;
610 }
@ DATA_MATERIAL_DAMAGE_TAKEN
Definition: boss_halion.cpp:158
uint32 GetNextEventTime(uint32 eventId) const
Definition: EventMap.cpp:230

References _events, _materialDamage, _twilightDamage, DATA_MATERIAL_DAMAGE_TAKEN, EVENT_CHECK_CORPOREALITY, and EventMap::GetNextEventTime().

◆ UpdateAI()

void npc_halion_controller::npc_halion_controllerAI::UpdateAI ( uint32  diff)
inlineoverridevirtual

Reimplemented from NullCreatureAI.

633 {
634 _events.Update(diff);
635 switch (_events.ExecuteEvent())
636 {
637 // Intro
641 break;
646 break;
651 break;
657 break;
660 {
661 halion->SetVisible(true);
662 halion->SetReactState(REACT_AGGRESSIVE);
663 halion->AI()->Talk(SAY_INTRO);
664 }
665 break;
667 me->CastSpell((Unit*)nullptr, SPELL_TWILIGHT_MENDING, true);
668 break;
672 break;
673 }
674 }
@ REACT_AGGRESSIVE
Definition: Unit.h:1025
@ DONE
Definition: InstanceScript.h:59
@ NOT_STARTED
Definition: InstanceScript.h:56
@ SPELL_COSMETIC_FIRE_PILLAR
Definition: boss_halion.cpp:104
@ SPELL_TWILIGHT_MENDING
Definition: boss_halion.cpp:115
@ SPELL_FIERY_EXPLOSION
Definition: boss_halion.cpp:105
@ SAY_INTRO
Definition: boss_halion.cpp:36
@ EVENT_TWILIGHT_MENDING
Definition: boss_halion.cpp:140
@ EVENT_INTRO_PROGRESS_1
Definition: boss_halion.cpp:145
@ EVENT_INTRO_PROGRESS_2
Definition: boss_halion.cpp:146
@ EVENT_INTRO_PROGRESS_3
Definition: boss_halion.cpp:147
@ EVENT_INTRO_PROGRESS_4
Definition: boss_halion.cpp:148
@ NPC_HALION
Definition: ruby_sanctum.h:73
@ DATA_HALION_INTRO_DONE
Definition: ruby_sanctum.h:42
@ DATA_HALION_INTRO1
Definition: ruby_sanctum.h:40
@ DATA_HALION_INTRO2
Definition: ruby_sanctum.h:41
Creature * GetCreature(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:215
uint32 ExecuteEvent()
Definition: EventMap.cpp:114
void Update(uint32 time)
Definition: EventMap.h:54
Creature *const me
Definition: CreatureAI.h:72
Definition: Creature.h:46
Definition: Unit.h:1290
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:1169
virtual bool SetBossState(uint32 id, EncounterState state)
Definition: InstanceScript.cpp:317
ObjectGuid GetGuidData(uint32 type) const override
Definition: InstanceScript.cpp:94
void UpdateCorporeality()
Definition: boss_halion.cpp:677

References _events, _instance, Unit::CastSpell(), DATA_HALION_INTRO1, DATA_HALION_INTRO2, DATA_HALION_INTRO_DONE, DONE, EVENT_CHECK_CORPOREALITY, EVENT_INTRO_PROGRESS_1, EVENT_INTRO_PROGRESS_2, EVENT_INTRO_PROGRESS_3, EVENT_INTRO_PROGRESS_4, EVENT_START_INTRO, EVENT_TWILIGHT_MENDING, EventMap::ExecuteEvent(), ObjectAccessor::GetCreature(), InstanceScript::GetGuidData(), CreatureAI::me, NOT_STARTED, NPC_HALION, REACT_AGGRESSIVE, SAY_INTRO, EventMap::ScheduleEvent(), InstanceScript::SetBossState(), SPELL_COSMETIC_FIRE_PILLAR, SPELL_FIERY_EXPLOSION, SPELL_TWILIGHT_MENDING, EventMap::Update(), and UpdateCorporeality().

◆ UpdateCorporeality()

void npc_halion_controller::npc_halion_controllerAI::UpdateCorporeality ( )
inlineprivate
678 {
680 {
682 return;
683 }
684
685 uint8 oldValue = _corporeality;
686 float damageRatio = float(_materialDamage) / float(_twilightDamage);
687
688 if (_twilightDamage == 1 || _materialDamage == 1)
690
691 _twilightDamage = 1;
692 _materialDamage = 1;
693
695 if (damageRatio < 0.98f)
696 action = CORPOREALITY_INCREASE;
697 else if (1.02f < damageRatio)
698 action = CORPOREALITY_DECREASE;
699 else
700 return;
701
702 switch (action)
703 {
705 {
707 return;
709 break;
710 }
712 {
713 if (_corporeality == 0)
714 return;
716 break;
717 }
718 default:
719 break;
720 }
721
724
726 {
727 twilightHalion->RemoveAurasDueToSpell(_corporealityReference[MAX_CORPOREALITY_STATE - 1 - oldValue]);
728 twilightHalion->CastSpell(twilightHalion, _corporealityReference[MAX_CORPOREALITY_STATE - 1 - _corporeality], true);
729 twilightHalion->AI()->Talk(oldValue < _corporeality ? EMOTE_CORPOREALITY_TOT : EMOTE_CORPOREALITY_TIT);
730 }
731
733 {
734 halion->RemoveAurasDueToSpell(_corporealityReference[oldValue]);
735 halion->CastSpell(halion, _corporealityReference[_corporeality], true);
736 halion->AI()->Talk(oldValue > _corporeality ? EMOTE_CORPOREALITY_POT : EMOTE_CORPOREALITY_PIP);
737 }
738 }
std::uint8_t uint8
Definition: Define.h:110
uint32 const _corporealityReference[MAX_CORPOREALITY_STATE]
Definition: boss_halion.cpp:175
@ EMOTE_CORPOREALITY_TOT
Definition: boss_halion.cpp:50
@ EMOTE_CORPOREALITY_PIP
Definition: boss_halion.cpp:44
@ EMOTE_CORPOREALITY_POT
Definition: boss_halion.cpp:43
@ EMOTE_CORPOREALITY_TIT
Definition: boss_halion.cpp:49
CorporealityEvent
Definition: boss_halion.cpp:167
@ MAX_CORPOREALITY_STATE
Definition: boss_halion.cpp:172
@ CORPOREALITY_DECREASE
Definition: boss_halion.cpp:171
@ CORPOREALITY_INCREASE
Definition: boss_halion.cpp:170
@ CORPOREALITY_NONE
Definition: boss_halion.cpp:168
@ NPC_TWILIGHT_HALION
Definition: ruby_sanctum.h:74
@ WORLDSTATE_CORPOREALITY_MATERIAL
Definition: ruby_sanctum.h:107
@ WORLDSTATE_CORPOREALITY_TWILIGHT
Definition: ruby_sanctum.h:108
virtual bool IsEncounterInProgress() const
Definition: InstanceScript.cpp:121
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
Definition: InstanceScript.cpp:519
void DoAction(int32 action) override
Definition: boss_halion.cpp:612

References _corporeality, _corporealityReference, _events, _instance, _materialDamage, _twilightDamage, ACTION_RESET_ENCOUNTER, CORPOREALITY_DECREASE, CORPOREALITY_INCREASE, CORPOREALITY_NONE, DoAction(), InstanceScript::DoUpdateWorldState(), EMOTE_CORPOREALITY_PIP, EMOTE_CORPOREALITY_POT, EMOTE_CORPOREALITY_TIT, EMOTE_CORPOREALITY_TOT, EVENT_TWILIGHT_MENDING, ObjectAccessor::GetCreature(), InstanceScript::GetGuidData(), InstanceScript::IsEncounterInProgress(), MAX_CORPOREALITY_STATE, CreatureAI::me, NPC_HALION, NPC_TWILIGHT_HALION, EventMap::ScheduleEvent(), WORLDSTATE_CORPOREALITY_MATERIAL, and WORLDSTATE_CORPOREALITY_TWILIGHT.

Referenced by UpdateAI().

Member Data Documentation

◆ _corporeality

uint8 npc_halion_controller::npc_halion_controllerAI::_corporeality
private

Referenced by DoAction(), and UpdateCorporeality().

◆ _events

EventMap npc_halion_controller::npc_halion_controllerAI::_events
private

◆ _instance

InstanceScript* npc_halion_controller::npc_halion_controllerAI::_instance
private

Referenced by UpdateAI(), and UpdateCorporeality().

◆ _materialDamage

uint32 npc_halion_controller::npc_halion_controllerAI::_materialDamage
private

◆ _twilightDamage

uint32 npc_halion_controller::npc_halion_controllerAI::_twilightDamage
private