mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-13 09:17:18 +00:00
fix(Scripts/ShadowmoonValley): minor fixes to Enslaved Netherwing Drakes (#18883)
* init * fixes
This commit is contained in:
@@ -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); }
|
||||
};
|
||||
|
||||
/*#####
|
||||
|
||||
Reference in New Issue
Block a user