As the title implies, my game consists of RC tanks. This script in particular is supposed to control the tank; make it move forward, left, right, etc. Right now, I am trying to make it so that when it presses W or S, it changes what is known as the "VelocityConstant," a value I'll later use to make the tank move forwards and backwards. However, when I test the script, nothing happens. I've tried making it print in some areas to isolate the problem and I feel that I have possibly typed the ContextActionService connect functions at the very bottom incorrectly. However, I really am not sure.
player = game.Players.LocalPlayer control = player:WaitForChild("Controlling", 120) --If this value is true, the player can control the tank. print("control") --works local velocityConstant = 0 local gasDown = false local brakeDown = false local plane = nil local maxForwardSpeed = 40 local maxReverseSpeed = -30 local keyUp = nil local keyDown = nil function controlChanged() if control.Value == true then local findTank = game.Workspace.Tanks:FindFirstChild(player.Name) if findTank then findTank.Velocity.Value = velocityConstant --This will set the Tank's actual NumberValue to the VelocityConstant else --If there is no tank with the player's name, control is turned off, because there's nothing to control. control.Value = false end end end function keyW(actionName, userInputState, inputObject) --Making a function for each key... is there a better way? print("w") --does not print? if control.Value == true then if userInputState == Enum.UserInputState.Begin then --When W is pressed gasDown = true while gasDown do velocityConstant = maxForwardSpeed wait(.03) end elseif userInputState == Enum.UserInputState.End then --When W is let go gasDown = false velocityConstant = 0 end end controlChanged() end function keyS(actionName, userInputState, inputObject) if control.Value == true then if userInputState == Enum.UserInputState.Begin then --When S is pressed brakeDown = true while brakeDown do velocityConstant = maxForwardSpeed wait(.03) end elseif userInputState == Enum.UserInputState.End then --When S is let go brakeDown = false velocityConstant = 0 end end controlChanged() end function keyA(actionName, userInputState, inputObject) --We don't need to worry about A or D right now. if control.Value == true then local findTank = game.Workspace.Tanks:FindFirstChild(player.Name) if findTank then if userInputState == Enum.UserInputState.Begin then findTank.ControlPart.AngularVelocity = Vector3.new(0, 1.2, 0) elseif userInputState == Enum.UserInputState.End then findTank.ControlPart.AngularVelocity = Vector3.new(0, 0, 0) end else control.Value = false end end controlChanged() end function keyD(actionName, userInputState, inputObject) if control.Value == true then local findTank = game.Workspace.Tanks:FindFirstChild(player.Name) if findTank then if userInputState == Enum.UserInputState.Begin then findTank.ControlPart.AngularVelocity = Vector3.new(0, -1.2, 0) elseif userInputState == Enum.UserInputState.End then findTank.ControlPart.AngularVelocity = Vector3.new(0, 0, 0) end else control.Value = false end end controlChanged() end game.ContextActionService:BindAction("keyPress", keyW, false, Enum.KeyCode.W) --Is this perhaps wrong? game.ContextActionService:BindAction("keyPress", keyA, false, Enum.KeyCode.A) game.ContextActionService:BindAction("keyPress", keyS, false, Enum.KeyCode.S) game.ContextActionService:BindAction("keyPress", keyD, false, Enum.KeyCode.D)