So I'm making a Model that is hovering on the ground (thanks to a BodyPosition that's Position is set a little above the ground and it's MaxForce is set to 0, 40000, 0) and can be steered. The model consists of a Part (in which is a Script, a BodyGyro, BodyPosition and a BodyVelocity) and a VehicleSeat that is welded to the Part. The Script makes it so the signals sent by the player to VehicleSeat are changing the properties of BodyGyro and BodyVelocity. This is how it looks:
local RunService = game:GetService("RunService")
local part = script.Parent
local bodyGyro = part.BodyGyro
local bodyVel = part.BodyVelocity
local seat = script.Parent.Parent.VehicleSeat
local goBack, goForward = false, false
local turnLeft, turnRight = false, false
local maxForward = 20
local maxBack = -10
seat:GetPropertyChangedSignal("Occupant"):Connect(function(char)
local currentSpeed = 0
local currentAngle = 0
RunService.Heartbeat:Connect(function(step)
bodyVel.Velocity = (part.CFrame.LookVector * currentSpeed)
bodyGyro.CFrame = CFrame.Angles(math.rad(0), math.rad(currentAngle), math.rad(0))
if seat.Throttle == -1 then
if goBack then return end
goBack = true
repeat wait(.1)
currentSpeed = currentSpeed - 1
until seat.Throttle ~= -1 or currentSpeed <= maxBack -- The 2nd statement doesn't seem to do anything.
goBack = false
elseif seat.Throttle == 1 then
if goForward then return end
goForward = true
repeat wait(.1)
currentSpeed = currentSpeed + 1
until seat.Throttle ~= 1 or currentSpeed >= maxForward -- Here too.
goForward = false
end
if seat.Steer == -1 then
if turnLeft then return end
turnLeft = true
repeat wait(.01)
currentAngle = currentAngle + 1
until seat.Steer ~= -1
turnLeft = false
elseif seat.Steer == 1 then
if turnRight then return end
turnRight = true
repeat wait(.01)
currentAngle = currentAngle - 1
until seat.Steer ~= 1
turnRight = false
end
end)
end)
The Model speeds up fine and rotates fine too, but the maximum speed I applied to it doesn't do anything. The speed easily goes above 20. I tried doing other things to fix it but nothing worked. Thanks for reading.

2 comments
I'm not too familiar with using forces, but have you tried setting max speed to much lower values? Other then that I could see using heartbeat causing a railgun effect since it's run so often, try putting a /60 after currentSpeed on line 16 maybe
It just makes the Model speed up slower