Hey everyone! So I recently put together a snowboard model for a game I’m working on and it moves but it does not work how I wanted it to. My scripting knowledge is limited so I wanted to ask you guys for help to try and fix it, and I also had multiple issues like:
-
I can’t get off the snowboard after mounting it. I can move in all directions which works fine but after getting on the snowboard I can’t get off of it for some reason. And if it’s not in the script already, I wanted to make it the space button that dismounts the player
-
The model has a sitting animation but it’s rotated in the wrong direction and it looks very weird and I wanted to know how to fix that.
Here’s everything you need to know about the snowboard:
- The placement of everything
*The “Client” local script:
local char = script.Parent
local human = char:FindFirstChild("Humanoid")
local stand = script:WaitForChild("Stand")
local remote = script:WaitForChild("Remote")
local uis = game:GetService("UserInputService")
local keys = Enum.KeyCode
uis.InputBegan:connect(function(inputObject)
local key = inputObject.KeyCode
if key == keys.W then
remote:FireServer("ForwardGo")
elseif key == keys.S then
remote:FireServer("BackwardGo")
elseif key == keys.A then
remote:FireServer("LeftGo")
elseif key == keys.D then
remote:FireServer("RightGo")
end
end)
uis.InputEnded:connect(function(inputObject)
local key = inputObject.KeyCode
if key == keys.W then
remote:FireServer("ForwardStop")
elseif key == keys.S then
remote:FireServer("BackwardStop")
elseif key == keys.A then
remote:FireServer("LeftStop")
elseif key == keys.D then
remote:FireServer("RightStop")
end
end)
if human then
local track = human:LoadAnimation(stand)
track:Play()
remote.OnClientEvent:connect(function(func, ...)
if func == "Stop" then
track:Stop()
end
end)
end
- The “Server” script:
local Board = script.Parent
local Client = Board.Client
local Particle = script.Parent.ParticleEmitter
local CurrentRemote = nil
local CurrentPlayer = nil
local CurrentGyro = nil
local Steer = 0
local Throttle = 0
local Acceleration = 150
local TurnSpeed = math.pi / 2
local MaxSpeed = 100
function onRemote(player, func, ...)
if player ~= CurrentPlayer then return end
if func == "ForwardGo" then
Throttle = 1
Particle.Enabled = true
elseif func == "ForwardStop" then
if Throttle == 1 then
Throttle = 0
Particle.Enabled = false
end
elseif func == "BackwardGo" then
Throttle = -1
Particle.Enabled = true
elseif func == "BackwardStop" then
if Throttle == -1 then
Throttle = 0
Particle.Enabled = false
end
elseif func == "LeftGo" then
Steer = 1
Particle.Enabled = true
elseif func == "LeftStop" then
if Steer == 1 then
Steer = 0
Particle.Enabled = false
end
elseif func == "RightGo" then
Steer = -1
Particle.Enabled = true
elseif func == "RightStop" then
if Steer == -1 then
Steer = 0
Particle.Enabled = false
end
end
end
function onChildAdded(obj)
if obj.Name == "PlatformMotor6D" then
local torso = obj.Part1
local char = torso.Parent
CurrentPlayer = game:GetService("Players"):GetPlayerFromCharacter(char)
if CurrentPlayer then
local client = Client:Clone()
CurrentRemote = client.Remote
CurrentRemote.OnServerEvent:connect(onRemote)
client.Parent = char
CurrentGyro = Instance.new("BodyGyro")
CurrentGyro.cframe = Board.CFrame
CurrentGyro.maxTorque = Vector3.new(0, math.huge, 0)
CurrentGyro.Parent = Board
end
end
end
function onChildRemoved(obj)
if obj.Name == "PlatformMotor6D" then
CurrentRemote:FireClient(CurrentPlayer, "Stop")
CurrentPlayer = nil
game:GetService("Debris"):AddItem(CurrentRemote.Parent)
CurrentRemote:Destroy()
CurrentGyro:Destroy()
Steer = 0
Throttle = 0
end
end
function getForward()
return Board.CFrame * CFrame.Angles(0, -math.pi/2, 0)
end
function onTick(dt)
local newVelocity = Board.Velocity + getForward().lookVector * Acceleration * dt * Throttle
if newVelocity.magnitude > MaxSpeed then
newVelocity = newVelocity.unit * MaxSpeed
end
Board.Velocity = newVelocity
if CurrentGyro then
CurrentGyro.cframe = CurrentGyro.cframe * CFrame.Angles(0, TurnSpeed * dt * Steer, 0)
end
end
Board.ChildAdded:connect(onChildAdded)
Board.ChildRemoved:connect(onChildRemoved)
game:GetService("RunService").Heartbeat:connect(onTick)
- A video of how it looks like rn