fix(Scripts/ShadowmoonValley): minor fixes to Enslaved Netherwing Drakes (#18883)

* init

* fixes
This commit is contained in:
Dan
2024-05-17 08:06:25 +02:00
committed by GitHub
parent 6874d5e61b
commit 3b4639aa19

View File

@@ -439,9 +439,6 @@ enum EnshlavedNetherwingDrake
NPC_DRAGONMAW_WRANGLER = 21717,
NPC_ESCAPE_DUMMY = 22317,
EVENT_TAKE_OFF = 1,
EVENT_CREDIT_PLAYER = 2,
// Point
POINT_DESPAWN = 1
};
@@ -451,18 +448,14 @@ struct npc_enslaved_netherwing_drake : public ScriptedAI
public:
npc_enslaved_netherwing_drake(Creature* creature) : ScriptedAI(creature)
{
Tapped = false;
_tapped = false;
Reset();
}
ObjectGuid PlayerGUID;
bool Tapped;
Player* GetPlayer() { return ObjectAccessor::GetPlayer(*me, PlayerGUID); }
void Reset() override
{
if (!Tapped)
scheduler.CancelAll();
if (!_tapped)
{
me->RestoreFaction();
me->SetReactState(REACT_AGGRESSIVE);
@@ -474,9 +467,8 @@ public:
void JustDied(Unit* /*killer*/) override
{
Tapped = false;
_tapped = false;
me->RestoreFaction();
events.CancelEvent(EVENT_TAKE_OFF);
}
void SpellHit(Unit* caster, SpellInfo const* spell) override
@@ -485,20 +477,45 @@ public:
if (!playerCaster)
return;
if (spell->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !Tapped &&
if (spell->Id == SPELL_HIT_FORCE_OF_NELTHARAKU && !_tapped &&
playerCaster->GetQuestStatus(QUEST_THE_FORCE_OF_NELTHARAKU) == QUEST_STATUS_INCOMPLETE)
{
Tapped = true;
PlayerGUID = caster->GetGUID();
_tapped = true;
_playerGUID = caster->GetGUID();
me->SetFaction(FACTION_FLAYER_HUNTER); // Not sure if this is correct, it was taken off of Mordenai.
scheduler.Schedule(2s, [this](TaskContext)
{
me->SetFaction(FACTION_FLAYER_HUNTER); // Not sure if this is correct, it was taken off of Mordenai.
if (Unit* Dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_SUBJUGATOR, 25.0f))
AttackStart(Dragonmaw);
else if (Unit* Dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_WRANGLER, 25.0f))
AttackStart(Dragonmaw);
if (Unit* dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_SUBJUGATOR, 25.0f))
AttackStart(dragonmaw);
else if (Unit* dragonmaw = me->FindNearestCreature(NPC_DRAGONMAW_WRANGLER, 25.0f))
AttackStart(dragonmaw);
scheduler.Schedule(2s, [this](TaskContext)
{
_tapped = false;
Position pos;
if (Unit* escapeDummy = me->FindNearestCreature(NPC_ESCAPE_DUMMY, 30.0f))
pos = escapeDummy->GetPosition();
else
{
pos = me->GetRandomNearPosition(20.0f);
pos.m_positionZ += 25.0f;
}
events.ScheduleEvent(EVENT_TAKE_OFF, 2s);
me->SetDisableGravity(true);
me->GetMotionMaster()->MovePoint(POINT_DESPAWN, pos);
me->SetReactState(REACT_PASSIVE);
scheduler.Schedule(100ms, [this](TaskContext)
{
if (Player* player = _GetPlayer())
{
DoCast(player, SPELL_FORCE_OF_NELTHARAKU, true);
}
me->DespawnOrUnsummon(3s, 0s);
});
});
});
}
}
@@ -514,40 +531,21 @@ public:
void UpdateAI(uint32 diff) override
{
events.Update(diff);
scheduler.Update(diff);
if (!UpdateVictim())
{
switch (events.ExecuteEvent())
{
case EVENT_TAKE_OFF:
{
Tapped = false;
Position pos;
if (Unit* EscapeDummy = me->FindNearestCreature(NPC_ESCAPE_DUMMY, 30))
pos = EscapeDummy->GetPosition();
else
{
pos = me->GetRandomNearPosition(20);
pos.m_positionZ += 25;
}
me->SetDisableGravity(true);
me->GetMotionMaster()->MovePoint(POINT_DESPAWN, pos);
me->SetReactState(REACT_PASSIVE);
events.ScheduleEvent(EVENT_CREDIT_PLAYER, 100ms);
break;
}
case EVENT_CREDIT_PLAYER:
DoCast(GetPlayer(), SPELL_FORCE_OF_NELTHARAKU, true);
me->DespawnOrUnsummon(3s, 0s);
break;
}
return;
}
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
DoMeleeAttackIfReady();
}
private:
bool _tapped;
ObjectGuid _playerGUID;
Player* _GetPlayer() { return ObjectAccessor::GetPlayer(*me, _playerGUID); }
};
/*#####