So this script is supposed to let you fly when you press V. It works but I get these bugs when using tools as I'm flying as seen here:
Is there any changes I can make to this script to fix this? This is Filtering Enabled by the way. Thanks for your help.
repeat wait() until game.Players.LocalPlayer and game.Players.LocalPlayer.Character and game.Players.LocalPlayer.Character:findFirstChild("Torso") and game.Players.LocalPlayer.Character:findFirstChild("Humanoid")
local mouse = game.Players.LocalPlayer:GetMouse()
repeat wait() until mouse
local plr = game.Players.LocalPlayer
local torso = plr.Character.Torso
local flying = false
local ctrl = {f = 0, b = 0, l = 0, r = 0}
local lastctrl = {f = 0, b = 0, l = 0, r = 0}
local speed = 60
function Fly()
local char = plr.Character
if char then
local humanoid = char:WaitForChild("Humanoid")
local root = char:WaitForChild("HumanoidRootPart")
root.Anchored = true
root.Anchored = false
root.Velocity = Vector3.new()
humanoid.PlatformStand = false
end
local bg = Instance.new("BodyGyro", torso)
bg.P = 9e4
bg.maxTorque = Vector3.new(9e9, 9e9, 9e9)
bg.cframe = torso.CFrame
local bv = Instance.new("BodyVelocity", torso)
bv.velocity = Vector3.new(0,0,0)
bv.maxForce = Vector3.new(9e9, 9e9, 9e9)
repeat wait()
plr.Character.Humanoid.PlatformStand = true
if (ctrl.l + ctrl.r) ~= 0 or (ctrl.f + ctrl.b) ~= 0 then
bv.velocity = ((game.Workspace.CurrentCamera.CoordinateFrame.lookVector * (ctrl.f+ctrl.b)) + ((game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(ctrl.l+ctrl.r,(ctrl.f+ctrl.b)*0,0).p) - game.Workspace.CurrentCamera.CoordinateFrame.p))*60
lastctrl = {f = ctrl.f, b = ctrl.b, l = ctrl.l, r = ctrl.r}
elseif (ctrl.l + ctrl.r) == 0 and (ctrl.f + ctrl.b) == 0 and speed ~= 0 then
bv.velocity = ((game.Workspace.CurrentCamera.CoordinateFrame.lookVector * (lastctrl.f+lastctrl.b)) + ((game.Workspace.CurrentCamera.CoordinateFrame * CFrame.new(lastctrl.l+lastctrl.r,(lastctrl.f+lastctrl.b)*0,0).p) - game.Workspace.CurrentCamera.CoordinateFrame.p))*0
else
bv.velocity = Vector3.new(0,0,0)
end
bg.cframe = game.Workspace.CurrentCamera.CoordinateFrame
until not flying
ctrl = {f = 0, b = 0, l = 0, r = 0}
lastctrl = {f = 0, b = 0, l = 0, r = 0}
speed = 0
bg:Destroy()
bv:Destroy()
plr.Character.Humanoid.PlatformStand = false
end
mouse.KeyDown:connect(function(key)
if key:lower() == "" then
if flying then flying = false
else
flying = true
Fly()
end
elseif key:lower() == "w" then
ctrl.f = 1
elseif key:lower() == "s" then
ctrl.b = -1
elseif key:lower() == "a" then
ctrl.l = -1
elseif key:lower() == "d" then
ctrl.r = 1
end
end)
mouse.KeyUp:connect(function(key)
if key:lower() == "w" then
ctrl.f = 0
elseif key:lower() == "s" then
ctrl.b = 0
elseif key:lower() == "a" then
ctrl.l = 0
elseif key:lower() == "d" then
ctrl.r = 0
end
end)
Fly()
game:GetService("UserInputService").InputBegan:connect(function(input,event)
if event then return end
if input.KeyCode == Enum.KeyCode.ButtonB or input.KeyCode == Enum.KeyCode.V then
if (flying == false) then
flying = true
Fly()
elseif (flying == true) then
flying = false
end
end
end)
local noClipEvent = game.ReplicatedStorage:WaitForChild("NoClipEvent")
local isNoClipActive = false
local hoverHeight
local lastUpdate
local bodyPosition = Instance.new("BodyPosition")
game:GetService("UserInputService").InputBegan:connect(function(input, event)
if not event then
if input.KeyCode == Enum.KeyCode.ButtonB or input.KeyCode == Enum.KeyCode.V then
if plr.Character and plr.Character.Parent then
lastUpdate = tick()
isNoClipActive = not isNoClipActive
noClipEvent:FireServer(isNoClipActive)
if isNoClipActive then
local root = plr.Character:FindFirstChild("HumanoidRootPart")
if root then
bodyPosition.Parent = plr.Character.HumanoidRootPart
bodyPosition.Position = root.Position
hoverHeight = root.Position.Y
end
else
bodyPosition.Parent = nil
end
end
end
end
end)
