From 6e7915b6c30e431516c90042fda9c5854d8f83b6 Mon Sep 17 00:00:00 2001 From: tyabus Date: Sat, 18 Feb 2023 19:38:10 +0500 Subject: [PATCH] Fix spec_goto old crash --- game/server/player.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/game/server/player.cpp b/game/server/player.cpp index 0538f90a..6be20d62 100644 --- a/game/server/player.cpp +++ b/game/server/player.cpp @@ -2607,10 +2607,22 @@ void CBasePlayer::ObserverUse( bool bIsPressed ) void CBasePlayer::JumptoPosition(const Vector &origin, const QAngle &angles) { - SetAbsOrigin( origin ); - SetAbsVelocity( vec3_origin ); // stop movement - SetLocalAngles( angles ); - SnapEyeAngles( angles ); + Vector neworigin; + QAngle newangles; + + // Clamp the position and angles to prevent crashes + neworigin.x = clamp( origin.x, MIN_COORD_FLOAT, MAX_COORD_FLOAT ); + neworigin.y = clamp( origin.y, MIN_COORD_FLOAT, MAX_COORD_FLOAT ); + neworigin.z = clamp( origin.z, MIN_COORD_FLOAT, MAX_COORD_FLOAT ); + + newangles.x = clamp( newangles.x, MIN_COORD_FLOAT, MAX_COORD_FLOAT ); + newangles.y = clamp( newangles.y, MIN_COORD_FLOAT, MAX_COORD_FLOAT ); + newangles.z = clamp( newangles.z, MIN_COORD_FLOAT, MAX_COORD_FLOAT ); // not clamped in original valve's code, idk why + + SetAbsOrigin( neworigin ); + SetAbsVelocity( vec3_origin ); // stop movement + SetLocalAngles( newangles ); + SnapEyeAngles( newangles ); } bool CBasePlayer::SetObserverTarget(CBaseEntity *target)