I am currently working on a DBZ roleplaying game, and the flight script is a bit funky, in the terms that when a player hits an object they will spin out of control and it ruins the effect, i have no idea what i am doing and im mostly just watching youtube tutorials and typing it out into my game. if there is any way to fix the players going nuts when they hit an object that would be helpful. here's the code
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local cam = workspace.CurrentCamera
local uis = game:GetService("UserInputService")
local idleAnim = char:WaitForChild("Humanoid"):LoadAnimation(script:WaitForChild("FlyIdle"))
local forwardAnim = char:WaitForChild("Humanoid"):LoadAnimation(script:WaitForChild("FlyForward"))
local aura = char.LowerTorso.FlyTrail
local wPressed = false
local sPressed = false
local aPressed = false
local dPressed = false
local flying = false
uis.InputBegan:Connect(function(key, chat)
if chat then return end
if key.KeyCode == Enum.KeyCode.F then
if flying then --Stop Flying
flying = false
aura.Enabled = false
char.Animate.Disabled = false
idleAnim:Stop()
forwardAnim:Stop()
else --Start Flying
flying = true
char.Animate.Disabled = true
idleAnim:Play()
aura.Enabled = true
local bv = Instance.new("BodyVelocity", char.PrimaryPart)
bv.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
bv.Velocity = Vector3.new(0,0,0)
bv.Name = "FlightForce"
repeat wait(0.1) until flying == false
bv:Destroy()
end
end
if key.KeyCode == Enum.KeyCode.W then
wPressed = true
elseif key.KeyCode == Enum.KeyCode.S then
sPressed = true
elseif key.KeyCode == Enum.KeyCode.A then
aPressed = true
elseif key.KeyCode == Enum.KeyCode.D then
dPressed = true
end
end)
uis.InputEnded:Connect(function(key)
if key.KeyCode == Enum.KeyCode.W then
wPressed = false
elseif key.KeyCode == Enum.KeyCode.S then
sPressed = false
elseif key.KeyCode == Enum.KeyCode.A then
aPressed = false
elseif key.KeyCode == Enum.KeyCode.D then
dPressed = false
end
end)
while wait() do
if flying then
char.PrimaryPart:FindFirstChild("FlightForce").Velocity = Vector3.new(0,0,0)
forwardAnim:Stop()
if wPressed then
char.PrimaryPart:FindFirstChild("FlightForce").Velocity = cam.CFrame.LookVector * 200
forwardAnim:Play()
end
if sPressed then
char.PrimaryPart:FindFirstChild("FlightForce").Velocity = cam.CFrame.LookVector * -200
forwardAnim:Play()
end
if aPressed then
char.PrimaryPart:FindFirstChild("FlightForce").Velocity = cam.CFrame.RightVector * -200
forwardAnim:Play()
end
if dPressed then
char.PrimaryPart:FindFirstChild("FlightForce").Velocity = cam.CFrame.RightVector * 200
forwardAnim:Play()
end
else
wait(1)
end
end

2 comments
Try setting bv.MaxForce to something lower, like Vector3.new(25000, 25000, 25000).
This worked Thanks!