Run it
Copy the script and paste it into your executor.
Players = :()
ContentProvider = :()
RunService = :()
UserInputService = :()
TweenService = :()
HttpService = :()
LocalPlayer = Players.LocalPlayer
PlayerGui = LocalPlayer:()
SETTINGS_KEY =
(settingsData)
(()
LocalPlayer:(SETTINGS_KEY, HttpService:(settingsData))
)
()
savedData = LocalPlayer:(SETTINGS_KEY)
(savedData) ==
success, decoded = (HttpService.JSONDecode, HttpService, savedData)
success (decoded) ==
decoded
ShiftLockGui = .()
ShiftLockGui.Name =
ShiftLockGui.ResetOnSpawn =
ShiftLockGui.ZIndexBehavior = .ZIndexBehavior.Sibling
ShiftLockGui.Parent = PlayerGui
LockButton = .()
LockButton.Name =
LockButton.Parent = ShiftLockGui
LockButton.AnchorPoint = .(, )
LockButton.Position = .(, , , )
LockButton.Size = .(, , , )
LockButton.BackgroundColor3 = .(, , )
LockButton.BackgroundTransparency =
LockButton.BorderSizePixel =
LockButton.AutoButtonColor =
LockButton.Image =
ButtonIcon = .()
ButtonIcon.Name =
ButtonIcon.Parent = LockButton
ButtonIcon.BackgroundTransparency =
ButtonIcon.Position = .(, , , )
ButtonIcon.Size = .(, , , )
ButtonIcon.Image =
ButtonIcon.ScaleType = .ScaleType.Fit
ButtonIcon.ImageColor3 = .(, , )
.(, LockButton).CornerRadius = .(, )
ButtonStroke = .(, LockButton)
ButtonStroke.Color = .(, , )
ButtonStroke.Thickness =
ButtonStroke.Transparency =
(guiObject)
isDragging =
dragInput =
dragStart =
startPosition =
guiObject.InputBegan:((input)
input.UserInputType == .UserInputType.Touch input.UserInputType == .UserInputType.MouseButton1
isDragging =
dragStart = input.Position
startPosition = guiObject.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
isDragging =
)
)
guiObject.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
dragInput = input
)
UserInputService.InputChanged:((input)
isDragging input == dragInput
delta = input.Position - dragStart
parentSize = guiObject.Parent.AbsoluteSize
newX = startPosition.X.Scale + delta.X / parentSize.X
newY = startPosition.Y.Scale + delta.Y / parentSize.Y
guiObject.Position = .(newX, , newY, )
)
guiObject.Active =
(LockButton)
isShiftLockEnabled =
userGameSettings =
rotationConnection =
(enabled)
isShiftLockEnabled = enabled
enabled
ButtonIcon.ImageColor3 = .(, , )
ButtonStroke.Thickness = .(, ButtonStroke.Thickness)
rotationConnection
success, settings = (()
():()
)
userGameSettings = success settings
userGameSettings rotationConnection
rotationConnection = RunService.RenderStepped:(()
(()
userGameSettings.RotationType = .RotationType.CameraRelative
)
)
ButtonIcon.ImageColor3 = .(, , )
ButtonStroke.Color = ButtonStroke.Color
ButtonStroke.Thickness = ButtonStroke.Thickness
rotationConnection
rotationConnection:()
rotationConnection =
userGameSettings
(()
userGameSettings.RotationType = .RotationType.MovementRelative
)
LockButton.MouseButton1Click:(()
( isShiftLockEnabled)
)
CROSSHAIR_GUI_NAME =
PlayerGui:(CROSSHAIR_GUI_NAME)
PlayerGui[CROSSHAIR_GUI_NAME]:()
CrosshairGui = .(, PlayerGui)
CrosshairGui.Name = CROSSHAIR_GUI_NAME
CrosshairGui.ResetOnSpawn =
CrosshairGui.IgnoreGuiInset =
MainFrame = .(, CrosshairGui)
MainFrame.Size = .(, , , )
MainFrame.Position = .(, -, , -)
MainFrame.BackgroundColor3 = .(, , )
MainFrame.BorderSizePixel =
MainFrame.Active =
MainFrame.Draggable =
TitleLabel = .(, MainFrame)
TitleLabel.Size = .(, -, , )
TitleLabel.Position = .(, , , )
TitleLabel.BackgroundTransparency =
TitleLabel.Font = .Font.GothamBold
TitleLabel.Text =
TitleLabel.TextColor3 = .(, , )
TitleLabel.TextSize =
TitleLabel.TextXAlignment = .TextXAlignment.Left
TabContainer = .(, MainFrame)
TabContainer.Size = .(, -, , )
TabContainer.Position = .(, , , )
TabContainer.BackgroundTransparency =
(parent, text, xOffset)
button = .(, parent)
button.Size = .(, , , )
button.Position = .(, xOffset, , )
button.BackgroundColor3 = .(, , )
button.BorderSizePixel =
button.Font = .Font.GothamBold
button.Text = text
button.TextSize =
button.TextColor3 = .(, , )
button.AutoButtonColor =
.(, button).CornerRadius = .(, )
button
CrosshairsTabButton = (TabContainer, , )
ShiftLockTabButton = (TabContainer, , )
CrosshairsPanel = .(, MainFrame)
CrosshairsPanel.Size = .(, -, , )
CrosshairsPanel.Position = .(, , , )
CrosshairsPanel.BackgroundTransparency =
ShiftLockPanel = .(, MainFrame)
ShiftLockPanel.Size = CrosshairsPanel.Size
ShiftLockPanel.Position = CrosshairsPanel.Position
ShiftLockPanel.BackgroundTransparency =
ShiftLockPanel.Visible =
PreviewImage = .(, MainFrame)
PreviewImage.Size = .(, , , )
PreviewImage.Position = .(, -, , )
PreviewImage.BackgroundTransparency =
PreviewImage.Visible =
PreviewImage.ZIndex =
ResetCursorButton = .(, MainFrame)
ResetCursorButton.Size = .(, , , )
ResetCursorButton.Position = .(, , , -)
ResetCursorButton.Text =
ResetCursorButton.Font = .Font.Gotham
ResetCursorButton.TextSize =
ResetCursorButton.BackgroundColor3 = .(, , )
ResetCursorButton.TextColor3 = .(, , )
ResetCursorButton.AutoButtonColor =
BlockedPrefixes = {, , , , }
ReplacementCrosshairs = {
, , , , ,
, , , , ,
, , , , ,
, , , , ,
, , , , ,
, , , , ,
, , , , ,
}
(value, prefix)
(value):(, #prefix) == prefix
(assetId)
(()
ContentProvider:({ .. (assetId)})
)
replacementIndex =
()
_ = , #ReplacementCrosshairs
crosshairId = ReplacementCrosshairs[replacementIndex]
replacementIndex = replacementIndex % #ReplacementCrosshairs +
(crosshairId)
crosshairId
CrosshairAssetIds = {
, , , , ,
, , , , ,
, , , , ,
, , , , ,
, , , , ,
, , , , ,
, , , , ,
}
ValidCrosshairs = {}
ReplacementLog = {}
index, assetId (CrosshairAssetIds)
wasReplaced =
_, prefix (BlockedPrefixes)
(assetId, prefix)
replacement = ()
.(ValidCrosshairs, replacement)
.(ReplacementLog, {
index = index,
original = assetId,
replacement = replacement,
reason =
})
wasReplaced =
wasReplaced
(assetId)
.(ValidCrosshairs, assetId)
replacement = ()
.(ValidCrosshairs, replacement)
.(ReplacementLog, {
index = index,
original = assetId,
replacement = replacement,
reason =
})
ScrollingFrame = .(, CrosshairsPanel)
ScrollingFrame.Position = .(, , , )
ScrollingFrame.Size = .(, -, , )
ScrollingFrame.BackgroundTransparency =
ScrollingFrame.ScrollBarThickness =
ScrollingFrame.ClipsDescendants =
ScrollingFrame.AutomaticCanvasSize = .AutomaticSize.Y
GridLayout = .(, ScrollingFrame)
GridLayout.CellSize = .(, , , )
GridLayout.CellPadding = .(, , , )
GridLayout.FillDirectionMaxCells =
GridLayout:():(()
ScrollingFrame.CanvasSize = .(, , , GridLayout.AbsoluteContentSize.Y + )
)
CustomCursor =
CursorConnection =
()
CursorConnection
CursorConnection:()
CursorConnection =
CustomCursor
CustomCursor:()
CustomCursor =
UserInputService.MouseIconEnabled =
(crosshairId)
()
CustomCursor = .(, CrosshairGui)
CustomCursor.Size = .(, , , )
CustomCursor.BackgroundTransparency =
CustomCursor.Image = .. (crosshairId)
CustomCursor.ZIndex =
UserInputService.MouseIconEnabled =
CursorConnection = RunService.RenderStepped:(()
mousePosition
UserInputService.TouchEnabled
mousePosition = .(
.CurrentCamera.ViewportSize.X / ,
.CurrentCamera.ViewportSize.Y /
)
mousePosition = UserInputService:()
CustomCursor.Position = .(, mousePosition.X - , , mousePosition.Y - )
)
_, crosshairId (ValidCrosshairs)
container = .(, ScrollingFrame)
container.Size = .(, , , )
container.BackgroundTransparency =
crosshairButton = .(, container)
crosshairButton.Size = .(, , , )
crosshairButton.Image = .. (crosshairId)
crosshairButton.BackgroundColor3 = .(, , )
crosshairButton.AutoButtonColor =
crosshairButton.BorderSizePixel =
crosshairButton.MouseEnter:(()
PreviewImage.Visible =
PreviewImage.Image = crosshairButton.Image
)
crosshairButton.MouseLeave:(()
PreviewImage.Visible =
)
crosshairButton.MouseButton1Click:(()
(crosshairId)
)
ResetCursorButton.MouseButton1Click:(()
()
)
ToggleMenuButton = .(, CrosshairGui)
ToggleMenuButton.Size = .(, , , )
ToggleMenuButton.Position = .(, -, , )
ToggleMenuButton.Text =
ToggleMenuButton.Font = .Font.Gotham
ToggleMenuButton.TextSize =
ToggleMenuButton.BackgroundColor3 = .(, , )
ToggleMenuButton.TextColor3 = .(, , )
ToggleMenuButton.ZIndex =
ToggleMenuButton.AutoButtonColor =
isToggleDragging =
toggleDragInput =
toggleDragStart =
toggleStartPosition =
ToggleMenuButton.InputBegan:((input)
input.UserInputType == .UserInputType.Touch input.UserInputType == .UserInputType.MouseButton1
isToggleDragging =
toggleDragStart = input.Position
toggleStartPosition = ToggleMenuButton.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
isToggleDragging =
)
)
ToggleMenuButton.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
toggleDragInput = input
)
UserInputService.InputChanged:((input)
isToggleDragging input == toggleDragInput
delta = input.Position - toggleDragStart
ToggleMenuButton.Position = .(
toggleStartPosition.X.Scale,
toggleStartPosition.X.Offset + delta.X,
toggleStartPosition.Y.Scale,
toggleStartPosition.Y.Offset + delta.Y
)
)
ToggleMenuButton.MouseButton1Click:(()
MainFrame.Visible = MainFrame.Visible
)
DefaultSettings = {
size = ,
strokeColor = {r = , g = , b = },
activeColor = {r = , g = , b = },
thickness = ,
glow =
}
CurrentSettings = () DefaultSettings
(parent, xOffset, yOffset, width)
sliderFrame = .(, parent)
sliderFrame.Size = .(, width, , )
sliderFrame.Position = .(, xOffset, , yOffset)
sliderFrame.BackgroundColor3 = .(, , )
sliderFrame.BorderSizePixel =
.(, sliderFrame)
fillBar = .(, sliderFrame)
fillBar.Size = .(, , , )
fillBar.BackgroundColor3 = .(, , )
fillBar.BorderSizePixel =
.(, fillBar)
knob = .(, sliderFrame)
knob.Size = .(, , , )
knob.AnchorPoint = .(, )
knob.Position = .(, , , )
knob.BackgroundColor3 = .(, , )
.(, knob)
isDragging =
(positionX)
frameX = sliderFrame.AbsolutePosition.X
frameWidth = sliderFrame.AbsoluteSize.X
percent = .((positionX - frameX) / frameWidth, , )
fillBar.Size = .(percent, , , )
knob.Position = .(, .(percent * frameWidth, , frameWidth - ), , )
percent
knob.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
isDragging =
)
knob.InputEnded:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
isDragging =
)
sliderFrame.InputBegan:((input)
input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch
(input.Position.X)
isDragging =
)
UserInputService.InputChanged:((input)
isDragging (input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch)
(input.Position.X)
)
{
set = (value)
percent = .(value, , )
frameWidth = sliderFrame.AbsoluteSize.X
fillBar.Size = .(percent, , , )
knob.Position = .(, .(percent * frameWidth, , frameWidth - ), , )
,
get = ()
fillBar.Size.X.Scale
,
raw = sliderFrame
}
SettingsTitle = .(, ShiftLockPanel)
SettingsTitle.Size = .(, , , )
SettingsTitle.Position = .(, , , )
SettingsTitle.BackgroundTransparency =
SettingsTitle.Font = .Font.GothamBold
SettingsTitle.TextSize =
SettingsTitle.Text =
SettingsTitle.TextColor3 = .(, , )
SettingsTitle.TextXAlignment = .TextXAlignment.Left
SettingsDescription = .(, ShiftLockPanel)
SettingsDescription.Size = .(, , , )
SettingsDescription.Position = .(, , , )
SettingsDescription.BackgroundTransparency =
SettingsDescription.Font = .Font.Gotham
SettingsDescription.TextSize =
SettingsDescription.TextColor3 = .(, , )
SettingsDescription.Text =
SizeLabel = .(, ShiftLockPanel)
SizeLabel.Size = .(, , , )
SizeLabel.Position = .(, , , )
SizeLabel.BackgroundTransparency =
SizeLabel.Font = .Font.Gotham
SizeLabel.TextSize =
SizeLabel.TextColor3 = .(, , )
SizeLabel.Text =
SizeSlider = (ShiftLockPanel, , , )
SizeValueLabel = .(, ShiftLockPanel)
SizeValueLabel.Size = .(, , , )
SizeValueLabel.Position = .(, , , )
SizeValueLabel.BackgroundTransparency =
SizeValueLabel.Font = .Font.Gotham
SizeValueLabel.TextSize =
SizeValueLabel.TextColor3 = .(, , )
BorderColorLabel = .(, ShiftLockPanel)
BorderColorLabel.Size = .(, , , )
BorderColorLabel.Position = .(, , , )
BorderColorLabel.BackgroundTransparency =
BorderColorLabel.Font = .Font.Gotham
BorderColorLabel.TextSize =
BorderColorLabel.TextColor3 = .(, , )
BorderColorLabel.Text =
ColorOptions = {
{name = , color = .(, , )},
{name = , color = .(, , )},
{name = , color = .(, , )},
{name = , color = .(, , )},
{name = , color = .(, , )},
{name = , color = .(, , )}
}
ColorButtons = {}
(rgbTable)
.(
.(rgbTable.r , , ),
.(rgbTable.g , , ),
.(rgbTable.b , , )
)
index, colorData (ColorOptions)
colorButton = .(, ShiftLockPanel)
colorButton.Size = .(, , , )
colorButton.Position = .(, (index - ) * , , )
colorButton.BackgroundColor3 = colorData.color
colorButton.BorderSizePixel =
colorButton.Text =
colorButton.AutoButtonColor =
.(, colorButton).CornerRadius = .(, )
colorButton.MouseButton1Click:(()
ButtonStroke.Color = colorData.color
CurrentSettings.strokeColor = {
r = colorData.color.R * ,
g = colorData.color.G * ,
b = colorData.color.B *
}
(CurrentSettings)
)
ColorButtons[index] = colorButton
GlowLabel = .(, ShiftLockPanel)
GlowLabel.Size = .(, , , )
GlowLabel.Position = .(, , , )
GlowLabel.BackgroundTransparency =
GlowLabel.Font = .Font.Gotham
GlowLabel.TextSize =
GlowLabel.TextColor3 = .(, , )
GlowLabel.Text =
GlowSlider = (ShiftLockPanel, , , )
GlowValueLabel = .(, ShiftLockPanel)
GlowValueLabel.Size = .(, , , )
GlowValueLabel.Position = .(, , , )
GlowValueLabel.BackgroundTransparency =
GlowValueLabel.Font = .Font.Gotham
GlowValueLabel.TextSize =
GlowValueLabel.TextColor3 = .(, , )
ThicknessLabel = .(, ShiftLockPanel)
ThicknessLabel.Size = .(, , , )
ThicknessLabel.Position = .(, , , )
ThicknessLabel.BackgroundTransparency =
ThicknessLabel.Font = .Font.Gotham
ThicknessLabel.TextSize =
ThicknessLabel.TextColor3 = .(, , )
ThicknessLabel.Text =
ThicknessMinusButton = .(, ShiftLockPanel)
ThicknessMinusButton.Size = .(, , , )
ThicknessMinusButton.Position = .(, , , )
ThicknessMinusButton.Text =
ThicknessMinusButton.Font = .Font.GothamBold
ThicknessMinusButton.TextSize =
ThicknessMinusButton.BackgroundColor3 = .(, , )
ThicknessMinusButton.TextColor3 = .(, , )
ThicknessMinusButton.AutoButtonColor =
ThicknessPlusButton = ThicknessMinusButton:()
ThicknessPlusButton.Parent = ShiftLockPanel
ThicknessPlusButton.Position = .(, , , )
ThicknessPlusButton.Text =
ThicknessPlusButton.Name =
ThicknessValueLabel = .(, ShiftLockPanel)
ThicknessValueLabel.Size = .(, , , )
ThicknessValueLabel.Position = .(, , , )
ThicknessValueLabel.BackgroundTransparency =
ThicknessValueLabel.Font = .Font.Gotham
ThicknessValueLabel.TextSize =
ThicknessValueLabel.TextColor3 = .(, , )
ResetSettingsButton = .(, ShiftLockPanel)
ResetSettingsButton.Size = .(, , , )
ResetSettingsButton.Position = .(, -, , -)
ResetSettingsButton.Text =
ResetSettingsButton.Font = .Font.GothamBold
ResetSettingsButton.TextSize =
ResetSettingsButton.BackgroundColor3 = .(, , )
ResetSettingsButton.TextColor3 = .(, , )
ResetSettingsButton.AutoButtonColor =
.(, ResetSettingsButton)
(tabName)
tabName ==
CrosshairsPanel.Visible =
ShiftLockPanel.Visible =
CrosshairsTabButton.BackgroundColor3 = .(, , )
ShiftLockTabButton.BackgroundColor3 = .(, , )
CrosshairsPanel.Visible =
ShiftLockPanel.Visible =
CrosshairsTabButton.BackgroundColor3 = .(, , )
ShiftLockTabButton.BackgroundColor3 = .(, , )
CrosshairsTabButton.MouseButton1Click:(()
()
)
ShiftLockTabButton.MouseButton1Click:(()
()
)
()
glowConnection =
()
size = .((CurrentSettings.size) DefaultSettings.size, , )
LockButton.Size = .(, size, , size)
strokeColor = CurrentSettings.strokeColor DefaultSettings.strokeColor
ButtonStroke.Color = .(
.(strokeColor.r, , ),
.(strokeColor.g, , ),
.(strokeColor.b, , )
)
ButtonStroke.Thickness = (CurrentSettings.thickness) DefaultSettings.thickness
isShiftLockEnabled
activeColor = CurrentSettings.activeColor DefaultSettings.activeColor
ButtonIcon.ImageColor3 = .(
.(activeColor.r, , ),
.(activeColor.g, , ),
.(activeColor.b, , )
)
glowConnection
glowConnection:()
glowConnection =
glowIntensity = .((CurrentSettings.glow) DefaultSettings.glow, , )
isShiftLockEnabled glowIntensity >
baseTransparency =
glowRange = glowIntensity *
glowConnection = RunService.Heartbeat:(()
currentTime = ()
transparency = baseTransparency + .(currentTime * ) * glowRange
ButtonStroke.Transparency = .(transparency, , )
)
ButtonStroke.Transparency =
SizeSlider.(CurrentSettings.size (CurrentSettings.size - ) / (DefaultSettings.size - ) / )
SizeValueLabel.Text = (CurrentSettings.size DefaultSettings.size)
GlowSlider.(CurrentSettings.glow DefaultSettings.glow)
GlowValueLabel.Text = (.((CurrentSettings.glow DefaultSettings.glow) * ))
ThicknessValueLabel.Text = (CurrentSettings.thickness DefaultSettings.thickness)
index, colorData (ColorOptions)
ColorButtons[index].MouseButton1Click:(()
CurrentSettings.strokeColor = {
r = colorData.color.R * ,
g = colorData.color.G * ,
b = colorData.color.B *
}
(CurrentSettings)
()
)
lastUpdateTime =
RunService.RenderStepped:(()
currentTime = ()
currentTime - lastUpdateTime >=
lastUpdateTime = currentTime
sizePercent = SizeSlider.()
sizeValue = .( + sizePercent * + )
CurrentSettings.size = sizeValue
SizeValueLabel.Text = (sizeValue)
CurrentSettings.glow = GlowSlider.()
GlowValueLabel.Text = (.(CurrentSettings.glow * ))
CurrentSettings.thickness = (ThicknessValueLabel.Text) DefaultSettings.thickness
(CurrentSettings)
()
)
ThicknessMinusButton.MouseButton1Click:(()
currentThickness = (ThicknessValueLabel.Text) DefaultSettings.thickness
newThickness = .(, currentThickness - )
ThicknessValueLabel.Text = (newThickness)
)
ThicknessPlusButton.MouseButton1Click:(()
currentThickness = (ThicknessValueLabel.Text) DefaultSettings.thickness
newThickness = .(, currentThickness + )
ThicknessValueLabel.Text = (newThickness)
)
ResetSettingsButton.MouseButton1Click:(()
CurrentSettings = .(DefaultSettings)
SizeSlider.((DefaultSettings.size - ) / )
SizeValueLabel.Text = (DefaultSettings.size)
GlowSlider.(DefaultSettings.glow)
GlowValueLabel.Text = (.(DefaultSettings.glow * ))
ThicknessValueLabel.Text = (DefaultSettings.thickness)
ButtonStroke.Color = (DefaultSettings.strokeColor)
(CurrentSettings)
()
)
CurrentSettings.strokeColor = CurrentSettings.strokeColor DefaultSettings.strokeColor
CurrentSettings.activeColor = CurrentSettings.activeColor DefaultSettings.activeColor
CurrentSettings.size = CurrentSettings.size DefaultSettings.size
CurrentSettings.thickness = CurrentSettings.thickness DefaultSettings.thickness
CurrentSettings.glow = CurrentSettings.glow DefaultSettings.glow
()
isShiftLockEnabled
()
(, #ReplacementLog)Universal Crosshair + ShiftLock Custom crosshair selector with enhanced shiftlock button for improved FPS gameplay. MAIN FEATURES: • 35+ Crosshair Designs: Various styles and colors • Custom ShiftLock Button: Draggable toggle with visual effects • Visual Customization: Size, colors, glow, thickness settings • Settings Saving: Automatically saves preferences • Mobile & PC Support: Works on all devices • Floating Menu: Easy-access toggle button PERFECT FOR GAMES: Gunfight arena • Arsenal • Phantom Forces • Unnamed Shooter • Counter Blox • Any first-person shooter or combat game.

Universal