TrinityCore
Loading...
Searching...
No Matches
boss_rotface.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "icecrown_citadel.h"
19#include "Containers.h"
20#include "GridNotifiers.h"
21#include "InstanceScript.h"
22#include "Map.h"
23#include "ObjectAccessor.h"
24#include "ScriptedCreature.h"
25#include "ScriptMgr.h"
26#include "SpellAuras.h"
27#include "SpellScript.h"
28#include "TemporarySummon.h"
29
30// KNOWN BUGS:
31// ~ No Slime Spray animation directly at target spot
32
52
54{
55 // Rotface
56 SPELL_SLIME_SPRAY = 69508, // every 20 seconds
57 SPELL_MUTATED_INFECTION = 69674, // hastens every 1:30
59
60 // Oozes
61 SPELL_LITTLE_OOZE_COMBINE = 69537, // combine 2 Small Oozes
62 SPELL_LARGE_OOZE_COMBINE = 69552, // combine 2 Large Oozes
63 SPELL_LARGE_OOZE_BUFF_COMBINE = 69611, // combine Large and Small Ooze
64 SPELL_OOZE_MERGE = 69889, // 2 Small Oozes summon a Large Ooze
65 SPELL_WEAK_RADIATING_OOZE = 69750, // passive damage aura - small
66 SPELL_RADIATING_OOZE = 69760, // passive damage aura - large
67 SPELL_UNSTABLE_OOZE = 69558, // damage boost and counter for explosion
68 SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC = 70001, // prevents getting hit by infection
75
76 // Precious
80
81 // Professor Putricide
84};
85
86#define MUTATED_INFECTION RAID_MODE<int32>(69674, 71224, 73022, 73023)
87
103
104// 36627 - Rotface
105struct boss_rotface : public BossAI
106{
107 boss_rotface(Creature* creature) : BossAI(creature, DATA_ROTFACE)
108 {
109 infectionStage = 0;
110 infectionCooldown = 14s;
111 }
112
125
143
144 void JustDied(Unit* /*killer*/) override
145 {
147 _JustDied();
150 professor->AI()->DoAction(ACTION_ROTFACE_DEATH);
151 }
152
159
160 void KilledUnit(Unit* victim) override
161 {
162 if (victim->GetTypeId() == TYPEID_PLAYER)
163 Talk(SAY_KILL);
164 }
165
166 void EnterEvadeMode(EvadeReason why) override
167 {
170 professor->AI()->EnterEvadeMode();
171 }
172
173 void SpellHitTarget(WorldObject* /*target*/, SpellInfo const* spellInfo) override
174 {
175 if (spellInfo->Id == SPELL_SLIME_SPRAY)
177 }
178
179 void JustSummoned(Creature* summon) override
180 {
181 if (summon->GetEntry() == NPC_VILE_GAS_STALKER)
183 professor->CastSpell(summon, SPELL_VILE_GAS_H, true);
184
185 summons.Summon(summon);
186 }
187
188 void UpdateAI(uint32 diff) override
189 {
190 if (!UpdateVictim())
191 return;
192
193 events.Update(diff);
194
196 return;
197
198 while (uint32 eventId = events.ExecuteEvent())
199 {
200 switch (eventId)
201 {
203 if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1, 0.0f, true))
204 {
208 }
210 break;
212 if (infectionStage++ < 4)
213 {
214 infectionCooldown -= 2s;
216 }
217 break;
221 break;
222 case EVENT_VILE_GAS:
225 break;
226 default:
227 break;
228 }
229
231 return;
232 }
233
235 }
236
237private:
240};
241
242// 36897 - Little Ooze
244{
245 npc_little_ooze(Creature* creature) : ScriptedAI(creature) { }
246
247 void IsSummonedBy(WorldObject* summonerWO) override
248 {
249 Unit* summoner = summonerWO->ToUnit();
250 if (!summoner)
251 return;
256 AddThreat(summoner, 500000.0f);
257 }
258
259 void JustDied(Unit* /*killer*/) override
260 {
262 }
263
264 void UpdateAI(uint32 diff) override
265 {
266 if (!UpdateVictim())
267 return;
268
269 events.Update(diff);
270
272 {
275 }
276
278 }
279
280private:
282};
283
284// 36899 - Big Ooze
286{
287 npc_big_ooze(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
288
289 void IsSummonedBy(WorldObject* /*summoner*/) override
290 {
297 // register in Rotface's summons - not summoned with Rotface as owner
299 rotface->AI()->JustSummoned(me);
300 }
301
302 void JustDied(Unit* /*killer*/) override
303 {
305 rotface->AI()->SummonedCreatureDespawn(me);
307 }
308
309 void DoAction(int32 action) override
310 {
311 if (action == EVENT_STICKY_OOZE)
313 }
314
315 void UpdateAI(uint32 diff) override
316 {
317 if (!UpdateVictim())
318 return;
319
320 events.Update(diff);
321
322 while (uint32 eventId = events.ExecuteEvent())
323 {
324 switch (eventId)
325 {
329 break;
330 default:
331 break;
332 }
333 }
334
335 if (me->IsVisible())
337 }
338
339private:
342};
343
344// 37217 - Precious
346{
347 npc_precious_icc(Creature* creature) : ScriptedAI(creature), _summons(me), _instance(creature->GetInstanceScript()) { }
348
349 void Reset() override
350 {
351 _events.Reset();
356 }
357
358 void JustSummoned(Creature* summon) override
359 {
360 _summons.Summon(summon);
362 summon->AI()->AttackStart(target);
363 }
364
365 void SummonedCreatureDespawn(Creature* summon) override
366 {
367 _summons.Despawn(summon);
368 }
369
370 void JustDied(Unit* /*killer*/) override
371 {
374 if (rotface->IsAlive())
375 rotface->AI()->Talk(SAY_PRECIOUS_DIES);
376 }
377
378 void UpdateAI(uint32 diff) override
379 {
380 if (!UpdateVictim())
381 return;
382
383 _events.Update(diff);
384
386 return;
387
388 while (uint32 eventId = _events.ExecuteEvent())
389 {
390 switch (eventId)
391 {
392 case EVENT_DECIMATE:
395 break;
399 break;
402 for (uint32 i = 0; i < 11; ++i)
405 break;
406 default:
407 break;
408 }
409 }
410
412 }
413
414private:
418};
419
420// 69782, 69796, 69798, 69801 - Ooze Flood
422{
424
425 void HandleScript(SpellEffIndex /*effIndex*/)
426 {
427 if (!GetHitUnit())
428 return;
429
430 std::list<Creature*> triggers;
431 GetHitUnit()->GetCreatureListWithEntryInGrid(triggers, GetHitUnit()->GetEntry(), 12.5f);
432
433 if (triggers.empty())
434 return;
435
438 }
439
440 void FilterTargets(std::list<WorldObject*>& targets)
441 {
442 // get 2 targets except 2 nearest
444
445 // .resize() runs pop_back();
446 if (targets.size() > 5)
447 targets.resize(5);
448
449 while (targets.size() > 2)
450 targets.pop_front();
451 }
452
458};
459
460// 69674, 71224, 73022, 73023 - Mutated Infection
462{
464
465 void FilterTargets(std::list<WorldObject*>& targets)
466 {
467 // remove targets with this aura already
468 // tank is not on this list
469 targets.remove_if(Trinity::UnitAuraCheck(true, GetSpellInfo()->Id));
470 if (targets.empty())
471 return;
472
474 targets.clear();
475 targets.push_back(target);
476 }
477
479 {
480 if (Creature* caster = GetCaster()->ToCreature())
481 if (Unit* target = GetHitUnit())
482 caster->AI()->Talk(EMOTE_MUTATED_INFECTION, target);
483 }
484
490};
491
493{
495
496 bool Validate(SpellInfo const* spellInfo) override
497 {
498 return ValidateSpellInfo({ static_cast<uint32>(spellInfo->GetEffect(EFFECT_2).CalcValue()) });
499 }
500
502 {
503 Unit* target = GetTarget();
504 target->CastSpell(target, uint32(GetEffectInfo(EFFECT_2).CalcValue()), { aurEff, GetCasterGUID() });
505 }
506
511};
512
513// 69538 - Small Ooze Combine
536
537// 69553 - Large Ooze Combine
539{
541
542 void HandleScript(SpellEffIndex /*effIndex*/)
543 {
544 Creature* caster = GetCaster()->ToCreature();
545 Creature* target = GetHitCreature();
546 if (!(target && target->IsAlive()) || !caster)
547 return;
548
549 if (Aura* unstable = caster->GetAura(SPELL_UNSTABLE_OOZE))
550 {
551 if (Aura* targetAura = target->GetAura(SPELL_UNSTABLE_OOZE))
552 unstable->ModStackAmount(targetAura->GetStackAmount());
553 else
554 unstable->ModStackAmount(1);
555
556 if (unstable->GetStackAmount() >= 5)
557 {
560 if (InstanceScript* instance = caster->GetInstanceScript())
561 {
562 if (Creature* rotface = ObjectAccessor::GetCreature(*caster, instance->GetGuidData(DATA_ROTFACE)))
563 {
564 instance->SetData(DATA_OOZE_DANCE_ACHIEVEMENT, uint32(false));
565 if (rotface->IsAlive())
566 rotface->AI()->Talk(SAY_UNSTABLE_EXPLOSION);
567 }
568 }
569
570 caster->AI()->DoAction(EVENT_STICKY_OOZE);
571 caster->CastSpell(caster, SPELL_UNSTABLE_OOZE_EXPLOSION, CastSpellExtraArgs().SetOriginalCaster(caster->GetGUID()));
572 }
573 }
574 target->DespawnOrUnsummon();
575 }
576
581};
582
583// 69610 - Large Ooze Buff Combine
585{
587
588 bool Load() override
589 {
590 return GetCaster()->GetTypeId() == TYPEID_UNIT;
591 }
592
593 void HandleScript(SpellEffIndex /*effIndex*/)
594 {
595 if (!(GetHitCreature() && GetHitCreature()->IsAlive()))
596 return;
597
598 Creature* caster = GetCaster()->ToCreature();
599 if (Aura* unstable = caster->GetAura(SPELL_UNSTABLE_OOZE))
600 {
601 uint8 newStack = uint8(unstable->GetStackAmount()+1);
602 unstable->SetStackAmount(newStack);
603
604 switch (newStack)
605 {
606 case 2:
607 caster->AI()->Talk(EMOTE_UNSTABLE_2, caster);
608 caster->CastSpell(caster, SPELL_VERTEX_COLOR_PINK, true);
609 break;
610 case 3:
611 caster->AI()->Talk(EMOTE_UNSTABLE_3, caster);
612 caster->CastSpell(caster, SPELL_VERTEX_COLOR_BRIGHT_RED, true);
613 break;
614 case 4:
615 caster->AI()->Talk(EMOTE_UNSTABLE_4, caster);
616 caster->CastSpell(caster, SPELL_VERTEX_COLOR_DARK_RED, true);
617 break;
618 case 5:
619 {
620 caster->AI()->Talk(EMOTE_UNSTABLE_EXPLOSION);
623 if (InstanceScript* instance = caster->GetInstanceScript())
624 {
625 instance->SetData(DATA_OOZE_DANCE_ACHIEVEMENT, uint32(false));
626 if (Creature* rotface = ObjectAccessor::GetCreature(*caster, instance->GetGuidData(DATA_ROTFACE)))
627 if (rotface->IsAlive())
628 rotface->AI()->Talk(SAY_UNSTABLE_EXPLOSION);
629 }
630
631 caster->AI()->DoAction(EVENT_STICKY_OOZE);
632 caster->CastSpell(caster, SPELL_UNSTABLE_OOZE_EXPLOSION, CastSpellExtraArgs().SetOriginalCaster(caster->GetGUID()));
633 break;
634 }
635 default:
636 break;
637 }
638 }
639
641 }
642
647};
648
649// 69839 - Unstable Ooze Explosion
676
677// 69832 - Unstable Ooze Explosion
679{
681
683 {
684 PreventHitDefaultEffect(effIndex);
685 if (!GetExplTargetDest())
686 return;
687
688 uint32 triggered_spell_id = GetEffectInfo().TriggerSpell;
689
690 // let Rotface handle the cast - caster dies before this executes
691 if (InstanceScript* script = GetCaster()->GetInstanceScript())
692 if (Creature* rotface = script->instance->GetCreature(script->GetGuidData(DATA_ROTFACE)))
693 rotface->CastSpell(*GetExplTargetDest(), triggered_spell_id, GetCaster()->GetGUID());
694 }
695
700};
701
702// 71441 - Unstable Ooze Explosion Suicide Trigger
724
725// 72285, 72288 - Vile Gas Trigger
727{
729
730 void FilterTargets(std::list<WorldObject*>& targets)
731 {
733 if (targets.empty())
734 return;
735
736 std::list<WorldObject*> ranged, melee;
737 std::list<WorldObject*>::iterator itr = targets.begin();
738 while (itr != targets.end() && (*itr)->GetDistance(GetCaster()) < 5.0f)
739 {
740 melee.push_back((*itr)->ToUnit());
741 ++itr;
742 }
743
744 while (itr != targets.end())
745 {
746 ranged.push_back((*itr)->ToUnit());
747 ++itr;
748 }
749
750 uint32 minTargets = GetCaster()->GetMap()->Is25ManRaid() ? 8 : 3;
751 while (ranged.size() < minTargets)
752 {
753 if (melee.empty())
754 break;
755
757 ranged.push_back(target);
758 melee.remove(target);
759 }
760
761 if (!ranged.empty())
762 Trinity::Containers::RandomResize(ranged, GetCaster()->GetMap()->Is25ManRaid() ? 3 : 1);
763
764 targets.swap(ranged);
765 }
766
772
778};
779
780// 69507, 71213, 73189, 73190 - Slime Spray
782{
784
786 {
787 Player* target = GetHitPlayer();
788 if (!target)
789 return;
790
792 return;
793
795 if (target->GetQuestStatus(questId) != QUEST_STATUS_INCOMPLETE)
796 return;
797
799 }
800
805};
806
uint8_t uint8
Definition Define.h:135
int32_t int32
Definition Define.h:129
uint32_t uint32
Definition Define.h:133
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:24
@ FAIL
@ TEMPSUMMON_TIMED_DESPAWN
@ TYPEID_UNIT
Definition ObjectGuid.h:38
@ TYPEID_PLAYER
Definition ObjectGuid.h:39
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:107
#define RegisterSpellAndAuraScriptPair(script_1, script_2)
Definition ScriptMgr.h:1130
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1128
SpellEffIndex
@ EFFECT_0
@ EFFECT_2
@ SPELL_EFFECT_DUMMY
@ SPELL_EFFECT_SCRIPT_EFFECT
@ SPELL_EFFECT_TRIGGER_MISSILE
@ SPELL_EFFECT_FORCE_CAST
@ TARGET_UNIT_SRC_AREA_ENTRY
@ TARGET_UNIT_SRC_AREA_ENEMY
#define EFFECT_ALL
AuraEffectHandleModes
@ AURA_EFFECT_HANDLE_REAL
@ SPELL_AURA_PERIODIC_DAMAGE
@ SPELL_AURA_PERIODIC_TRIGGER_SPELL
@ TRIGGERED_FULL_MASK
Will return SPELL_FAILED_DONT_REPORT in CheckCast functions.
#define SpellEffectFn(F, I, N)
#define SpellObjectAreaTargetSelectFn(F, I, N)
#define AuraEffectPeriodicFn(F, I, N)
#define SpellHitFn(F)
#define AuraEffectRemoveFn(F, I, N, M)
@ UNIT_STATE_CASTING
Definition Unit.h:235
#define MUTATED_INFECTION
void AddSC_boss_rotface()
RotfaceEvents
@ EVENT_VILE_GAS
@ EVENT_SUMMON_ZOMBIES
@ EVENT_SLIME_SPRAY
@ EVENT_MORTAL_WOUND
@ EVENT_STICKY_OOZE
@ EVENT_MUTATED_INFECTION
@ EVENT_HASTEN_INFECTIONS
@ EVENT_DECIMATE
RotfaceSpells
@ SPELL_MUTATED_INFECTION
@ SPELL_LARGE_OOZE_COMBINE
@ SPELL_UNSTABLE_OOZE_EXPLOSION
@ SPELL_UNSTABLE_OOZE
@ SPELL_UNSTABLE_OOZE_EXPLOSION_TRIGGER
@ SPELL_RADIATING_OOZE
@ SPELL_AWAKEN_PLAGUED_ZOMBIES
@ SPELL_VERTEX_COLOR_DARK_RED
@ SPELL_SLIME_SPRAY
@ SPELL_VERTEX_COLOR_BRIGHT_RED
@ SPELL_WEAK_RADIATING_OOZE
@ SPELL_VILE_GAS_TRIGGER_SUMMON
@ SPELL_DECIMATE
@ SPELL_VILE_GAS_H
@ SPELL_STICKY_OOZE
@ SPELL_LITTLE_OOZE_COMBINE
@ SPELL_VERTEX_COLOR_PINK
@ SPELL_MORTAL_WOUND
@ SPELL_GREEN_ABOMINATION_HITTIN__YA_PROC
@ SPELL_LARGE_OOZE_BUFF_COMBINE
@ SPELL_VILE_GAS_TRIGGER
@ SPELL_OOZE_MERGE
RotfaceTexts
@ EMOTE_MUTATED_INFECTION
@ SAY_DEATH
@ EMOTE_UNSTABLE_2
@ EMOTE_SLIME_SPRAY
@ SAY_UNSTABLE_EXPLOSION
@ SAY_AGGRO
@ EMOTE_UNSTABLE_3
@ SAY_KILL
@ SAY_SLIME_SPRAY
@ EMOTE_PRECIOUS_ZOMBIES
@ EMOTE_UNSTABLE_EXPLOSION
@ EMOTE_UNSTABLE_4
@ SAY_BERSERK
@ SAY_PRECIOUS_DIES
void PreventDefaultAction()
HookList< EffectApplyHandler > AfterEffectRemove
HookList< EffectPeriodicHandler > OnEffectPeriodic
SpellEffectInfo const & GetEffectInfo(SpellEffIndex effIndex) const
Unit * GetTarget() const
ObjectGuid GetCasterGUID() const
InstanceScript *const instance
void _JustReachedHome()
SummonList summons
EventMap events
@ EVADE_REASON_OTHER
Definition CreatureAI.h:98
void DoZoneInCombat(Creature *creature=nullptr)
void Talk(uint8 id, WorldObject const *whisperTarget=nullptr)
bool UpdateVictim()
Creature *const me
Definition CreatureAI.h:82
Creature * DoSummon(uint32 entry, Position const &pos, Milliseconds despawnTime=30s, TempSummonType summonType=TEMPSUMMON_CORPSE_TIMED_DESPAWN)
virtual void EnterEvadeMode(EvadeReason why=EVADE_REASON_OTHER)
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
CreatureAI * AI() const
Definition Creature.h:154
void Update(uint32 time)
Definition EventMap.h:67
EventId ExecuteEvent()
Definition EventMap.cpp:73
void CancelEvent(EventId eventId)
Definition EventMap.cpp:151
void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group=0u, PhaseIndex phase=0u)
Definition EventMap.cpp:36
void Reset()
Definition EventMap.cpp:21
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
bool Is25ManRaid() const
Definition Map.cpp:4261
static ObjectGuid const Empty
Definition ObjectGuid.h:140
static Creature * ToCreature(Object *o)
Definition Object.h:186
static Unit * ToUnit(Object *o)
Definition Object.h:192
TypeID GetTypeId() const
Definition Object.h:93
uint32 GetEntry() const
Definition Object.h:81
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:78
static Player * ToPlayer(Object *o)
Definition Object.h:180
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition Player.cpp:15642
uint32 TriggerSpell
Definition SpellInfo.h:228
uint32 Id
Definition SpellInfo.h:289
SpellEffectInfo const & GetEffect(SpellEffIndex index) const
Definition SpellInfo.h:483
Creature * GetHitCreature() const
Player * GetHitPlayer() const
Unit * GetCaster() const
HookList< HitHandler > AfterHit
HookList< HitHandler > OnHit
HookList< EffectHandler > OnEffectHit
void PreventHitDefaultEffect(SpellEffIndex effIndex)
Unit * GetHitUnit() const
int32 GetEffectValue() 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)
virtual void DoAction(int32)
Definition UnitAI.h:154
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:54
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:241
SpellCastResult DoCastVictim(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.cpp:166
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset=0, float dist=0.0f, bool playerOnly=false, bool withTank=true, int32 aura=0)
Definition UnitAI.cpp:96
virtual void AttackStart(Unit *)
Definition UnitAI.cpp:30
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:243
Definition Unit.h:769
void SetVisible(bool x)
Definition Unit.cpp:8513
Aura * GetAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:4439
bool IsAlive() const
Definition Unit.h:1234
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint8 reqEffMask=0) const
Definition Unit.cpp:4535
bool IsVisible() const
Definition Unit.cpp:8508
void RemoveAurasDueToSpell(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, uint8 reqEffMask=0, AuraRemoveMode removeMode=AURA_REMOVE_BY_DEFAULT)
Definition Unit.cpp:3784
bool HasUnitState(const uint32 f) const
Definition Unit.h:876
void RemoveAllAuras()
Definition Unit.cpp:4157
Map * GetMap() const
Definition Object.h:449
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1087
void GetCreatureListWithEntryInGrid(Container &creatureContainer, uint32 entry, float maxSearchRange=250.0f) const
Definition Object.cpp:3153
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2832
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)
Definition Object.cpp:1992
void setActive(bool isActiveObject)
Definition Object.cpp:991
virtual void SetData(uint32, uint32)
Definition ZoneScript.h:56
static bool ValidateSpellInfo(std::initializer_list< uint32 > spellIds)
PrepareSpellScript(spell_rotface_large_ooze_buff_combine)
PrepareSpellScript(spell_rotface_large_ooze_combine)
PrepareSpellScript(spell_rotface_little_ooze_combine)
PrepareAuraScript(spell_rotface_mutated_infection_aura)
void HandleEffectRemove(AuraEffect const *aurEff, AuraEffectHandleModes)
bool Validate(SpellInfo const *spellInfo) override
PrepareSpellScript(spell_rotface_mutated_infection)
void FilterTargets(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_rotface_ooze_flood)
void HandleScript(SpellEffIndex)
void FilterTargets(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_rotface_slime_spray)
bool Validate(SpellInfo const *) override
void HandleCast(SpellEffIndex effIndex)
PrepareSpellScript(spell_rotface_unstable_ooze_explosion_init)
PrepareAuraScript(spell_rotface_unstable_ooze_explosion_suicide)
PrepareSpellScript(spell_rotface_unstable_ooze_explosion)
void CheckTarget(SpellEffIndex effIndex)
void HandleDummy(SpellEffIndex effIndex)
void FilterTargets(std::list< WorldObject * > &targets)
PrepareSpellScript(spell_rotface_vile_gas_trigger)
@ SPELL_GREEN_BLIGHT_RESIDUE
@ LIGHT_S_HAMMER_TELEPORT
#define RegisterIcecrownCitadelCreatureAI(ai_name)
@ ACTION_ROTFACE_COMBAT
@ ACTION_ROTFACE_DEATH
@ DATA_OOZE_DANCE_ACHIEVEMENT
@ DATA_ROTFACE
@ DATA_PROFESSOR_PUTRICIDE
@ NPC_OOZE_SPRAY_STALKER
@ NPC_VILE_GAS_STALKER
@ 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) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition Containers.h:108
void RandomResize(C &container, std::size_t requestedSize)
Definition Containers.h:66
void GetPosition(float &x, float &y) const
Definition Position.h:84
bool IsHeroic() const
void AddThreat(Unit *victim, float amount, Unit *who=nullptr)
void JustEngagedWith(Unit *who) override
void EnterEvadeMode(EvadeReason why) override
void Reset() override
void JustDied(Unit *) override
void UpdateAI(uint32 diff) override
boss_rotface(Creature *creature)
uint32 infectionStage
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
void Reset() override