fix(Core/Unit): Introduce animtier to malygos to fix flying animations (#24067)
This commit is contained in:
@@ -596,7 +596,7 @@ void Unit::UpdateSplineMovement(uint32 t_diff)
|
|||||||
DisableSpline();
|
DisableSpline();
|
||||||
|
|
||||||
if (movespline->HasAnimation() && IsCreature() && IsAlive())
|
if (movespline->HasAnimation() && IsCreature() && IsAlive())
|
||||||
SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, movespline->GetAnimationType());
|
SetAnimTier(AnimTier(movespline->GetAnimationType()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// pussywizard: update always! not every 400ms, because movement generators need the actual position
|
// pussywizard: update always! not every 400ms, because movement generators need the actual position
|
||||||
@@ -15284,6 +15284,11 @@ float Unit::GetSpellMinRangeForTarget(Unit const* target, SpellInfo const* spell
|
|||||||
return spellInfo->GetMinRange(!IsHostileTo(target));
|
return spellInfo->GetMinRange(!IsHostileTo(target));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Unit::SetAnimTier(AnimTier animTier)
|
||||||
|
{
|
||||||
|
SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, uint8(animTier));
|
||||||
|
}
|
||||||
|
|
||||||
uint32 Unit::GetCreatureType() const
|
uint32 Unit::GetCreatureType() const
|
||||||
{
|
{
|
||||||
if (IsPlayer())
|
if (IsPlayer())
|
||||||
|
|||||||
@@ -774,6 +774,8 @@ public:
|
|||||||
inline bool IsCrowdControlled() const { return HasFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_STUNNED)); }
|
inline bool IsCrowdControlled() const { return HasFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_STUNNED)); }
|
||||||
inline bool IsImmobilizedState() const { return HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED); }
|
inline bool IsImmobilizedState() const { return HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED); }
|
||||||
|
|
||||||
|
void SetAnimTier(AnimTier animTier);
|
||||||
|
|
||||||
/*********************************************************/
|
/*********************************************************/
|
||||||
/*** UNIT TYPES, CLASSES, RACES... ***/
|
/*** UNIT TYPES, CLASSES, RACES... ***/
|
||||||
/*********************************************************/
|
/*********************************************************/
|
||||||
|
|||||||
@@ -471,7 +471,7 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo
|
|||||||
*
|
*
|
||||||
* For transition movement between the ground and the air, use MoveLand or MoveTakeoff instead.
|
* For transition movement between the ground and the air, use MoveLand or MoveTakeoff instead.
|
||||||
*/
|
*/
|
||||||
void MotionMaster::MovePoint(uint32 id, float x, float y, float z, ForcedMovement forcedMovement, float speed, float orientation, bool generatePath, bool forceDestination, MovementSlot slot)
|
void MotionMaster::MovePoint(uint32 id, float x, float y, float z, ForcedMovement forcedMovement, float speed, float orientation, bool generatePath, bool forceDestination, MovementSlot slot, std::optional<AnimTier> animTier)
|
||||||
{
|
{
|
||||||
if (_owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
|
if (_owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE))
|
||||||
return;
|
return;
|
||||||
@@ -479,12 +479,12 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, ForcedMovemen
|
|||||||
if (_owner->IsPlayer())
|
if (_owner->IsPlayer())
|
||||||
{
|
{
|
||||||
LOG_DEBUG("movement.motionmaster", "Player ({}) targeted point (Id: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z);
|
LOG_DEBUG("movement.motionmaster", "Player ({}) targeted point (Id: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z);
|
||||||
Mutate(new PointMovementGenerator<Player>(id, x, y, z, forcedMovement, speed, orientation, nullptr, generatePath, forceDestination), slot);
|
Mutate(new PointMovementGenerator<Player>(id, x, y, z, forcedMovement, speed, orientation, nullptr, generatePath, forceDestination, animTier), slot);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_DEBUG("movement.motionmaster", "Creature ({}) targeted point (ID: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z);
|
LOG_DEBUG("movement.motionmaster", "Creature ({}) targeted point (ID: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z);
|
||||||
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, forcedMovement, speed, orientation, nullptr, generatePath, forceDestination), slot);
|
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, forcedMovement, speed, orientation, nullptr, generatePath, forceDestination, animTier), slot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -556,7 +556,7 @@ void MotionMaster::MoveLand(uint32 id, Position const& pos, float speed /* = 0.0
|
|||||||
init.SetVelocity(speed);
|
init.SetVelocity(speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
init.SetAnimation(Movement::ToGround);
|
init.SetAnimation(AnimTier::Ground);
|
||||||
|
|
||||||
Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_ACTIVE);
|
Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_ACTIVE);
|
||||||
}
|
}
|
||||||
@@ -590,7 +590,7 @@ void MotionMaster::MoveTakeoff(uint32 id, Position const& pos, float speed /* =
|
|||||||
init.SetVelocity(speed);
|
init.SetVelocity(speed);
|
||||||
|
|
||||||
if (!skipAnimation)
|
if (!skipAnimation)
|
||||||
init.SetAnimation(Movement::ToFly);
|
init.SetAnimation(AnimTier::Hover);
|
||||||
|
|
||||||
Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_ACTIVE);
|
Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_ACTIVE);
|
||||||
}
|
}
|
||||||
@@ -727,12 +727,12 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id,
|
|||||||
if (_owner->IsPlayer())
|
if (_owner->IsPlayer())
|
||||||
{
|
{
|
||||||
LOG_DEBUG("movement.motionmaster", "Player ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
|
LOG_DEBUG("movement.motionmaster", "Player ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
|
||||||
Mutate(new PointMovementGenerator<Player>(id, x, y, z, FORCED_MOVEMENT_NONE, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED);
|
Mutate(new PointMovementGenerator<Player>(id, x, y, z, FORCED_MOVEMENT_NONE, speed, orientation, path, generatePath, generatePath, std::nullopt, targetGUID), MOTION_SLOT_CONTROLLED);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LOG_DEBUG("movement.motionmaster", "Creature ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
|
LOG_DEBUG("movement.motionmaster", "Creature ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z);
|
||||||
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, FORCED_MOVEMENT_NONE, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED);
|
Mutate(new PointMovementGenerator<Creature>(id, x, y, z, FORCED_MOVEMENT_NONE, speed, orientation, path, generatePath, generatePath, std::nullopt, targetGUID), MOTION_SLOT_CONTROLLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -95,6 +95,16 @@ enum class PathSource
|
|||||||
SMART_WAYPOINT_MGR = 1,
|
SMART_WAYPOINT_MGR = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class AnimTier : uint8
|
||||||
|
{
|
||||||
|
Ground = 0,
|
||||||
|
Swim = 1,
|
||||||
|
Hover = 2,
|
||||||
|
Fly = 3,
|
||||||
|
Submerged = 4,
|
||||||
|
Max
|
||||||
|
};
|
||||||
|
|
||||||
struct ChaseRange
|
struct ChaseRange
|
||||||
{
|
{
|
||||||
ChaseRange(float range);
|
ChaseRange(float range);
|
||||||
@@ -225,9 +235,9 @@ public:
|
|||||||
void MoveForwards(Unit* target, float dist);
|
void MoveForwards(Unit* target, float dist);
|
||||||
void MoveConfused();
|
void MoveConfused();
|
||||||
void MoveFleeing(Unit* enemy, uint32 time = 0);
|
void MoveFleeing(Unit* enemy, uint32 time = 0);
|
||||||
void MovePoint(uint32 id, const Position& pos, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, float speed = 0.f, bool generatePath = true, bool forceDestination = true)
|
void MovePoint(uint32 id, const Position& pos, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, float speed = 0.f, bool generatePath = true, bool forceDestination = true, std::optional<AnimTier> animTier = std::nullopt)
|
||||||
{ MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, forcedMovement, speed, pos.GetOrientation(), generatePath, forceDestination, MOTION_SLOT_ACTIVE); }
|
{ MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, forcedMovement, speed, pos.GetOrientation(), generatePath, forceDestination, MOTION_SLOT_ACTIVE, animTier); }
|
||||||
void MovePoint(uint32 id, float x, float y, float z, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, float speed = 0.f, float orientation = 0.0f, bool generatePath = true, bool forceDestination = true, MovementSlot slot = MOTION_SLOT_ACTIVE);
|
void MovePoint(uint32 id, float x, float y, float z, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, float speed = 0.f, float orientation = 0.0f, bool generatePath = true, bool forceDestination = true, MovementSlot slot = MOTION_SLOT_ACTIVE, std::optional<AnimTier> animTier = std::nullopt);
|
||||||
void MoveSplinePath(Movement::PointsArray* path, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE);
|
void MoveSplinePath(Movement::PointsArray* path, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE);
|
||||||
void MovePath(uint32 path_id, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, PathSource pathSource = PathSource::WAYPOINT_MGR);
|
void MovePath(uint32 path_id, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, PathSource pathSource = PathSource::WAYPOINT_MGR);
|
||||||
|
|
||||||
|
|||||||
@@ -94,6 +94,9 @@ void PointMovementGenerator<T>::DoInitialize(T* unit)
|
|||||||
init.SetFacing(i_orientation);
|
init.SetFacing(i_orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (_animTier)
|
||||||
|
init.SetAnimation(*_animTier);
|
||||||
|
|
||||||
init.Launch();
|
init.Launch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,6 +155,9 @@ bool PointMovementGenerator<T>::DoUpdate(T* unit, uint32 /*diff*/)
|
|||||||
else if (_forcedMovement == FORCED_MOVEMENT_RUN)
|
else if (_forcedMovement == FORCED_MOVEMENT_RUN)
|
||||||
init.SetWalk(false);
|
init.SetWalk(false);
|
||||||
|
|
||||||
|
if (_animTier)
|
||||||
|
init.SetAnimation(*_animTier);
|
||||||
|
|
||||||
if (i_orientation > 0.0f)
|
if (i_orientation > 0.0f)
|
||||||
{
|
{
|
||||||
init.SetFacing(i_orientation);
|
init.SetFacing(i_orientation);
|
||||||
|
|||||||
@@ -21,15 +21,16 @@
|
|||||||
#include "Creature.h"
|
#include "Creature.h"
|
||||||
#include "MovementGenerator.h"
|
#include "MovementGenerator.h"
|
||||||
#include "MoveSplineInit.h"
|
#include "MoveSplineInit.h"
|
||||||
|
#include <optional>
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementGenerator<T> >
|
class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementGenerator<T> >
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PointMovementGenerator(uint32 _id, float _x, float _y, float _z, ForcedMovement forcedMovement, float _speed = 0.0f, float orientation = 0.0f, const Movement::PointsArray* _path = nullptr,
|
PointMovementGenerator(uint32 _id, float _x, float _y, float _z, ForcedMovement forcedMovement, float _speed = 0.0f, float orientation = 0.0f, const Movement::PointsArray* _path = nullptr,
|
||||||
bool generatePath = false, bool forceDestination = false, ObjectGuid chargeTargetGUID = ObjectGuid::Empty, bool reverseOrientation = false, ObjectGuid facingTargetGuid = ObjectGuid())
|
bool generatePath = false, bool forceDestination = false, std::optional<AnimTier> animTier = std::nullopt, ObjectGuid chargeTargetGUID = ObjectGuid::Empty, bool reverseOrientation = false, ObjectGuid facingTargetGuid = ObjectGuid())
|
||||||
: id(_id), i_x(_x), i_y(_y), i_z(_z), speed(_speed), i_orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination), _reverseOrientation(reverseOrientation),
|
: id(_id), i_x(_x), i_y(_y), i_z(_z), speed(_speed), i_orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination), _reverseOrientation(reverseOrientation),
|
||||||
_chargeTargetGUID(chargeTargetGUID), _forcedMovement(forcedMovement), _facingTargetGuid(facingTargetGuid)
|
_chargeTargetGUID(chargeTargetGUID), _forcedMovement(forcedMovement), _facingTargetGuid(facingTargetGuid), _animTier(animTier)
|
||||||
{
|
{
|
||||||
if (_path)
|
if (_path)
|
||||||
m_precomputedPath = *_path;
|
m_precomputedPath = *_path;
|
||||||
@@ -60,6 +61,7 @@ private:
|
|||||||
ObjectGuid _chargeTargetGUID;
|
ObjectGuid _chargeTargetGUID;
|
||||||
ForcedMovement _forcedMovement;
|
ForcedMovement _forcedMovement;
|
||||||
ObjectGuid _facingTargetGuid;
|
ObjectGuid _facingTargetGuid;
|
||||||
|
std::optional<AnimTier> _animTier;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AssistanceMovementGenerator : public PointMovementGenerator<Creature>
|
class AssistanceMovementGenerator : public PointMovementGenerator<Creature>
|
||||||
|
|||||||
@@ -204,10 +204,10 @@ bool WaypointMovementGenerator<Creature>::StartMove(Creature* creature)
|
|||||||
switch (node.move_type)
|
switch (node.move_type)
|
||||||
{
|
{
|
||||||
case WAYPOINT_MOVE_TYPE_LAND:
|
case WAYPOINT_MOVE_TYPE_LAND:
|
||||||
init.SetAnimation(Movement::ToGround);
|
init.SetAnimation(AnimTier::Ground);
|
||||||
break;
|
break;
|
||||||
case WAYPOINT_MOVE_TYPE_TAKEOFF:
|
case WAYPOINT_MOVE_TYPE_TAKEOFF:
|
||||||
init.SetAnimation(Movement::ToFly);
|
init.SetAnimation(AnimTier::Hover);
|
||||||
break;
|
break;
|
||||||
case WAYPOINT_MOVE_TYPE_RUN:
|
case WAYPOINT_MOVE_TYPE_RUN:
|
||||||
init.SetWalk(false);
|
init.SetWalk(false);
|
||||||
|
|||||||
@@ -29,14 +29,6 @@ namespace Movement
|
|||||||
// xinef: moved declaration here so it can be accessed out of MoveSplineInit.cpp
|
// xinef: moved declaration here so it can be accessed out of MoveSplineInit.cpp
|
||||||
UnitMoveType SelectSpeedType(uint32 moveFlags);
|
UnitMoveType SelectSpeedType(uint32 moveFlags);
|
||||||
|
|
||||||
enum AnimType
|
|
||||||
{
|
|
||||||
ToGround = 0, // 460 = ToGround, index of AnimationData.dbc
|
|
||||||
FlyToFly = 1, // 461 = FlyToFly?
|
|
||||||
ToFly = 2, // 458 = ToFly
|
|
||||||
FlyToGround = 3 // 463 = FlyToGround
|
|
||||||
};
|
|
||||||
|
|
||||||
// Transforms coordinates from global to transport offsets
|
// Transforms coordinates from global to transport offsets
|
||||||
class TransportPathTransform
|
class TransportPathTransform
|
||||||
{
|
{
|
||||||
@@ -89,7 +81,7 @@ namespace Movement
|
|||||||
/* Plays animation after movement done
|
/* Plays animation after movement done
|
||||||
* can't be combined with parabolic movement
|
* can't be combined with parabolic movement
|
||||||
*/
|
*/
|
||||||
void SetAnimation(AnimType anim);
|
void SetAnimation(AnimTier anim);
|
||||||
|
|
||||||
/* Adds final facing animation
|
/* Adds final facing animation
|
||||||
* sets unit's facing to specified point/angle after all path done
|
* sets unit's facing to specified point/angle after all path done
|
||||||
@@ -191,7 +183,7 @@ namespace Movement
|
|||||||
args.flags.EnableParabolic();
|
args.flags.EnableParabolic();
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void MoveSplineInit::SetAnimation(AnimType anim)
|
inline void MoveSplineInit::SetAnimation(AnimTier anim)
|
||||||
{
|
{
|
||||||
args.time_perc = 0.f;
|
args.time_perc = 0.f;
|
||||||
args.flags.EnableAnimation((uint8)anim);
|
args.flags.EnableAnimation((uint8)anim);
|
||||||
|
|||||||
@@ -234,6 +234,8 @@ public:
|
|||||||
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED);
|
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_PACIFIED);
|
||||||
me->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE);
|
me->RemoveUnitFlag(UNIT_FLAG_DISABLE_MOVE);
|
||||||
|
|
||||||
|
me->SetAnimTier(AnimTier::Fly);
|
||||||
|
|
||||||
if (pInstance)
|
if (pInstance)
|
||||||
{
|
{
|
||||||
pInstance->SetData(DATA_ENCOUNTER_STATUS, NOT_STARTED);
|
pInstance->SetData(DATA_ENCOUNTER_STATUS, NOT_STARTED);
|
||||||
@@ -277,12 +279,6 @@ public:
|
|||||||
case MI_POINT_SURGE_OF_POWER_CENTER:
|
case MI_POINT_SURGE_OF_POWER_CENTER:
|
||||||
events.RescheduleEvent(EVENT_SURGE_OF_POWER_WARNING, 0ms, 1);
|
events.RescheduleEvent(EVENT_SURGE_OF_POWER_WARNING, 0ms, 1);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (type == EFFECT_MOTION_TYPE)
|
|
||||||
{
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case MI_POINT_INTRO_LAND:
|
case MI_POINT_INTRO_LAND:
|
||||||
me->SetDisableGravity(false);
|
me->SetDisableGravity(false);
|
||||||
events.RescheduleEvent(EVENT_START_FIGHT, 0ms, 1);
|
events.RescheduleEvent(EVENT_START_FIGHT, 0ms, 1);
|
||||||
@@ -401,7 +397,7 @@ public:
|
|||||||
}
|
}
|
||||||
case EVENT_INTRO_LAND:
|
case EVENT_INTRO_LAND:
|
||||||
{
|
{
|
||||||
me->GetMotionMaster()->MoveLand(MI_POINT_INTRO_LAND, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), 7.0f);
|
me->GetMotionMaster()->MovePoint(MI_POINT_INTRO_LAND, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), FORCED_MOVEMENT_RUN, 0.f, 0.f, true, true, MOTION_SLOT_ACTIVE, AnimTier::Ground);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EVENT_START_FIGHT:
|
case EVENT_START_FIGHT:
|
||||||
@@ -462,7 +458,7 @@ public:
|
|||||||
me->GetMotionMaster()->MoveIdle();
|
me->GetMotionMaster()->MoveIdle();
|
||||||
me->StopMoving();
|
me->StopMoving();
|
||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
me->GetMotionMaster()->MoveTakeoff(MI_POINT_VORTEX_TAKEOFF, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ() + 20.0f, 7.0f);
|
me->GetMotionMaster()->MovePoint(MI_POINT_VORTEX_TAKEOFF, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ() + 20.0f, FORCED_MOVEMENT_RUN, 0.f, 0.f, true, true, MOTION_SLOT_ACTIVE, AnimTier::Fly);
|
||||||
|
|
||||||
events.DelayEvents(25s, 1); // don't delay berserk (group 0)
|
events.DelayEvents(25s, 1); // don't delay berserk (group 0)
|
||||||
}
|
}
|
||||||
@@ -539,7 +535,7 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case EVENT_VORTEX_LAND_0:
|
case EVENT_VORTEX_LAND_0:
|
||||||
me->GetMotionMaster()->MoveLand(MI_POINT_VORTEX_LAND, CenterPos, 7.0f);
|
me->GetMotionMaster()->MovePoint(MI_POINT_VORTEX_LAND, CenterPos, FORCED_MOVEMENT_RUN, 0.f, true, true, AnimTier::Ground);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case EVENT_VORTEX_LAND_1:
|
case EVENT_VORTEX_LAND_1:
|
||||||
@@ -573,7 +569,7 @@ public:
|
|||||||
me->GetMotionMaster()->MoveIdle();
|
me->GetMotionMaster()->MoveIdle();
|
||||||
me->DisableSpline();
|
me->DisableSpline();
|
||||||
me->SetDisableGravity(true);
|
me->SetDisableGravity(true);
|
||||||
me->GetMotionMaster()->MoveTakeoff(MI_POINT_CENTER_AIR_PH_2, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 32.0f, 7.0f);
|
me->GetMotionMaster()->MovePoint(MI_POINT_CENTER_AIR_PH_2, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 32.0f, FORCED_MOVEMENT_RUN, 0.f, 0.f, true, true, MOTION_SLOT_ACTIVE, AnimTier::Fly);
|
||||||
events.RescheduleEvent(EVENT_START_PHASE_2_MOVE_TO_SIDE, 22s + 500ms, 1);
|
events.RescheduleEvent(EVENT_START_PHASE_2_MOVE_TO_SIDE, 22s + 500ms, 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -699,7 +695,7 @@ public:
|
|||||||
case EVENT_MOVE_TO_PHASE_3_POSITION:
|
case EVENT_MOVE_TO_PHASE_3_POSITION:
|
||||||
{
|
{
|
||||||
me->SendMeleeAttackStop(me->GetVictim());
|
me->SendMeleeAttackStop(me->GetVictim());
|
||||||
me->GetMotionMaster()->MoveTakeoff(MI_POINT_PH_3_FIGHT_POSITION, CenterPos.GetPositionX(), CenterPos.GetPositionY(), CenterPos.GetPositionZ() - 5.0f, me->GetSpeed(MOVE_RUN));
|
me->GetMotionMaster()->MovePoint(MI_POINT_PH_3_FIGHT_POSITION, CenterPos.GetPositionX(), CenterPos.GetPositionY(), CenterPos.GetPositionZ() - 5.0f, FORCED_MOVEMENT_RUN, 0.f, 0.f, true, true, MOTION_SLOT_ACTIVE, AnimTier::Fly);
|
||||||
|
|
||||||
me->GetThreatMgr().ClearAllThreat(); // players on vehicle are unattackable -> leads to EnterEvadeMode() because target is not acceptable!
|
me->GetThreatMgr().ClearAllThreat(); // players on vehicle are unattackable -> leads to EnterEvadeMode() because target is not acceptable!
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user