86#define MUTATED_INFECTION RAID_MODE<int32>(69674, 71224, 73022, 73023)
170 professor->AI()->EnterEvadeMode();
295 rotface->AI()->JustSummoned(
me);
301 rotface->AI()->SummonedCreatureDespawn(
me);
367 if (rotface->IsAlive())
395 for (
uint32 i = 0; i < 11; ++i)
419 std::list<Creature*> triggers;
422 if (triggers.empty())
436 if (targets.size() > 4)
439 while (targets.size() > 2)
463 targets.push_back(target);
492 .SetTriggeringAura(aurEff)
531 if (!(target && target->
IsAlive()) || !caster)
537 unstable->ModStackAmount(targetAura->GetStackAmount());
539 unstable->ModStackAmount(1);
541 if (unstable->GetStackAmount() >= 5)
550 if (rotface->IsAlive())
584 uint8 newStack =
uint8(unstable->GetStackAmount()+1);
585 unstable->SetStackAmount(newStack);
610 if (rotface->IsAlive())
672 .SetOriginalCaster(
GetCaster()->GetGUID()));
712 std::list<WorldObject*> ranged, melee;
713 std::list<WorldObject*>::iterator itr = targets.begin();
714 while (itr != targets.end() && (*itr)->GetDistance(
GetCaster()) < 5.0f)
716 melee.push_back((*itr)->ToUnit());
720 while (itr != targets.end())
722 ranged.push_back((*itr)->ToUnit());
727 while (ranged.size() < minTargets)
733 ranged.push_back(target);
734 melee.remove(target);
740 targets.swap(ranged);
T GetEntry(std::unordered_map< uint32, T > const &map, CriteriaTreeEntry const *tree)
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
@ TEMPSUMMON_TIMED_DESPAWN
@ QUEST_STATUS_INCOMPLETE
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
#define RegisterSpellScript(spell_script)
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_MISSILE
@ SPELL_EFFECT_FORCE_CAST
@ TARGET_UNIT_SRC_AREA_ENTRY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_FULL_MASK
Used when doing CastSpell with triggered == true.
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectRemoveFn(F, I, N, M)
#define MUTATED_INFECTION
void AddSC_boss_rotface()
@ EVENT_MUTATED_INFECTION
@ EVENT_HASTEN_INFECTIONS
@ SPELL_MUTATED_INFECTION
@ SPELL_LARGE_OOZE_COMBINE
@ SPELL_UNSTABLE_OOZE_EXPLOSION
@ SPELL_UNSTABLE_OOZE_EXPLOSION_TRIGGER
@ SPELL_AWAKEN_PLAGUED_ZOMBIES
@ SPELL_VERTEX_COLOR_DARK_RED
@ SPELL_VERTEX_COLOR_BRIGHT_RED
@ SPELL_WEAK_RADIATING_OOZE
@ SPELL_VILE_GAS_TRIGGER_SUMMON
@ SPELL_LITTLE_OOZE_COMBINE
@ SPELL_VERTEX_COLOR_PINK
@ SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC
@ SPELL_LARGE_OOZE_BUFF_COMBINE
@ EMOTE_MUTATED_INFECTION
@ EMOTE_UNSTABLE_EXPLOSION
void PreventDefaultAction()
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
ObjectGuid GetCasterGUID() const
ObjectGuid const & GetGUID() const
InstanceScript *const instance
virtual void EnterEvadeMode(EvadeReason why=EvadeReason::Other)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
void AttackStart(Unit *victim) override
== Triggered Actions Requested ==================
Creature * DoSummon(uint32 entry, Position const &pos, Milliseconds despawnTime=30s, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
void SetCanMelee(bool canMelee, bool fleeFromMelee=false)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void CancelEvent(EventId eventId)
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
virtual bool SetBossState(uint32 id, EncounterState state)
void DoRemoveAurasDueToSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
void DoCastSpellOnPlayers(uint32 spell, bool includePets=false, bool includeControlled=false)
virtual ObjectGuid GetGuidData(uint32 type) const override
virtual bool CheckRequiredBosses(uint32, Player const *=nullptr) const
static ObjectGuid const Empty
QuestStatus GetQuestStatus(uint32 quest_id) const
int32 CalcValueAsInt(WorldObject const *caster=nullptr, SpellEffectValue const *basePoints=nullptr, Unit const *target=nullptr, float *variance=nullptr, uint32 castItemId=0, int32 itemLevel=-1) const
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
static bool ValidateSpellEffect(std::initializer_list< std::pair< uint32, SpellEffIndex > > effects)
Creature * GetHitCreature() const
Player * GetHitPlayer() const
HookList< HitHandler > AfterHit
int32 GetEffectValueAsInt() const
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
SpellEffectInfo const & GetEffectInfo() const
HookList< EffectHandler > OnEffectHitTarget
void PreventHitEffect(SpellEffIndex effIndex)
WorldLocation const * GetExplTargetDest() const
SpellInfo const * GetSpellInfo() const
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
Unit * GetOriginalCaster() const
void Despawn(Creature const *summon)
void Summon(Creature const *summon)
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
virtual void DoAction(int32 param)
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={})
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool HasUnitState(const uint32 f) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
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)
void setActive(bool isActiveObject)
virtual void SetData(uint32, uint32)
void HandleScript(SpellEffIndex)
void HandleScript(SpellEffIndex)
void HandleScript(SpellEffIndex)
void HandleEffectRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *spellInfo) override
void FilterTargets(std::list< WorldObject * > &targets)
void HandleScript(SpellEffIndex)
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) override
void HandleCast(SpellEffIndex effIndex)
void DespawnSelf(AuraEffect const *)
void CheckTarget(SpellEffIndex effIndex)
void HandleDummy(SpellEffIndex effIndex)
void FilterTargets(std::list< WorldObject * > &targets)
@ SPELL_GREEN_BLIGHT_RESIDUE
@ LIGHT_S_HAMMER_TELEPORT
#define RegisterIcecrownCitadelCreatureAI(ai_name)
@ DATA_OOZE_DANCE_ACHIEVEMENT
@ DATA_PROFESSOR_PUTRICIDE
@ NPC_UNSTABLE_EXPLOSION_STALKER
@ QUEST_RESIDUE_RENDEZVOUS_10
@ QUEST_RESIDUE_RENDEZVOUS_25
TC_GAME_API Creature * GetCreature(WorldObject const &u, ObjectGuid const &guid)
auto SelectRandomContainerElement(C const &container) -> std::add_const_t< decltype(*std::ranges::begin(container))> &
void RandomResize(C &container, std::size_t requestedSize)
constexpr void GetPosition(float &x, float &y) const
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
void JustEngagedWith(Unit *who) override
void EnterEvadeMode(EvadeReason why) override
void JustDied(Unit *) override
void UpdateAI(uint32 diff) override
boss_rotface(Creature *creature)
void JustReachedHome() override
void KilledUnit(Unit *victim) override
void JustSummoned(Creature *summon) override
void SpellHitTarget(WorldObject *, SpellInfo const *spellInfo) override
Milliseconds infectionCooldown
void IsSummonedBy(WorldObject *) override
void JustDied(Unit *) override
void DoAction(int32 action) override
npc_big_ooze(Creature *creature)
void UpdateAI(uint32 diff) override
InstanceScript * instance
void UpdateAI(uint32 diff) override
void JustDied(Unit *) override
npc_little_ooze(Creature *creature)
void IsSummonedBy(WorldObject *summonerWO) override
void JustSummoned(Creature *summon) override
InstanceScript * _instance
npc_precious_icc(Creature *creature)
void JustDied(Unit *) override
void SummonedCreatureDespawn(Creature *summon) override
void UpdateAI(uint32 diff) override