
KeylessUniversal

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local CoreGui = game:GetService("CoreGui")
local GuiService = game:GetService("GuiService")
local Workspace = game:GetService("Workspace")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui", 5)
-- Clean up any existing custom cursors to avoid duplicates
if CoreGui:FindFirstChild("Cursor") then
CoreGui.Cursor:Destroy()
end
-- State tracking
local isEscMenuOpen = false
local originalCursorImage = nil
local outOfRangeTexture = "rbxassetid://113797540507637"
-- Load and clone the authentic custom GUI cursor asset
local success, assets = pcall(function()
return game:GetObjects("rbxassetid://17895536995")
end)
if success and assets and assets[1] then
local eazywin = assets[1]:Clone()
-- Clean up configuration and match requested specifications
if eazywin:FindFirstChild("LocalScript") then
eazywin.LocalScript:Destroy()
end
eazywin.DisplayOrder = 1999999999
eazywin.IgnoreGuiInset = true
eazywin.Y.Value = 6
eazywin.Parent = CoreGui
local imageLabel = eazywin:FindFirstChild("ImageLabel")
local actionLabel = imageLabel and imageLabel:FindFirstChild("action")
-- Save the original texture asset string so we can restore it dynamically
if imageLabel then
originalCursorImage = imageLabel.Image
end
-- Listen to core Esc Menu states to handle automatic hiding
GuiService.MenuOpened:Connect(function()
isEscMenuOpen = true
end)
GuiService.MenuClosed:Connect(function()
isEscMenuOpen = false
end)
-- Helper function to check if the cursor is hovering over a clickable UI element
local function isHoveringClickableUI(mousePos)
if not PlayerGui then return false end
local guiObjects = PlayerGui:GetGuiObjectsAtPosition(mousePos.X, mousePos.Y)
for _, obj in ipairs(guiObjects) do
if obj:IsA("GuiButton") or obj:IsA("TextButton") or obj:IsA("ImageButton") then
return true
end
end
return false
end
-- Frame-by-frame execution loop
RunService.RenderStepped:Connect(function(step)
if not eazywin or not eazywin.Parent then return end
local mouse = LocalPlayer:GetMouse()
local mousePos = Vector2.new(mouse.X, mouse.Y)
local character = LocalPlayer.Character
local rootPart = character and character:FindFirstChild("HumanoidRootPart")
-- 1. Distance Calculation Logic
local isOutOfRange = false
if rootPart and mouse.Hit then
local distance = (rootPart.Position - mouse.Hit.Position).Magnitude
if distance > 60 then
isOutOfRange = true
end
end
-- Update the texture depending on range limits
if imageLabel then
if isOutOfRange and not isHoveringClickableUI(mousePos) and not isEscMenuOpen then
imageLabel.Image = outOfRangeTexture
else
imageLabel.Image = originalCursorImage
end
end
-- 2. 3D World Interaction: Hovering over a physical ClickDetector
local isHoveringWorldClickable = false
if mouse.Target and mouse.Target:FindFirstChildOfClass("ClickDetector") then
isHoveringWorldClickable = true
end
-- 3. 2D Screen Interaction: Hovering over a Clickable UI Button
local isHoveringUIButton = isHoveringClickableUI(mousePos)
-- Visibility layout switches
if isEscMenuOpen then
UserInputService.MouseIconEnabled = true
if imageLabel then imageLabel.Visible = false end
if actionLabel then actionLabel.Visible = false end
elseif isHoveringWorldClickable then
UserInputService.MouseIconEnabled = true
if imageLabel then imageLabel.Visible = false end
elseif isHoveringUIButton then
UserInputService.MouseIconEnabled = false
if imageLabel then imageLabel.Visible = true end
if actionLabel then actionLabel.Visible = true end
else
UserInputService.MouseIconEnabled = false
if imageLabel then imageLabel.Visible = true end
if actionLabel then actionLabel.Visible = false end
end
-- perfectly position the custom cursor (shifted down 26 pixels to aling)
if imageLabel and imageLabel.Visible then
local targetX = mouse.X - eazywin.X.Value
local targetY = mouse.Y - eazywin.Y.Value + 26
local tweenInfo = TweenInfo.new(step, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut)
local goalProperties = {Position = UDim2.new(0, targetX, 0, targetY)}
TweenService:Create(imageLabel, tweenInfo, goalProperties):Play()
end
end)
else
warn("Failed to fetch custom cursor asset.")
end
-- old click to move, compatible with mobile! :D
--OLD ROBLOX CLICK TO MOVE
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local Workspace = game:GetService("Workspace")
local UserInputService = game:GetService("UserInputService")
local LocalPlayer = Players.LocalPlayer
local PlayerGui = LocalPlayer:WaitForChild("PlayerGui", 5)
local Mouse = LocalPlayer:GetMouse()
local Camera = Workspace.CurrentCamera
-- =========================================================
-- ATTEMPT TO WIPE ROBLOX DEFAULT CLICK-TO-MOVE SYSTEM(doesn't work)
-- =========================================================
local StarterPlayer = game:GetService("StarterPlayer")
local StarterPlayerScripts = StarterPlayer:WaitForChild("StarterPlayerScripts")
if not StarterPlayerScripts:FindFirstChild("PlayerModule") then
local fakePlayerModule = Instance.new("Folder")
fakePlayerModule.Name = "PlayerModule"
local fakeControlModule = Instance.new("Folder")
fakeControlModule.Name = "ControlModule"
fakeControlModule.Parent = fakePlayerModule
local fakeCTM = Instance.new("ModuleScript")
fakeCTM.Name = "ClickToMoveController"
fakeCTM.Source = "local m = {}; function m:Disconnect() end; return m;"
fakeCTM.Parent = fakeControlModule
fakePlayerModule.Parent = StarterPlayerScripts
end
pcall(function()
LocalPlayer.DevComputerMovementMode = Enum.DevComputerMovementMode.UserChoice
LocalPlayer.DevTouchMovementMode = Enum.DevTouchMovementMode.UserChoice
end)
local oldModel = Workspace:FindFirstChild("MouseFollowerDodecagon")
if oldModel then oldModel:Destroy() end
local oldClone = Workspace:FindFirstChild("DodecagonClone")
if oldClone then oldClone:Destroy() end
local isFollowerVisible = false
local currentClone = nil
local isPathfinding = false
local touchConnection = nil
local activeTouches = {}
local touchStartPositions = {}
local dodecagonModel = Instance.new("Model")
dodecagonModel.Name = "MouseFollowerDodecagon"
dodecagonModel.Parent = Workspace
local cylinderPart = Instance.new("Part")
cylinderPart.Name = "Hitbox"
cylinderPart.Size = Vector3.new(0.25, 2, 2)
cylinderPart.Shape = Enum.PartType.Cylinder
cylinderPart.Color = Color3.fromRGB(0, 255, 0)
cylinderPart.Material = Enum.Material.SmoothPlastic
cylinderPart.CanCollide = false
cylinderPart.CanTouch = true
cylinderPart.CanQuery = true
cylinderPart.Anchored = true
cylinderPart.CFrame = CFrame.new(0, 0, 0) * CFrame.Angles(0, 0, math.rad(90))
cylinderPart.Parent = dodecagonModel
dodecagonModel.PrimaryPart = cylinderPart
local function isHoldingTool()
local character = LocalPlayer.Character
return character and character:FindFirstChildOfClass("Tool") ~= nil
end
local function isHoveringInteractivePart(target)
if not target then return false end
if target == cylinderPart or target:IsDescendantOf(dodecagonModel) or (currentClone and target:IsDescendantOf(currentClone)) then return false end
if target:FindFirstChildOfClass("ClickDetector") or target.Parent:FindFirstChildOfClass("ClickDetector") then return true end
if target:IsA("Seat") or target:IsA("VehicleSeat") then return true end
if target:FindFirstChildOfClass("ProximityPrompt") or target.Parent:FindFirstChildOfClass("ProximityPrompt") then return true end
return false
end
local function isHoveringUIAtPosition(screenPos)
if not PlayerGui then return false end
local guiObjects = PlayerGui:GetGuiObjectsAtPosition(screenPos.X, screenPos.Y)
for _, obj in ipairs(guiObjects) do
if obj:IsA("GuiButton") or obj:IsA("TextBox") or obj.Active then
return true
end
end
return false
end
local function removeClone()
if touchConnection then
touchConnection:Disconnect()
touchConnection = nil
end
if currentClone then
currentClone:Destroy()
currentClone = nil
end
isPathfinding = false
end
-- Check if the camera is zoomed completely into the character's head
local function isFirstPerson()
local character = LocalPlayer.Character
local head = character and character:FindFirstChild("Head")
if head and Camera then
return (Camera.CFrame.Position - head.Position).Magnitude < 1.5
end
return false
end
-- Setup character listeners for seat transitions
local function setupCharacter(character)
removeClone()
local humanoid = character:WaitForChild("Humanoid", 5)
local rootPart = character:WaitForChild("HumanoidRootPart", 5)
if humanoid and rootPart then
humanoid.Seated:Connect(function(isSitting, seat)
if isSitting then
removeClone()
humanoid:MoveTo(rootPart.Position)
end
end)
end
end
if LocalPlayer.Character then setupCharacter(LocalPlayer.Character) end
LocalPlayer.CharacterAdded:Connect(setupCharacter)
local function handlePlacement(targetWorldPos)
local character = LocalPlayer.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
-- BLOCK PLACEMENT: Do not allow click destination drop if in first person, moving, or sitting
if isFirstPerson() or (humanoid and (humanoid.MoveDirection.Magnitude > 0 or humanoid.Sit)) then
return
end
removeClone()
dodecagonModel.Archivable = true
currentClone = dodecagonModel:Clone()
currentClone.Name = "DodecagonClone"
currentClone:PivotTo(CFrame.new(targetWorldPos) * CFrame.Angles(0, 0, math.rad(90)))
local cloneHitbox = currentClone:FindFirstChild("Hitbox")
if cloneHitbox then
cloneHitbox.CanCollide = false
touchConnection = cloneHitbox.Touched:Connect(function(hit)
local character = LocalPlayer.Character
if character and hit:IsDescendantOf(character) then
removeClone()
end
end)
end
local cloneCylinder = currentClone:FindFirstChild("Hitbox")
if cloneCylinder then
cloneCylinder.LocalTransparencyModifier = 0
end
currentClone.Parent = Workspace
isPathfinding = true
end
-- PC Click Input
Mouse.Button1Down:Connect(function()
if not isFollowerVisible or not dodecagonModel.PrimaryPart then return end
handlePlacement(dodecagonModel.PrimaryPart.Position)
end)
-- Mobile Touch Processing
UserInputService.TouchStarted:Connect(function(touch, gameProcessedEvent)
if gameProcessedEvent then return end
activeTouches[touch] = true
touchStartPositions[touch] = touch.Position
end)
UserInputService.TouchEnded:Connect(function(touch, gameProcessedEvent)
local startPos = touchStartPositions[touch]
activeTouches[touch] = nil
touchStartPositions[touch] = nil
if gameProcessedEvent then return end
local activeCount = 0
for _ in pairs(activeTouches) do activeCount = activeCount + 1 end
if activeCount > 0 then return end
if startPos then
local dragDistance = (touch.Position - startPos).Magnitude
if dragDistance > 10 then return end
local touchPos = Vector2.new(touch.Position.X, touch.Position.Y)
if isHoveringUIAtPosition(touchPos) or isHoldingTool() then return end
local unitRay = Camera:ScreenPointToRay(touchPos.X, touchPos.Y)
local raycastParams = RaycastParams.new()
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
raycastParams.FilterDescendantsInstances = {LocalPlayer.Character, dodecagonModel}
local raycastResult = Workspace:Raycast(unitRay.Origin, unitRay.Direction * 500, raycastParams)
if raycastResult and not isHoveringInteractivePart(raycastResult.Instance) then
local character = LocalPlayer.Character
local rootPart = character and character:FindFirstChild("HumanoidRootPart")
if rootPart then
local distanceFromPlayer = (rootPart.Position - raycastResult.Position).Magnitude
if distanceFromPlayer <= 60 then
handlePlacement(raycastResult.Position)
end
end
end
end
end)
-- Frame-by-frame execution loop
local connection
connection = RunService.RenderStepped:Connect(function()
if not dodecagonModel or not dodecagonModel.Parent then
connection:Disconnect()
return
end
local character = LocalPlayer.Character
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
local rootPart = character and character:FindFirstChild("HumanoidRootPart")
-- Basic Movement and Cancel Checking (Active clones will continue moving)
if isPathfinding and currentClone and humanoid and rootPart then
local horizontalMove = Vector3.new(humanoid.MoveDirection.X, 0, humanoid.MoveDirection.Z)
if horizontalMove.Magnitude > 0 then
removeClone()
else
local clonePos = currentClone.PrimaryPart.Position
humanoid:MoveTo(clonePos)
if (rootPart.Position - clonePos).Magnitude <= 3 then
removeClone()
end
end
end
-- Check if a mouse pointer is being used
local hasMouse = UserInputService.MouseEnabled
local shouldShow = false
-- BLOCK MAIN CYLINDER VISIBILITY: Hide if player is moving, sitting, or in first person mode
if hasMouse and humanoid and (humanoid.MoveDirection.Magnitude == 0 and not humanoid.Sit) and not isFirstPerson() then
local unitRay = Camera:ScreenPointToRay(Mouse.X, Mouse.Y)
local raycastParams = RaycastParams.new()
raycastParams.FilterType = Enum.RaycastFilterType.Exclude
local ignoreList = {LocalPlayer.Character, dodecagonModel}
if currentClone then table.insert(ignoreList, currentClone) end
raycastParams.FilterDescendantsInstances = ignoreList
local raycastResult = Workspace:Raycast(unitRay.Origin, unitRay.Direction * 500, raycastParams)
shouldShow = true
if isHoldingTool() or isHoveringUIAtPosition(Vector2.new(Mouse.X, Mouse.Y)) then
shouldShow = false
end
if raycastResult and shouldShow then
if rootPart then
local distanceFromPlayer = (rootPart.Position - raycastResult.Position).Magnitude
if distanceFromPlayer > 60 or isHoveringInteractivePart(raycastResult.Instance) then
shouldShow = false
else
dodecagonModel:PivotTo(CFrame.new(raycastResult.Position) * CFrame.Angles(0, 0, math.rad(90)))
end
else
shouldShow = false
end
else
shouldShow = false
end
end
isFollowerVisible = shouldShow
cylinderPart.LocalTransparencyModifier = (hasMouse and shouldShow) and 0 or 1
end)No comments yet for this script.

![Sir Meme Hub | [16 GAMES] [$14.99 LIFETIME] | FARM/AIM/ESP](https://scriptblox.com/images/script/-1-1791044877945.webp)

