Advertisement
Lembardon

Unlock all parts roblox

Dec 25th, 2024 (edited)
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 14.21 KB | Gaming | 0 0
  1. local function unlockAllParts()
  2.     for _, part in ipairs(workspace:GetDescendants()) do
  3.         if part:IsA("BasePart") then
  4.             part.Locked = false
  5.         end
  6.     end
  7. end
  8.  
  9. unlockAllParts()
  10.  
  11. local UserInputService = game:GetService("UserInputService")
  12.  
  13. UserInputService.InputBegan:Connect(function(input, gameProcessed)
  14.     if gameProcessed then return end
  15.     if input.KeyCode == Enum.KeyCode.U then
  16.         unlockAllParts()
  17.     end
  18. end)
  19. local pi    = math.pi
  20. local abs   = math.abs
  21. local clamp = math.clamp
  22. local exp   = math.exp
  23. local rad   = math.rad
  24. local sign  = math.sign
  25. local sqrt  = math.sqrt
  26. local tan   = math.tan
  27.  
  28. local ContextActionService = game:GetService("ContextActionService")
  29. local Players = game:GetService("Players")
  30. local RunService = game:GetService("RunService")
  31. local StarterGui = game:GetService("StarterGui")
  32. local UserInputService = game:GetService("UserInputService")
  33. local Workspace = game:GetService("Workspace")
  34. local Settings = UserSettings()
  35. local GameSettings = Settings.GameSettings
  36.  
  37. local LocalPlayer = Players.LocalPlayer
  38. if not LocalPlayer then
  39.     Players:GetPropertyChangedSignal("LocalPlayer"):Wait()
  40.     LocalPlayer = Players.LocalPlayer
  41. end
  42.  
  43. local Camera = Workspace.CurrentCamera
  44. Workspace:GetPropertyChangedSignal("CurrentCamera"):Connect(function()
  45.     local newCamera = Workspace.CurrentCamera
  46.     if newCamera then
  47.         Camera = newCamera
  48.     end
  49. end)
  50.  
  51. local FFlagUserExitFreecamBreaksWithShiftlock
  52. do
  53.     local success, result = pcall(function()
  54.         return UserSettings():IsUserFeatureEnabled("UserExitFreecamBreaksWithShiftlock")
  55.     end)
  56.     FFlagUserExitFreecamBreaksWithShiftlock = success and result
  57. end
  58.  
  59. ------------------------------------------------------------------------
  60.  
  61. local TOGGLE_INPUT_PRIORITY = Enum.ContextActionPriority.Low.Value
  62. local INPUT_PRIORITY = Enum.ContextActionPriority.High.Value
  63. local FREECAM_MACRO_KB = {Enum.KeyCode.LeftShift, Enum.KeyCode.P}
  64.  
  65. local NAV_GAIN = Vector3.new(1, 1, 1)*64
  66. local PAN_GAIN = Vector2.new(0.75, 1)*8
  67. local FOV_GAIN = 300
  68.  
  69. local PITCH_LIMIT = rad(90)
  70.  
  71. local VEL_STIFFNESS = 1.5
  72. local PAN_STIFFNESS = 1.0
  73. local FOV_STIFFNESS = 4.0
  74.  
  75. ------------------------------------------------------------------------
  76.  
  77. local Spring = {} do
  78.     Spring.__index = Spring
  79.  
  80.     function Spring.new(freq, pos)
  81.         local self = setmetatable({}, Spring)
  82.         self.f = freq
  83.         self.p = pos
  84.         self.v = pos*0
  85.         return self
  86.     end
  87.  
  88.     function Spring:Update(dt, goal)
  89.         local f = self.f*2*pi
  90.         local p0 = self.p
  91.         local v0 = self.v
  92.  
  93.         local offset = goal - p0
  94.         local decay = exp(-f*dt)
  95.  
  96.         local p1 = goal + (v0*dt - offset*(f*dt + 1))*decay
  97.         local v1 = (f*dt*(offset*f - v0) + v0)*decay
  98.  
  99.         self.p = p1
  100.         self.v = v1
  101.  
  102.         return p1
  103.     end
  104.  
  105.     function Spring:Reset(pos)
  106.         self.p = pos
  107.         self.v = pos*0
  108.     end
  109. end
  110.  
  111. ------------------------------------------------------------------------
  112.  
  113. local cameraPos = Vector3.new()
  114. local cameraRot = Vector2.new()
  115. local cameraFov = 0
  116.  
  117. local velSpring = Spring.new(VEL_STIFFNESS, Vector3.new())
  118. local panSpring = Spring.new(PAN_STIFFNESS, Vector2.new())
  119. local fovSpring = Spring.new(FOV_STIFFNESS, 0)
  120.  
  121. ------------------------------------------------------------------------
  122.  
  123. local Input = {} do
  124.     local thumbstickCurve do
  125.         local K_CURVATURE = 2.0
  126.         local K_DEADZONE = 0.15
  127.  
  128.         local function fCurve(x)
  129.             return (exp(K_CURVATURE*x) - 1)/(exp(K_CURVATURE) - 1)
  130.         end
  131.  
  132.         local function fDeadzone(x)
  133.             return fCurve((x - K_DEADZONE)/(1 - K_DEADZONE))
  134.         end
  135.  
  136.         function thumbstickCurve(x)
  137.             return sign(x)*clamp(fDeadzone(abs(x)), 0, 1)
  138.         end
  139.     end
  140.  
  141.     local gamepad = {
  142.         ButtonX = 0,
  143.         ButtonY = 0,
  144.         DPadDown = 0,
  145.         DPadUp = 0,
  146.         ButtonL2 = 0,
  147.         ButtonR2 = 0,
  148.         Thumbstick1 = Vector2.new(),
  149.         Thumbstick2 = Vector2.new(),
  150.     }
  151.  
  152.     local keyboard = {
  153.         W = 0,
  154.         A = 0,
  155.         S = 0,
  156.         D = 0,
  157.         E = 0,
  158.         Q = 0,
  159.         U = 0,
  160.         H = 0,
  161.         J = 0,
  162.         K = 0,
  163.         I = 0,
  164.         Y = 0,
  165.         Up = 0,
  166.         Down = 0,
  167.         LeftShift = 0,
  168.         RightShift = 0,
  169.     }
  170.  
  171.     local mouse = {
  172.         Delta = Vector2.new(),
  173.         MouseWheel = 0,
  174.     }
  175.  
  176.     local NAV_GAMEPAD_SPEED  = Vector3.new(1, 1, 1)
  177.     local NAV_KEYBOARD_SPEED = Vector3.new(1, 1, 1)
  178.     local PAN_MOUSE_SPEED    = Vector2.new(1, 1)*(pi/64)
  179.     local PAN_GAMEPAD_SPEED  = Vector2.new(1, 1)*(pi/8)
  180.     local FOV_WHEEL_SPEED    = 1.0
  181.     local FOV_GAMEPAD_SPEED  = 0.25
  182.     local NAV_ADJ_SPEED      = 0.75
  183.     local NAV_SHIFT_MUL      = 0.25
  184.  
  185.     local navSpeed = 1
  186.  
  187.     function Input.Vel(dt)
  188.         navSpeed = clamp(navSpeed + dt*(keyboard.Up - keyboard.Down)*NAV_ADJ_SPEED, 0.01, 4)
  189.  
  190.         local kGamepad = Vector3.new(
  191.             thumbstickCurve(gamepad.Thumbstick1.X),
  192.             thumbstickCurve(gamepad.ButtonR2) - thumbstickCurve(gamepad.ButtonL2),
  193.             thumbstickCurve(-gamepad.Thumbstick1.Y)
  194.         )*NAV_GAMEPAD_SPEED
  195.  
  196.         local kKeyboard = Vector3.new(
  197.             keyboard.D - keyboard.A + keyboard.K - keyboard.H,
  198.             keyboard.E - keyboard.Q + keyboard.I - keyboard.Y,
  199.             keyboard.S - keyboard.W + keyboard.J - keyboard.U
  200.         )*NAV_KEYBOARD_SPEED
  201.  
  202.         local shift = UserInputService:IsKeyDown(Enum.KeyCode.LeftShift) or UserInputService:IsKeyDown(Enum.KeyCode.RightShift)
  203.  
  204.         return (kGamepad + kKeyboard)*(navSpeed*(shift and NAV_SHIFT_MUL or 1))
  205.     end
  206.  
  207.     function Input.Pan(dt)
  208.         local kGamepad = Vector2.new(
  209.             thumbstickCurve(gamepad.Thumbstick2.Y),
  210.             thumbstickCurve(-gamepad.Thumbstick2.X)
  211.         )*PAN_GAMEPAD_SPEED
  212.         local kMouse = mouse.Delta*PAN_MOUSE_SPEED
  213.         mouse.Delta = Vector2.new()
  214.         return kGamepad + kMouse
  215.     end
  216.  
  217.     function Input.Fov(dt)
  218.         local kGamepad = (gamepad.ButtonX - gamepad.ButtonY)*FOV_GAMEPAD_SPEED
  219.         local kMouse = mouse.MouseWheel*FOV_WHEEL_SPEED
  220.         mouse.MouseWheel = 0
  221.         return kGamepad + kMouse
  222.     end
  223.  
  224.     do
  225.         local function Keypress(action, state, input)
  226.             keyboard[input.KeyCode.Name] = state == Enum.UserInputState.Begin and 1 or 0
  227.             return Enum.ContextActionResult.Sink
  228.         end
  229.  
  230.         local function GpButton(action, state, input)
  231.             gamepad[input.KeyCode.Name] = state == Enum.UserInputState.Begin and 1 or 0
  232.             return Enum.ContextActionResult.Sink
  233.         end
  234.  
  235.         local function MousePan(action, state, input)
  236.             local delta = input.Delta
  237.             mouse.Delta = Vector2.new(-delta.y, -delta.x)
  238.             return Enum.ContextActionResult.Sink
  239.         end
  240.  
  241.         local function Thumb(action, state, input)
  242.             gamepad[input.KeyCode.Name] = input.Position
  243.             return Enum.ContextActionResult.Sink
  244.         end
  245.  
  246.         local function Trigger(action, state, input)
  247.             gamepad[input.KeyCode.Name] = input.Position.z
  248.             return Enum.ContextActionResult.Sink
  249.         end
  250.  
  251.         local function MouseWheel(action, state, input)
  252.             mouse[input.UserInputType.Name] = -input.Position.z
  253.             return Enum.ContextActionResult.Sink
  254.         end
  255.  
  256.         local function Zero(t)
  257.             for k, v in pairs(t) do
  258.                 t[k] = v*0
  259.             end
  260.         end
  261.  
  262.         function Input.StartCapture()
  263.             ContextActionService:BindActionAtPriority("FreecamKeyboard", Keypress, false, INPUT_PRIORITY,
  264.                 Enum.KeyCode.W, Enum.KeyCode.U,
  265.                 Enum.KeyCode.A, Enum.KeyCode.H,
  266.                 Enum.KeyCode.S, Enum.KeyCode.J,
  267.                 Enum.KeyCode.D, Enum.KeyCode.K,
  268.                 Enum.KeyCode.E, Enum.KeyCode.I,
  269.                 Enum.KeyCode.Q, Enum.KeyCode.Y,
  270.                 Enum.KeyCode.Up, Enum.KeyCode.Down
  271.             )
  272.             ContextActionService:BindActionAtPriority("FreecamMousePan",          MousePan,   false, INPUT_PRIORITY, Enum.UserInputType.MouseMovement)
  273.             ContextActionService:BindActionAtPriority("FreecamMouseWheel",        MouseWheel, false, INPUT_PRIORITY, Enum.UserInputType.MouseWheel)
  274.             ContextActionService:BindActionAtPriority("FreecamGamepadButton",     GpButton,   false, INPUT_PRIORITY, Enum.KeyCode.ButtonX, Enum.KeyCode.ButtonY)
  275.             ContextActionService:BindActionAtPriority("FreecamGamepadTrigger",    Trigger,    false, INPUT_PRIORITY, Enum.KeyCode.ButtonR2, Enum.KeyCode.ButtonL2)
  276.             ContextActionService:BindActionAtPriority("FreecamGamepadThumbstick", Thumb,      false, INPUT_PRIORITY, Enum.KeyCode.Thumbstick1, Enum.KeyCode.Thumbstick2)
  277.         end
  278.  
  279.         function Input.StopCapture()
  280.             navSpeed = 1
  281.             Zero(gamepad)
  282.             Zero(keyboard)
  283.             Zero(mouse)
  284.             ContextActionService:UnbindAction("FreecamKeyboard")
  285.             ContextActionService:UnbindAction("FreecamMousePan")
  286.             ContextActionService:UnbindAction("FreecamMouseWheel")
  287.             ContextActionService:UnbindAction("FreecamGamepadButton")
  288.             ContextActionService:UnbindAction("FreecamGamepadTrigger")
  289.             ContextActionService:UnbindAction("FreecamGamepadThumbstick")
  290.         end
  291.     end
  292. end
  293.  
  294. local function GetFocusDistance(cameraFrame)
  295.     local znear = 0.1
  296.     local viewport = Camera.ViewportSize
  297.     local projy = 2*tan(cameraFov/2)
  298.     local projx = viewport.x/viewport.y*projy
  299.     local fx = cameraFrame.rightVector
  300.     local fy = cameraFrame.upVector
  301.     local fz = cameraFrame.lookVector
  302.  
  303.     local minVect = Vector3.new()
  304.     local minDist = 512
  305.  
  306.     for x = 0, 1, 0.5 do
  307.         for y = 0, 1, 0.5 do
  308.             local cx = (x - 0.5)*projx
  309.             local cy = (y - 0.5)*projy
  310.             local offset = fx*cx - fy*cy + fz
  311.             local origin = cameraFrame.p + offset*znear
  312.             local _, hit = Workspace:FindPartOnRay(Ray.new(origin, offset.unit*minDist))
  313.             local dist = (hit - origin).magnitude
  314.             if minDist > dist then
  315.                 minDist = dist
  316.                 minVect = offset.unit
  317.             end
  318.         end
  319.     end
  320.  
  321.     return fz:Dot(minVect)*minDist
  322. end
  323.  
  324. ------------------------------------------------------------------------
  325.  
  326. local function StepFreecam(dt)
  327.     local vel = velSpring:Update(dt, Input.Vel(dt))
  328.     local pan = panSpring:Update(dt, Input.Pan(dt))
  329.     local fov = fovSpring:Update(dt, Input.Fov(dt))
  330.  
  331.     local zoomFactor = sqrt(tan(rad(70/2))/tan(rad(cameraFov/2)))
  332.  
  333.     cameraFov = clamp(cameraFov + fov*FOV_GAIN*(dt/zoomFactor), 1, 120)
  334.     cameraRot = cameraRot + pan*PAN_GAIN*(dt/zoomFactor)
  335.     cameraRot = Vector2.new(clamp(cameraRot.x, -PITCH_LIMIT, PITCH_LIMIT), cameraRot.y%(2*pi))
  336.  
  337.     local cameraCFrame = CFrame.new(cameraPos)*CFrame.fromOrientation(cameraRot.x, cameraRot.y, 0)*CFrame.new(vel*NAV_GAIN*dt)
  338.     cameraPos = cameraCFrame.p
  339.  
  340.     Camera.CFrame = cameraCFrame
  341.     Camera.Focus = cameraCFrame*CFrame.new(0, 0, -GetFocusDistance(cameraCFrame))
  342.     Camera.FieldOfView = cameraFov
  343. end
  344.  
  345. local function CheckMouseLockAvailability()
  346.     local devAllowsMouseLock = Players.LocalPlayer.DevEnableMouseLock
  347.     local devMovementModeIsScriptable = Players.LocalPlayer.DevComputerMovementMode == Enum.DevComputerMovementMode.Scriptable
  348.     local userHasMouseLockModeEnabled = GameSettings.ControlMode == Enum.ControlMode.MouseLockSwitch
  349.     local userHasClickToMoveEnabled =  GameSettings.ComputerMovementMode == Enum.ComputerMovementMode.ClickToMove
  350.     local MouseLockAvailable = devAllowsMouseLock and userHasMouseLockModeEnabled and not userHasClickToMoveEnabled and not devMovementModeIsScriptable
  351.  
  352.     return MouseLockAvailable
  353. end
  354.  
  355. ------------------------------------------------------------------------
  356.  
  357. local PlayerState = {} do
  358.     local mouseBehavior
  359.     local mouseIconEnabled
  360.     local cameraType
  361.     local cameraFocus
  362.     local cameraCFrame
  363.     local cameraFieldOfView
  364.     local screenGuis = {}
  365.     local coreGuis = {
  366.         Backpack = true,
  367.         Chat = true,
  368.         Health = true,
  369.         PlayerList = true,
  370.     }
  371.     local setCores = {
  372.         BadgesNotificationsActive = true,
  373.         PointsNotificationsActive = true,
  374.     }
  375.  
  376.     -- Save state and set up for freecam
  377.     function PlayerState.Push()
  378.         for name in pairs(coreGuis) do
  379.             coreGuis[name] = StarterGui:GetCoreGuiEnabled(Enum.CoreGuiType[name])
  380.             StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType[name], false)
  381.         end
  382.         for name in pairs(setCores) do
  383.             setCores[name] = StarterGui:GetCore(name)
  384.             StarterGui:SetCore(name, false)
  385.         end
  386.         local playergui = LocalPlayer:FindFirstChildOfClass("PlayerGui")
  387.         if playergui then
  388.             for _, gui in pairs(playergui:GetChildren()) do
  389.                 if gui:IsA("ScreenGui") and gui.Enabled then
  390.                     screenGuis[#screenGuis + 1] = gui
  391.                     gui.Enabled = false
  392.                 end
  393.             end
  394.         end
  395.  
  396.         cameraFieldOfView = Camera.FieldOfView
  397.         Camera.FieldOfView = 70
  398.  
  399.         cameraType = Camera.CameraType
  400.         Camera.CameraType = Enum.CameraType.Custom
  401.  
  402.         cameraCFrame = Camera.CFrame
  403.         cameraFocus = Camera.Focus
  404.  
  405.         mouseIconEnabled = UserInputService.MouseIconEnabled
  406.         UserInputService.MouseIconEnabled = false
  407.  
  408.         if FFlagUserExitFreecamBreaksWithShiftlock and CheckMouseLockAvailability() then
  409.             mouseBehavior = Enum.MouseBehavior.Default
  410.         else
  411.             mouseBehavior = UserInputService.MouseBehavior
  412.         end
  413.         UserInputService.MouseBehavior = Enum.MouseBehavior.Default
  414.     end
  415.     function PlayerState.Pop()
  416.         for name, isEnabled in pairs(coreGuis) do
  417.             StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType[name], isEnabled)
  418.         end
  419.         for name, isEnabled in pairs(setCores) do
  420.             StarterGui:SetCore(name, isEnabled)
  421.         end
  422.         for _, gui in pairs(screenGuis) do
  423.             if gui.Parent then
  424.                 gui.Enabled = true
  425.             end
  426.         end
  427.  
  428.         Camera.FieldOfView = cameraFieldOfView
  429.         cameraFieldOfView = nil
  430.  
  431.         Camera.CameraType = cameraType
  432.         cameraType = nil
  433.  
  434.         Camera.CFrame = cameraCFrame
  435.         cameraCFrame = nil
  436.  
  437.         Camera.Focus = cameraFocus
  438.         cameraFocus = nil
  439.  
  440.         UserInputService.MouseIconEnabled = mouseIconEnabled
  441.         mouseIconEnabled = nil
  442.  
  443.         UserInputService.MouseBehavior = mouseBehavior
  444.         mouseBehavior = nil
  445.     end
  446. end
  447.  
  448. local function StartFreecam()
  449.     local cameraCFrame = Camera.CFrame
  450.     cameraRot = Vector2.new(cameraCFrame:toEulerAnglesYXZ())
  451.     cameraPos = cameraCFrame.p
  452.     cameraFov = Camera.FieldOfView
  453.  
  454.     velSpring:Reset(Vector3.new())
  455.     panSpring:Reset(Vector2.new())
  456.     fovSpring:Reset(0)
  457.  
  458.     PlayerState.Push()
  459.     RunService:BindToRenderStep("Freecam", Enum.RenderPriority.Camera.Value, StepFreecam)
  460.     Input.StartCapture()
  461. end
  462.  
  463. local function StopFreecam()
  464.     Input.StopCapture()
  465.     RunService:UnbindFromRenderStep("Freecam")
  466.     PlayerState.Pop()
  467. end
  468.  
  469. do
  470.     local enabled = false
  471.  
  472.     local function ToggleFreecam()
  473.         if enabled then
  474.             StopFreecam()
  475.         else
  476.             StartFreecam()
  477.         end
  478.         enabled = not enabled
  479.     end
  480.  
  481.     local function CheckMacro(macro)
  482.         for i = 1, #macro - 1 do
  483.             if not UserInputService:IsKeyDown(macro[i]) then
  484.                 return
  485.             end
  486.         end
  487.         ToggleFreecam()
  488.     end
  489.  
  490.     local function HandleActivationInput(action, state, input)
  491.         if state == Enum.UserInputState.Begin then
  492.             if input.KeyCode == FREECAM_MACRO_KB[#FREECAM_MACRO_KB] then
  493.                 CheckMacro(FREECAM_MACRO_KB)
  494.             end
  495.         end
  496.         return Enum.ContextActionResult.Pass
  497.     end
  498.  
  499.     ContextActionService:BindActionAtPriority("FreecamToggle", HandleActivationInput, false, TOGGLE_INPUT_PRIORITY, FREECAM_MACRO_KB[#FREECAM_MACRO_KB])
  500. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement