aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeader <keader.android@gmail.com>2019-10-04 09:35:22 -0300
committerGitHub <noreply@github.com>2019-10-04 09:35:22 -0300
commita108f2ba61db47d60dc6698ec202dfd0a6574ac4 (patch)
tree3ba2903597d3c5344571aff186b76e08b97dd128
parent8210b4a53976266f12585a2a4f546b33e25343af (diff)
Scripts/ICC: Fixed some issues with Rotface Oozes (#23845)
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp40
1 files changed, 28 insertions, 12 deletions
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
index 83121e84fd5..cecde8c336b 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp
@@ -591,13 +591,15 @@ class spell_rotface_little_ooze_combine : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
- if (!(GetHitCreature() && GetHitUnit()->IsAlive()))
+ Creature* caster = GetCaster()->ToCreature();
+ if (!(GetHitCreature() && GetHitUnit()->IsAlive()) || !caster)
return;
- GetCaster()->RemoveAurasDueToSpell(SPELL_LITTLE_OOZE_COMBINE);
+ caster->RemoveAurasDueToSpell(SPELL_LITTLE_OOZE_COMBINE);
GetHitCreature()->RemoveAurasDueToSpell(SPELL_LITTLE_OOZE_COMBINE);
- GetHitCreature()->CastSpell(GetCaster(), SPELL_OOZE_MERGE, true);
+ GetHitCreature()->CastSpell(caster, SPELL_OOZE_MERGE, true);
GetHitCreature()->DespawnOrUnsummon();
+ caster->DespawnOrUnsummon();
}
void Register() override
@@ -623,23 +625,37 @@ class spell_rotface_large_ooze_combine : public SpellScriptLoader
void HandleScript(SpellEffIndex /*effIndex*/)
{
- if (!(GetHitCreature() && GetHitCreature()->IsAlive()))
+ Creature* caster = GetCaster()->ToCreature();
+ Creature* target = GetHitCreature();
+ if (!(target && target->IsAlive()) || !caster)
return;
- if (Aura* unstable = GetCaster()->GetAura(SPELL_UNSTABLE_OOZE))
+ if (Aura* unstable = caster->GetAura(SPELL_UNSTABLE_OOZE))
{
- if (Aura* targetAura = GetHitCreature()->GetAura(SPELL_UNSTABLE_OOZE))
+ if (Aura* targetAura = target->GetAura(SPELL_UNSTABLE_OOZE))
unstable->ModStackAmount(targetAura->GetStackAmount());
else
unstable->ModStackAmount(1);
- // no idea why, but this does not trigger explosion on retail (only small+large do)
- }
+ if (unstable->GetStackAmount() >= 5)
+ {
+ caster->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_BUFF_COMBINE);
+ caster->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_COMBINE);
+ if (InstanceScript* instance = caster->GetInstanceScript())
+ {
+ if (Creature* rotface = ObjectAccessor::GetCreature(*caster, instance->GetGuidData(DATA_ROTFACE)))
+ {
+ instance->SetData(DATA_OOZE_DANCE_ACHIEVEMENT, uint32(false));
+ if (rotface->IsAlive())
+ rotface->AI()->Talk(SAY_UNSTABLE_EXPLOSION);
+ }
+ }
- // just for safety
- GetHitCreature()->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_BUFF_COMBINE);
- GetHitCreature()->RemoveAurasDueToSpell(SPELL_LARGE_OOZE_COMBINE);
- GetHitCreature()->DespawnOrUnsummon();
+ caster->AI()->DoAction(EVENT_STICKY_OOZE);
+ caster->CastSpell(caster, SPELL_UNSTABLE_OOZE_EXPLOSION, CastSpellExtraArgs().SetOriginalCaster(caster->GetGUID()));
+ }
+ }
+ target->DespawnOrUnsummon();
}
void Register() override