From eed20b4647fb890bc980b55e8f9b2a94debe7c39 Mon Sep 17 00:00:00 2001 From: amed80 Date: Sat, 8 Jun 2024 12:07:39 +0100 Subject: [PATCH] fix(Scripts/Hyjal): Change the spawn and the movement of Doomfire (#19027) * Doomfire_spirit_speed * Update boss_archimonde.cpp * Rename --- .../Doomfire_spirit_speed.sql | 1 + .../BattleForMountHyjal/boss_archimonde.cpp | 35 +++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 data/sql/updates/pending_db_world/Doomfire_spirit_speed.sql diff --git a/data/sql/updates/pending_db_world/Doomfire_spirit_speed.sql b/data/sql/updates/pending_db_world/Doomfire_spirit_speed.sql new file mode 100644 index 000000000..a2998b324 --- /dev/null +++ b/data/sql/updates/pending_db_world/Doomfire_spirit_speed.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `speed_run` = 1.5 WHERE (`entry` = 18104); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index 932e50325..b1851451d 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -97,7 +97,7 @@ uint32 const availableChargeAurasAndSpells[3][2] = { Position const nordrassilPosition = { 5503.713f, -3523.436f, 1608.781f, 0.0f }; -float const DOOMFIRE_OFFSET = 25.0f; +float const DOOMFIRE_OFFSET = 15.0f; uint8 const WISP_OFFSET = 40; uint8 NEAR_POINT = 0; @@ -158,14 +158,26 @@ struct npc_doomfire_spirit : public ScriptedAI void Reset() override { + Position randomPosition; + scheduler.CancelAll(); - ScheduleTimedEvent(0s, [&]{ - if (Creature* archimonde = _instance->GetCreature(DATA_ARCHIMONDE)) - { - Position randomNearPosition = archimonde->GetRandomNearPosition(200.0f); - me->GetMotionMaster()->MovePoint(NEAR_POINT, randomNearPosition); - } - }, 6s); + ScheduleTimedEvent(0s, [&] { + DoomfireMovement(randomPosition, me->GetPosition()); + + me->GetMotionMaster()->MovePoint(NEAR_POINT, randomPosition); + }, 1500ms); + } + + void DoomfireMovement(Position& targetPos, Position mePos) + { + float angle = mePos.GetOrientation(); + float distance = 100.0f; + float newAngle = angle + ((rand() % 181) - 90) * M_PI / 180; + float x = mePos.GetPositionX() + distance * cos(newAngle); + float y = mePos.GetPositionY() + distance * sin(newAngle); + + targetPos = Position(x, y, me->GetPositionZ()); + return; } void UpdateAI(uint32 diff) override @@ -430,8 +442,11 @@ struct boss_archimonde : public BossAI { // hack because spell doesn't work? Talk(SAY_DOOMFIRE); - Position spiritPosition = me->GetRandomNearPosition(DOOMFIRE_OFFSET); - Position doomfirePosition = me->GetRandomNearPosition(DOOMFIRE_OFFSET); + float angle = 2 * M_PI * rand() / RAND_MAX; + float x = me->GetPositionX() + DOOMFIRE_OFFSET * cos(angle); + float y = me->GetPositionY() + DOOMFIRE_OFFSET * sin(angle); + Position spiritPosition = Position(x, y, me->GetPositionZ()); + Position doomfirePosition = Position(x, y, me->GetPositionZ()); if (Creature* doomfireSpirit = me->SummonCreature(CREATURE_DOOMFIRE_SPIRIT, spiritPosition, TEMPSUMMON_TIMED_DESPAWN, 27000)) { if (Creature* doomfire = me->SummonCreature(CREATURE_DOOMFIRE, doomfirePosition, TEMPSUMMON_TIMED_DESPAWN, 27000))