diff options
5 files changed, 25 insertions, 17 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 8bbf682edad..4360decca2b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13269,9 +13269,7 @@ void Unit::StopMoving() return; Movement::MoveSplineInit init(this); - init.MoveTo(GetPositionX(), GetPositionY(), GetPositionZMinusOffset(), false); - init.SetFacing(GetOrientation()); - init.Launch(); + init.Stop(); } bool Unit::IsSitState() const diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index 32ec2ac3cfe..56621c8aac5 100755 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -238,6 +238,7 @@ void FlightPathMovementGenerator::DoReset(Player* player) init.SetFirstPointId(GetCurrentNode()); init.SetFly(); init.SetSmooth(); + init.SetUncompressed(); init.SetWalk(true); init.SetVelocity(PLAYER_FLIGHT_SPEED); init.Launch(); diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h index b94283caeed..08e73c0344b 100644 --- a/src/server/game/Movement/Spline/MoveSplineFlag.h +++ b/src/server/game/Movement/Spline/MoveSplineFlag.h @@ -105,7 +105,7 @@ namespace Movement void EnableAnimation(uint8 anim) { raw() = (raw() & ~(Mask_Animations | Falling | Parabolic | FallingSlow)) | Animation | (anim & Mask_Animations); } void EnableParabolic() { raw() = (raw() & ~(Mask_Animations | Falling | Animation | FallingSlow)) | Parabolic; } void EnableFalling() { raw() = (raw() & ~(Mask_Animations | Parabolic | Animation)) | Falling; } - void EnableCatmullRom() { raw() = (raw() & ~SmoothGroundPath) | Catmullrom | UncompressedPath; } + void EnableCatmullRom() { raw() = (raw() & ~SmoothGroundPath) | Catmullrom; } void EnableFacingPoint() { raw() = (raw() & ~Mask_Final_Facing) | Final_Point; } void EnableFacingAngle() { raw() = (raw() & ~Mask_Final_Facing) | Final_Angle; } void EnableFacingTarget() { raw() = (raw() & ~Mask_Final_Facing) | Final_Target; } diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 79e0f085d44..1eaf1011a2c 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -102,31 +102,39 @@ namespace Movement * if not enabled linear spline mode will be choosen. Disabled by default */ void SetSmooth(); - /* Enables CatmullRom spline interpolation mode, enables flying animation. Disabled by default + + /* Waypoints in packets will be sent without compression + */ + void SetUncompressed(); + + /* Enables flying animation. Disabled by default */ void SetFly(); + /* Enables walk mode. Disabled by default */ - void EnableTaxiFlight(); - /* Flags used in taxi - */ - void SetWalk(bool enable); + /* Makes movement cyclic. Disabled by default */ void SetCyclic(); + /* Enables falling mode. Disabled by default */ void SetFall(); + /* Enters transport. Disabled by default */ void SetTransportEnter(); + /* Exits transport. Disabled by default */ void SetTransportExit(); + /* Inverses unit model orientation. Disabled by default */ void SetOrientationInversed(); + /* Fixes unit's model rotation. Disabled by default */ void SetOrientationFixed(bool enable); @@ -152,6 +160,7 @@ namespace Movement inline void MoveSplineInit::SetFly() { args.flags.flying = true; } inline void MoveSplineInit::SetWalk(bool enable) { args.flags.walkmode = enable; } inline void MoveSplineInit::SetSmooth() { args.flags.EnableCatmullRom(); } + inline void MoveSplineInit::SetUncompressed() { args.flags.uncompressedPath = true; } inline void MoveSplineInit::SetCyclic() { args.flags.cyclic = true; } inline void MoveSplineInit::SetVelocity(float vel) { args.velocity = vel; args.HasVelocity = true; } inline void MoveSplineInit::SetOrientationInversed() { args.flags.orientationInversed = true;} diff --git a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp index eb3d45bb0ec..3376021b494 100644 --- a/src/server/game/Movement/Spline/MovementPacketBuilder.cpp +++ b/src/server/game/Movement/Spline/MovementPacketBuilder.cpp @@ -97,10 +97,10 @@ namespace Movement data << uint8(MonsterMoveStop); } - void WriteLinearPath(const Spline<int32>& spline, ByteBuffer& data) + void WriteLinearPath(Spline<int32> const& spline, ByteBuffer& data) { uint32 last_idx = spline.getPointCount() - 3; - const Vector3 * real_path = &spline.getPoint(1); + Vector3 const* real_path = &spline.getPoint(1); data << last_idx; data << real_path[last_idx]; // destination @@ -117,14 +117,14 @@ namespace Movement } } - void WriteCatmullRomPath(const Spline<int32>& spline, ByteBuffer& data) + void WriteUncompressedPath(Spline<int32> const& spline, ByteBuffer& data) { uint32 count = spline.getPointCount() - 3; data << count; data.append<Vector3>(&spline.getPoint(2), count); } - void WriteCatmullRomCyclicPath(const Spline<int32>& spline, ByteBuffer& data) + void WriteUncompressedCyclicPath(Spline<int32> const& spline, ByteBuffer& data) { uint32 count = spline.getPointCount() - 3; data << uint32(count + 1); @@ -136,14 +136,14 @@ namespace Movement { WriteCommonMonsterMovePart(move_spline, data); - const Spline<int32>& spline = move_spline.spline; + Spline<int32> const& spline = move_spline.spline; MoveSplineFlag splineflags = move_spline.splineflags; if (splineflags & MoveSplineFlag::UncompressedPath) { - if (splineflags.cyclic) - WriteCatmullRomCyclicPath(spline, data); + if (!splineflags.cyclic) + WriteUncompressedPath(spline, data); else - WriteCatmullRomPath(spline, data); + WriteUncompressedCyclicPath(spline, data); } else WriteLinearPath(spline, data); |