Is there anyway I can change this script to use BodyGyro and BodyVelocity? This script is supposed to let you noclip when you press "V" but it doesn't update the position properly in FilteringEnabled.
local player = game.Players.LocalPlayer
local selected = false
local XboxPos = Vector3.new(0,0,0)
local c = workspace.CurrentCamera
local userInput = game:GetService("UserInputService")
local speed = 60
local lastUpdate = 0
function getNextMovement(deltaTime)
local nextMove = Vector3.new()
-- Left/Right
if userInput:IsKeyDown("A") or userInput:IsKeyDown("Left") then
nextMove = Vector3.new(-1,0,0)
elseif userInput:IsKeyDown("D") or userInput:IsKeyDown("Right") then
nextMove = Vector3.new(1,0,0)
end
-- Forward/Back
if userInput:IsKeyDown("W") or userInput:IsKeyDown("Up") then
nextMove = nextMove + Vector3.new(0,0,-1)
elseif userInput:IsKeyDown("S") or userInput:IsKeyDown("Down") then
nextMove = nextMove + Vector3.new(0,0,1)
end
-- Up/Down
if userInput:IsKeyDown("Space") then
nextMove = nextMove + Vector3.new(0,1,0)
elseif userInput:IsKeyDown("LeftControl") then
nextMove = nextMove + Vector3.new(0,-1,0)
end
nextMove = nextMove + XboxPos
return CFrame.new( nextMove * (speed * deltaTime) )
end
function onSelected()
local char = player.Character
if char then
local humanoid = char:WaitForChild("Humanoid")
local root = char:WaitForChild("HumanoidRootPart")
currentPos = root.Position
selected = true
root.Anchored = true
lastUpdate = tick()
humanoid.PlatformStand = true
while selected do
wait()
local delta = tick()-lastUpdate
local look = (c.Focus.p-c.CoordinateFrame.p).unit
local move = getNextMovement(delta)
local pos = root.Position
root.CFrame = CFrame.new(pos,pos+look) * move
lastUpdate = tick()
end
root.Anchored = false
root.Velocity = Vector3.new()
humanoid.PlatformStand = false
end
end
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 (selected == false) then
selected = true
onSelected()
elseif (selected == true) then
selected = false
end
end
end)
I would want the script to use this code with BodyGyro and BodyVelocity since it works in FilteringEnabled. I just don't know how to change it to be used in the script above.
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 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()
Thanks for your help.
