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 LocalPlayer = Players.LocalPlayer local PlayerGui = LocalPlayer:WaitForChild("PlayerGui", 5) -- Clean up any existing custom cursors to avoid bugs if CoreGui:FindFirstChild("Cursor") then CoreGui.Cursor:Destroy() end -- check for Roblox Esc Menu local isEscMenuOpen = false -- Load 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() -- load on top of everything 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") -- Listen to core Esc Menu states to handle automatic hiding GuiService.MenuOpened:Connect(function() isEscMenuOpen = true end) GuiService.MenuClosed:Connect(function() isEscMenuOpen = false end) -- check if the cursor is hovering over a clickable UI 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) -- Hovering over a ClickDetector part local isHoveringWorldClickable = false if mouse.Target and mouse.Target:FindFirstChildOfClass("ClickDetector") then isHoveringWorldClickable = true end -- Hovering over a Clickable UI Button local isHoveringUIButton = isHoveringClickableUI(mousePos) -- for esc menu only if isEscMenuOpen then -- if esc menu is open then show only default Roblox mouse alone, since idk how to make the custom cursor take over there UserInputService.MouseIconEnabled = true if imageLabel then imageLabel.Visible = false end if actionLabel then actionLabel.Visible = false end elseif isHoveringWorldClickable then -- Context A: if hovering a ClickDetector part then default Roblox cursor takes over to show the windows hand style UserInputService.MouseIconEnabled = true if imageLabel then imageLabel.Visible = false end elseif isHoveringUIButton then -- if hovering an interactable UI Button then custom cursor stays visible, show the question mark UserInputService.MouseIconEnabled = false if imageLabel then imageLabel.Visible = true end if actionLabel then actionLabel.Visible = true end else -- Context C: if hovering default space then custom cursor stays visible, hide the question mark UserInputService.MouseIconEnabled = false if imageLabel then imageLabel.Visible = true end if actionLabel then actionLabel.Visible = false end end -- perfectly position the custom cursor (moved down 26 pixels to be aligned) 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