150 { 515.5848f, 544.2007f, 673.6272f },
151 { 562.191f , 514.068f , 696.4448f },
152 { 610.3828f, 518.6407f, 695.9385f },
153 { 530.42f , 560.003f, 733.0308f }
163 if (pair.second->GetOther(
me)->IsControlledByPlayer())
183 std::list<TempSummon*> summoned;
256 std::list<Creature*> triggers;
265 nerubian->DespawnOrUnsummon();
436 std::list<Creature*> others;
442 other->AI()->AttackStart(who);
492 { 529.6913f, 547.1257f, 731.9155f, 4.799650f },
493 { 517.51f , 561.439f , 734.0306f, 4.520403f },
494 { 543.414f , 551.728f , 732.0522f, 3.996804f }
550 { 539.2076f, 549.7539f, 732.8668f, 4.55531f },
551 { 527.3098f, 559.5197f, 732.9407f, 4.742493f },
582 { 520.3911f, 548.7895f, 732.0118f, 5.0091f },
584 { 550.9611f, 545.1674f, 731.9031f, 3.996804f }
615 { 507.6937f, 563.3471f, 734.8986f, 4.520403f },
616 { 535.1049f, 552.8961f, 732.8441f, 3.996804f },
647 { 485.314606f, 611.418640f, 771.428406f },
648 { 575.760437f, 611.516418f, 771.427368f },
649 { 588.930725f, 598.233276f, 739.142151f }
653 { 513.574341f, 587.022156f, 736.229065f },
654 { 537.920410f, 580.436157f, 732.796692f },
655 { 601.289246f, 583.259644f, 725.443054f },
659 { 571.498718f, 576.978333f, 727.582947f },
660 { 571.498718f, 576.978333f, 727.582947f },
695 float dist = HUGE_VALF;
721 static const float zCutoff = 702.0f;
723 if (hadronox && hadronox->
IsAlive())
866 effect->SetPeriodicTimer(
urandms(2, 17));
std::chrono::seconds Seconds
Seconds shorthand typedef.
Milliseconds randtime(Milliseconds min, Milliseconds max)
uint32 urand(uint32 min, uint32 max)
uint32 urandms(uint32 min, uint32 max)
#define RegisterSpellScript(spell_script)
@ SPELL_EFFECT_APPLY_AURA
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_LEECH
@ SPELL_AURA_PERIODIC_DUMMY
#define SpellEffectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
#define AuraEffectRemoveFn(F, I, N, M)
#define RegisterAzjolNerubCreatureAI(ai_name)
static const Position initialMoves[NUM_SPAWNS]
static const uint8 NUM_SPAWNS
static const Position necromancerWaypoints[]
@ SPELL_SUMMON_CRYPT_FIEND_BOTTOM
@ SPELL_SUMMON_NECROMANCER_BOTTOM
@ SPELL_SUMMON_CRYPT_FIEND_PERIODIC
@ SPELL_SUMMON_NECROMANCER_TOP
@ SPELL_SUMMON_CHAMPION_TOP
@ SPELL_LEECH_POISON_HEAL
@ SPELL_SUMMON_CRYPT_FIEND_TOP
@ SPELL_SUMMON_NECROMANCER_PERIODIC
@ SPELL_SUMMON_CHAMPION_PERIODIC
@ SPELL_SUMMON_CHAMPION_BOTTOM
static const Position hadronoxStep[NUM_STEPS]
static const uint8 NUM_STEPS
static const Position downstairsMoves[NUM_SPAWNS]
static const Position cryptFiendWaypoints[]
void AddSC_boss_hadronox()
static const Position crusherWaypoints[]
static const Position championWaypoints[]
@ DATA_HADRONOX_WEBBED_DOORS
@ DATA_HADRONOX_ENTERED_COMBAT
static const Position downstairsMoves2[NUM_SPAWNS]
AuraApplication const * GetTargetApplication() const
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
AuraEffect * GetEffect(uint8 effIndex) const
HookList< EffectApplyHandler > OnEffectRemove
virtual void Remove(AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)=0
InstanceScript *const instance
void _DespawnAtEvade(Seconds delayToRespawn=30s, Creature *who=nullptr)
bool CanAIAttack(Unit const *target) const override
std::unordered_map< ObjectGuid, CombatReference * > const & GetPvECombatRefs() const
virtual void MoveInLineOfSight(Unit *)
virtual void JustEngagedWith(Unit *)
virtual void JustDied(Unit *)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
virtual void JustAppeared()
void SetHomePosition(float x, float y, float z, float o)
float GetAttackDistance(Unit const *player) const
void GetHomePosition(float &x, float &y, float &z, float &ori) const
bool HasReactState(ReactStates state) const
void SetReactState(ReactStates st)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
bool CanStartAttack(Unit const *u, bool force) const
void Repeat(Milliseconds time)
void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group=0, uint8 phase=0)
virtual bool SetBossState(uint32 id, EncounterState state)
Creature * GetCreature(uint32 type)
EncounterState GetBossState(uint32 id) const
virtual bool CheckRequiredBosses(uint32, Player const *=nullptr) const
MovementGeneratorType GetCurrentMovementGeneratorType() const
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={}, Optional< Scripting::v2::ActionResultSetter< MovementStopReason > > &&scriptResult={})
static Creature * ToCreature(Object *o)
static ObjectGuid GetGUID(Object const *o)
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
Unit * GetHitUnit() const
HookList< EffectHandler > OnEffectHitTarget
void Summon(Creature const *summon)
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
virtual void InitializeAI()
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCast(uint32 spellId)
float GetHealthPct() const
MotionMaster * GetMotionMaster()
void SetBoundingRadius(float boundingRadius)
void SetCombatReach(float combatReach)
bool HealthBelowPct(int32 pct) const
void SetFacingTo(float const ori, bool force=true)
bool HasUnitState(const uint32 f) const
bool IsControlledByPlayer() const
bool HealthBelowPctDamaged(int32 pct, uint32 damage) const
CombatManager & GetCombatManager()
InstanceScript * GetInstanceScript() const
void GetCreatureListWithEntryInGrid(Container &creatureContainer, uint32 entry, float maxSearchRange=250.0f) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
void setActive(bool isActiveObject)
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
float GetDistance(WorldObject const *obj) const
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
bool OnCheck(Player *, Unit *target) override
achievement_hadronox_denied()
bool Validate(SpellInfo const *) override
void HandleEffectRemove(AuraEffect const *, AuraEffectHandleModes)
spell_hadronox_periodic_summon_champion_AuraScript()
AuraScript * GetAuraScript() const override
spell_hadronox_periodic_summon_champion()
spell_hadronox_periodic_summon_crypt_fiend_AuraScript()
AuraScript * GetAuraScript() const override
spell_hadronox_periodic_summon_crypt_fiend()
spell_hadronox_periodic_summon_necromancer_AuraScript()
spell_hadronox_periodic_summon_necromancer()
AuraScript * GetAuraScript() const override
void HandlePeriodic(AuraEffect const *)
void HandleApply(AuraEffect const *, AuraEffectHandleModes)
spell_hadronox_periodic_summon_template_AuraScript(uint32 topSpellId, uint32 bottomSpellId)
bool Validate(SpellInfo const *) override
bool Validate(SpellInfo const *) override
void HandleDummy(SpellEffIndex)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
constexpr float GetExactDistSq(float x, float y, float z) const
constexpr float GetPositionZ() const
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
void SetCombatMovement(bool allowMovement)
bool IsInCombatWithPlayer() const
void DamageTaken(Unit *who, uint32 &damage, DamageEffectType, SpellInfo const *) override
bool _lastPlayerCombatState
void JustEngagedWith(Unit *) override
void DoAction(int32 action) override
void InitializeAI() override
void JustSummoned(Creature *summon) override
void MovementInform(uint32 type, uint32) override
boss_hadronox(Creature *creature)
bool CanAIAttack(Unit const *target) const override
void JustAppeared() override
void EnterEvadeMode(EvadeReason) override
void SetGUID(ObjectGuid const &guid, int32 id) override
std::list< ObjectGuid > _anubar
uint32 GetData(uint32 data) const override
void SummonCrusherPack(SummonGroups group)
void UpdateAI(uint32 diff) override
void DoEvent(uint32 eventId) override
npc_anub_ar_champion(Creature *creature)
void JustEngagedWith(Unit *) override
void DoEvent(uint32 eventId) override
npc_anub_ar_crusher_champion(Creature *creature)
void _JustEngagedWith() override
void DoEvent(uint32 eventId) override
npc_anub_ar_crusher_crypt_fiend(Creature *creature)
void _JustEngagedWith() override
npc_anub_ar_crusher_necromancer(Creature *creature)
void DoEvent(uint32 eventId) override
void _JustEngagedWith() override
npc_anub_ar_crusher(Creature *creature)
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void JustDied(Unit *killer) override
void _JustEngagedWith() override
void DoEvent(uint32 eventId) override
void DoEvent(uint32 eventId) override
void JustEngagedWith(Unit *) override
npc_anub_ar_crypt_fiend(Creature *creature)
void DoEvent(uint32 eventId) override
npc_anub_ar_necromancer(Creature *creature)
void JustEngagedWith(Unit *) override
InstanceScript *const _instance
void UpdateAI(uint32 diff) override
void MoveInLineOfSight(Unit *who) override
void DoAction(int32 action) override
virtual void _JustEngagedWith()=0
virtual void DoEvent(uint32)=0
void MovementInform(uint32 type, uint32 id) override
Position const *const _positions
npc_hadronox_crusherPackAI(Creature *creature, Position const *positions)
void SetData(uint32 data, uint32 value) override
void JustEngagedWith(Unit *who) override
void EnterEvadeMode(EvadeReason) override
uint32 GetData(uint32 data) const override
void MovementInform(uint32 type, uint32 id) override
virtual void DoEvent(uint32)=0
void EnterEvadeMode(EvadeReason) override
void InitializeAI() override
void UpdateAI(uint32 diff) override
InstanceScript *const _instance
npc_hadronox_foeAI(Creature *creature)