I tried modifying the RootCamera script, but this doesn't work. What should I do? (lines modified/added: 7, 200-210)
local PlayersService = game:GetService('Players') local UserInputService = game:GetService('UserInputService') local StarterGui = game:GetService('StarterGui') local GuiService = game:GetService('GuiService') local ContextActionService = game:GetService('ContextActionService') local VRService = game:GetService("VRService") local UserInputService = game:GetService("UserInputService") local LocalPlayer = PlayersService.LocalPlayer local PlayerGui = nil if LocalPlayer then PlayerGui = PlayersService.LocalPlayer:WaitForChild("PlayerGui") end local PortraitMode = false local CameraScript = script.Parent local ShiftLockController = require(CameraScript:WaitForChild('ShiftLockController')) local Settings = UserSettings() local GameSettings = Settings.GameSettings local function clamp(low, high, num) return (num > high and high or num < low and low or num) end local math_atan2 = math.atan2 local function findAngleBetweenXZVectors(vec2, vec1) return math_atan2(vec1.X*vec2.Z-vec1.Z*vec2.X, vec1.X*vec2.X + vec1.Z*vec2.Z) end local function IsFinite(num) return num == num and num ~= 1/0 and num ~= -1/0 end local THUMBSTICK_DEADZONE = 0.2 local LANDSCAPE_DEFAULT_ZOOM = 12.5 local PORTRAIT_DEFAULT_ZOOM = 25 local humanoidCache = {} local function findPlayerHumanoid(player) local character = player and player.Character if character then local resultHumanoid = humanoidCache[player] if resultHumanoid and resultHumanoid.Parent == character then return resultHumanoid else humanoidCache[player] = nil -- Bust Old Cache local humanoid = character:FindFirstChildOfClass("Humanoid") if humanoid then humanoidCache[player] = humanoid end return humanoid end end end local MIN_Y = math.rad(-80) local MAX_Y = math.rad(80) local VR_ANGLE = math.rad(15) local VR_LOW_INTENSITY_ROTATION = Vector2.new(math.rad(15), 0) local VR_HIGH_INTENSITY_ROTATION = Vector2.new(math.rad(45), 0) local VR_LOW_INTENSITY_REPEAT = 0.1 local VR_HIGH_INTENSITY_REPEAT = 0.4 local ZERO_VECTOR2 = Vector2.new(0, 0) local ZERO_VECTOR3 = Vector3.new(0, 0, 0) local TOUCH_SENSITIVTY = Vector2.new(math.pi*2.25, math.pi*2) local MOUSE_SENSITIVITY = Vector2.new(math.pi*4, math.pi*1.9) local MAX_TIME_FOR_DOUBLE_TAP = 1.5 local MAX_TAP_POS_DELTA = 15 local MAX_TAP_TIME_DELTA = 0.75 local SEAT_OFFSET = Vector3.new(0,5,0) local VR_SEAT_OFFSET = Vector3.new(0, 4, 0) local HEAD_OFFSET = Vector3.new(0, 1.5, 0) local R15_HEAD_OFFSET = Vector3.new(0, 2.0, 0) local PORTRAIT_MODE_CAMERA_OFFSET = 2 -- Reset the camera look vector when the camera is enabled for the first time local SetCameraOnSpawn = true local hasGameLoaded = false local GestureArea = nil --todo: remove this once TouchTapInWorld is on all platforms local touchWorkspaceEventEnabled = pcall(function() local test = UserInputService.TouchTapInWorld end) local function layoutGestureArea(portraitMode) if GestureArea then if portraitMode then GestureArea.Size = UDim2.new(1, 0, .6, 0) GestureArea.Position = UDim2.new(0, 0, 0, 0) else GestureArea.Size = UDim2.new(1, 0, .5, -18) GestureArea.Position = UDim2.new(0, 0, 0, 0) end end end -- Setup gesture area that camera uses while DynamicThumbstick is enabled local function OnCharacterAdded(character) if UserInputService.TouchEnabled then if PlayerGui then local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "GestureArea" ScreenGui.Parent = PlayerGui GestureArea = Instance.new("Frame") GestureArea.BackgroundTransparency = 1.0 GestureArea.Visible = true GestureArea.BackgroundColor3 = Color3.fromRGB(0, 0, 0) layoutGestureArea(PortraitMode) GestureArea.Parent = ScreenGui end for _, child in ipairs(LocalPlayer.Character:GetChildren()) do if child:IsA("Tool") then IsAToolEquipped = true end end character.ChildAdded:Connect(function(child) if child:IsA("Tool") then IsAToolEquipped = true end end) character.ChildRemoved:Connect(function(child) if child:IsA("Tool") then IsAToolEquipped = false end end) end end if LocalPlayer then if LocalPlayer.Character ~= nil then OnCharacterAdded(LocalPlayer.Character) end LocalPlayer.CharacterAdded:connect(function(character) OnCharacterAdded(character) end) end local function positionIntersectsGuiObject(position, guiObject) if position.X < guiObject.AbsolutePosition.X + guiObject.AbsoluteSize.X and position.X > guiObject.AbsolutePosition.X and position.Y < guiObject.AbsolutePosition.Y + guiObject.AbsoluteSize.Y and position.Y > guiObject.AbsolutePosition.Y then return true end return false end local function GetRenderCFrame(part) return part:GetRenderCFrame() end local function CreateCamera() local this = {} local R15HeadHeight = R15_HEAD_OFFSET function this:GetActivateValue() return 0.7 end function this:IsPortraitMode() return PortraitMode end function this:GetRotateAmountValue(vrRotationIntensity) vrRotationIntensity = vrRotationIntensity or StarterGui:GetCore("VRRotationIntensity") if vrRotationIntensity then if vrRotationIntensity == "Low" then return VR_LOW_INTENSITY_ROTATION elseif vrRotationIntensity == "High" then return VR_HIGH_INTENSITY_ROTATION end end return ZERO_VECTOR2 end function this:GetRepeatDelayValue(vrRotationIntensity) vrRotationIntensity = vrRotationIntensity or StarterGui:GetCore("VRRotationIntensity") if vrRotationIntensity then if vrRotationIntensity == "Low" then return VR_LOW_INTENSITY_REPEAT elseif vrRotationIntensity == "High" then return VR_HIGH_INTENSITY_REPEAT end end return 0 end local camMode = false UserInputService.InputBegan:connect(function(key) if key.KeyCode == Enum.KeyCode.E and camMode == false then this.ShiftLock = true camMode = true end if key.KeyCode == Enum.KeyCode.E and camMode == true then this.ShiftLock = false camMode = false end end) this.Enabled = false local isFirstPerson = false local isRightMouseDown = false local isMiddleMouseDown = false this.RotateInput = ZERO_VECTOR2 this.DefaultZoom = LANDSCAPE_DEFAULT_ZOOM this.activeGamepad = nil local tweens = {} this.lastSubject = nil this.lastSubjectPosition = Vector3.new(0, 5, 0) local lastVRRotation = 0 local vrRotateKeyCooldown = {} local isDynamicThumbstickEnabled = false -- Check for changes in ViewportSize to decide if PortraitMode local CameraChangedConn = nil local workspaceCameraChangedConn = nil local function onWorkspaceCameraChanged() if UserInputService.TouchEnabled then if CameraChangedConn then CameraChangedConn:Disconnect() CameraChangedConn = nil end local newCamera = workspace.CurrentCamera if newCamera then local size = newCamera.ViewportSize PortraitMode = size.X < size.Y layoutGestureArea(PortraitMode) DefaultZoom = PortraitMode and PORTRAIT_DEFAULT_ZOOM or LANDSCAPE_DEFAULT_ZOOM CameraChangedConn = newCamera:GetPropertyChangedSignal("ViewportSize"):Connect(function() size = newCamera.ViewportSize PortraitMode = size.X < size.Y layoutGestureArea(PortraitMode) DefaultZoom = PortraitMode and PORTRAIT_DEFAULT_ZOOM or LANDSCAPE_DEFAULT_ZOOM end) end end end workspaceCameraChangedConn = workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(onWorkspaceCameraChanged) if workspace.CurrentCamera then onWorkspaceCameraChanged() end function this:GetShiftLock() return ShiftLockController:IsShiftLocked() end function this:GetHumanoid() local player = PlayersService.LocalPlayer return findPlayerHumanoid(player) end function this:GetHumanoidRootPart() local humanoid = this:GetHumanoid() return humanoid and humanoid.Torso end function this:GetRenderCFrame(part) GetRenderCFrame(part) end (couldn't fit all)
this is when the toolbox comes in handy (not suggesting u to use it all the time) Just search "force shift lock" then find one and place it in the backpack or where ever the default camera script is and just lock thirdperson click on stater player and set the max zoom to 20 and min zoom to 10