IIRC the engine already knows which part/assembly the player is standing on at all times. So fixing this jump behavior is probably a small fix.
Just because something has been around forever doesn’t mean it is not a bug.
No one cared previously because the camera and networking did not like it when multiple people are standing on the same moving platform. This seems to have gotten a lot better recently, so wonky physics becomes the limiting factor on making things like sailing ships, or fights on the back of moving trains, etc.
I have a script that slightly modifies your movement so that you may inherit velocity from moving platforms. A fair warning, though, you will “bounce off of walls” if you have too much momentum.
local Humanoid = game.Players.LocalPlayer.Character:WaitForChild("Humanoid")
local RootPart = game.Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart")
local CF = CFrame.new()
local Value = 0
local MOMENTUM_VALUE = Vector3.new(1, 0, 1)
local state = Humanoid:GetState()
local Cframe = RootPart.CFrame
local CFpos = Cframe - Cframe.Position
CF = CFpos
if state.Name ~= "Freefall" then
Value = 0
local MAGNITUDE = (RootPart.Velocity * MOMENTUM_VALUE).Magnitude
if Value < MAGNITUDE then
Value = MAGNITUDE
elseif MAGNITUDE < Value then
local momentum = Value / MAGNITUDE
RootPart.Velocity = RootPart.Velocity * Vector3.new(momentum, 1, momentum)
RootPart.Velocity = CFpos:ToObjectSpace(CF):VectorToObjectSpace(RootPart.Velocity) + Humanoid.MoveDirection