diff options
author | Keader <keader.android@gmail.com> | 2019-10-04 09:35:22 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-04 09:35:22 -0300 |
commit | a108f2ba61db47d60dc6698ec202dfd0a6574ac4 (patch) | |
tree | 3ba2903597d3c5344571aff186b76e08b97dd128 | |
parent | 8210b4a53976266f12585a2a4f546b33e25343af (diff) |
Scripts/ICC: Fixed some issues with Rotface Oozes (#23845)
-rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp | 40 |
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 |