fix(Scripts/Ulduar): make Mimiron's Aerial Command Unit chase players (#26625)
Co-authored-by: Unholychick <lucas__jensen@hotmail.com> Co-authored-by: Chaouki Dhib <chaodhib@gmail.com> Co-authored-by: sirikfoll <sirikfoll@hotmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
-- Aerial Command Unit: hover height and flags to match TDB (hover-based chase)
|
||||||
|
-- 256 = UNIT_FLAG_IMMUNE_TO_PC (cleared by script at phase start), 512 = CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE
|
||||||
|
UPDATE `creature_template` SET `HoverHeight` = 15, `unit_flags` = `unit_flags`|256, `flags_extra` = `flags_extra`|512 WHERE `entry` IN (33670, 34109);
|
||||||
|
|
||||||
|
-- Values ported from TrinityCore (TrinityCore/TrinityCore@7c13b383); zeroed combat reach
|
||||||
|
-- made the hovering ACU unreachable for Magnetic Core's 15y check
|
||||||
|
UPDATE `creature_model_info` SET `BoundingRadius` = 0.31, `CombatReach` = 5 WHERE `DisplayID` = 28979;
|
||||||
@@ -264,7 +264,8 @@ enum Texts
|
|||||||
#define GetVX001() instance->GetCreature(DATA_MIMIRON_VX001)
|
#define GetVX001() instance->GetCreature(DATA_MIMIRON_VX001)
|
||||||
#define GetACU() instance->GetCreature(DATA_MIMIRON_ACU)
|
#define GetACU() instance->GetCreature(DATA_MIMIRON_ACU)
|
||||||
|
|
||||||
Position const ACUSummonPos = { 2742.6265f, 2568.0571f, 377.22076f, 0.0f }; /// @todo: replace with sniffed position
|
// Z is above hover height (15y) so that activating hover does not relocate the ACU upwards
|
||||||
|
Position const ACUSummonPos = { 2744.650f, 2569.460f, 380.0f, 3.141593f };
|
||||||
|
|
||||||
struct boss_mimiron : public BossAI
|
struct boss_mimiron : public BossAI
|
||||||
{
|
{
|
||||||
@@ -1513,7 +1514,8 @@ struct npc_ulduar_aerial_command_unit : public ScriptedAI
|
|||||||
_isDefeated = false;
|
_isDefeated = false;
|
||||||
_events.Reset();
|
_events.Reset();
|
||||||
_summons.DespawnAll();
|
_summons.DespawnAll();
|
||||||
me->SetCombatMovement(false); /// @todo: research ACU behaviour
|
me->SetHover(false);
|
||||||
|
me->SetDisableGravity(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetData(uint32 id, uint32 value) override
|
void SetData(uint32 id, uint32 value) override
|
||||||
@@ -1528,7 +1530,12 @@ struct npc_ulduar_aerial_command_unit : public ScriptedAI
|
|||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
_phase = 3;
|
_phase = 3;
|
||||||
|
// Hover instead of disabled gravity: chase then keeps the ACU at
|
||||||
|
// HoverHeight above ground instead of dragging it to ground level.
|
||||||
|
me->SetDisableGravity(false);
|
||||||
|
me->SetHover(true);
|
||||||
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE);
|
||||||
|
me->SetImmuneToPC(false);
|
||||||
DoZoneInCombat();
|
DoZoneInCombat();
|
||||||
_events.Reset();
|
_events.Reset();
|
||||||
_events.ScheduleEvent(EVENT_SUMMON_BOMB_BOT, 15s);
|
_events.ScheduleEvent(EVENT_SUMMON_BOMB_BOT, 15s);
|
||||||
@@ -1560,14 +1567,24 @@ struct npc_ulduar_aerial_command_unit : public ScriptedAI
|
|||||||
me->CastStop();
|
me->CastStop();
|
||||||
me->AttackStop();
|
me->AttackStop();
|
||||||
me->SetReactState(REACT_PASSIVE);
|
me->SetReactState(REACT_PASSIVE);
|
||||||
me->SetDisableGravity(false);
|
// Raw flag removal first: MoveFall lands at ground + hover height, which would
|
||||||
|
// keep the ACU airborne, and SetHover(false) would relocate it without a spline.
|
||||||
|
// SetHover(false) afterwards is relocation-free and tells the client to stop
|
||||||
|
// hovering, else it keeps floating the grounded unit back up
|
||||||
|
me->RemoveUnitMovementFlag(MOVEMENTFLAG_HOVER);
|
||||||
me->GetMotionMaster()->MoveFall();
|
me->GetMotionMaster()->MoveFall();
|
||||||
|
me->SetHover(false);
|
||||||
_events.DelayEvents(25s);
|
_events.DelayEvents(25s);
|
||||||
break;
|
break;
|
||||||
case DO_ENABLE_AERIAL:
|
case DO_ENABLE_AERIAL:
|
||||||
|
if (_isDefeated)
|
||||||
|
break;
|
||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 10.0f);
|
// 16y: above hover height (15y) so SetHover does not relocate it further up
|
||||||
|
me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 16.0f);
|
||||||
me->m_Events.AddEventAtOffset([&] {
|
me->m_Events.AddEventAtOffset([&] {
|
||||||
|
me->SetDisableGravity(false);
|
||||||
|
me->SetHover(true);
|
||||||
me->SetReactState(REACT_AGGRESSIVE);
|
me->SetReactState(REACT_AGGRESSIVE);
|
||||||
}, 2s);
|
}, 2s);
|
||||||
break;
|
break;
|
||||||
@@ -1599,6 +1616,7 @@ struct npc_ulduar_aerial_command_unit : public ScriptedAI
|
|||||||
me->InterruptNonMeleeSpells(false);
|
me->InterruptNonMeleeSpells(false);
|
||||||
me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE);
|
me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE);
|
||||||
|
|
||||||
|
me->SetDisableGravity(true);
|
||||||
me->GetMotionMaster()->MovePoint(0, 2744.65f, 2569.46f, 381.34f);
|
me->GetMotionMaster()->MovePoint(0, 2744.65f, 2569.46f, 381.34f);
|
||||||
|
|
||||||
if (Creature* c = GetMimiron())
|
if (Creature* c = GetMimiron())
|
||||||
|
|||||||
Reference in New Issue
Block a user