local Players = game:GetService("Players") local ContentProvider = game:GetService("ContentProvider") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local HttpService = game:GetService("HttpService") local LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui") local SETTINGS_KEY = "ShiftLockSettings_v2" local function SaveSettings(settingsData) pcall(function() LocalPlayer:SetAttribute(SETTINGS_KEY, HttpService:JSONEncode(settingsData)) end) end local function LoadSettings() local savedData = LocalPlayer:GetAttribute(SETTINGS_KEY) if type(savedData) == "string" then local success, decoded = pcall(HttpService.JSONDecode, HttpService, savedData) if success and type(decoded) == "table" then return decoded end end return nil end local ShiftLockGui = Instance.new("ScreenGui") ShiftLockGui.Name = "shiftlockk" ShiftLockGui.ResetOnSpawn = false ShiftLockGui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling ShiftLockGui.Parent = PlayerGui local LockButton = Instance.new("ImageButton") LockButton.Name = "LockButton" LockButton.Parent = ShiftLockGui LockButton.AnchorPoint = Vector2.new(0.5, 0.5) LockButton.Position = UDim2.new(0.85, 0, 0.88, 0) LockButton.Size = UDim2.new(0, 50, 0, 50) LockButton.BackgroundColor3 = Color3.fromRGB(40, 40, 40) LockButton.BackgroundTransparency = 0.3 LockButton.BorderSizePixel = 0 LockButton.AutoButtonColor = true LockButton.Image = "" local ButtonIcon = Instance.new("ImageLabel") ButtonIcon.Name = "btnIcon" ButtonIcon.Parent = LockButton ButtonIcon.BackgroundTransparency = 1 ButtonIcon.Position = UDim2.new(0.15, 0, 0.15, 0) ButtonIcon.Size = UDim2.new(0.7, 0, 0.7, 0) ButtonIcon.Image = "rbxasset://textures/ui/mouseLock_off.png" ButtonIcon.ScaleType = Enum.ScaleType.Fit ButtonIcon.ImageColor3 = Color3.fromRGB(255, 255, 255) Instance.new("UICorner", LockButton).CornerRadius = UDim.new(1, 0) local ButtonStroke = Instance.new("UIStroke", LockButton) ButtonStroke.Color = Color3.fromRGB(0, 133, 199) ButtonStroke.Thickness = 2 ButtonStroke.Transparency = 0.3 local function MakeDraggable(guiObject) local isDragging = nil local dragInput = nil local dragStart = nil local startPosition = nil guiObject.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then isDragging = true dragStart = input.Position startPosition = guiObject.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then isDragging = false end end) end end) guiObject.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if isDragging and input == dragInput then local delta = input.Position - dragStart local parentSize = guiObject.Parent.AbsoluteSize local newX = startPosition.X.Scale + delta.X / parentSize.X local newY = startPosition.Y.Scale + delta.Y / parentSize.Y guiObject.Position = UDim2.new(newX, 0, newY, 0) end end) guiObject.Active = true end MakeDraggable(LockButton) local isShiftLockEnabled = false local userGameSettings = nil local rotationConnection = nil local function ToggleShiftLock(enabled) isShiftLockEnabled = enabled if enabled then ButtonIcon.ImageColor3 = Color3.fromRGB(0, 170, 255) ButtonStroke.Thickness = math.max(2, ButtonStroke.Thickness) if not rotationConnection then local success, settings = pcall(function() return UserSettings():GetService("UserGameSettings") end) userGameSettings = success and settings or nil end if userGameSettings and not rotationConnection then rotationConnection = RunService.RenderStepped:Connect(function() pcall(function() userGameSettings.RotationType = Enum.RotationType.CameraRelative end) end) end else ButtonIcon.ImageColor3 = Color3.fromRGB(255, 255, 255) ButtonStroke.Color = ButtonStroke.Color ButtonStroke.Thickness = ButtonStroke.Thickness if rotationConnection then rotationConnection:Disconnect() rotationConnection = nil end if userGameSettings then pcall(function() userGameSettings.RotationType = Enum.RotationType.MovementRelative end) end end end LockButton.MouseButton1Click:Connect(function() ToggleShiftLock(not isShiftLockEnabled) end) local CROSSHAIR_GUI_NAME = "CrosshairSelector_Mobile" if PlayerGui:FindFirstChild(CROSSHAIR_GUI_NAME) then PlayerGui[CROSSHAIR_GUI_NAME]:Destroy() end local CrosshairGui = Instance.new("ScreenGui", PlayerGui) CrosshairGui.Name = CROSSHAIR_GUI_NAME CrosshairGui.ResetOnSpawn = false CrosshairGui.IgnoreGuiInset = true local MainFrame = Instance.new("Frame", CrosshairGui) MainFrame.Size = UDim2.new(0, 280, 0, 420) MainFrame.Position = UDim2.new(0.5, -140, 0.5, -210) MainFrame.BackgroundColor3 = Color3.fromRGB(18, 18, 18) MainFrame.BorderSizePixel = 0 MainFrame.Active = true MainFrame.Draggable = true local TitleLabel = Instance.new("TextLabel", MainFrame) TitleLabel.Size = UDim2.new(1, -20, 0, 28) TitleLabel.Position = UDim2.new(0, 10, 0, 6) TitleLabel.BackgroundTransparency = 1 TitleLabel.Font = Enum.Font.GothamBold TitleLabel.Text = "🎯 Crosshair Selector" TitleLabel.TextColor3 = Color3.fromRGB(255, 255, 255) TitleLabel.TextSize = 18 TitleLabel.TextXAlignment = Enum.TextXAlignment.Left local TabContainer = Instance.new("Frame", MainFrame) TabContainer.Size = UDim2.new(1, -20, 0, 30) TabContainer.Position = UDim2.new(0, 10, 0, 36) TabContainer.BackgroundTransparency = 1 local function CreateTabButton(parent, text, xOffset) local button = Instance.new("TextButton", parent) button.Size = UDim2.new(0, 120, 0, 28) button.Position = UDim2.new(0, xOffset, 0, 0) button.BackgroundColor3 = Color3.fromRGB(40, 40, 40) button.BorderSizePixel = 0 button.Font = Enum.Font.GothamBold button.Text = text button.TextSize = 13 button.TextColor3 = Color3.fromRGB(200, 200, 200) button.AutoButtonColor = true Instance.new("UICorner", button).CornerRadius = UDim.new(0, 6) return button end local CrosshairsTabButton = CreateTabButton(TabContainer, "Crosshairs 🎯", 0) local ShiftLockTabButton = CreateTabButton(TabContainer, "ShiftLock ⚙", 128) local CrosshairsPanel = Instance.new("Frame", MainFrame) CrosshairsPanel.Size = UDim2.new(1, -20, 0, 320) CrosshairsPanel.Position = UDim2.new(0, 10, 0, 76) CrosshairsPanel.BackgroundTransparency = 1 local ShiftLockPanel = Instance.new("Frame", MainFrame) ShiftLockPanel.Size = CrosshairsPanel.Size ShiftLockPanel.Position = CrosshairsPanel.Position ShiftLockPanel.BackgroundTransparency = 1 ShiftLockPanel.Visible = false local PreviewImage = Instance.new("ImageLabel", MainFrame) PreviewImage.Size = UDim2.new(0, 120, 0, 120) PreviewImage.Position = UDim2.new(0.5, -60, 0, 40) PreviewImage.BackgroundTransparency = 1 PreviewImage.Visible = false PreviewImage.ZIndex = 50 local ResetCursorButton = Instance.new("TextButton", MainFrame) ResetCursorButton.Size = UDim2.new(0, 80, 0, 28) ResetCursorButton.Position = UDim2.new(0, 10, 1, -36) ResetCursorButton.Text = "Reset Cursor" ResetCursorButton.Font = Enum.Font.Gotham ResetCursorButton.TextSize = 14 ResetCursorButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60) ResetCursorButton.TextColor3 = Color3.fromRGB(255, 255, 255) ResetCursorButton.AutoButtonColor = true local BlockedPrefixes = {"101", "7527", "11716", "139", "119"} local ReplacementCrosshairs = { 11719595104, 11810229301, 12233185690, 12275825245, 6239163275, 11830989304, 11747999946, 11723817205, 121132287, 139241837, 137215705, 11988231127, 11916210777, 8390115370, 5143056985, 3259050989, 51838212, 8360620314, 137215752, 11754037423, 11867337948, 11986603133, 11915656516, 11867351018, 12232793816, 12701650978, 12881238785, 11747026230, 10696045527, 7051824015, 11754048481, 11718192673, 11754247597, 11121461899, 11756692076, 11756696859 } local function StartsWithPrefix(value, prefix) return tostring(value):sub(1, #prefix) == prefix end local function PreloadAsset(assetId) return pcall(function() ContentProvider:PreloadAsync({"rbxassetid://" .. tostring(assetId)}) end) end local replacementIndex = 1 local function GetNextReplacement() for _ = 1, #ReplacementCrosshairs do local crosshairId = ReplacementCrosshairs[replacementIndex] replacementIndex = replacementIndex % #ReplacementCrosshairs + 1 if PreloadAsset(crosshairId) then return crosshairId end end return 121132287 end local CrosshairAssetIds = { 10104198910, 10181263741, 12275825245, 11988231127, 6239163275, 11767069582, 11754489642, 11779925287, 11722554017, 11722865980, 12472046162, 11350518862, 11722153703, 51838212, 11716452453, 240080505, 11716559277, 7527551515, 11718810615, 251435889, 11719595104, 11719890577, 12534101433, 13956623874, 8360620314, 11722080838, 3259050989, 1489774661, 8390115370, 8954541580, 9841536429, 11916210777, 11830987244, 5143056985, 11759293285, 11754499452 } local ValidCrosshairs = {} local ReplacementLog = {} for index, assetId in ipairs(CrosshairAssetIds) do local wasReplaced = false for _, prefix in ipairs(BlockedPrefixes) do if StartsWithPrefix(assetId, prefix) then local replacement = GetNextReplacement() table.insert(ValidCrosshairs, replacement) table.insert(ReplacementLog, { index = index, original = assetId, replacement = replacement, reason = "prefix" }) wasReplaced = true break end end if not wasReplaced then if PreloadAsset(assetId) then table.insert(ValidCrosshairs, assetId) else local replacement = GetNextReplacement() table.insert(ValidCrosshairs, replacement) table.insert(ReplacementLog, { index = index, original = assetId, replacement = replacement, reason = "preload" }) end end end local ScrollingFrame = Instance.new("ScrollingFrame", CrosshairsPanel) ScrollingFrame.Position = UDim2.new(0, 10, 0, 0) ScrollingFrame.Size = UDim2.new(1, -20, 1, 0) ScrollingFrame.BackgroundTransparency = 1 ScrollingFrame.ScrollBarThickness = 10 ScrollingFrame.ClipsDescendants = true ScrollingFrame.AutomaticCanvasSize = Enum.AutomaticSize.Y local GridLayout = Instance.new("UIGridLayout", ScrollingFrame) GridLayout.CellSize = UDim2.new(0, 80, 0, 80) GridLayout.CellPadding = UDim2.new(0, 6, 0, 6) GridLayout.FillDirectionMaxCells = 3 GridLayout:GetPropertyChangedSignal("AbsoluteContentSize"):Connect(function() ScrollingFrame.CanvasSize = UDim2.new(0, 0, 0, GridLayout.AbsoluteContentSize.Y + 12) end) local CustomCursor = nil local CursorConnection = nil local function ResetCursor() if CursorConnection then CursorConnection:Disconnect() CursorConnection = nil end if CustomCursor then CustomCursor:Destroy() CustomCursor = nil end UserInputService.MouseIconEnabled = true end local function SetCustomCursor(crosshairId) ResetCursor() CustomCursor = Instance.new("ImageLabel", CrosshairGui) CustomCursor.Size = UDim2.new(0, 48, 0, 48) CustomCursor.BackgroundTransparency = 1 CustomCursor.Image = "rbxassetid://" .. tostring(crosshairId) CustomCursor.ZIndex = 9999 UserInputService.MouseIconEnabled = false CursorConnection = RunService.RenderStepped:Connect(function() local mousePosition if UserInputService.TouchEnabled then mousePosition = Vector2.new( workspace.CurrentCamera.ViewportSize.X / 2, workspace.CurrentCamera.ViewportSize.Y / 2 ) else mousePosition = UserInputService:GetMouseLocation() end CustomCursor.Position = UDim2.new(0, mousePosition.X - 24, 0, mousePosition.Y - 24) end) end for _, crosshairId in ipairs(ValidCrosshairs) do local container = Instance.new("Frame", ScrollingFrame) container.Size = UDim2.new(0, 80, 0, 80) container.BackgroundTransparency = 1 local crosshairButton = Instance.new("ImageButton", container) crosshairButton.Size = UDim2.new(1, 0, 1, 0) crosshairButton.Image = "rbxassetid://" .. tostring(crosshairId) crosshairButton.BackgroundColor3 = Color3.fromRGB(42, 42, 42) crosshairButton.AutoButtonColor = true crosshairButton.BorderSizePixel = 0 crosshairButton.MouseEnter:Connect(function() PreviewImage.Visible = true PreviewImage.Image = crosshairButton.Image end) crosshairButton.MouseLeave:Connect(function() PreviewImage.Visible = false end) crosshairButton.MouseButton1Click:Connect(function() SetCustomCursor(crosshairId) end) end ResetCursorButton.MouseButton1Click:Connect(function() ResetCursor() end) local ToggleMenuButton = Instance.new("TextButton", CrosshairGui) ToggleMenuButton.Size = UDim2.new(0, 40, 0, 40) ToggleMenuButton.Position = UDim2.new(1, -50, 0, 10) ToggleMenuButton.Text = "🎯" ToggleMenuButton.Font = Enum.Font.Gotham ToggleMenuButton.TextSize = 20 ToggleMenuButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60) ToggleMenuButton.TextColor3 = Color3.fromRGB(255, 255, 255) ToggleMenuButton.ZIndex = 999 ToggleMenuButton.AutoButtonColor = true local isToggleDragging = false local toggleDragInput = nil local toggleDragStart = nil local toggleStartPosition = nil ToggleMenuButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.Touch or input.UserInputType == Enum.UserInputType.MouseButton1 then isToggleDragging = true toggleDragStart = input.Position toggleStartPosition = ToggleMenuButton.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then isToggleDragging = false end end) end end) ToggleMenuButton.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then toggleDragInput = input end end) UserInputService.InputChanged:Connect(function(input) if isToggleDragging and input == toggleDragInput then local delta = input.Position - toggleDragStart ToggleMenuButton.Position = UDim2.new( toggleStartPosition.X.Scale, toggleStartPosition.X.Offset + delta.X, toggleStartPosition.Y.Scale, toggleStartPosition.Y.Offset + delta.Y ) end end) ToggleMenuButton.MouseButton1Click:Connect(function() MainFrame.Visible = not MainFrame.Visible end) local DefaultSettings = { size = 50, strokeColor = {r = 0, g = 133, b = 199}, activeColor = {r = 0, g = 170, b = 255}, thickness = 2, glow = 0.35 } local CurrentSettings = LoadSettings() or DefaultSettings local function CreateSlider(parent, xOffset, yOffset, width) local sliderFrame = Instance.new("Frame", parent) sliderFrame.Size = UDim2.new(0, width, 0, 12) sliderFrame.Position = UDim2.new(0, xOffset, 0, yOffset) sliderFrame.BackgroundColor3 = Color3.fromRGB(40, 40, 40) sliderFrame.BorderSizePixel = 0 Instance.new("UICorner", sliderFrame) local fillBar = Instance.new("Frame", sliderFrame) fillBar.Size = UDim2.new(0, 1, 1, 0) fillBar.BackgroundColor3 = Color3.fromRGB(0, 170, 255) fillBar.BorderSizePixel = 0 Instance.new("UICorner", fillBar) local knob = Instance.new("Frame", sliderFrame) knob.Size = UDim2.new(0, 14, 0, 14) knob.AnchorPoint = Vector2.new(0.5, 0.5) knob.Position = UDim2.new(0, 6, 0, 6) knob.BackgroundColor3 = Color3.fromRGB(220, 220, 220) Instance.new("UICorner", knob) local isDragging = false local function UpdateSlider(positionX) local frameX = sliderFrame.AbsolutePosition.X local frameWidth = sliderFrame.AbsoluteSize.X local percent = math.clamp((positionX - frameX) / frameWidth, 0, 1) fillBar.Size = UDim2.new(percent, 0, 1, 0) knob.Position = UDim2.new(0, math.clamp(percent * frameWidth, 7, frameWidth - 7), 0, 6) return percent end knob.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then isDragging = true end end) knob.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then isDragging = false end end) sliderFrame.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then UpdateSlider(input.Position.X) isDragging = true end end) UserInputService.InputChanged:Connect(function(input) if isDragging and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then UpdateSlider(input.Position.X) end end) return { set = function(value) local percent = math.clamp(value, 0, 1) local frameWidth = sliderFrame.AbsoluteSize.X fillBar.Size = UDim2.new(percent, 0, 1, 0) knob.Position = UDim2.new(0, math.clamp(percent * frameWidth, 7, frameWidth - 7), 0, 6) end, get = function() return fillBar.Size.X.Scale end, raw = sliderFrame } end local SettingsTitle = Instance.new("TextLabel", ShiftLockPanel) SettingsTitle.Size = UDim2.new(1, 0, 0, 20) SettingsTitle.Position = UDim2.new(0, 0, 0, 0) SettingsTitle.BackgroundTransparency = 1 SettingsTitle.Font = Enum.Font.GothamBold SettingsTitle.TextSize = 14 SettingsTitle.Text = "ShiftLock Settings" SettingsTitle.TextColor3 = Color3.fromRGB(240, 240, 240) SettingsTitle.TextXAlignment = Enum.TextXAlignment.Left local SettingsDescription = Instance.new("TextLabel", ShiftLockPanel) SettingsDescription.Size = UDim2.new(1, 0, 0, 28) SettingsDescription.Position = UDim2.new(0, 0, 0, 28) SettingsDescription.BackgroundTransparency = 1 SettingsDescription.Font = Enum.Font.Gotham SettingsDescription.TextSize = 12 SettingsDescription.TextColor3 = Color3.fromRGB(200, 200, 200) SettingsDescription.Text = "Live preview updates the floating ShiftLock button." local SizeLabel = Instance.new("TextLabel", ShiftLockPanel) SizeLabel.Size = UDim2.new(0, 110, 0, 18) SizeLabel.Position = UDim2.new(0, 0, 0, 60) SizeLabel.BackgroundTransparency = 1 SizeLabel.Font = Enum.Font.Gotham SizeLabel.TextSize = 12 SizeLabel.TextColor3 = Color3.fromRGB(220, 220, 220) SizeLabel.Text = "Size (px)" local SizeSlider = CreateSlider(ShiftLockPanel, 110, 64, 140) local SizeValueLabel = Instance.new("TextLabel", ShiftLockPanel) SizeValueLabel.Size = UDim2.new(0, 40, 0, 18) SizeValueLabel.Position = UDim2.new(0, 255, 0, 60) SizeValueLabel.BackgroundTransparency = 1 SizeValueLabel.Font = Enum.Font.Gotham SizeValueLabel.TextSize = 12 SizeValueLabel.TextColor3 = Color3.fromRGB(220, 220, 220) local BorderColorLabel = Instance.new("TextLabel", ShiftLockPanel) BorderColorLabel.Size = UDim2.new(0, 140, 0, 18) BorderColorLabel.Position = UDim2.new(0, 0, 0, 96) BorderColorLabel.BackgroundTransparency = 1 BorderColorLabel.Font = Enum.Font.Gotham BorderColorLabel.TextSize = 12 BorderColorLabel.TextColor3 = Color3.fromRGB(220, 220, 220) BorderColorLabel.Text = "Border Color" local ColorOptions = { {name = "Blue", color = Color3.fromRGB(0, 133, 199)}, {name = "Red", color = Color3.fromRGB(220, 60, 60)}, {name = "Green", color = Color3.fromRGB(60, 200, 120)}, {name = "White", color = Color3.fromRGB(255, 255, 255)}, {name = "Purple", color = Color3.fromRGB(160, 80, 255)}, {name = "Yellow", color = Color3.fromRGB(255, 200, 60)} } local ColorButtons = {} local function RGBTableToColor3(rgbTable) return Color3.fromRGB( math.clamp(rgbTable.r or 0, 0, 255), math.clamp(rgbTable.g or 0, 0, 255), math.clamp(rgbTable.b or 0, 0, 255) ) end for index, colorData in ipairs(ColorOptions) do local colorButton = Instance.new("TextButton", ShiftLockPanel) colorButton.Size = UDim2.new(0, 36, 0, 28) colorButton.Position = UDim2.new(0, (index - 1) * 40, 0, 118) colorButton.BackgroundColor3 = colorData.color colorButton.BorderSizePixel = 0 colorButton.Text = "" colorButton.AutoButtonColor = true Instance.new("UICorner", colorButton).CornerRadius = UDim.new(0, 6) colorButton.MouseButton1Click:Connect(function() ButtonStroke.Color = colorData.color CurrentSettings.strokeColor = { r = colorData.color.R * 255, g = colorData.color.G * 255, b = colorData.color.B * 255 } SaveSettings(CurrentSettings) end) ColorButtons[index] = colorButton end local GlowLabel = Instance.new("TextLabel", ShiftLockPanel) GlowLabel.Size = UDim2.new(0, 120, 0, 18) GlowLabel.Position = UDim2.new(0, 0, 0, 158) GlowLabel.BackgroundTransparency = 1 GlowLabel.Font = Enum.Font.Gotham GlowLabel.TextSize = 12 GlowLabel.TextColor3 = Color3.fromRGB(220, 220, 220) GlowLabel.Text = "Glow Intensity" local GlowSlider = CreateSlider(ShiftLockPanel, 110, 162, 140) local GlowValueLabel = Instance.new("TextLabel", ShiftLockPanel) GlowValueLabel.Size = UDim2.new(0, 40, 0, 18) GlowValueLabel.Position = UDim2.new(0, 255, 0, 158) GlowValueLabel.BackgroundTransparency = 1 GlowValueLabel.Font = Enum.Font.Gotham GlowValueLabel.TextSize = 12 GlowValueLabel.TextColor3 = Color3.fromRGB(220, 220, 220) local ThicknessLabel = Instance.new("TextLabel", ShiftLockPanel) ThicknessLabel.Size = UDim2.new(0, 110, 0, 18) ThicknessLabel.Position = UDim2.new(0, 0, 0, 188) ThicknessLabel.BackgroundTransparency = 1 ThicknessLabel.Font = Enum.Font.Gotham ThicknessLabel.TextSize = 12 ThicknessLabel.TextColor3 = Color3.fromRGB(220, 220, 220) ThicknessLabel.Text = "Stroke Thickness" local ThicknessMinusButton = Instance.new("TextButton", ShiftLockPanel) ThicknessMinusButton.Size = UDim2.new(0, 26, 0, 22) ThicknessMinusButton.Position = UDim2.new(0, 120, 0, 186) ThicknessMinusButton.Text = "-" ThicknessMinusButton.Font = Enum.Font.GothamBold ThicknessMinusButton.TextSize = 18 ThicknessMinusButton.BackgroundColor3 = Color3.fromRGB(50, 50, 50) ThicknessMinusButton.TextColor3 = Color3.fromRGB(255, 255, 255) ThicknessMinusButton.AutoButtonColor = true local ThicknessPlusButton = ThicknessMinusButton:Clone() ThicknessPlusButton.Parent = ShiftLockPanel ThicknessPlusButton.Position = UDim2.new(0, 152, 0, 186) ThicknessPlusButton.Text = "+" ThicknessPlusButton.Name = "plus" local ThicknessValueLabel = Instance.new("TextLabel", ShiftLockPanel) ThicknessValueLabel.Size = UDim2.new(0, 36, 0, 18) ThicknessValueLabel.Position = UDim2.new(0, 184, 0, 188) ThicknessValueLabel.BackgroundTransparency = 1 ThicknessValueLabel.Font = Enum.Font.Gotham ThicknessValueLabel.TextSize = 12 ThicknessValueLabel.TextColor3 = Color3.fromRGB(220, 220, 220) local ResetSettingsButton = Instance.new("TextButton", ShiftLockPanel) ResetSettingsButton.Size = UDim2.new(0, 80, 0, 26) ResetSettingsButton.Position = UDim2.new(1, -90, 1, -36) ResetSettingsButton.Text = "Reset" ResetSettingsButton.Font = Enum.Font.GothamBold ResetSettingsButton.TextSize = 14 ResetSettingsButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60) ResetSettingsButton.TextColor3 = Color3.fromRGB(255, 255, 255) ResetSettingsButton.AutoButtonColor = true Instance.new("UICorner", ResetSettingsButton) local function SwitchTab(tabName) if tabName == "cross" then CrosshairsPanel.Visible = true ShiftLockPanel.Visible = false CrosshairsTabButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60) ShiftLockTabButton.BackgroundColor3 = Color3.fromRGB(40, 40, 40) else CrosshairsPanel.Visible = false ShiftLockPanel.Visible = true CrosshairsTabButton.BackgroundColor3 = Color3.fromRGB(40, 40, 40) ShiftLockTabButton.BackgroundColor3 = Color3.fromRGB(60, 60, 60) end end CrosshairsTabButton.MouseButton1Click:Connect(function() SwitchTab("cross") end) ShiftLockTabButton.MouseButton1Click:Connect(function() SwitchTab("shift") end) SwitchTab("cross") local glowConnection = nil local function ApplySettings() local size = math.clamp(tonumber(CurrentSettings.size) or DefaultSettings.size, 40, 100) LockButton.Size = UDim2.new(0, size, 0, size) local strokeColor = CurrentSettings.strokeColor or DefaultSettings.strokeColor ButtonStroke.Color = Color3.fromRGB( math.clamp(strokeColor.r, 0, 255), math.clamp(strokeColor.g, 0, 255), math.clamp(strokeColor.b, 0, 255) ) ButtonStroke.Thickness = tonumber(CurrentSettings.thickness) or DefaultSettings.thickness if isShiftLockEnabled then local activeColor = CurrentSettings.activeColor or DefaultSettings.activeColor ButtonIcon.ImageColor3 = Color3.fromRGB( math.clamp(activeColor.r, 0, 255), math.clamp(activeColor.g, 0, 255), math.clamp(activeColor.b, 0, 255) ) end if glowConnection then glowConnection:Disconnect() glowConnection = nil end local glowIntensity = math.clamp(tonumber(CurrentSettings.glow) or DefaultSettings.glow, 0, 1) if isShiftLockEnabled and glowIntensity > 0 then local baseTransparency = 0.3 local glowRange = glowIntensity * 0.45 glowConnection = RunService.Heartbeat:Connect(function() local currentTime = tick() local transparency = baseTransparency + math.sin(currentTime * 2.5) * glowRange ButtonStroke.Transparency = math.clamp(transparency, 0, 1) end) else ButtonStroke.Transparency = 0.3 end end SizeSlider.set(CurrentSettings.size and (CurrentSettings.size - 40) / 60 or (DefaultSettings.size - 40) / 60) SizeValueLabel.Text = tostring(CurrentSettings.size or DefaultSettings.size) GlowSlider.set(CurrentSettings.glow or DefaultSettings.glow) GlowValueLabel.Text = tostring(math.floor((CurrentSettings.glow or DefaultSettings.glow) * 100)) ThicknessValueLabel.Text = tostring(CurrentSettings.thickness or DefaultSettings.thickness) for index, colorData in ipairs(ColorOptions) do ColorButtons[index].MouseButton1Click:Connect(function() CurrentSettings.strokeColor = { r = colorData.color.R * 255, g = colorData.color.G * 255, b = colorData.color.B * 255 } SaveSettings(CurrentSettings) ApplySettings() end) end local lastUpdateTime = 0 RunService.RenderStepped:Connect(function() local currentTime = tick() if currentTime - lastUpdateTime >= 0.05 then lastUpdateTime = currentTime local sizePercent = SizeSlider.get() local sizeValue = math.floor(40 + sizePercent * 60 + 0.5) CurrentSettings.size = sizeValue SizeValueLabel.Text = tostring(sizeValue) CurrentSettings.glow = GlowSlider.get() GlowValueLabel.Text = tostring(math.floor(CurrentSettings.glow * 100)) CurrentSettings.thickness = tonumber(ThicknessValueLabel.Text) or DefaultSettings.thickness SaveSettings(CurrentSettings) ApplySettings() end end) ThicknessMinusButton.MouseButton1Click:Connect(function() local currentThickness = tonumber(ThicknessValueLabel.Text) or DefaultSettings.thickness local newThickness = math.max(0, currentThickness - 1) ThicknessValueLabel.Text = tostring(newThickness) end) ThicknessPlusButton.MouseButton1Click:Connect(function() local currentThickness = tonumber(ThicknessValueLabel.Text) or DefaultSettings.thickness local newThickness = math.min(10, currentThickness + 1) ThicknessValueLabel.Text = tostring(newThickness) end) ResetSettingsButton.MouseButton1Click:Connect(function() CurrentSettings = table.clone(DefaultSettings) SizeSlider.set((DefaultSettings.size - 40) / 60) SizeValueLabel.Text = tostring(DefaultSettings.size) GlowSlider.set(DefaultSettings.glow) GlowValueLabel.Text = tostring(math.floor(DefaultSettings.glow * 100)) ThicknessValueLabel.Text = tostring(DefaultSettings.thickness) ButtonStroke.Color = RGBTableToColor3(DefaultSettings.strokeColor) SaveSettings(CurrentSettings) ApplySettings() end) CurrentSettings.strokeColor = CurrentSettings.strokeColor or DefaultSettings.strokeColor CurrentSettings.activeColor = CurrentSettings.activeColor or DefaultSettings.activeColor CurrentSettings.size = CurrentSettings.size or DefaultSettings.size CurrentSettings.thickness = CurrentSettings.thickness or DefaultSettings.thickness CurrentSettings.glow = CurrentSettings.glow or DefaultSettings.glow ApplySettings() if isShiftLockEnabled then ApplySettings() end print("Crosshair + ShiftLock Settings loaded. Replacements:", #ReplacementLog)