Weird Character behaviour server-side after modifying the Anchor state of the HumanoidRootPart

Bug:
After a HRP (HumanoidRootPart) was anchored, to prevent people from moving/falling, and their location/position (HRP.Position) was changed some weird behaviour occurs. It looks like the HRP and the rest of the body parts & accessories get ‘detached’ on the server side causing any other body parts to be shifted away from the HRP (please see pictures below).

However, on the client side (please take note that position are being adjusted on the server side) the HRP and the rest of the character parts are not shifted away and are (visually) OK and in the ‘right’ position. Any other client will also see everything OK, it is just that the positions of character parts are not equal to what the players can see.

This causes great trouble for eg weapons/guns that validate hit detection server side & do distance checks on hit body parts. On the client it will look like you are hitting said character part but on the server you are not.

Apologies if this is in the wrong category or if I am clearly doing something wrong. I have tested several variants of this with adding wait and eg first unanchoring and then moving and the other way around too but they all yielded the same behaviour for me.

Where the bug happens:

  • Studio
  • Live/ingame

When it started happening:

  • To my knowledge, this rather buggy behaviour started occurring this week

Screenshots (studio):
(Pink neon = HRP (HumanoidRootPart))

As you can see, for both clients everything is fine but what the server knows/“sees” is not inline with what both clients can see.

Steps:
(Please see the reproduction place)

  • Start a local server (with 1 player at least)
  • When you are spawned in your HRP (HumanoidRootPart) will be anchored
	player.CharacterAdded:Connect(function(character)
		character:WaitForChild("HumanoidRootPart").Anchored = true
	end)
	
  • After you spawned, say anything in chat as this will TP/move your character 200 studs away & unanchor the HRP
	player.Chatted:Connect(function(msg)
		local HRP = player.Character:WaitForChild("HumanoidRootPart")
		
		HRP.Position = HRP.Position + Vector3.new(200, 0, 0)
		HRP.Anchored = false
	end)
  • Take note where the character is for the server, visually this is still on the spawn location but upon inspection the HRP has moved 200 studs but the character itself was not moved
  • The character itself is visually OK for the player/client
  • The character itself is visually OK for any other player
    (The locations of eg Torso, Head etc are different on the server than on the clients and this can mess with eg server side checks for distances)

HRP Bug report repro place.rbxl (20.4 KB)

4 Likes

Does this still happen if you set the HRP’s CFrame instead of its position?

HRP.CFrame = HRP.CFrame + Vector3.new(200, 0, 0)
1 Like