41#define INFERNAL_Z 275.5f
45 {-10922.8f, -1985.2f},
46 {-10916.2f, -1996.2f},
47 {-10932.2f, -2008.1f},
48 {-10948.8f, -2022.1f},
49 {-10958.7f, -1997.7f},
50 {-10971.5f, -1997.5f},
51 {-10990.8f, -1995.1f},
52 {-10989.8f, -1976.5f},
53 {-10971.6f, -1973.0f},
54 {-10955.5f, -1974.0f},
55 {-10939.6f, -1969.8f},
56 {-10958.0f, -1952.2f},
57 {-10941.7f, -1954.8f},
58 {-10943.1f, -1988.5f},
59 {-10948.8f, -2005.1f},
60 {-10984.0f, -2019.3f},
61 {-10932.8f, -1979.6f},
111 return GetKarazhanAI<netherspite_infernalAI>(creature);
154 creature->AI()->KilledUnit(who);
185 return GetKarazhanAI<boss_malchezaarAI>(creature);
211 for (
uint8 i = 0; i < 5; ++i)
287 for (GuidVector::const_iterator itr =
infernals.begin(); itr !=
infernals.end(); ++itr)
289 if (pInfernal->IsAlive())
291 pInfernal->SetVisible(
false);
300 for (
uint8 i = 0; i < 2; ++i)
322 std::vector<Unit*> targets;
328 targets.push_back(target);
335 while (targets.size() > 5)
336 targets.erase(targets.begin() +
rand32() % targets.size());
339 for (std::vector<Unit*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter, ++i)
340 if (
Unit* target = *iter)
349 target->SetHealth(1);
355 for (
uint8 i = 0; i < 5; ++i)
358 if (target && target->
IsAlive())
451 for (
uint8 i = 0; i < 2; ++i)
493 for (
uint8 i = 0; i < 2; ++i)
497 if (axe->GetVictim())
530 Unit* target =
nullptr;
559 if (*itr == infernal->
GetGUID())
575 if (pMalchezaar && pMalchezaar->
IsAlive())
@ TEMPSUMMON_TIMED_DESPAWN
@ TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
std::vector< ObjectGuid > GuidVector
float frand(float min, float max)
uint32 urand(uint32 min, uint32 max)
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
static InfernalPoint InfernalPoints[]
@ INFERNAL_MODEL_INVISIBLE
void AddSC_boss_malchezaar()
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void AttackStart(Unit *victim) override
== Triggered Actions Requested ==================
void SetTarget(ObjectGuid const &guid) override
void SetDisplayId(uint32 displayId, bool setNative=false) override
void SetCanDualWield(bool value) override
virtual bool SetBossState(uint32 id, EncounterState state)
void HandleGameObject(ObjectGuid guid, bool open, GameObject *go=nullptr)
virtual ObjectGuid GetGuidData(uint32 type) const override
static Creature * ToCreature(Object *o)
static ObjectGuid GetGUID(Object const *o)
Unit * GetCurrentVictim()
Trinity::IteratorPair< ThreatListIterator, std::nullptr_t > GetUnsortedThreatList() const
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 DoCast(uint32 spellId)
void SetHealth(uint64 val)
ThreatManager & GetThreatManager()
void SetFaction(uint32 faction) override
void InterruptNonMeleeSpells(bool withDelayed, uint32 spellid=0, bool withInstant=true)
uint32 GetBaseAttackTime(WeaponAttackType att) const
void SetUninteractible(bool apply)
void SetBaseAttackTime(WeaponAttackType att, uint32 val)
Unit * EnsureVictim() const
uint32 GetNativeDisplayId() const
uint32 GetFaction() const override
bool HasUnitState(const uint32 f) const
void KillSelf(bool durabilityLoss=true, bool skipSettingDeathState=false)
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
ObjectGuid GetTarget() const
constexpr uint32 GetMapId() const
InstanceScript * GetInstanceScript() const
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)
Position GetRandomNearPosition(float radius)
CreatureAI * GetAI(Creature *creature) const override
CreatureAI * GetAI(Creature *creature) const override
TC_GAME_API Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr void Relocate(float x, float y)
constexpr float GetPositionZ() const
void SetEquipmentSlots(bool loadDefault, int32 mainHand=EQUIP_NO_CHANGE, int32 offHand=EQUIP_NO_CHANGE, int32 ranged=EQUIP_NO_CHANGE)
bool HealthBelowPct(uint32 pct) const
Difficulty GetDifficulty() const
void ResetThreat(Unit *victim, Unit *who=nullptr)
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
void SummonInfernal(const uint32)
void JustEngagedWith(Unit *) override
void KilledUnit(Unit *) override
void UpdateAI(uint32 diff) override
InstanceScript * instance
void JustDied(Unit *) override
uint32 EnfeebleResetTimer
uint32 AmplifyDamageTimer
void EnfeebleHealthEffect()
ObjectGuid enfeeble_targets[5]
void Cleanup(Creature *infernal, InfernalPoint *point)
uint32 InfernalCleanupTimer
std::vector< InfernalPoint * > positions
void EnfeebleResetHealth()
boss_malchezaarAI(Creature *creature)
uint32 AxesTargetSwitchTimer
uint64 enfeeble_health[5]
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void UpdateAI(uint32 diff) override
void DamageTaken(Unit *done_by, uint32 &damage, DamageEffectType, SpellInfo const *) override
netherspite_infernalAI(Creature *creature)
void JustEngagedWith(Unit *) override
void MoveInLineOfSight(Unit *) override
void KilledUnit(Unit *who) override