Writing a system for powerups using roblox physics for the projectiles and encountered this hanging of the physics sim, this needs to be instantaneously. And yes, it has to be on the server since these are global.
Video of the issue
local Vehicle = player.LinkedVehicle
local Weight = Vehicle.Body:FindFirstChild("#Weight")
local Bolt = ServerStorage.PhysicalPowerup.Bolt:Clone()
local Ang, Lin = Instance.new("AngularVelocity"), Instance.new("LinearVelocity")
-- z ang, x lin
Ang.Parent = Bolt.Main; Lin.Parent = Bolt.Main
Ang.Attachment0 = Bolt.Main.Attachment
Lin.Attachment0 = Bolt.Main.Attachment
Ang.RelativeTo = Enum.ActuatorRelativeTo.Attachment0
Ang.MaxTorque = math.huge
Lin.MaxForce = math.huge
Ang.Visible = true
Ang.AngularVelocity = Vector3.new(0,0,30)
local LookCFrame = Weight.CFrame
local LookRot = Vector3.new(LookCFrame:ToOrientation())
LookCFrame = CFrame.new(LookCFrame.Position) * CFrame.Angles(0, LookRot.Y, 0)
Lin.VectorVelocity = LookCFrame.LookVector * 500
Bolt:PivotTo(Weight.CFrame * CFrame.new(0,0,3))
Bolt.Parent = workspace
this happens because network ownership oscillates between the server and the client, in order to fix that, simply set the ownership of all descendant base parts to server which disallows for clients to gain priority over the physics calculations for the given base part
Could you try setting physics ownership to the server, so that the server starts simulating them immediately, otherwise it might be waiting for the client to become the owner and for the client to start simulating them.
Either the client or the server will start simulating it immediately. The other will have the wait for the info to reach them. Atleast this is how I think it works currently.