Scripts/ICC: Fixed some issues with Rotface Oozes (#23845)

This commit is contained in:
Keader
2019-10-04 09:35:22 -03:00
committed by GitHub
parent 8210b4a539
commit a108f2ba61

View File

@@ -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