fix(Scripts/Hyjal): Change the spawn and the movement of Doomfire (#19027)

* Doomfire_spirit_speed

* Update boss_archimonde.cpp

* Rename
This commit is contained in:
amed80
2024-06-08 12:07:39 +01:00
committed by GitHub
parent bb69f1c3ec
commit eed20b4647
2 changed files with 26 additions and 10 deletions

View File

@@ -0,0 +1 @@
UPDATE `creature_template` SET `speed_run` = 1.5 WHERE (`entry` = 18104);

View File

@@ -97,7 +97,7 @@ uint32 const availableChargeAurasAndSpells[3][2] = {
Position const nordrassilPosition = { 5503.713f, -3523.436f, 1608.781f, 0.0f }; 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 const WISP_OFFSET = 40;
uint8 NEAR_POINT = 0; uint8 NEAR_POINT = 0;
@@ -158,14 +158,26 @@ struct npc_doomfire_spirit : public ScriptedAI
void Reset() override void Reset() override
{ {
Position randomPosition;
scheduler.CancelAll(); scheduler.CancelAll();
ScheduleTimedEvent(0s, [&]{ ScheduleTimedEvent(0s, [&] {
if (Creature* archimonde = _instance->GetCreature(DATA_ARCHIMONDE)) DoomfireMovement(randomPosition, me->GetPosition());
{
Position randomNearPosition = archimonde->GetRandomNearPosition(200.0f); me->GetMotionMaster()->MovePoint(NEAR_POINT, randomPosition);
me->GetMotionMaster()->MovePoint(NEAR_POINT, randomNearPosition); }, 1500ms);
} }
}, 6s);
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 void UpdateAI(uint32 diff) override
@@ -430,8 +442,11 @@ struct boss_archimonde : public BossAI
{ {
// hack because spell doesn't work? // hack because spell doesn't work?
Talk(SAY_DOOMFIRE); Talk(SAY_DOOMFIRE);
Position spiritPosition = me->GetRandomNearPosition(DOOMFIRE_OFFSET); float angle = 2 * M_PI * rand() / RAND_MAX;
Position doomfirePosition = me->GetRandomNearPosition(DOOMFIRE_OFFSET); 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* doomfireSpirit = me->SummonCreature(CREATURE_DOOMFIRE_SPIRIT, spiritPosition, TEMPSUMMON_TIMED_DESPAWN, 27000))
{ {
if (Creature* doomfire = me->SummonCreature(CREATURE_DOOMFIRE, doomfirePosition, TEMPSUMMON_TIMED_DESPAWN, 27000)) if (Creature* doomfire = me->SummonCreature(CREATURE_DOOMFIRE, doomfirePosition, TEMPSUMMON_TIMED_DESPAWN, 27000))