Find any script for Roblox

Enter the name of the game or script.

VR Hands script – (Makes you fake VR)

Functions: Makes you fake vr

Script developer: IE Roblox

Installation guide:Copy the script from the button below.Run any Injector (We recommend KRNL Injector)Install it, insert the script and click executeEnjoy it)

Thank you for using our website
Your script:

				
					--Put script in autoexecute folder or it wont work.
local plyrs = game:GetService("Players")
local rs = game:GetService("RunService")
local uis = game:GetService("UserInputService")
local cam = workspace.Camera
local headset
local p
local bodybinds = {
	[Enum.KeyCode.Q] = "lHand",
	[Enum.KeyCode.E] = "rHand",
	[Enum.KeyCode.W] = Vector3.new(0, 1, 0),
	[Enum.KeyCode.A] = Vector3.new(-1, 0, 0),
	[Enum.KeyCode.S] = Vector3.new(0, -1, 0),
	[Enum.KeyCode.D] = Vector3.new(1, 0, 0),
	[Enum.KeyCode.G] = false,
	[Enum.KeyCode.F] = true,
	[Enum.KeyCode.LeftShift] = 1,
	[Enum.KeyCode.LeftControl] = 2,
	[Enum.KeyCode.LeftAlt] = 3
}
local gesturebinds = {
	"Fist",
	"Index",
	"Thumb"
}
local body = setmetatable({ -- least fav part of the script
	lastHand = "",
	lHand = {
		false,
		CFrame.new(-math.cos(math.pi / 4), -0.5, -math.sin(math.pi / 4)),
		0
	},
	rHand = {
		false,
		CFrame.new(-math.cos(3 * math.pi / 4), -0.5, -math.sin(3 * math.pi / 4)),
		0
	}
}, {
	__call = function(t, k, mult)
		mult = mult or 1
		local bind = bodybinds[k]
		if bind and headset then
			if typeof(bind) == "string" then
				t[bind][1] = mult > 0
				lastHand = mult > 0 and bind or lastHand
			elseif typeof(bind) == "Vector3" then
				headset.StickPosition += bind * mult
			elseif typeof(bind) == "boolean" then
				headset.Stick2 = mult > 0 and bind and 1 or 0
			elseif typeof(bind) == "number" and lastHand:len() > 0 then
				local gesture = lastHand:sub(1,1)..gesturebinds[bind]
				if mult > 0 then
					headset[gesture] = headset[gesture] == 0 and 1 or 0
				end
			end
		end
	end
})
local ind, nc, nind
local events = {}
local cfs = {
	[Enum.UserCFrame.Head] = CFrame.new(0, 0, 0),
	[Enum.UserCFrame.LeftHand] = CFrame.new(-1, 0, -1),
	[Enum.UserCFrame.RightHand] = CFrame.new(1, 0, -1)
}
local realVrService = game:GetService("VRService")
local fakeVrService = setmetatable({
	VREnabled = true,
	SetTouchpadMode = function()
	end,
	RecenterUserHeadCFrame = function()
	end,
	GetUserCFrameEnabled = function(cf)
		return true
	end,
	GetUserCFrame = function(cf)
		return cfs[cf] or CFrame.new(0, 0, 0)
	end
}, {
	__index = function(t, k)
		local real = ind(realVrService, k)
		if typeof(real) == "RBXScriptSignal" then
			events[k] = events[k] or {
				Name = k,
				Connect = function(t, f)
					t.Function = f
					if t.Name == "UserCFrameChanged" then
						headset = debug.getupvalue(t.Function, 1)
						debug.setupvalue(headset.UpdateHand, 5, setmetatable({}, {
							__index = function(t, k)
								return cam[k]
							end,
							__newindex = function(t, k, v)
								if cam.CameraType == Enum.CameraType.Scriptable and p then -- unfortunately the first time this will run may or may not be before the cameratype is set
									cam.CameraType = Enum.CameraType.Custom
									cam.CameraSubject = headset.Head
								end
								if k ~= "CFrame" then -- fuck you
									cam[k] = v
								end
							end
						}))
						cam:GetPropertyChangedSignal("CameraSubject"):connect(function()
							if cam.CameraSubject ~= headset.Head then
								cam.CameraSubject = headset.Head
							end
						end)
					end
				end, 
				Fire = function(t, ...)
					return t.Function(...)
				end
			}
			return events[k]
		end
		return real
	end,
	__call = function(t, method, vr, ...)
		return t[method](...)
	end
})
ind = hookmetamethod(game, "__index", function(...)
	local t, k = ...
	local scr = getcallingscript()
	if t == realVrService and not (scr and ind(scr, "Name") == "CameraModule") then
		return fakeVrService[k]
	end
	return ind(...)
end)
nc = hookmetamethod(game, "__namecall", function(...)
	local t = ...
	if t == realVrService then
		local method = getnamecallmethod()
		return fakeVrService(method, ...)
	end
	return nc(...)
end)
nind = hookmetamethod(game, "__newindex", function(...)
	local t, k, v = ...
	if t == cam and k == "CFrame" and events.UserCFrameChanged then
		events.UserCFrameChanged:Fire(Enum.UserCFrame.Head, CFrame.Angles(cam.CFrame:ToEulerAnglesXYZ()))
	end
	nind(t, k, v)
end)
uis.InputBegan:connect(function(i) -- also least favorite
	if headset then
		if i.UserInputType == Enum.UserInputType.Keyboard then
			body(i.KeyCode)
		elseif i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.MouseButton2 or i.UserInputType == Enum.UserInputType.MouseButton3 then
			body(i.UserInputType)
		end
	end
end)
uis.InputEnded:connect(function(i)
	if headset then
		if i.UserInputType == Enum.UserInputType.Keyboard then
			body(i.KeyCode, -1)
		elseif i.UserInputType == Enum.UserInputType.MouseButton1 or i.UserInputType == Enum.UserInputType.MouseButton2 or i.UserInputType == Enum.UserInputType.MouseButton3 then
			body(i.UserInputType, -1)
		end
	end
end)
rs:BindToRenderStep(game:GetService("HttpService"):GenerateGUID(), Enum.RenderPriority.Camera.Value - 1, function() -- at least it works
	if events.UserCFrameChanged and headset then	
		local mpos = uis:GetMouseLocation()
		local cursordir = cam:ViewportPointToRay(mpos.x, mpos.y).Direction
		body.lHand[3] = body.lHand[1] and math.clamp(body.lHand[3] + 0.05, 0, 1) or body.lHand[3] > 0 and math.clamp(body.lHand[3] - 0.05, 0, 1) or body.lHand[3]
		body.rHand[3] = body.rHand[1] and math.clamp(body.rHand[3] + 0.05, 0, 1) or body.rHand[3] > 0 and math.clamp(body.rHand[3] - 0.05, 0, 1) or body.rHand[3]
		local theta = math.acos(Vector3.new(-1, 0, 0):Dot((cam.CFrame.LookVector * Vector3.new(1, 0, 1)).unit))
		theta = cam.CFrame.LookVector.z > 0 and (2 * math.pi) - theta or theta
		body.lHand[2] = CFrame.new(-math.cos(theta - (math.pi / 4)), -0.5, -math.sin(theta - (math.pi / 4)))
		body.rHand[2] = CFrame.new(-math.cos(theta + (math.pi / 4)), -0.5, -math.sin(theta + (math.pi / 4)))
		local lcf = ((body.lHand[2]):lerp(CFrame.new(cursordir * 100 / cam.HeadScale), body.lHand[3]))
		local rcf = ((body.rHand[2]):lerp(CFrame.new(cursordir * 100 / cam.HeadScale), body.rHand[3]))
		events.UserCFrameChanged:Fire(Enum.UserCFrame.LeftHand, lcf * CFrame.Angles(cam.CFrame:ToEulerAnglesXYZ()))
		events.UserCFrameChanged:Fire(Enum.UserCFrame.RightHand, rcf * CFrame.Angles(cam.CFrame:ToEulerAnglesXYZ()))
	end
end)
p = plyrs.LocalPlayer or (function()
	plyrs:GetPropertyChangedSignal("LocalPlayer"):wait() -- this doesnt return anything for some reason??
	return plyrs.LocalPlayer
end)()
				
			
Leave a Comment

Your email address will not be published. Required fields are marked *