diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineFlag.h | 3 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Movement/Spline/MoveSplineInit.h | 5 |
3 files changed, 8 insertions, 2 deletions
diff --git a/src/server/game/Movement/Spline/MoveSplineFlag.h b/src/server/game/Movement/Spline/MoveSplineFlag.h index 3c364d94ae6..8c8d297763c 100644 --- a/src/server/game/Movement/Spline/MoveSplineFlag.h +++ b/src/server/game/Movement/Spline/MoveSplineFlag.h @@ -69,7 +69,7 @@ namespace Movement Mask_No_Monster_Move = Done, // Unused, not suported flags Mask_Unused = No_Spline | Enter_Cycle | Frozen | Unknown_0x8 | Unknown_0x100 | Unknown_0x20000 | Unknown_0x40000 - | Unknown_0x800000 | Unknown_0x1000000 | FadeObject | Steering | UnlimitedSpeed | Unknown_0x40000000 | Unknown_0x80000000 + | Unknown_0x800000 | Unknown_0x1000000 | FadeObject | UnlimitedSpeed | Unknown_0x40000000 | Unknown_0x80000000 }; inline uint32& raw() { return (uint32&)*this; } @@ -101,6 +101,7 @@ namespace Movement void EnableCatmullRom() { raw() = (raw() & ~SmoothGroundPath) | Catmullrom; } void EnableTransportEnter() { raw() = (raw() & ~TransportExit) | TransportEnter; } void EnableTransportExit() { raw() = (raw() & ~TransportEnter) | TransportExit; } + void EnableSteering() { raw() = (raw() & ~SmoothGroundPath) | Steering; } bool unknown0x1 : 1; bool unknown0x2 : 1; diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index 56d6951760c..2fb04440358 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -204,8 +204,8 @@ namespace Movement args.flags.canSwim = unit->CanSwim(); args.walk = unit->HasUnitMovementFlag(MOVEMENTFLAG_WALKING); args.flags.flying = unit->HasUnitMovementFlag(MovementFlags(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_DISABLE_GRAVITY)); - args.flags.smoothGroundPath = true; // enabled by default, CatmullRom mode or client config "pathSmoothing" will disable this args.flags.steering = unit->HasNpcFlag2(UNIT_NPC_FLAG_2_STEERING); + args.flags.smoothGroundPath = !args.flags.flying && !args.flags.steering; // enabled by default, CatmullRom mode or client config "pathSmoothing" will disable this } MoveSplineInit::~MoveSplineInit() = default; diff --git a/src/server/game/Movement/Spline/MoveSplineInit.h b/src/server/game/Movement/Spline/MoveSplineInit.h index 8be00f741bb..02642e06846 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.h +++ b/src/server/game/Movement/Spline/MoveSplineInit.h @@ -147,6 +147,10 @@ namespace Movement */ void SetOrientationFixed(bool enable); + /* Enables avoiding minor obstacles clientside (might cause visual position on client to not be accurate with the serverside one). Disabled by default + */ + void SetSteering(); + /* Enables no-speed limit * if not set, the speed will be limited by certain flags to 50.0f, and otherwise 28.0f */ @@ -182,6 +186,7 @@ namespace Movement inline void MoveSplineInit::SetTransportEnter() { args.flags.EnableTransportEnter(); } inline void MoveSplineInit::SetTransportExit() { args.flags.EnableTransportExit(); } inline void MoveSplineInit::SetOrientationFixed(bool enable) { args.flags.orientationFixed = enable; } + inline void MoveSplineInit::SetSteering() { args.flags.EnableSteering(); } inline void MoveSplineInit::SetUnlimitedSpeed() { args.flags.unlimitedSpeed = true; } inline void MoveSplineInit::SetParabolic(float amplitude, float time_shift) |