101#define SPELL_GASEOUS_BLOAT_HELPER RAID_MODE<uint32>(70672, 72455, 72832, 72833)
157#define EXPERIMENT_STATE_OOZE false
158#define EXPERIMENT_STATE_GAS true
171 if (
Vehicle* veh = summon->GetVehicleKit())
172 veh->RemoveAllPassengers();
229 me->GetMotionMaster()->MovementExpired();
291 switch (summon->GetEntry())
300 for (
uint8 i = 0; i < 7; ++i)
328 if (
me->IsInCombat())
374 me->GetMotionMaster()->MoveIdle();
435 std::list<Creature*> list;
444 }
while (list.size() > 4);
448 while (!list.empty())
450 std::list<Creature*>::iterator itr = list.begin();
451 std::advance(itr, std::rand() % (list.size()-1));
470 events.DelayEvents(30000);
485 std::list<Unit*> targetList;
487 const std::list<HostileReference*>& threatlist =
me->getThreatManager().getThreatList();
488 for (std::list<HostileReference*>::const_iterator itr = threatlist.begin(); itr != threatlist.end(); ++itr)
490 targetList.push_back((*itr)->getTarget());
493 size_t half = targetList.size()/2;
495 while (half < targetList.size())
497 std::list<Unit*>::iterator itr = targetList.begin();
498 advance(itr, std::rand() % (targetList.size() - 1));
500 targetList.erase(itr);
503 for (std::list<Unit*>::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
588 std::list<Unit*> targets;
590 if (!targets.empty())
591 for (std::list<Unit*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
610 instance->DoRemoveAurasDueToSpellOnPlayers(71615);
618 std::list<Unit*> targets;
620 if (!targets.empty())
623 for (std::list<Unit*>::iterator itr = targets.begin(); itr != targets.end(); ++itr)
660 me->SetFacingToObject(face);
667 me->SetFacingToObject(face);
689 events.SetPhase(newPhase);
850 if (!spell->ExcludeTargetAuraSpell)
852 if (!
sSpellMgr->GetSpellInfo(spell->ExcludeTargetAuraSpell))
876 targets.push_back(target);
1003 std::list<Creature*> creList;
1006 for (std::list<Creature*>::iterator itr = creList.begin(); itr != creList.end(); ++itr)
1009 std::list<Creature*> tmp;
1011 if ((!stage && tmp.size() > 1) || (stage && tmp.size() == 1))
1072 uint32 skipIndex = std::rand() % 2;
1073 for (
uint32 i = 0; i < 3; ++i)
1117 if (eff->GetTickNumber() < 2)
1144 if (
Aura* oldPlague =
GetCaster()->GetAura(plagueId, professor->GetGUID()))
1146 if (
Aura* newPlague = professor->AddAura(plagueId,
GetHitUnit()))
1148 newPlague->SetMaxDuration(oldPlague->GetMaxDuration());
1149 newPlague->SetDuration(oldPlague->GetDuration());
1150 oldPlague->Remove();
1185 if (targets.empty())
1191 targets.push_back(target);
1202 if (grow->GetStackAmount() < 3)
1209 grow->ModStackAmount(-3);
1244 spell =
sSpellMgr->GetSpellForDifficultyFromSpell(spell, caster);
1247 float multiplier = 2.0f;
1248 if (
GetTarget()->GetMap()->GetSpawnMode() & 1)
1252 damage =
int32(damage * 1.5f);
1342 if (
GetTarget()->GetMap()->GetSpawnMode() & 1)
1377 veh->RemoveAllPassengers();
1466 targets.remove(owner);
const AuthHandler table[]
DBCStorage< SummonPropertiesEntry > sSummonPropertiesStore(SummonPropertiesfmt)
void GetCreatureListWithEntryInGrid(std::list< Creature * > &list, WorldObject *source, uint32 entry, float maxSearchRange)
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_KNOCK_BACK
@ SPELL_EFFECT_APPLY_AURA
@ TARGET_UNIT_DEST_AREA_ENEMY
@ TARGET_UNIT_SRC_AREA_ALLY
@ TARGET_UNIT_SRC_AREA_ENEMY
@ TARGET_UNIT_DEST_AREA_ENTRY
@ SPELL_CUSTOM_ERROR_NONE
@ SPELL_CUSTOM_ERROR_TOO_MANY_ABOMINATIONS
@ SPELL_CUSTOM_ERROR_ALL_POTIONS_USED
@ SPELL_FAILED_TARGET_NOT_PLAYER
@ SPELL_FAILED_NO_VALID_TARGETS
@ SPELL_FAILED_BAD_TARGETS
@ SPELL_FAILED_CUSTOM_ERROR
@ SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ AURA_EFFECT_HANDLE_REAL
#define SpellCheckCastFn(F)
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define AuraEffectRemoveFn(F, I, N, M)
@ AURA_REMOVE_BY_ENEMY_SPELL
@ UNIT_FLAG_NOT_SELECTABLE
Position const festergutWatchPos
@ SPELL_UNBOUND_PLAGUE_PROTECTION
@ SPELL_UNBOUND_PLAGUE_SEARCHER
@ SPELL_OOZE_ERUPTION_SEARCH_PERIODIC
@ SPELL_CHOKING_GAS_BOMB_PERIODIC
@ SPELL_VOLATILE_OOZE_ADHESIVE
@ SPELL_SLIME_PUDDLE_AURA
@ SPELL_SLIME_PUDDLE_TRIGGER
@ SPELL_MUTATED_TRANSFORMATION
@ SPELL_GASEOUS_BLOAT_PROTECTION
@ SPELL_MUTATED_TRANSFORMATION_DAMAGE
@ SPELL_TEAR_GAS_CREATURE
@ SPELL_TEAR_GAS_PERIODIC_TRIGGER
@ SPELL_UNSTABLE_EXPERIMENT
@ SPELL_GASEOUS_BLOAT_PROC
@ SPELL_UNHOLY_INFUSION_CREDIT
@ SPELL_OOZE_TANK_PROTECTION
@ SPELL_ABOMINATION_VEHICLE_POWER_DRAIN
@ SPELL_VOLATILE_OOZE_PROTECTION
@ SPELL_CREATE_CONCOCTION
@ SPELL_MUTATED_TRANSFORMATION_NAME
@ SPELL_RELEASE_GAS_VISUAL
@ SPELL_GASEOUS_BLIGHT_LARGE
@ SPELL_GASEOUS_BLIGHT_MEDIUM
@ SPELL_GASEOUS_BLIGHT_SMALL
@ SPELL_MALLEABLE_GOO_SUMMON
@ SPELL_CHOKING_GAS_EXPLOSION_TRIGGER
@ SPELL_MUTATED_PLAGUE_CLEAR
Position const rotfaceWatchPos
@ SAY_PHASE_TRANSITION_HEROIC
@ SAY_FESTERGUT_GASEOUS_BLIGHT
@ EMOTE_UNSTABLE_EXPERIMENT
uint32 const oozeFloodSpells[4]
void AddSC_boss_professor_putricide()
#define EXPERIMENT_STATE_OOZE
@ EVENT_ROTFACE_OOZE_FLOOD
@ EVENT_UNSTABLE_EXPERIMENT
AbominationDespawner(Unit *owner)
bool operator()(uint64 guid)
uint32 GetEffIndex() const
void PreventDefaultAction()
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellInfo const * GetSpellInfo() const
uint64 GetCasterGUID() const
uint8 GetStackAmount() const
InstanceScript *const instance
BossAI(Creature *creature, uint32 bossId)
void DoZoneInCombat(Creature *creature=NULL, float maxRangeToNearestTarget=50.0f)
virtual void JustSummoned(Creature *)
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
virtual void EnterEvadeMode()
void DespawnOrUnsummon(uint32 msTimeToDespawn=0)
CreatureScript(const char *name)
ExactDistanceCheck(Unit *source, float dist)
bool operator()(WorldObject *unit) const
TempSummon * SummonCreature(uint32 entry, Position const &pos, SummonPropertiesEntry const *properties=NULL, uint32 duration=0, Unit *summoner=NULL, uint32 spellId=0, uint32 vehId=0)
static Creature * GetCreature(WorldObject const &u, uint64 guid)
static GameObject * GetGameObject(WorldObject const &u, uint64 guid)
static Unit * GetUnit(WorldObject const &, uint64 guid)
int32 CalcValue(Unit const *caster=NULL, int32 const *basePoints=NULL, Unit const *target=NULL) const
static void SendCastResult(Player *caster, SpellInfo const *spellInfo, uint8 cast_count, SpellCastResult result, SpellCustomErrors customError=SPELL_CUSTOM_ERROR_NONE, Opcodes opcode=SMSG_CAST_FAILED)
SpellEffectInfo Effects[MAX_SPELL_EFFECTS]
Creature * GetHitCreature()
Unit * GetExplTargetUnit()
HookList< CheckCastHandler > OnCheckCast
HookList< HitHandler > AfterHit
void FinishCast(SpellCastResult result)
SpellInfo const * GetSpellInfo()
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
HookList< EffectHandler > OnEffectHitTarget
Unit * GetOriginalCaster()
HookList< ObjectAreaTargetSelectHandler > OnObjectAreaTargetSelect
SpellScriptLoader(const char *name)
virtual void SetData(uint32, uint32)
void SelectTargetList(std::list< Unit * > &targetList, uint32 num, SelectAggroTarget targetType, float dist=0.0f, bool playerOnly=false, int32 aura=0)
void DoMeleeAttackIfReady()
void DoCast(uint32 spellId)
virtual uint32 GetData(uint32) const
Unit * SelectTarget(SelectAggroTarget targetType, uint32 position=0, float dist=0.0f, bool playerOnly=false, int32 aura=0)
void DoCastVictim(uint32 spellId, bool triggered=false)
void DoCastAOE(uint32 spellId, bool triggered=false)
virtual void AttackStart(Unit *)
void EnterVehicle(Unit *base, int8 seatId=-1)
void ClearUnitState(uint32 f)
void RemoveAura(AuraApplicationMap::iterator &i, AuraRemoveMode mode=AURA_REMOVE_BY_DEFAULT)
void CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
void RemoveAurasDueToSpell(uint32 spellId, uint64 casterGUID=0, uint32 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void AddThreat(Unit *victim, float fThreat, SpellSchoolMask schoolMask=SPELL_SCHOOL_MASK_NORMAL, SpellInfo const *threatSpell=NULL)
void SetCreatorGUID(uint64 creator)
Aura * GetAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
uint32 GetMaxHealth() const
Aura * AddAura(uint32 spellId, Unit *target)
void RemoveAuraFromStack(uint32 spellId, uint64 casterGUID=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
void SetHealth(uint32 val)
bool HasAura(uint32 spellId, uint64 casterGUID=0, uint64 itemCasterGUID=0, uint32 reqEffMask=0) const
static Creature * GetCreature(WorldObject &object, uint64 guid)
void CastCustomSpell(Unit *victim, uint32 spellId, int32 const *bp0, int32 const *bp1, int32 const *bp2, bool triggered, Item *castItem=NULL, AuraEffect const *triggeredByAura=NULL, uint64 originalCaster=0)
InstanceScript * GetInstanceScript()
virtual uint64 GetData64(uint32) const
boss_professor_putricide()
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
void SpellHitTarget(Unit *, SpellInfo const *spell) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
npc_putricide_oozeAI(Creature *creature, uint32 hitTargetSpellId)
virtual void CastMainSpell()=0
uint32 _newTargetSelectTimer
void SpellHit(Unit *, SpellInfo const *spell) OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
PrepareSpellScript(spell_putricide_choking_gas_bomb_SpellScript)
void HandleScript(SpellEffIndex)
spell_putricide_choking_gas_bomb()
SpellScript * GetSpellScript() const OVERRIDE
PrepareSpellScript(spell_putricide_clear_aura_effect_value_SpellScript)
void HandleScript(SpellEffIndex effIndex)
spell_putricide_clear_aura_effect_value()
SpellScript * GetSpellScript() const OVERRIDE
void HandleScript(SpellEffIndex)
void SelectTarget(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_putricide_eat_ooze_SpellScript)
spell_putricide_eat_ooze()
SpellScript * GetSpellScript() const OVERRIDE
PrepareAuraScript(spell_putricide_gaseous_bloat_AuraScript)
void HandleExtraEffect(AuraEffect const *)
spell_putricide_gaseous_bloat()
AuraScript * GetAuraScript() const OVERRIDE
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_putricide_mutated_plague_AuraScript)
void HandleTriggerSpell(AuraEffect const *aurEff)
spell_putricide_mutated_plague()
AuraScript * GetAuraScript() const OVERRIDE
void OnRemove(AuraEffect const *, AuraEffectHandleModes)
PrepareAuraScript(spell_putricide_mutation_init_AuraScript)
SpellCastResult CheckRequirementInternal(SpellCustomErrors &extendedError)
SpellCastResult CheckRequirement()
PrepareSpellScript(spell_putricide_mutation_init_SpellScript)
spell_putricide_mutation_init()
SpellScript * GetSpellScript() const OVERRIDE
AuraScript * GetAuraScript() const OVERRIDE
void SetTarget(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_putricide_ooze_channel_SpellScript)
void SelectTarget(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *spell) OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
spell_putricide_ooze_channel()
PrepareSpellScript(spell_putricide_ooze_eruption_searcher_SpellScript)
void HandleDummy(SpellEffIndex)
SpellScript * GetSpellScript() const OVERRIDE
spell_putricide_ooze_eruption_searcher()
PrepareSpellScript(spell_putricide_regurgitated_ooze_SpellScript)
void ExtraEffect(SpellEffIndex)
SpellScript * GetSpellScript() const OVERRIDE
spell_putricide_regurgitated_ooze()
void ScaleRange(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_putricide_slime_puddle_SpellScript)
PrepareSpellScript(spell_putricide_slime_puddle_aura_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
spell_putricide_slime_puddle_aura()
spell_putricide_slime_puddle()
SpellScript * GetSpellScript() const OVERRIDE
void HandleScript(SpellEffIndex)
PrepareSpellScript(spell_putricide_unbound_plague_SpellScript)
void FilterTargets(std::list< WorldObject * > &targets)
bool Validate(SpellInfo const *) OVERRIDE
SpellScript * GetSpellScript() const OVERRIDE
spell_putricide_unbound_plague()
void HandleScript(SpellEffIndex effIndex)
PrepareSpellScript(spell_putricide_unstable_experiment_SpellScript)
SpellScript * GetSpellScript() const OVERRIDE
spell_putricide_unstable_experiment()
PrepareSpellScript(spell_stinky_precious_decimate_SpellScript)
void HandleScript(SpellEffIndex)
SpellScript * GetSpellScript() const OVERRIDE
spell_stinky_precious_decimate()
@ NPC_TEAR_GAS_TARGET_STALKER
@ NPC_ABOMINATION_WING_MAD_SCIENTIST_STALKER
@ NPC_MUTATED_ABOMINATION_25
@ NPC_MALLEABLE_OOZE_STALKER
@ NPC_MUTATED_ABOMINATION_10
@ NPC_GROWING_OOZE_PUDDLE
CreatureAI * GetIcecrownCitadelAI(Creature *creature)
@ ACTION_FESTERGUT_COMBAT
@ LIGHT_S_HAMMER_TELEPORT
@ DATA_NAUSEA_ACHIEVEMENT
@ DATA_PROFESSOR_PUTRICIDE
void RandomResizeList(std::list< T > &list, uint32 size)
C::value_type const & SelectRandomContainerElement(C const &container)
float GetPositionZ() const
void GetPosition(float &x, float &y) const
bool operator()(Creature *stalker) const
RotfaceHeightCheck(Creature *rotface)
bool HealthAbovePct(uint32 pct) const
ScriptedAI(Creature *creature)
void AttackStart(Unit *) OVERRIDE
void MovementInform(uint32 type, uint32 id) OVERRIDE
void JustDied(Unit *) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
boss_professor_putricideAI(Creature *creature)
uint32 GetData(uint32 type) const OVERRIDE
uint64 _oozeFloodDummyGUIDs[4]
void DamageTaken(Unit *, uint32 &) OVERRIDE
void EnterCombat(Unit *who) OVERRIDE
void KilledUnit(Unit *victim) OVERRIDE
void DoAction(int32 action) OVERRIDE
void JustReachedHome() OVERRIDE
void JustSummoned(Creature *summon) OVERRIDE
void SetData(uint32 id, uint32 data) OVERRIDE
void SetPhase(Phases newPhase)
npc_gas_cloudAI(Creature *creature)
uint32 _newTargetSelectTimer
npc_volatile_oozeAI(Creature *creature)