fix(Scripts/UtgardeKeep): Update special Enslaved Proto-Drake and rider (#23818)
This commit is contained in:
@@ -0,0 +1,16 @@
|
|||||||
|
--
|
||||||
|
DELETE FROM `waypoint_data` WHERE `id`=125946;
|
||||||
|
|
||||||
|
UPDATE `creature_template_movement` SET `Flight` = 0 WHERE (`CreatureId` = 24083);
|
||||||
|
|
||||||
|
DELETE FROM `creature` WHERE (`id1` = 24083) AND (`guid` IN (1971380));
|
||||||
|
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `Comment`, `VerifiedBuild`) VALUES
|
||||||
|
(1971380, 24083, 0, 0, 574, 0, 0, 3, 1, 0, 209.1206, -187.86578, 200.00346, 0.677681, 3600, 0, 0, 71856, 0, 0, 0, 0, 0, '', NULL, 0);
|
||||||
|
|
||||||
|
DELETE FROM `vehicle_accessory` WHERE `guid` = 1971380 AND `accessory_entry` = 24849;
|
||||||
|
INSERT INTO `vehicle_accessory` (`guid`, `accessory_entry`, `seat_id`, `minion`, `description`, `summontype`, `summontimer`) VALUES
|
||||||
|
(1971380, 24849, 0, 0, 'Proto Drake Rider mounted to Enslaved Proto Drake', 6, 30000);
|
||||||
|
|
||||||
|
DELETE FROM `creature_movement_override` WHERE `SpawnId`=1971380;
|
||||||
|
INSERT INTO `creature_movement_override` (`SpawnId`, `Ground`, `Swim`, `Flight`, `Rooted`, `Chase`, `Random`, `InteractionPauseTimer`) VALUES
|
||||||
|
(1971380, 1, 1, 2, 0, 0, 0, NULL);
|
||||||
@@ -82,30 +82,33 @@ struct npc_dragonflayer_forge_master : public ScriptedAI
|
|||||||
|
|
||||||
enum EnslavedProtoDrake
|
enum EnslavedProtoDrake
|
||||||
{
|
{
|
||||||
TYPE_PROTODRAKE_AT = 28,
|
|
||||||
DATA_PROTODRAKE_MOVE = 6,
|
|
||||||
|
|
||||||
PATH_PROTODRAKE = 125946,
|
|
||||||
|
|
||||||
EVENT_REND = 1,
|
|
||||||
EVENT_FLAME_BREATH = 2,
|
|
||||||
EVENT_KNOCKAWAY = 3,
|
|
||||||
|
|
||||||
SPELL_REND = 43931,
|
SPELL_REND = 43931,
|
||||||
SPELL_FLAME_BREATH = 50653,
|
SPELL_FLAME_BREATH = 50653,
|
||||||
SPELL_KNOCK_AWAY = 49722,
|
SPELL_KNOCK_AWAY = 49722,
|
||||||
|
|
||||||
POINT_LAST = 6,
|
EVENT_REND = 1,
|
||||||
|
EVENT_FLAME_BREATH = 2,
|
||||||
|
EVENT_KNOCKAWAY = 3,
|
||||||
|
// Special
|
||||||
|
EVENT_PRE_LAND = 4,
|
||||||
|
EVENT_LAND = 5,
|
||||||
|
|
||||||
|
// Special
|
||||||
|
TYPE_PROTODRAKE_AT = 28,
|
||||||
|
DATA_PROTODRAKE_MOVE = 6,
|
||||||
|
POINT_TAKE_OFF = 1,
|
||||||
|
POINT_PRE_LAND = 2,
|
||||||
|
POINT_LAND = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
const Position protodrakeCheckPos = {206.24f, -190.28f, 200.11f, 0.f};
|
const Position protodrakeCheckPos{206.24f, -190.28f, 200.11f, 0.f};
|
||||||
|
const Position protodrakeTakeOffPos{209.1206f, -187.86578f, 215.00346f};
|
||||||
|
const Position protodrakePreLandPos{230.80234f, -164.99632f, 196.74878f};
|
||||||
|
const Position protodrakeLandPos{241.2079f, -163.06265f, 193.47125f};
|
||||||
|
|
||||||
struct npc_enslaved_proto_drake : public ScriptedAI
|
struct npc_enslaved_proto_drake : public ScriptedAI
|
||||||
{
|
{
|
||||||
npc_enslaved_proto_drake(Creature* creature) : ScriptedAI(creature)
|
explicit npc_enslaved_proto_drake(Creature* creature) : ScriptedAI(creature) { }
|
||||||
{
|
|
||||||
_setData = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Reset() override
|
void Reset() override
|
||||||
{
|
{
|
||||||
@@ -113,22 +116,35 @@ struct npc_enslaved_proto_drake : public ScriptedAI
|
|||||||
_events.ScheduleEvent(EVENT_REND, 2s, 3s);
|
_events.ScheduleEvent(EVENT_REND, 2s, 3s);
|
||||||
_events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7s);
|
_events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7s);
|
||||||
_events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6s);
|
_events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6s);
|
||||||
|
scheduler.CancelAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MovementInform(uint32 type, uint32 id) override
|
void MovementInform(uint32 type, uint32 id) override
|
||||||
{
|
{
|
||||||
if (type == WAYPOINT_MOTION_TYPE && id == POINT_LAST)
|
if (type == EFFECT_MOTION_TYPE && id == POINT_TAKE_OFF)
|
||||||
{
|
{
|
||||||
|
ScheduleUniqueTimedEvent(500ms, [&]
|
||||||
|
{
|
||||||
|
me->GetMotionMaster()->MovePoint(POINT_PRE_LAND, protodrakePreLandPos);
|
||||||
|
}, EVENT_PRE_LAND);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == POINT_MOTION_TYPE && id == POINT_PRE_LAND)
|
||||||
|
{
|
||||||
|
ScheduleUniqueTimedEvent(0s, [&]
|
||||||
|
{
|
||||||
|
me->GetMotionMaster()->MovePoint(POINT_LAND, protodrakeLandPos);
|
||||||
|
}, EVENT_LAND);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type == POINT_MOTION_TYPE && id == POINT_LAND)
|
||||||
|
{
|
||||||
|
me->SetFacingTo(0.25f);
|
||||||
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.25f);
|
me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.25f);
|
||||||
if (Vehicle* v = me->GetVehicleKit())
|
if (Vehicle* v = me->GetVehicleKit())
|
||||||
if (Unit* p = v->GetPassenger(0))
|
if (Unit* p = v->GetPassenger(0))
|
||||||
if (Creature* rider = p->ToCreature())
|
if (Creature* rider = p->ToCreature())
|
||||||
rider->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.25f);
|
rider->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.25f);
|
||||||
|
|
||||||
me->SetCanFly(false);
|
|
||||||
me->SetDisableGravity(false);
|
|
||||||
me->SetFacingTo(0.25f);
|
|
||||||
me->SetImmuneToAll(false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -137,14 +153,14 @@ struct npc_enslaved_proto_drake : public ScriptedAI
|
|||||||
if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !_setData && me->IsAlive() && me->GetDistance(protodrakeCheckPos) < 10.0f)
|
if (type == TYPE_PROTODRAKE_AT && data == DATA_PROTODRAKE_MOVE && !_setData && me->IsAlive() && me->GetDistance(protodrakeCheckPos) < 10.0f)
|
||||||
{
|
{
|
||||||
_setData = true;
|
_setData = true;
|
||||||
me->SetCanFly(true);
|
me->GetMotionMaster()->MoveTakeoff(POINT_TAKE_OFF, protodrakeTakeOffPos, 8.0f);
|
||||||
me->SetDisableGravity(true);
|
|
||||||
me->GetMotionMaster()->MoveWaypoint(PATH_PROTODRAKE, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateAI(uint32 diff) override
|
void UpdateAI(uint32 diff) override
|
||||||
{
|
{
|
||||||
|
scheduler.Update(diff);
|
||||||
|
|
||||||
if (!UpdateVictim())
|
if (!UpdateVictim())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@@ -178,7 +194,7 @@ struct npc_enslaved_proto_drake : public ScriptedAI
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool _setData;
|
bool _setData{false};
|
||||||
EventMap _events;
|
EventMap _events;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user