So this script is supposed to let you fly when you press V. It works but when I equip a tool the screens looks like it's having a seizure and when I try to move objects in the game with a tool it just flings me out of the map. 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)