146 { 3768.40f, -5072.00f, 143.65f },
147 { 3729.30f, -5044.10f, 143.65f },
148 { 3683.00f, -5054.05f, 143.65f },
149 { 3654.15f, -5093.48f, 143.65f },
150 { 3664.55f, -5140.50f, 143.65f },
151 { 3704.00f, -5170.00f, 143.65f },
152 { 3751.95f, -5158.90f, 143.65f }
165 relDistance = 1 - relDistance;
265 if (cSummon->IsAlive() && cSummon->GetEntry() ==
NPC_GUARDIAN)
289 std::list<Unit*> targets;
291 for (
Unit* target : targets)
337 std::list<Creature*> skeletons;
339 if (skeletons.empty())
344 std::list<Creature*>::iterator it = skeletons.begin();
345 std::advance(it,
urand(0, skeletons.size() - 1));
347 (*it)->AI()->DoZoneInCombat();
416 std::vector<Creature*> toDespawn;
420 if (!summon->IsInCombat())
421 toDespawn.push_back(summon);
423 summon->DespawnOrUnsummon();
493 std::list<TempSummon*> summoned;
536 std::list<TempSummon*> summoned;
610 std::list<Creature*> others;
616 other->AI()->AttackStart(who);
773 kelthuzad->AI()->EnterEvadeMode();
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::minutes Minutes
Minutes shorthand typedef.
@ TEMPSUMMON_CORPSE_TIMED_DESPAWN
Milliseconds randtime(Milliseconds min, Milliseconds max)
uint32 urand(uint32 min, uint32 max)
uint32 urandms(uint32 min, uint32 max)
#define RegisterSpellScript(spell_script)
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_MOD_DAMAGE_PERCENT_DONE
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectApplyFn(F, I, N, M)
static Position GetRandomPositionOnCircle(Position const ¢er, float radius)
@ SUMMON_GROUP_GUARDIAN_FIRST
@ SUMMON_GROUP_MINION_FIRST
@ ACTION_ABOMINATION_DIED
static const uint8 nGuardianSpawns
static const uint8 nMinionGroups
static const Position minionSpawnPoints[nMinionSpawnPoints]
void AddSC_boss_kelthuzad()
@ SPELL_MANA_DETONATION_DAMAGE
@ DATA_ABOMINATION_DEATH_COUNT
static const uint8 nMinionSpawnPoints
static const float MINION_AGGRO_DISTANCE
static Position const & GetRandomMinionSpawnPoint()
static NAXData64 const portalList[]
@ EVENT_TRANSITION_SUMMON
void HandleAuraModScale(AuraApplication const *aurApp, uint8 mode, bool apply) const
void PreventDefaultAction()
AuraApplication const * GetTargetApplication() const
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
HookList< EffectApplyHandler > AfterEffectApply
InstanceScript *const instance
void _DespawnAtEvade(Seconds delayToRespawn=30s, Creature *who=nullptr)
virtual void MoveInLineOfSight(Unit *)
virtual void JustEngagedWith(Unit *)
virtual void JustDied(Unit *)
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void SetCombatPulseDelay(uint32 delay)
void SetHomePosition(float x, float y, float z, float o)
void SetImmuneToPC(bool apply) override
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)
bool IsInPhase(uint8 phase) const
void SetPhase(uint8 phase)
virtual bool SetBossState(uint32 id, EncounterState state)
virtual ObjectGuid GetGuidData(uint32 type) const override
EncounterState GetBossState(uint32 id) const
Unit * SelectAttackTarget() const override
KelThuzadCharmedPlayerAI(Player *player)
void MovePoint(uint32 id, Position const &pos, bool generatePath=true, Optional< float > finalOrient={}, Optional< float > speed={}, MovementWalkRunSpeedSelectionMode speedSelectionMode=MovementWalkRunSpeedSelectionMode::Default, Optional< float > closeEnoughDistance={})
static Player * ToPlayer(Object *o)
static bool IsPlayerHealer(Player const *who)
Creature * GetCharmer() const
bool IsGameMaster() const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
iterator erase(iterator i)
void Summon(Creature const *summon)
StorageType::iterator iterator
TaskScheduler & Schedule(std::chrono::duration< Rep, Period > time, task_handler_t task)
TaskScheduler & Update(success_t const &callback=nullptr)
virtual void DoAction(int32)
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
void SelectTargetList(std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
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)
int32 ModifyPower(Powers power, int32 val, bool withPowerUpdate=true)
void CastStop(uint32 except_spellid=0)
void CombatStop(bool includingCast=false, bool mutualPvP=true, bool(*unitFilter)(Unit const *otherUnit)=nullptr)
bool HasBreakableByDamageCrowdControlAura(Unit *excludeCasterChannel=nullptr) const
MotionMaster * GetMotionMaster()
Powers GetPowerType() const
int32 GetMaxPower(Powers power) const
void SetUninteractible(bool apply)
bool HasUnitState(const uint32 f) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
InstanceScript * GetInstanceScript() const
void GetCreatureListWithEntryInGrid(Container &creatureContainer, uint32 entry, float maxSearchRange=250.0f) const
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
float GetDistance2d(WorldObject const *obj) const
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=nullptr)
achievement_just_cant_get_enough()
bool OnCheck(Player *, Unit *target) override
bool OnTrigger(Player *player, AreaTriggerEntry const *) override
void HandleRemove(AuraEffect const *aurEff, AuraEffectHandleModes mode)
void HandleApply(AuraEffect const *aurEff, AuraEffectHandleModes mode)
bool Validate(SpellInfo const *) override
void HandleScript(AuraEffect const *aurEff)
bool Validate(SpellInfo const *) override
void PeriodicTick(AuraEffect const *aurEff)
TC_GAME_API GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
@ DATA_KELTHUZAD_PORTAL02
@ DATA_KELTHUZAD_PORTAL01
@ DATA_KELTHUZAD_PORTAL04
@ DATA_KELTHUZAD_PORTAL03
#define RegisterNaxxramasCreatureAI(ai_name)
bool operator()(Unit const *target) const
bool operator()(Unit const *target) const
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr void GetPosition(float &x, float &y) const
constexpr float GetPositionZ() const
void AttackStart(Unit *) override
== Triggered Actions Requested ==================
bool HealthBelowPct(uint32 pct) const
void ResetThreatList(Unit *who=nullptr)
std::array< uint32, nGuardianSpawns > _guardianGroups
void DoAction(int32 action) override
boss_kelthuzad(Creature *creature)
void DamageTaken(Unit *, uint32 &damage, DamageEffectType, SpellInfo const *) override
void EnterEvadeMode(EvadeReason) override
uint8 _abominationDeathCount
void JustSummoned(Creature *summon) override
void KilledUnit(Unit *victim) override
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
uint32 _frostboltCooldown
uint32 GetData(uint32 data) const override
void UpdateAI(uint32 diff) override
PlayerAI * GetAIForCharmedPlayer(Player *player) override
void JustDied(Unit *) override
void UpdateAI(uint32 diff) override
npc_kelthuzad_abomination(Creature *creature)
void JustDied(Unit *killer) override
npc_kelthuzad_banshee(Creature *creature)
void UpdateAI(uint32 diff) override
void JustReachedHome() override
void EnterEvadeMode(EvadeReason why) override
InstanceScript *const instance
void DoAction(int32 action) override
void UpdateAI(uint32 diff) override
npc_kelthuzad_guardian(Creature *creature)
void EnterEvadeMode(EvadeReason why) override
npc_kelthuzad_minionAI(Creature *creature)
void MovementInform(uint32, uint32 id) override
uint32 GetData(uint32 data) const override
void UpdateRandomMovement(uint32 diff)
void SetData(uint32 data, uint32 value) override
InstanceScript *const instance
void MoveInLineOfSight(Unit *who) override
void AttackStart(Unit *who) override
== Triggered Actions Requested ==================
void JustEngagedWith(Unit *who) override
npc_kelthuzad_shadow_fissure(Creature *creature)
void InitializeAI() override
void UpdateAI(uint32 diff) override
void JustAppeared() override
npc_kelthuzad_skeleton(Creature *creature)
void UpdateAI(uint32 diff) override