fix(Scripts/Hyjal): tweak movement of Doomfire (#18970)

initial
This commit is contained in:
Dan
2024-05-29 08:04:13 +02:00
committed by GitHub
parent 2c246e49d0
commit fe6137b0a0
2 changed files with 42 additions and 7 deletions

View File

@@ -99,6 +99,7 @@ Position const nordrassilPosition = { 5503.713f, -3523.436f, 1608.781f, 0.0f };
float const DOOMFIRE_OFFSET = 15.0f;
uint8 const WISP_OFFSET = 40;
uint8 NEAR_POINT = 0;
struct npc_ancient_wisp : public ScriptedAI
{
@@ -148,6 +149,39 @@ private:
InstanceScript* _instance;
};
struct npc_doomfire_spirit : public ScriptedAI
{
npc_doomfire_spirit(Creature* creature) : ScriptedAI(creature)
{
_instance = creature->GetInstanceScript();
}
void Reset() override
{
scheduler.CancelAll();
ScheduleTimedEvent(0s, [&]{
if (Creature* archimonde = _instance->GetCreature(DATA_ARCHIMONDE))
{
Position randomNearPosition = archimonde->GetRandomNearPosition(100.0f);
me->GetMotionMaster()->MovePoint(NEAR_POINT, randomNearPosition);
}
}, 2s);
}
void UpdateAI(uint32 diff) override
{
scheduler.Update(diff);
if (!UpdateVictim())
return;
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
}
private:
InstanceScript* _instance;
};
struct boss_archimonde : public BossAI
{
boss_archimonde(Creature* creature) : BossAI(creature, DATA_ARCHIMONDE)
@@ -262,10 +296,7 @@ struct boss_archimonde : public BossAI
}, 25s, 40s);
ScheduleTimedEvent(25s, 35s, [&]
{
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, false))
{
DoCastDoomFire(target);
}
DoCastDoomFire();
}, 20s);
ScheduleTimedEvent(25s, 35s, [&]
{
@@ -391,12 +422,12 @@ struct boss_archimonde : public BossAI
}
}
void DoCastDoomFire(Unit* target)
void DoCastDoomFire()
{
// hack because spell doesn't work?
Talk(SAY_DOOMFIRE);
Position spiritPosition = { target->GetPositionX() + DOOMFIRE_OFFSET, target->GetPositionY() + DOOMFIRE_OFFSET, target->GetPositionZ(), 0.0f };
Position doomfirePosition = { target->GetPositionX() - DOOMFIRE_OFFSET, target->GetPositionY() - DOOMFIRE_OFFSET, target->GetPositionZ(), 0.0f };
Position spiritPosition = { me->GetPositionX() + DOOMFIRE_OFFSET, me->GetPositionY() + DOOMFIRE_OFFSET, me->GetPositionZ(), 0.0f };
Position doomfirePosition = { me->GetPositionX() - DOOMFIRE_OFFSET, me->GetPositionY() - DOOMFIRE_OFFSET, me->GetPositionZ(), 0.0f };
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))
@@ -508,5 +539,6 @@ void AddSC_boss_archimonde()
RegisterSpellScript(spell_finger_of_death);
RegisterHyjalAI(boss_archimonde);
RegisterHyjalAI(npc_ancient_wisp);
RegisterHyjalAI(npc_doomfire_spirit);
}