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

0

Try setting bv.MaxForce to something lower, like Vector3.new(25000, 25000, 25000).

0

This worked Thanks!