0% found this document useful (0 votes)
610 views

Shift Lock

This document contains code for implementing a shift lock feature in Roblox. It creates a ScreenGui element to hold an image button for toggling shift lock. It connects input events to toggle between enabling and disabling shift lock mode, which locks the camera to the player's movement and changes the camera offset. It also connects to game settings to handle different control modes.

Uploaded by

hirokawa yo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
610 views

Shift Lock

This document contains code for implementing a shift lock feature in Roblox. It creates a ScreenGui element to hold an image button for toggling shift lock. It connects input events to toggle between enabling and disabling shift lock mode, which locks the camera to the player's movement and changes the camera offset. It also connects to game settings to handle different control modes.

Uploaded by

hirokawa yo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

-- Gui to Lua

-- Version: 3.2

-- Instances:

local ShiftlockStarterGui = Instance.new("ScreenGui")


local ImageButton = Instance.new("ImageButton")

--Properties:

ShiftlockStarterGui.Name = "Shiftlock (StarterGui)"


ShiftlockStarterGui.Parent = game.Players.LocalPlayer:WaitForChild("PlayerGui")
ShiftlockStarterGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling

ImageButton.Parent = ShiftlockStarterGui
ImageButton.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
ImageButton.BackgroundTransparency = 1.000
ImageButton.Position = UDim2.new(0.921914339, 0, 0.552375436, 0)
ImageButton.Size = UDim2.new(0.0636147112, 0, 0.0661305636, 0)
ImageButton.SizeConstraint = Enum.SizeConstraint.RelativeXX
ImageButton.Image = "http://www.roblox.com/asset/?id=182223762"

-- Scripts:

local function TLQOYN_fake_script() -- ImageButton.ShiftGUI


local script = Instance.new('LocalScript', ImageButton)

local MobileCameraFramework = {}
local players = game:GetService("Players")
local runservice = game:GetService("RunService")
local CAS = game:GetService("ContextActionService")
local player = players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local root = character:WaitForChild("HumanoidRootPart")
local humanoid = character.Humanoid
local camera = workspace.CurrentCamera
local button = script.Parent

--Visiblity
uis = game:GetService("UserInputService")
ismobile = uis.TouchEnabled
button.Visible = ismobile

local states = {
OFF = "rbxasset://textures/ui/[email protected]",
ON = "rbxasset://textures/ui/[email protected]"
}
local MAX_LENGTH = 900000
local active = false
local ENABLED_OFFSET = CFrame.new(1.7, 0, 0)
local DISABLED_OFFSET = CFrame.new(-1.7, 0, 0)
local function UpdateImage(STATE)
button.Image = states[STATE]
end
local function UpdateAutoRotate(BOOL)
humanoid.AutoRotate = BOOL
end
local function GetUpdatedCameraCFrame(ROOT, CAMERA)
return CFrame.new(root.Position, Vector3.new(CAMERA.CFrame.LookVector.X
* MAX_LENGTH, root.Position.Y, CAMERA.CFrame.LookVector.Z * MAX_LENGTH))
end
local function EnableShiftlock()
UpdateAutoRotate(false)
UpdateImage("ON")
root.CFrame = GetUpdatedCameraCFrame(root, camera)
camera.CFrame = camera.CFrame * ENABLED_OFFSET
end
local function DisableShiftlock()
UpdateAutoRotate(true)
UpdateImage("OFF")
camera.CFrame = camera.CFrame * DISABLED_OFFSET
pcall(function()
active:Disconnect()
active = nil
end)
end
UpdateImage("OFF")
active = false
function ShiftLock()
if not active then
active = runservice.RenderStepped:Connect(function()
EnableShiftlock()
end)
else
DisableShiftlock()
end
end
local ShiftLockButton = CAS:BindAction("ShiftLOCK", ShiftLock, false, "On")
CAS:SetPosition("ShiftLOCK", UDim2.new(0.8, 0, 0.8, 0))
button.MouseButton1Click:Connect(function()
if not active then
active = runservice.RenderStepped:Connect(function()
EnableShiftlock()
end)
else
DisableShiftlock()
end
end)
return MobileCameraFramework

end
coroutine.wrap(TLQOYN_fake_script)()
local function OMQRQRC_fake_script() -- ShiftlockStarterGui.LocalScript
local script = Instance.new('LocalScript', ShiftlockStarterGui)

local Players = game:GetService("Players")


local UserInputService = game:GetService("UserInputService")
local Settings = UserSettings()
local GameSettings = Settings.GameSettings
local ShiftLockController = {}
while not Players.LocalPlayer do
wait()
end
local LocalPlayer = Players.LocalPlayer
local Mouse = LocalPlayer:GetMouse()
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui")
local ScreenGui, ShiftLockIcon, InputCn
local IsShiftLockMode = true
local IsShiftLocked = true
local IsActionBound = false
local IsInFirstPerson = false
ShiftLockController.OnShiftLockToggled = Instance.new("BindableEvent")
local function isShiftLockMode()
return LocalPlayer.DevEnableMouseLock and GameSettings.ControlMode ==
Enum.ControlMode.MouseLockSwitch and LocalPlayer.DevComputerMovementMode ~=
Enum.DevComputerMovementMode.ClickToMove and GameSettings.ComputerMovementMode ~=
Enum.ComputerMovementMode.ClickToMove and LocalPlayer.DevComputerMovementMode ~=
Enum.DevComputerMovementMode.Scriptable
end
if not UserInputService.TouchEnabled then
IsShiftLockMode = isShiftLockMode()
end
local function onShiftLockToggled()
IsShiftLocked = not IsShiftLocked
ShiftLockController.OnShiftLockToggled:Fire()
end
local initialize = function()
print("enabled")
end
function ShiftLockController:IsShiftLocked()
return IsShiftLockMode and IsShiftLocked
end
function ShiftLockController:SetIsInFirstPerson(isInFirstPerson)
IsInFirstPerson = isInFirstPerson
end
local function mouseLockSwitchFunc(actionName, inputState, inputObject)
if IsShiftLockMode then
onShiftLockToggled()
end
end
local function disableShiftLock()
if ScreenGui then
ScreenGui.Parent = nil
end
IsShiftLockMode = false
Mouse.Icon = ""
if InputCn then
InputCn:disconnect()
InputCn = nil
end
IsActionBound = false
ShiftLockController.OnShiftLockToggled:Fire()
end
local onShiftInputBegan = function(inputObject, isProcessed)
if isProcessed then
return
end
if inputObject.UserInputType ~= Enum.UserInputType.Keyboard or
inputObject.KeyCode == Enum.KeyCode.LeftShift or inputObject.KeyCode ==
Enum.KeyCode.RightShift then
end
end
local function enableShiftLock()
IsShiftLockMode = isShiftLockMode()
if IsShiftLockMode then
if ScreenGui then
ScreenGui.Parent = PlayerGui
end
if IsShiftLocked then
ShiftLockController.OnShiftLockToggled:Fire()
end
if not IsActionBound then
InputCn =
UserInputService.InputBegan:connect(onShiftInputBegan)
IsActionBound = true
end
end
end
GameSettings.Changed:connect(function(property)
if property == "ControlMode" then
if GameSettings.ControlMode == Enum.ControlMode.MouseLockSwitch
then
enableShiftLock()
else
disableShiftLock()
end
elseif property == "ComputerMovementMode" then
if GameSettings.ComputerMovementMode ==
Enum.ComputerMovementMode.ClickToMove then
disableShiftLock()
else
enableShiftLock()
end
end
end)
LocalPlayer.Changed:connect(function(property)
if property == "DevEnableMouseLock" then
if LocalPlayer.DevEnableMouseLock then
enableShiftLock()
else
disableShiftLock()
end
elseif property == "DevComputerMovementMode" then
if LocalPlayer.DevComputerMovementMode ==
Enum.DevComputerMovementMode.ClickToMove or LocalPlayer.DevComputerMovementMode ==
Enum.DevComputerMovementMode.Scriptable then
disableShiftLock()
else
enableShiftLock()
end
end
end)
LocalPlayer.CharacterAdded:connect(function(character)
if not UserInputService.TouchEnabled then
initialize()
end
end)
if not UserInputService.TouchEnabled then
initialize()
if isShiftLockMode() then
InputCn = UserInputService.InputBegan:connect(onShiftInputBegan)
IsActionBound = true
end
end
enableShiftLock()
return ShiftLockController
end
coroutine.wrap(OMQRQRC_fake_script)()

You might also like