diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index ae1e22d75..3221506c9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -48,8 +48,8 @@ public: GuidSet encounterNPCs; uint32 encounters[MAX_ENCOUNTER]; ObjectGuid _medivhGUID; - uint8 _currentRift; - uint8 _shieldPercent; + uint8 _currentRift; + int8 _shieldPercent; void Initialize() override { @@ -144,7 +144,7 @@ public: } } - void SetData(uint32 type, uint32 /*data*/) override + void SetData(uint32 type, uint32 data) override { switch (type) { @@ -187,10 +187,19 @@ public: Events.RescheduleEvent(EVENT_NEXT_PORTAL, 3000); break; case DATA_DAMAGE_SHIELD: - --_shieldPercent; + { + _shieldPercent -= data; + if (_shieldPercent < 0) + { + _shieldPercent = 0; + } + DoUpdateWorldState(WORLD_STATE_BM_SHIELD, _shieldPercent); + if (!_shieldPercent) + { if (Creature* medivh = instance->GetCreature(_medivhGUID)) + { if (medivh->IsAlive()) { Unit::Kill(medivh, medivh); @@ -198,10 +207,17 @@ public: // Xinef: delete all spawns GuidSet eCopy = encounterNPCs; for (ObjectGuid const& guid : eCopy) + { if (Creature* creature = instance->GetCreature(guid)) + { creature->DespawnOrUnsummon(); + } + } } + } + } break; + } } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 0fec969f0..b1d88ca83 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -387,16 +387,32 @@ public: { PrepareAuraScript(spell_black_morass_corrupt_medivh_AuraScript); + bool Load() override + { + _ticks = 0; + return true; + } + void PeriodicTick(AuraEffect const* /*aurEff*/) { - if (InstanceScript* instance = GetUnitOwner()->GetInstanceScript()) - instance->SetData(DATA_DAMAGE_SHIELD, 1); + if (++_ticks >= 3) + { + _ticks = 0; + + if (InstanceScript* instance = GetUnitOwner()->GetInstanceScript()) + { + instance->SetData(DATA_DAMAGE_SHIELD, m_scriptSpellId == SPELL_CORRUPT_AEONUS ? 2 : 1); + } + } } void Register() override { OnEffectPeriodic += AuraEffectPeriodicFn(spell_black_morass_corrupt_medivh_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_TRIGGER_SPELL); } + + private: + uint8 _ticks = 0; }; AuraScript* GetAuraScript() const override