Setting AssemblyAngularVelocity forces server character ownership?

So i was just creating some systems which includes some seat parts for some client controlled systems.
I have a rotational velocity “clamp” in my main game and this issue arised, so i tried to recreate it in a fresh baseplate. And i did.

All i had to do was have a simple script which clamped the angular velocity every frame just as how i did in my main game.
And then when i playtested, the character was very funky.
The server seemed to want to gain network control over the character and overall it just broke the whole game.

One thing which made the issue bigger and even prompted it was having an anchored seat and sitting and exiting the seat with the angular velocity clamping running.

local plr = game:GetService("Players").LocalPlayer
local char = plr.Character or plr.CharacterAdded:Wait()

while task.wait() do
	local root = char.PrimaryPart
	root.AssemblyAngularVelocity = root.AssemblyAngularVelocity.Unit * math.min(11, root.AssemblyAngularVelocity.Magnitude)
end

After further testing it seems that setting the root.AssemblyAngularVelocity to Vector3.new(0, 0, 0) doesn’t produce the same result. I think it’s gotta do with how im setting it

Being seated in an anchored seat welds you to it, so the character is now in one assembly as the seat. Any anchored part is owned by the server by default. You should unanchor the part and set the network owner to the player every time after the seat weld is created.

1 Like

I’m not yet sure how the angular velocity clamping is affecting that case specifically, but try doing it in that order first

1 Like