void Reset() { DeSummonBeams(); beams[0] = 0; beams[1] = 0; PosCheck_Timer = 2500; MarkOfHydross_Timer = 15000; MarkOfCorruption_Timer = 15000; WaterTomb_Timer = 7000; VileSludge_Timer = 7000; MarkOfHydross_Count = 0; MarkOfCorruption_Count = 0; EnrageTimer = 600000; CorruptedForm = false; me->SetMeleeDamageSchool(SPELL_SCHOOL_FROST); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false); me->SetDisplayId(MODEL_CLEAN); if (pInstance) pInstance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED); beam = false; Summons.DespawnAll(); }
void Reset() override { DeSummonBeams(); Initialize(); me->SetMeleeDamageSchool(SPELL_SCHOOL_FROST); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false); me->SetDisplayId(MODEL_CLEAN); instance->SetData(DATA_HYDROSSTHEUNSTABLEEVENT, NOT_STARTED); Summons.DespawnAll(); }
void UpdateAI(const uint32 diff) { if (!beam) { SummonBeams(); beam=true; } //Return since we have no target if (!UpdateVictim()) return; // corrupted form if (CorruptedForm) { //MarkOfCorruption_Timer if (MarkOfCorruption_Timer <= diff) { if (MarkOfCorruption_Count <= 5) { uint32 mark_spell = 0; switch (MarkOfCorruption_Count) { case 0: mark_spell = SPELL_MARK_OF_CORRUPTION1; break; case 1: mark_spell = SPELL_MARK_OF_CORRUPTION2; break; case 2: mark_spell = SPELL_MARK_OF_CORRUPTION3; break; case 3: mark_spell = SPELL_MARK_OF_CORRUPTION4; break; case 4: mark_spell = SPELL_MARK_OF_CORRUPTION5; break; case 5: mark_spell = SPELL_MARK_OF_CORRUPTION6; break; } DoCast(me->getVictim(), mark_spell); if (MarkOfCorruption_Count < 5) ++MarkOfCorruption_Count; } MarkOfCorruption_Timer = 15000; } else MarkOfCorruption_Timer -= diff; //VileSludge_Timer if (VileSludge_Timer <= diff) { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0); if (target) DoCast(target, SPELL_VILE_SLUDGE); VileSludge_Timer = 15000; } else VileSludge_Timer -= diff; //PosCheck_Timer if (PosCheck_Timer <= diff) { if (me->IsWithinDist2d(HYDROSS_X, HYDROSS_Y, SWITCH_RADIUS)) { // switch to clean form me->SetDisplayId(MODEL_CLEAN); CorruptedForm = false; MarkOfHydross_Count = 0; DoScriptText(SAY_SWITCH_TO_CLEAN, me); DoResetThreat(); SummonBeams(); // spawn 4 adds DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF1, SPAWN_Y_DIFF1, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF2, SPAWN_Y_DIFF2, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF3, SPAWN_Y_DIFF3, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); DoSpawnCreature(ENTRY_PURE_SPAWN, SPAWN_X_DIFF4, SPAWN_Y_DIFF4, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); me->SetMeleeDamageSchool(SPELL_SCHOOL_FROST); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, true); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, false); } PosCheck_Timer = 2500; } else PosCheck_Timer -=diff; } // clean form else { //MarkOfHydross_Timer if (MarkOfHydross_Timer <= diff) { if (MarkOfHydross_Count <= 5) { uint32 mark_spell = 0; switch(MarkOfHydross_Count) { case 0: mark_spell = SPELL_MARK_OF_HYDROSS1; break; case 1: mark_spell = SPELL_MARK_OF_HYDROSS2; break; case 2: mark_spell = SPELL_MARK_OF_HYDROSS3; break; case 3: mark_spell = SPELL_MARK_OF_HYDROSS4; break; case 4: mark_spell = SPELL_MARK_OF_HYDROSS5; break; case 5: mark_spell = SPELL_MARK_OF_HYDROSS6; break; } DoCast(me->getVictim(), mark_spell); if (MarkOfHydross_Count < 5) ++MarkOfHydross_Count; } MarkOfHydross_Timer = 15000; } else MarkOfHydross_Timer -= diff; //WaterTomb_Timer if (WaterTomb_Timer <= diff) { Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 100, true); if (target) DoCast(target, SPELL_WATER_TOMB); WaterTomb_Timer = 7000; } else WaterTomb_Timer -= diff; //PosCheck_Timer if (PosCheck_Timer <= diff) { if (!me->IsWithinDist2d(HYDROSS_X, HYDROSS_Y, SWITCH_RADIUS)) { // switch to corrupted form me->SetDisplayId(MODEL_CORRUPT); MarkOfCorruption_Count = 0; CorruptedForm = true; DoScriptText(SAY_SWITCH_TO_CORRUPT, me); DoResetThreat(); DeSummonBeams(); // spawn 4 adds DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF1, SPAWN_Y_DIFF1, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF2, SPAWN_Y_DIFF2, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF3, SPAWN_Y_DIFF3, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); DoSpawnCreature(ENTRY_TAINTED_SPAWN, SPAWN_X_DIFF4, SPAWN_Y_DIFF4, 3, 0, TEMPSUMMON_CORPSE_DESPAWN, 0); me->SetMeleeDamageSchool(SPELL_SCHOOL_NATURE); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_NATURE, true); me->ApplySpellImmune(0, IMMUNITY_SCHOOL, SPELL_SCHOOL_MASK_FROST, false); } PosCheck_Timer = 2500; } else PosCheck_Timer -=diff; } //EnrageTimer if (EnrageTimer <= diff) { DoCast(me, SPELL_ENRAGE); EnrageTimer = 60000; } else EnrageTimer -= diff; DoMeleeAttackIfReady(); }