diff --git a/data/sql/updates/pending_db_world/flame-tsunami-triggers.sql b/data/sql/updates/pending_db_world/flame-tsunami-triggers.sql new file mode 100644 index 000000000..2d589d17d --- /dev/null +++ b/data/sql/updates/pending_db_world/flame-tsunami-triggers.sql @@ -0,0 +1,5 @@ +UPDATE `creature_template_addon` SET `auras` = '' WHERE `entry` = 30616; + +DELETE FROM `creature_template_movement` WHERE `CreatureId` = 30616; +INSERT INTO `creature_template_movement` (`CreatureId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES +(30616, 2, 0, 2, 0, 0, 0, NULL); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 4802010e1..a45be95fd 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -139,8 +139,8 @@ enum Misc LAVA_RIGHT_SIDE = 1, // Counters - MAX_LEFT_LAVA_TSUNAMIS = 3, - MAX_RIGHT_LAVA_TSUNAMIS = 2, + MAX_LEFT_LAVA_TSUNAMIS = 9, + MAX_RIGHT_LAVA_TSUNAMIS = 6, MAX_DRAGONS = 3, MAX_AREA_TRIGGER_COUNT = 2, MAX_CYCLONE_COUNT = 5, @@ -224,7 +224,7 @@ const Position AreaTriggerSummonPos[MAX_AREA_TRIGGER_COUNT] = { 3242.84f, 553.979f, 58.8272f, 0.0f }, }; -const float SartharionBoundary[MAX_BOUNDARY_POSITIONS] = +float const SartharionBoundary[MAX_BOUNDARY_POSITIONS] = { 3218.86f, // South X 3275.69f, // North X @@ -232,6 +232,19 @@ const float SartharionBoundary[MAX_BOUNDARY_POSITIONS] = 572.4f // West Y }; +float const FlameTsunamiLeftOffsets[MAX_LEFT_LAVA_TSUNAMIS] = +{ + 476.0f, 484.0f, 492.0f, + 524.0f, 532.0f, 540.0f, + 572.0f, 580.0f, 588.0f +}; + +float const FlameTsunamiRightOffsets[MAX_RIGHT_LAVA_TSUNAMIS] = +{ + 500.0f, 508.0f, 516.0f, + 548.0f, 556.0f, 564.0f +}; + const Position bigIslandMiddlePos = { 3242.822754f, 477.279816f, 57.430473f }; const uint32 dragons[MAX_DRAGONS] = { DATA_TENEBRON, DATA_VESPERON, DATA_SHADRON }; @@ -620,15 +633,18 @@ public: { summons.RemoveNotExisting(); Talk(WHISPER_LAVA_CHURN); - extraEvents.ScheduleEvent(EVENT_SARTHARION_START_LAVA, 2s); - extraEvents.ScheduleEvent(EVENT_SARTHARION_FINISH_LAVA, 9s); + extraEvents.ScheduleEvent(EVENT_SARTHARION_START_LAVA, 3600ms); + extraEvents.ScheduleEvent(EVENT_SARTHARION_FINISH_LAVA, 11s); // Send wave from left if (lastLavaSide == LAVA_RIGHT_SIDE) { for (uint8 i = 0; i < MAX_LEFT_LAVA_TSUNAMIS; ++i) { - me->SummonCreature(NPC_FLAME_TSUNAMI, 3208.44f, 580.0f - (i * 50.0f), 55.8f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 12000); + Creature* tsunami = me->SummonCreature(NPC_FLAME_TSUNAMI, 3211.0f, FlameTsunamiLeftOffsets[i], 57.083332f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 13500); + + if (((i - 2) % 3 == 0) && tsunami) // If center of wave + tsunami->CastSpell(tsunami, SPELL_FLAME_TSUNAMI_VISUAL, true); } lastLavaSide = LAVA_LEFT_SIDE; @@ -638,7 +654,10 @@ public: { for (uint8 i = 0; i < MAX_RIGHT_LAVA_TSUNAMIS; ++i) { - me->SummonCreature(NPC_FLAME_TSUNAMI, 3283.44f, 555.0f - (i * 50.0f), 55.8f, 3.14f, TEMPSUMMON_TIMED_DESPAWN, 12000); + Creature* tsunami = me->SummonCreature(NPC_FLAME_TSUNAMI, 3286.0f, FlameTsunamiRightOffsets[i], 57.083332f, 3.14f, TEMPSUMMON_TIMED_DESPAWN, 13500); + + if (((i - 2) % 3 == 0) && tsunami) // If center of wave + tsunami->CastSpell(tsunami, SPELL_FLAME_TSUNAMI_VISUAL, true); } lastLavaSide = LAVA_RIGHT_SIDE; @@ -648,24 +667,22 @@ public: void SendLavaWaves(bool start) { if (summons.empty()) - { return; - } for (ObjectGuid const& guid : summons) { Creature* tsunami = ObjectAccessor::GetCreature(*me, guid); if (!tsunami || tsunami->GetEntry() != NPC_FLAME_TSUNAMI) - { continue; - } - if (start) + if (start) // Movement possibly simplified from official, ideally reevaluate in the future. { - tsunami->GetMotionMaster()->MovePoint(0, ((tsunami->GetPositionX() < 3250.0f) ? 3283.44f : 3208.44f), tsunami->GetPositionY(), tsunami->GetPositionZ()); + tsunami->CastSpell(tsunami, SPELL_FLAME_TSUNAMI_DAMAGE_AURA, true); + tsunami->GetMotionMaster()->MovePoint(0, ((tsunami->GetPositionX() < 3250.0f) ? 3286.0f : 3211.0f), tsunami->GetPositionY(), tsunami->GetPositionZ()); } else { + tsunami->RemoveAura(SPELL_FLAME_TSUNAMI_DAMAGE_AURA); tsunami->SetObjectScale(0.1f); } }