--[[ eclipes · v1.6 eclipse-grade developer panel Works with Luau executors such as Potassium, Wave, Solara, Delta, Synapse, etc. - Toggle the panel with RightShift - Drag it by the header - Paste your own Luau into the Scripts tab and run it - Closing the panel leaves a floating eclipse button that reopens it Standalone: no dependencies, no external loadstring sources. ]] --============================================================== -- services --============================================================== local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local Lighting = game:GetService("Lighting") local Workspace = game:GetService("Workspace") local TeleportService = game:GetService("TeleportService") local Stats = game:GetService("Stats") local RunService = game:GetService("RunService") local HttpService = game:GetService("HttpService") local LocalPlayer = Players.LocalPlayer --============================================================== -- theme --============================================================== local Theme = { void = Color3.fromRGB(8, 7, 12), panel = Color3.fromRGB(15, 13, 21), panelTop = Color3.fromRGB(25, 21, 35), card = Color3.fromRGB(24, 21, 34), cardTop = Color3.fromRGB(31, 27, 43), stroke = Color3.fromRGB(54, 47, 74), strokeSoft = Color3.fromRGB(40, 35, 55), amber = Color3.fromRGB(255, 181, 88), amberDeep = Color3.fromRGB(224, 133, 40), violet = Color3.fromRGB(152, 130, 255), text = Color3.fromRGB(240, 238, 248), sub = Color3.fromRGB(150, 144, 173), track = Color3.fromRGB(35, 31, 48), code = Color3.fromRGB(198, 228, 190), danger = Color3.fromRGB(196, 74, 66), dangerDeep = Color3.fromRGB(146, 44, 40), } --============================================================== -- helpers --============================================================== local function tw(inst, time, props, style) local info = TweenInfo.new(time or 0.18, style or Enum.EasingStyle.Quad, Enum.EasingDirection.Out) local tween = TweenService:Create(inst, info, props) tween:Play() return tween end local function corner(inst, radius) local c = Instance.new("UICorner") c.CornerRadius = UDim.new(0, radius or 10) c.Parent = inst return c end local function stroke(inst, color, thickness, transparency) local s = Instance.new("UIStroke") s.Color = color or Theme.stroke s.Thickness = thickness or 1 s.Transparency = transparency or 0 s.ApplyStrokeMode = Enum.ApplyStrokeMode.Border s.Parent = inst return s end local function gradient(inst, colorA, colorB, rotation) local g = Instance.new("UIGradient") g.Color = ColorSequence.new(colorA, colorB) g.Rotation = rotation or 90 g.Parent = inst return g end local function label(parent, text, size, textSize, font, color, xAlign) local l = Instance.new("TextLabel") l.BackgroundTransparency = 1 l.Size = size l.Text = text l.TextSize = textSize or 13 l.Font = font or Enum.Font.GothamMedium l.TextColor3 = color or Theme.text l.TextXAlignment = xAlign or Enum.TextXAlignment.Left l.TextYAlignment = Enum.TextYAlignment.Center l.RichText = false l.Parent = parent return l end local function executorName() local ok, name = pcall(function() if identifyexecutor then return identifyexecutor() elseif getexecutorname then return getexecutorname() end return nil end) if ok and type(name) == "string" and name ~= "" then return name end return "unknown executor" end local function pingText() local ok, value = pcall(function() return Stats.Network.ServerStatsItem["Data Ping"]:GetValue() end) if ok and type(value) == "number" then return string.format("%d ms", math.floor(value)) end return "n/a" end local function copyToClipboard(text) return pcall(function() if setclipboard then setclipboard(text) elseif toclipboard then toclipboard(text) elseif syn and syn.write_clipboard then syn.write_clipboard(text) else error("no clipboard function") end end) end --============================================================== -- command state + persistence --============================================================== local CONFIG_FILE = "eclipes_config.json" local commandState = { favorites = {}, customDefs = {}, } local function loadConfig() if not (isfile and readfile) then return end local okRead, data = pcall(readfile, CONFIG_FILE) if not okRead or type(data) ~= "string" or data == "" then return end local okDecode, decoded = pcall(function() return HttpService:JSONDecode(data) end) if not okDecode or type(decoded) ~= "table" then return end if type(decoded.favorites) == "table" then for _, id in ipairs(decoded.favorites) do if type(id) == "string" then commandState.favorites[id] = true end end end if type(decoded.custom) == "table" then for _, entry in ipairs(decoded.custom) do if type(entry) == "table" and type(entry.name) == "string" and type(entry.code) == "string" then table.insert(commandState.customDefs, { name = entry.name, code = entry.code, auto = entry.auto == true, }) end end end end local function saveConfig() if not writefile then return end local payload = { favorites = {}, custom = {} } for id, on in pairs(commandState.favorites) do if on then table.insert(payload.favorites, id) end end for _, entry in ipairs(commandState.customDefs) do table.insert(payload.custom, { name = entry.name, code = entry.code, auto = entry.auto, }) end pcall(function() writefile(CONFIG_FILE, HttpService:JSONEncode(payload)) end) end loadConfig() --============================================================== -- mount (clean old instance, pick the safest gui parent) --============================================================== local function mount(gui) local protected = false local parent local okParent, hui = pcall(function() return gethui and gethui() end) if okParent and hui then parent = hui end if not parent then local okCore, core = pcall(function() return game:GetService("CoreGui") end) parent = (okCore and core) or LocalPlayer:WaitForChild("PlayerGui") end local ok = pcall(function() gui.Parent = parent end) if not ok then gui.Parent = LocalPlayer:WaitForChild("PlayerGui") end if syn and syn.protect_gui then protected = pcall(syn.protect_gui, gui) end if not protected and protectgui then pcall(protectgui, gui) end end do local targets = {} local okPg, pg = pcall(function() return LocalPlayer:FindFirstChildOfClass("PlayerGui") or LocalPlayer:WaitForChild("PlayerGui", 3) end) if okPg and pg then table.insert(targets, pg) end local okCore, core = pcall(function() return game:GetService("CoreGui") end) if okCore and core then table.insert(targets, core) end for _, container in ipairs(targets) do for _, child in ipairs(container:GetChildren()) do if child.Name == "eclipes" then child:Destroy() end end end end --============================================================== -- root gui (scaled wrapper keeps every corner crisp) --============================================================== -- wipe every previous copy, including protected gethui() containers, -- so a stale panel can never sit on top and eat the clicks local function purgeOldPanels() local containers = {} local seen = {} local function add(container) if container and not seen[container] then seen[container] = true table.insert(containers, container) end end local okHui, hui = pcall(function() return gethui and gethui() end) if okHui then add(hui) end local okCore, core = pcall(function() return game:GetService("CoreGui") end) if okCore then add(core) end local okPg, pg = pcall(function() return LocalPlayer:FindFirstChildOfClass("PlayerGui") or LocalPlayer:WaitForChild("PlayerGui", 3) end) if okPg then add(pg) end for _, container in ipairs(containers) do for _, child in ipairs(container:GetChildren()) do if child.Name == "eclipes" or child.Name == "eclipes_launcher" then pcall(function() child:Destroy() end) end end end end purgeOldPanels() local gui = Instance.new("ScreenGui") gui.Name = "eclipes" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.ZIndexBehavior = Enum.ZIndexBehavior.Sibling gui.DisplayOrder = 999999 mount(gui) local root = Instance.new("Frame") root.Name = "root" root.Size = UDim2.new(1, 0, 1, 0) root.BackgroundTransparency = 1 root.Parent = gui local uiScale = Instance.new("UIScale") uiScale.Scale = 1 uiScale.Parent = root --============================================================== -- notifications --============================================================== local notificationsEnabled = true local notifHolder = Instance.new("Frame") notifHolder.Name = "notifications" notifHolder.AnchorPoint = Vector2.new(1, 1) notifHolder.Position = UDim2.new(1, -20, 1, -20) notifHolder.Size = UDim2.new(0, 280, 0, 0) notifHolder.AutomaticSize = Enum.AutomaticSize.Y notifHolder.BackgroundTransparency = 1 notifHolder.ZIndex = 20 notifHolder.Parent = root local notifLayout = Instance.new("UIListLayout") notifLayout.Padding = UDim.new(0, 9) notifLayout.SortOrder = Enum.SortOrder.LayoutOrder notifLayout.VerticalAlignment = Enum.VerticalAlignment.Bottom notifLayout.Parent = notifHolder local notifCount = 0 local function notify(message, kind) if not notificationsEnabled then return end notifCount = notifCount + 1 local accent = Theme.amber if kind == "error" then accent = Color3.fromRGB(255, 122, 122) elseif kind == "info" then accent = Theme.violet end local card = Instance.new("Frame") card.Size = UDim2.new(1, 0, 0, 54) card.BackgroundColor3 = Theme.panelTop card.BackgroundTransparency = 1 card.BorderSizePixel = 0 card.LayoutOrder = notifCount card.ZIndex = 21 card.Parent = notifHolder corner(card, 14) gradient(card, Color3.fromRGB(32, 27, 45), Color3.fromRGB(20, 17, 29), 90) local cardStroke = stroke(card, Theme.stroke, 1, 1) local bar = Instance.new("Frame") bar.Size = UDim2.new(0, 4, 1, -22) bar.Position = UDim2.new(0, 13, 0, 11) bar.BackgroundColor3 = accent bar.BackgroundTransparency = 1 bar.BorderSizePixel = 0 bar.ZIndex = 22 bar.Parent = card corner(bar, 2) local text = label(card, message, UDim2.new(1, -50, 1, -18), 12, Enum.Font.GothamMedium, Theme.text) text.Position = UDim2.new(0, 27, 0, 9) text.TextWrapped = true text.TextTransparency = 1 text.ZIndex = 22 tw(card, 0.22, { BackgroundTransparency = 0 }) tw(cardStroke, 0.22, { Transparency = 0.3 }) tw(bar, 0.22, { BackgroundTransparency = 0 }) tw(text, 0.22, { TextTransparency = 0 }) task.delay(3.3, function() if not card.Parent then return end tw(card, 0.26, { BackgroundTransparency = 1 }) tw(cardStroke, 0.26, { Transparency = 1 }) tw(bar, 0.26, { BackgroundTransparency = 1 }) tw(text, 0.26, { TextTransparency = 1 }) task.delay(0.3, function() card:Destroy() end) end) end --============================================================== -- ping alerts (top right, clears after 2s) --============================================================== local pingAlertsEnabled = true local pingThreshold = 150 local lastPingAlert = 0 local alertCount = 0 local alertHolder = Instance.new("Frame") alertHolder.Name = "alerts" alertHolder.AnchorPoint = Vector2.new(1, 0) alertHolder.Position = UDim2.new(1, -20, 0, 20) alertHolder.Size = UDim2.new(0, 216, 0, 0) alertHolder.AutomaticSize = Enum.AutomaticSize.Y alertHolder.BackgroundTransparency = 1 alertHolder.ZIndex = 30 alertHolder.Parent = root local alertLayout = Instance.new("UIListLayout") alertLayout.Padding = UDim.new(0, 6) alertLayout.SortOrder = Enum.SortOrder.LayoutOrder alertLayout.HorizontalAlignment = Enum.HorizontalAlignment.Right alertLayout.Parent = alertHolder local function pushAlert(message, kind) alertCount = alertCount + 1 local accent = Theme.amber if kind == "bad" then accent = Color3.fromRGB(255, 122, 122) end local card = Instance.new("Frame") card.Size = UDim2.new(1, 0, 0, 34) card.BackgroundColor3 = Theme.panelTop card.BackgroundTransparency = 1 card.BorderSizePixel = 0 card.LayoutOrder = alertCount card.ZIndex = 31 card.Parent = alertHolder corner(card, 11) gradient(card, Color3.fromRGB(30, 26, 41), Color3.fromRGB(18, 15, 26), 90) local border = stroke(card, Theme.stroke, 1, 1) local dot = Instance.new("Frame") dot.Size = UDim2.fromOffset(6, 6) dot.AnchorPoint = Vector2.new(0, 0.5) dot.Position = UDim2.new(0, 13, 0.5, 0) dot.BackgroundColor3 = accent dot.BackgroundTransparency = 1 dot.BorderSizePixel = 0 dot.ZIndex = 32 dot.Parent = card corner(dot, 3) local text = label(card, message, UDim2.new(1, -34, 1, 0), 11, Enum.Font.GothamBold, Theme.text) text.Position = UDim2.new(0, 26, 0, 0) text.TextTransparency = 1 text.ZIndex = 32 tw(card, 0.18, { BackgroundTransparency = 0 }) tw(border, 0.18, { Transparency = 0.25 }) tw(dot, 0.18, { BackgroundTransparency = 0 }) tw(text, 0.18, { TextTransparency = 0 }) task.delay(2, function() if not card.Parent then return end tw(card, 0.22, { BackgroundTransparency = 1 }) tw(border, 0.22, { Transparency = 1 }) tw(dot, 0.22, { BackgroundTransparency = 1 }) tw(text, 0.22, { TextTransparency = 1 }) task.delay(0.28, function() card:Destroy() end) end) end task.spawn(function() task.wait(1.5) while alertHolder.Parent do task.wait(1) if pingAlertsEnabled then local ok, value = pcall(function() return Stats.Network.ServerStatsItem["Data Ping"]:GetValue() end) if ok and type(value) == "number" then local now = os.clock() if value >= pingThreshold and (now - lastPingAlert) >= 5 then lastPingAlert = now pushAlert(string.format("high ping · %d ms", math.floor(value)), "bad") end end end end end) --============================================================== -- window frame --============================================================== local WINDOW_W = 604 local WINDOW_H = 456 local HEADER_H = 62 local FOOTER_H = 30 local SIDEBAR_W = 152 -- outer warm halo local halo = Instance.new("Frame") halo.Name = "halo" halo.AnchorPoint = Vector2.new(0, 0) halo.Size = UDim2.fromOffset(WINDOW_W + 18, WINDOW_H + 18) halo.Position = UDim2.new(0.5, 0, 0.5, 0) halo.BackgroundColor3 = Theme.amberDeep halo.BackgroundTransparency = 0.94 halo.BorderSizePixel = 0 halo.ZIndex = 1 halo.Parent = root corner(halo, 32) local shadow = Instance.new("Frame") shadow.Name = "shadow" shadow.AnchorPoint = Vector2.new(0, 0) shadow.Size = UDim2.fromOffset(WINDOW_W, WINDOW_H) shadow.Position = UDim2.new(0.5, 0, 0.5, 12) shadow.BackgroundColor3 = Color3.new(0, 0, 0) shadow.BackgroundTransparency = 0.5 shadow.BorderSizePixel = 0 shadow.ZIndex = 1 shadow.Parent = root corner(shadow, 26) local window = Instance.new("Frame") window.Name = "window" window.Size = UDim2.fromOffset(WINDOW_W, WINDOW_H) window.Position = UDim2.new(0, 0, 0, 0) window.AnchorPoint = Vector2.new(0, 0) window.BackgroundColor3 = Theme.panel window.BorderSizePixel = 0 window.ClipsDescendants = true window.ZIndex = 2 window.Parent = root corner(window, 22) gradient(window, Color3.fromRGB(18, 16, 25), Theme.void, 90) local windowStroke = stroke(window, Color3.fromRGB(64, 54, 90), 1, 0.1) -- inner ambient glow local ambient = Instance.new("Frame") ambient.Size = UDim2.fromOffset(420, 420) ambient.AnchorPoint = Vector2.new(1, 0) ambient.Position = UDim2.new(1, 120, 0, -140) ambient.BackgroundColor3 = Theme.violet ambient.BackgroundTransparency = 0.96 ambient.BorderSizePixel = 0 ambient.ZIndex = 2 ambient.Parent = window corner(ambient, 210) local ambientWarm = Instance.new("Frame") ambientWarm.Size = UDim2.fromOffset(320, 320) ambientWarm.AnchorPoint = Vector2.new(0, 1) ambientWarm.Position = UDim2.new(0, -110, 1, 120) ambientWarm.BackgroundColor3 = Theme.amberDeep ambientWarm.BackgroundTransparency = 0.97 ambientWarm.BorderSizePixel = 0 ambientWarm.ZIndex = 2 ambientWarm.Parent = window corner(ambientWarm, 160) local function viewportSize() local camera = Workspace.CurrentCamera return (camera and camera.ViewportSize) or Vector2.new(1280, 720) end local function centerWindow() local vp = viewportSize() local scale = uiScale.Scale local x = math.max(8, ((vp.X - WINDOW_W * scale) / 2) / scale) local y = math.max(8, ((vp.Y - WINDOW_H * scale) / 2) / scale) window.Position = UDim2.fromOffset(x, y) end -- keeps the panel reachable no matter where it is dragged local function clampWindow() local vp = viewportSize() local scale = uiScale.Scale local width = window.Size.X.Offset * scale local height = window.Size.Y.Offset * scale local keep = math.min(160, width) local x = window.Position.X.Offset * scale local y = window.Position.Y.Offset * scale local maxX = math.max(-width + keep, vp.X - width) local maxY = math.max(0, vp.Y - height) x = math.clamp(x, -width + keep, maxX) y = math.clamp(y, 0, maxY) window.Position = UDim2.fromOffset(x / scale, y / scale) end local function syncFrames() local x = window.Position.X.Offset local y = window.Position.Y.Offset shadow.Position = UDim2.fromOffset(x, y + 12) shadow.Size = window.Size halo.Position = UDim2.fromOffset(x - 9, y - 9) halo.Size = UDim2.new(window.Size.X.Scale, window.Size.X.Offset + 18, window.Size.Y.Scale, window.Size.Y.Offset + 18) end centerWindow() syncFrames() window:GetPropertyChangedSignal("Position"):Connect(syncFrames) window:GetPropertyChangedSignal("Size"):Connect(syncFrames) --============================================================== -- header --============================================================== local header = Instance.new("Frame") header.Name = "header" header.Size = UDim2.new(1, 0, 0, HEADER_H) header.BackgroundColor3 = Theme.panelTop header.BorderSizePixel = 0 header.ZIndex = 10 header.Parent = window gradient(header, Color3.fromRGB(32, 26, 45), Color3.fromRGB(18, 15, 26), 90) -- starfield task.spawn(function() for _ = 1, 18 do local star = Instance.new("Frame") local size = math.random(1, 3) star.Size = UDim2.fromOffset(size, size) star.Position = UDim2.new(math.random(), 0, math.random(), 0) star.BackgroundColor3 = Color3.fromRGB(255, 238, 214) star.BorderSizePixel = 0 star.BackgroundTransparency = math.random(45, 88) / 100 star.ZIndex = 4 star.Parent = header corner(star, 2) task.spawn(function() while star.Parent do tw(star, math.random(140, 300) / 100, { BackgroundTransparency = math.random(60, 94) / 100, }, Enum.EasingStyle.Sine) task.wait(math.random(140, 300) / 100) end end) end end) -- real button (not a bare frame) so it always receives input local dragHandle = Instance.new("TextButton") dragHandle.Name = "dragHandle" dragHandle.Size = UDim2.new(1, -100, 1, 0) dragHandle.BackgroundTransparency = 1 dragHandle.Text = "" dragHandle.AutoButtonColor = false dragHandle.Active = true dragHandle.Selectable = false dragHandle.ZIndex = 6 dragHandle.Parent = header -- eclipse mark local logo = Instance.new("Frame") logo.Size = UDim2.fromOffset(44, 44) logo.Position = UDim2.new(0, 20, 0.5, 0) logo.AnchorPoint = Vector2.new(0, 0.5) logo.BackgroundTransparency = 1 logo.ZIndex = 6 logo.Parent = dragHandle local corona = Instance.new("Frame") corona.Size = UDim2.fromOffset(44, 44) corona.AnchorPoint = Vector2.new(0.5, 0.5) corona.Position = UDim2.new(0.5, 0, 0.5, 0) corona.BackgroundColor3 = Theme.amber corona.BackgroundTransparency = 0.88 corona.BorderSizePixel = 0 corona.ZIndex = 6 corona.Parent = logo corner(corona, 22) local ring = Instance.new("Frame") ring.Size = UDim2.fromOffset(31, 31) ring.AnchorPoint = Vector2.new(0.5, 0.5) ring.Position = UDim2.new(0.5, 0, 0.5, 0) ring.BackgroundColor3 = Theme.amber ring.BorderSizePixel = 0 ring.ZIndex = 7 ring.Parent = logo corner(ring, 16) gradient(ring, Theme.amber, Theme.amberDeep, 90) stroke(ring, Color3.fromRGB(255, 220, 172), 1, 0.12) local disc = Instance.new("Frame") disc.Size = UDim2.fromOffset(23, 23) disc.AnchorPoint = Vector2.new(0.5, 0.5) disc.Position = UDim2.new(0.5, -1, 0.5, -1) disc.BackgroundColor3 = Color3.fromRGB(9, 8, 14) disc.BorderSizePixel = 0 disc.ZIndex = 8 disc.Parent = logo corner(disc, 12) local flare = Instance.new("Frame") flare.Size = UDim2.fromOffset(18, 18) flare.AnchorPoint = Vector2.new(0.5, 0.5) flare.Position = UDim2.new(0.5, 0, 0.5, 0) flare.BackgroundColor3 = Theme.amber flare.BackgroundTransparency = 0.93 flare.BorderSizePixel = 0 flare.ZIndex = 6 flare.Parent = logo corner(flare, 9) task.spawn(function() while corona.Parent do tw(corona, 1.8, { Size = UDim2.fromOffset(52, 52), BackgroundTransparency = 0.94 }, Enum.EasingStyle.Sine) tw(flare, 1.8, { BackgroundTransparency = 0.98 }, Enum.EasingStyle.Sine) task.wait(1.8) tw(corona, 1.8, { Size = UDim2.fromOffset(42, 42), BackgroundTransparency = 0.82 }, Enum.EasingStyle.Sine) tw(flare, 1.8, { BackgroundTransparency = 0.9 }, Enum.EasingStyle.Sine) task.wait(1.8) end end) local wordmark = label(dragHandle, "eclipes", UDim2.new(0, 200, 0, 26), 21, Enum.Font.GothamBold, Theme.text) wordmark.Position = UDim2.new(0, 72, 0, 13) wordmark.ZIndex = 6 gradient(wordmark, Theme.amber, Theme.violet, 0) local wordmarkSub = label(dragHandle, "eclipse-grade developer panel", UDim2.new(0, 230, 0, 16), 11, Enum.Font.GothamMedium, Theme.sub) wordmarkSub.Position = UDim2.new(0, 73, 0, 37) wordmarkSub.ZIndex = 6 -- soft divider local divider = Instance.new("Frame") divider.Size = UDim2.new(1, -36, 0, 1) divider.Position = UDim2.new(0, 18, 0, HEADER_H - 1) divider.BackgroundColor3 = Theme.amber divider.BackgroundTransparency = 0.6 divider.BorderSizePixel = 0 divider.ZIndex = 7 divider.Parent = header local dividerGradient = Instance.new("UIGradient") dividerGradient.Color = ColorSequence.new({ ColorSequenceKeypoint.new(0, Theme.amber), ColorSequenceKeypoint.new(0.5, Theme.violet), ColorSequenceKeypoint.new(1, Theme.amber), }) dividerGradient.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, 1), NumberSequenceKeypoint.new(0.25, 0.4), NumberSequenceKeypoint.new(0.75, 0.4), NumberSequenceKeypoint.new(1, 1), }) dividerGradient.Parent = divider -- window controls local function makeControl(text, xOffset, hoverColor, click) local btn = Instance.new("TextButton") btn.Size = UDim2.fromOffset(34, 34) btn.Position = UDim2.new(1, xOffset, 0.5, 0) btn.AnchorPoint = Vector2.new(0, 0.5) btn.BackgroundColor3 = Color3.fromRGB(46, 39, 63) btn.BackgroundTransparency = 1 btn.Text = text btn.Font = Enum.Font.GothamBold btn.TextSize = 17 btn.TextColor3 = Theme.sub btn.TextYAlignment = Enum.TextYAlignment.Center btn.AutoButtonColor = false btn.Active = true btn.Selectable = false btn.ZIndex = 40 btn.Parent = header corner(btn, 17) btn.MouseEnter:Connect(function() tw(btn, 0.16, { BackgroundTransparency = 0.05, BackgroundColor3 = hoverColor, TextColor3 = Theme.text, }) end) btn.MouseLeave:Connect(function() tw(btn, 0.16, { BackgroundTransparency = 1, TextColor3 = Theme.sub }) end) btn.MouseButton1Down:Connect(click) return btn end local minimized = false local body local footer local launcher local panelOpen = true local bootComplete = false local setPanelOpen local function setMinimized(state) minimized = state and true or false if body then body.Visible = not minimized end if footer then footer.Visible = not minimized end tw(window, 0.28, { Size = minimized and UDim2.fromOffset(WINDOW_W, HEADER_H) or UDim2.fromOffset(WINDOW_W, WINDOW_H), }, Enum.EasingStyle.Quart) task.delay(0.32, function() clampWindow() end) end local function openPanel() if setPanelOpen then setPanelOpen(true) return end panelOpen = true window.Visible = true shadow.Visible = true halo.Visible = true if launcher then launcher.Visible = true end gui.Enabled = true end local function closePanel() if setPanelOpen then setPanelOpen(false) return end panelOpen = false window.Visible = false shadow.Visible = false halo.Visible = false if launcher then launcher.Visible = true end end local function togglePanel() if panelOpen then closePanel() else openPanel() end end makeControl("–", -86, Color3.fromRGB(62, 53, 88), function() if not panelOpen then return end setMinimized(not minimized) end) makeControl("×", -46, Color3.fromRGB(158, 58, 56), function() closePanel() notify("eclipes closed · click the eclipse button to reopen", "info") end) -- drag + keybind are wired right here, so a later build error cannot disable them do local dragging = false local dragStart local startX = 0 local startY = 0 dragHandle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startX = window.Position.X.Offset startY = window.Position.Y.Offset end end) UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - dragStart local scale = uiScale.Scale window.Position = UDim2.fromOffset(startX + delta.X / scale, startY + delta.Y / scale) clampWindow() end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) UserInputService.InputBegan:Connect(function(input, processed) if processed then return end if input.KeyCode == Enum.KeyCode.RightShift then togglePanel() end end) end -- if the chunk dies mid-build, say so instead of failing silently task.delay(2, function() if not bootComplete then notify("eclipes init stopped early · some controls are inactive", "error") end end) --============================================================== -- orbit button: built first, always visible, opens the panel --============================================================== local orbitButton = Instance.new("TextButton") launcher = orbitButton orbitButton.Name = "launcher" orbitButton.AnchorPoint = Vector2.new(0, 0) orbitButton.Size = UDim2.fromOffset(54, 54) local bootViewport = (Workspace.CurrentCamera and Workspace.CurrentCamera.ViewportSize) or Vector2.new(1280, 720) orbitButton.Position = UDim2.fromOffset(24, math.max(24, math.floor(bootViewport.Y * 0.5 - 27))) orbitButton.BackgroundColor3 = Theme.panelTop orbitButton.BackgroundTransparency = 0.05 orbitButton.Text = "" orbitButton.AutoButtonColor = false orbitButton.Active = true orbitButton.Selectable = false orbitButton.BorderSizePixel = 0 orbitButton.Visible = true orbitButton.ZIndex = 30 orbitButton.Parent = root corner(orbitButton, 27) gradient(orbitButton, Color3.fromRGB(35, 29, 48), Color3.fromRGB(15, 13, 21), 90) local orbitStroke = stroke(orbitButton, Theme.amber, 1, 0.35) local markGlow = Instance.new("Frame") markGlow.Size = UDim2.fromOffset(40, 40) markGlow.AnchorPoint = Vector2.new(0.5, 0.5) markGlow.Position = UDim2.new(0.5, 0, 0.5, 0) markGlow.BackgroundColor3 = Theme.amber markGlow.BackgroundTransparency = 0.88 markGlow.BorderSizePixel = 0 markGlow.ZIndex = 31 markGlow.Parent = orbitButton corner(markGlow, 20) local markTilt = Instance.new("Frame") markTilt.Size = UDim2.fromOffset(40, 40) markTilt.AnchorPoint = Vector2.new(0.5, 0.5) markTilt.Position = UDim2.new(0.5, 0, 0.5, 0) markTilt.BackgroundTransparency = 1 markTilt.Rotation = -38 markTilt.ZIndex = 32 markTilt.Parent = orbitButton local markRingB = Instance.new("Frame") markRingB.Size = UDim2.fromOffset(34, 13) markRingB.AnchorPoint = Vector2.new(0.5, 0.5) markRingB.Position = UDim2.new(0.5, 0, 0.5, 0) markRingB.BackgroundTransparency = 1 markRingB.BorderSizePixel = 0 markRingB.ZIndex = 32 markRingB.Parent = markTilt corner(markRingB, 7) stroke(markRingB, Theme.violet, 1.5, 0.5) local markRingA = Instance.new("Frame") markRingA.Size = UDim2.fromOffset(38, 16) markRingA.AnchorPoint = Vector2.new(0.5, 0.5) markRingA.Position = UDim2.new(0.5, 0, 0.5, 0) markRingA.BackgroundTransparency = 1 markRingA.BorderSizePixel = 0 markRingA.ZIndex = 33 markRingA.Parent = orbitButton corner(markRingA, 8) stroke(markRingA, Theme.amber, 1.5, 0.45) local markDotA = Instance.new("Frame") markDotA.Size = UDim2.fromOffset(5, 5) markDotA.AnchorPoint = Vector2.new(0.5, 0.5) markDotA.Position = UDim2.new(0.5, 18, 0.5, 0) markDotA.BackgroundColor3 = Color3.fromRGB(255, 235, 205) markDotA.BorderSizePixel = 0 markDotA.ZIndex = 35 markDotA.Parent = orbitButton corner(markDotA, 3) local markDotB = Instance.new("Frame") markDotB.Size = UDim2.fromOffset(4, 4) markDotB.AnchorPoint = Vector2.new(0.5, 0.5) markDotB.Position = UDim2.new(0.5, 15, 0.5, 0) markDotB.BackgroundColor3 = Theme.violet markDotB.BorderSizePixel = 0 markDotB.ZIndex = 34 markDotB.Parent = markTilt corner(markDotB, 2) local markSun = Instance.new("Frame") markSun.Size = UDim2.fromOffset(13, 13) markSun.AnchorPoint = Vector2.new(0.5, 0.5) markSun.Position = UDim2.new(0.5, 0, 0.5, 0) markSun.BackgroundColor3 = Theme.amber markSun.BorderSizePixel = 0 markSun.ZIndex = 36 markSun.Parent = orbitButton corner(markSun, 7) gradient(markSun, Color3.fromRGB(255, 233, 196), Theme.amberDeep, 90) stroke(markSun, Color3.fromRGB(255, 224, 172), 1, 0.35) local markAngle = 0 local markConnection markConnection = RunService.RenderStepped:Connect(function(delta) if not orbitButton.Parent then markConnection:Disconnect() return end markAngle = markAngle + delta * 1.7 local angleA = markAngle markDotA.Position = UDim2.new(0.5, math.cos(angleA) * 18, 0.5, math.sin(angleA) * 7) markDotA.BackgroundTransparency = 0.05 + (1 - math.sin(angleA)) * 0.2 local angleB = -markAngle * 1.3 + 1.1 markDotB.Position = UDim2.new(0.5, math.cos(angleB) * 15, 0.5, math.sin(angleB) * 5.5) markDotB.BackgroundTransparency = 0.1 + (1 - math.sin(angleB)) * 0.2 end) task.spawn(function() while markGlow.Parent do tw(markGlow, 1.7, { Size = UDim2.fromOffset(44, 44), BackgroundTransparency = 0.94 }, Enum.EasingStyle.Sine) task.wait(1.7) tw(markGlow, 1.7, { Size = UDim2.fromOffset(36, 36), BackgroundTransparency = 0.8 }, Enum.EasingStyle.Sine) task.wait(1.7) end end) local orbitTip = Instance.new("Frame") orbitTip.Size = UDim2.fromOffset(112, 26) orbitTip.AnchorPoint = Vector2.new(0, 0.5) orbitTip.Position = UDim2.new(0, 64, 0.5, 0) orbitTip.BackgroundColor3 = Theme.panelTop orbitTip.BackgroundTransparency = 1 orbitTip.BorderSizePixel = 0 orbitTip.ZIndex = 30 orbitTip.Parent = orbitButton corner(orbitTip, 10) local orbitTipStroke = stroke(orbitTip, Theme.stroke, 1, 1) local orbitTipLabel = label(orbitTip, "open eclipes", UDim2.new(1, 0, 1, 0), 11, Enum.Font.GothamBold, Theme.amber, Enum.TextXAlignment.Center) orbitTipLabel.TextTransparency = 1 orbitTipLabel.ZIndex = 31 orbitButton.MouseEnter:Connect(function() orbitTipLabel.Text = panelOpen and "close eclipes" or "open eclipes" tw(orbitButton, 0.2, { Size = UDim2.fromOffset(58, 58) }) tw(orbitStroke, 0.2, { Transparency = 0.1 }) tw(orbitTip, 0.2, { BackgroundTransparency = 0.05 }) tw(orbitTipStroke, 0.2, { Transparency = 0.3 }) tw(orbitTipLabel, 0.2, { TextTransparency = 0 }) end) orbitButton.MouseLeave:Connect(function() tw(orbitButton, 0.2, { Size = UDim2.fromOffset(54, 54) }) tw(orbitStroke, 0.2, { Transparency = 0.35 }) tw(orbitTip, 0.2, { BackgroundTransparency = 1 }) tw(orbitTipStroke, 0.2, { Transparency = 1 }) tw(orbitTipLabel, 0.2, { TextTransparency = 1 }) end) local orbitDragging = false local orbitMoved = false local orbitStart = Vector2.new() local orbitOrigin = UDim2.new() local function clampOrbitButton() local viewport = viewportSize() local scale = uiScale.Scale local width = orbitButton.Size.X.Offset * scale local height = orbitButton.Size.Y.Offset * scale local x = math.clamp(orbitButton.Position.X.Offset, 8, math.max(8, viewport.X - width - 8)) local y = math.clamp(orbitButton.Position.Y.Offset, 8, math.max(8, viewport.Y - height - 8)) orbitButton.Position = UDim2.fromOffset(x, y) end orbitButton.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then orbitDragging = true orbitMoved = false orbitStart = input.Position orbitOrigin = orbitButton.Position end end) UserInputService.InputChanged:Connect(function(input) if not orbitDragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - orbitStart if delta.Magnitude > 5 then orbitMoved = true end local scale = uiScale.Scale orbitButton.Position = UDim2.fromOffset( orbitOrigin.X.Offset + delta.X / scale, orbitOrigin.Y.Offset + delta.Y / scale ) end end) UserInputService.InputEnded:Connect(function(input) if not orbitDragging then return end if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then orbitDragging = false if orbitMoved then clampOrbitButton() else togglePanel() end end end) --============================================================== -- body / sidebar / content --============================================================== body = Instance.new("Frame") body.Name = "body" body.Size = UDim2.new(1, 0, 1, -(HEADER_H + FOOTER_H)) body.Position = UDim2.new(0, 0, 0, HEADER_H) body.BackgroundTransparency = 1 body.ZIndex = 3 body.Parent = window local sidebar = Instance.new("Frame") sidebar.Name = "sidebar" sidebar.Size = UDim2.new(0, SIDEBAR_W, 1, 0) sidebar.BackgroundColor3 = Theme.void sidebar.BackgroundTransparency = 0.55 sidebar.BorderSizePixel = 0 sidebar.ZIndex = 3 sidebar.Parent = body local sidebarLine = Instance.new("Frame") sidebarLine.Size = UDim2.new(0, 1, 1, -24) sidebarLine.Position = UDim2.new(1, -1, 0, 12) sidebarLine.BackgroundColor3 = Theme.stroke sidebarLine.BackgroundTransparency = 0.5 sidebarLine.BorderSizePixel = 0 sidebarLine.ZIndex = 4 sidebarLine.Parent = sidebar local sidebarNav = Instance.new("Frame") sidebarNav.Size = UDim2.new(1, -22, 1, -28) sidebarNav.Position = UDim2.new(0, 13, 0, 16) sidebarNav.BackgroundTransparency = 1 sidebarNav.ZIndex = 4 sidebarNav.Parent = sidebar local navLayout = Instance.new("UIListLayout") navLayout.Padding = UDim.new(0, 7) navLayout.SortOrder = Enum.SortOrder.LayoutOrder navLayout.Parent = sidebarNav local content = Instance.new("Frame") content.Name = "content" content.Size = UDim2.new(1, -SIDEBAR_W, 1, 0) content.Position = UDim2.new(0, SIDEBAR_W, 0, 0) content.BackgroundTransparency = 1 content.ClipsDescendants = true content.ZIndex = 3 content.Parent = body local contentPad = Instance.new("UIPadding") contentPad.PaddingTop = UDim.new(0, 16) contentPad.PaddingBottom = UDim.new(0, 14) contentPad.PaddingLeft = UDim.new(0, 16) contentPad.PaddingRight = UDim.new(0, 12) contentPad.Parent = content --============================================================== -- tabs --============================================================== local tabs = {} local currentTab local function selectTab(name) local found for _, tab in ipairs(tabs) do local active = tab.name == name tab.page.Visible = active tab.dot.Visible = active tab.text.TextColor3 = active and Theme.amber or Theme.sub tab.button.BackgroundTransparency = active and 0.15 or 1 if active then found = tab end end currentTab = found if found then found.page.CanvasPosition = Vector2.new(0, 0) found.page.Position = UDim2.new(0, 10, 0, 0) tw(found.page, 0.22, { Position = UDim2.new(0, 0, 0, 0) }, Enum.EasingStyle.Quart) end end local function addTab(name) local btn = Instance.new("TextButton") btn.Name = name btn.Text = "" btn.AutoButtonColor = false btn.Size = UDim2.new(1, 0, 0, 38) btn.BackgroundColor3 = Color3.fromRGB(44, 36, 62) btn.BackgroundTransparency = 1 btn.BorderSizePixel = 0 btn.ZIndex = 4 btn.Parent = sidebarNav corner(btn, 12) local btnStroke = stroke(btn, Theme.stroke, 1, 1) local dot = Instance.new("Frame") dot.Size = UDim2.fromOffset(6, 6) dot.Position = UDim2.new(0, 3, 0.5, 0) dot.AnchorPoint = Vector2.new(0, 0.5) dot.BackgroundColor3 = Theme.amber dot.BorderSizePixel = 0 dot.Visible = false dot.ZIndex = 6 dot.Parent = btn corner(dot, 3) local txt = label(btn, name, UDim2.new(1, -26, 1, 0), 13, Enum.Font.GothamMedium, Theme.sub) txt.Position = UDim2.new(0, 18, 0, 0) txt.ZIndex = 5 local page = Instance.new("ScrollingFrame") page.Name = name .. "Page" page.Size = UDim2.new(1, 0, 1, 0) page.BackgroundTransparency = 1 page.BorderSizePixel = 0 page.ScrollBarThickness = 4 page.ScrollBarImageColor3 = Theme.stroke page.ScrollBarImageTransparency = 0.2 page.CanvasSize = UDim2.new(0, 0, 0, 0) page.AutomaticCanvasSize = Enum.AutomaticSize.Y page.ScrollingDirection = Enum.ScrollingDirection.Y page.Visible = false page.ZIndex = 3 page.Parent = content local pageLayout = Instance.new("UIListLayout") pageLayout.Padding = UDim.new(0, 9) pageLayout.SortOrder = Enum.SortOrder.LayoutOrder pageLayout.Parent = page local pagePad = Instance.new("UIPadding") pagePad.PaddingRight = UDim.new(0, 8) pagePad.PaddingBottom = UDim.new(0, 12) pagePad.Parent = page local entry = { name = name, button = btn, dot = dot, text = txt, page = page, stroke = btnStroke, } table.insert(tabs, entry) btn.MouseEnter:Connect(function() if currentTab ~= entry then tw(btn, 0.16, { BackgroundTransparency = 0.72 }) tw(btnStroke, 0.16, { Transparency = 0.55 }) tw(txt, 0.16, { TextColor3 = Theme.text }) end end) btn.MouseLeave:Connect(function() if currentTab ~= entry then tw(btn, 0.16, { BackgroundTransparency = 1 }) tw(btnStroke, 0.16, { Transparency = 1 }) tw(txt, 0.16, { TextColor3 = Theme.sub }) end end) btn.MouseButton1Click:Connect(function() selectTab(name) end) return page end --============================================================== -- card / row primitives --============================================================== local function card(page, height) local frame = Instance.new("Frame") frame.Size = UDim2.new(1, -6, 0, height) frame.BackgroundColor3 = Theme.card frame.BorderSizePixel = 0 frame.ZIndex = 3 frame.Parent = page corner(frame, 14) gradient(frame, Theme.cardTop, Color3.fromRGB(19, 17, 27), 90) stroke(frame, Theme.stroke, 1, 0.5) return frame end local function addSection(page, text) local holder = Instance.new("Frame") holder.Size = UDim2.new(1, -6, 0, 20) holder.BackgroundTransparency = 1 holder.ZIndex = 3 holder.Parent = page local dot = Instance.new("Frame") dot.Size = UDim2.fromOffset(5, 5) dot.Position = UDim2.new(0, 2, 1, -6) dot.BackgroundColor3 = Theme.amber dot.BorderSizePixel = 0 dot.ZIndex = 3 dot.Parent = holder corner(dot, 3) local l = label(holder, text, UDim2.new(1, 0, 1, 0), 10, Enum.Font.GothamBold, Theme.sub) l.Position = UDim2.new(0, 15, 0, 0) l.TextYAlignment = Enum.TextYAlignment.Bottom return holder end local function addInfoRow(page, key, value) local row = card(page, 38) local k = label(row, key, UDim2.new(0.34, -16, 1, 0), 12, Enum.Font.GothamMedium, Theme.sub) k.Position = UDim2.new(0, 16, 0, 0) k.TextTruncate = Enum.TextTruncate.AtEnd k.ZIndex = 4 local v = label(row, value, UDim2.new(0.66, -16, 1, 0), 12, Enum.Font.Gotham, Theme.text, Enum.TextXAlignment.Right) v.AnchorPoint = Vector2.new(1, 0) v.Position = UDim2.new(1, -16, 0, 0) v.TextTruncate = Enum.TextTruncate.AtEnd v.ZIndex = 4 return row end local function addStatTile(parent, key, value, accent) local tile = Instance.new("Frame") tile.BackgroundColor3 = Theme.card tile.BorderSizePixel = 0 tile.ZIndex = 3 tile.Parent = parent corner(tile, 12) gradient(tile, Theme.cardTop, Color3.fromRGB(19, 17, 27), 90) stroke(tile, Theme.stroke, 1, 0.5) local dot = Instance.new("Frame") dot.Size = UDim2.fromOffset(5, 5) dot.AnchorPoint = Vector2.new(1, 0) dot.Position = UDim2.new(1, -14, 0, 14) dot.BackgroundColor3 = accent or Theme.amber dot.BackgroundTransparency = 0.2 dot.BorderSizePixel = 0 dot.ZIndex = 4 dot.Parent = tile corner(dot, 3) local k = label(tile, key, UDim2.new(1, -28, 0, 12), 9, Enum.Font.GothamBold, Theme.sub) k.Position = UDim2.new(0, 14, 0, 14) k.ZIndex = 4 local v = label(tile, value, UDim2.new(1, -28, 0, 24), 16, Enum.Font.GothamBold, Theme.text) v.Position = UDim2.new(0, 14, 0, 30) v.TextTruncate = Enum.TextTruncate.AtEnd v.ZIndex = 4 return tile end --============================================================== -- controls --============================================================== local function addToggle(page, text, default, callback) local row = card(page, 48) local l = label(row, text, UDim2.new(1, -96, 1, 0), 13, Enum.Font.GothamMedium, Theme.text) l.Position = UDim2.new(0, 16, 0, 0) l.ZIndex = 4 local pill = Instance.new("TextButton") pill.Text = "" pill.AutoButtonColor = false pill.Size = UDim2.fromOffset(42, 24) pill.AnchorPoint = Vector2.new(1, 0.5) pill.Position = UDim2.new(1, -16, 0.5, 0) pill.BackgroundColor3 = Theme.track pill.BorderSizePixel = 0 pill.ZIndex = 5 pill.Parent = row corner(pill, 12) local pillStroke = stroke(pill, Theme.stroke, 1, 0.35) local knob = Instance.new("Frame") knob.Size = UDim2.fromOffset(18, 18) knob.AnchorPoint = Vector2.new(0, 0.5) knob.Position = UDim2.new(0, 3, 0.5, 0) knob.BackgroundColor3 = Color3.fromRGB(196, 192, 212) knob.BorderSizePixel = 0 knob.ZIndex = 6 knob.Parent = pill corner(knob, 9) local state = default and true or false local function render(animate) local info = TweenInfo.new(animate and 0.18 or 0, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) TweenService:Create(knob, info, { Position = state and UDim2.new(0, 21, 0.5, 0) or UDim2.new(0, 3, 0.5, 0), BackgroundColor3 = state and Color3.fromRGB(255, 247, 235) or Color3.fromRGB(196, 192, 212), }):Play() TweenService:Create(pill, info, { BackgroundColor3 = state and Theme.amberDeep or Theme.track, }):Play() TweenService:Create(pillStroke, info, { Color = state and Theme.amber or Theme.stroke, Transparency = state and 0.35 or 0.35, }):Play() end local function set(value, fire) state = value and true or false render(true) if fire and callback then local ok, err = pcall(callback, state) if not ok then notify(tostring(err), "error") end end end pill.MouseButton1Click:Connect(function() set(not state, true) end) render(false) return { Set = set, Get = function() return state end, } end local function addSlider(page, text, min, max, default, step, callback) local row = card(page, 68) local l = label(row, text, UDim2.new(1, -110, 0, 18), 13, Enum.Font.GothamMedium, Theme.text) l.Position = UDim2.new(0, 16, 0, 13) l.ZIndex = 4 local valueChip = Instance.new("Frame") valueChip.Size = UDim2.fromOffset(62, 20) valueChip.AnchorPoint = Vector2.new(1, 0) valueChip.Position = UDim2.new(1, -16, 0, 12) valueChip.BackgroundColor3 = Theme.track valueChip.BorderSizePixel = 0 valueChip.ZIndex = 4 valueChip.Parent = row corner(valueChip, 10) stroke(valueChip, Theme.stroke, 1, 0.6) local valueLabel = label(valueChip, "", UDim2.new(1, 0, 1, 0), 11, Enum.Font.GothamBold, Theme.amber, Enum.TextXAlignment.Center) valueLabel.ZIndex = 5 local track = Instance.new("Frame") track.Size = UDim2.new(1, -32, 0, 8) track.Position = UDim2.new(0, 16, 0, 44) track.BackgroundColor3 = Theme.track track.BorderSizePixel = 0 track.ZIndex = 4 track.Parent = row corner(track, 4) local fill = Instance.new("Frame") fill.Size = UDim2.new(0, 0, 1, 0) fill.BackgroundColor3 = Theme.amber fill.BorderSizePixel = 0 fill.ZIndex = 5 fill.Parent = track corner(fill, 4) gradient(fill, Theme.amber, Theme.amberDeep, 0) local knob = Instance.new("Frame") knob.Size = UDim2.fromOffset(16, 16) knob.AnchorPoint = Vector2.new(0.5, 0.5) knob.Position = UDim2.new(0, 0, 0.5, 0) knob.BackgroundColor3 = Color3.fromRGB(255, 248, 236) knob.BorderSizePixel = 0 knob.ZIndex = 6 knob.Parent = track corner(knob, 8) stroke(knob, Theme.amber, 2, 0.15) local hitbox = Instance.new("TextButton") hitbox.Text = "" hitbox.AutoButtonColor = false hitbox.BackgroundTransparency = 1 hitbox.Size = UDim2.new(1, 0, 0, 24) hitbox.Position = UDim2.new(0, 0, 0, 36) hitbox.ZIndex = 7 hitbox.Parent = row local fmt = "%.0f" if step and step < 1 then fmt = "%.2f" end local function render(value) local alpha = 0 if max > min then alpha = math.clamp((value - min) / (max - min), 0, 1) end fill.Size = UDim2.new(alpha, 0, 1, 0) knob.Position = UDim2.new(alpha, 0, 0.5, 0) valueLabel.Text = string.format(fmt, value) end local function apply(value, fromUser) if step then value = math.floor(value / step + 0.5) * step end value = math.clamp(value, min, max) render(value) if callback then local ok, err = pcall(callback, value, fromUser) if not ok then notify(tostring(err), "error") end end end local function valueFromX(x) local width = math.max(track.AbsoluteSize.X, 1) local alpha = math.clamp((x - track.AbsolutePosition.X) / width, 0, 1) return min + (max - min) * alpha end local dragging = false hitbox.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true apply(valueFromX(input.Position.X), true) end end) UserInputService.InputChanged:Connect(function(input) if not dragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then apply(valueFromX(input.Position.X), true) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = false end end) render(default) return { Set = function(value) apply(value, false) end, } end local function addButton(page, text, callback, style) local accent = style == "accent" local danger = style == "danger" local baseColor = accent and Color3.fromRGB(240, 166, 74) or danger and Color3.fromRGB(174, 58, 52) or Color3.fromRGB(28, 25, 39) local hoverColor = accent and Color3.fromRGB(255, 193, 116) or danger and Color3.fromRGB(206, 74, 66) or Color3.fromRGB(38, 34, 54) local textColor = accent and Color3.fromRGB(40, 27, 12) or danger and Color3.fromRGB(255, 238, 234) or Theme.amber local btn = Instance.new("TextButton") btn.Size = UDim2.new(1, -6, 0, 42) btn.BackgroundColor3 = baseColor btn.Text = "" btn.AutoButtonColor = false btn.BorderSizePixel = 0 btn.ZIndex = 4 btn.Parent = page corner(btn, 13) -- static top sheen (gradients cannot be tweened, so it never animates) local sheen = Instance.new("Frame") sheen.Size = UDim2.new(1, -4, 0, 20) sheen.Position = UDim2.new(0, 2, 0, 2) sheen.BackgroundColor3 = Color3.fromRGB(255, 255, 255) sheen.BorderSizePixel = 0 sheen.ZIndex = 4 sheen.Parent = btn corner(sheen, 11) local sheenGradient = Instance.new("UIGradient") sheenGradient.Rotation = 90 sheenGradient.Transparency = NumberSequence.new({ NumberSequenceKeypoint.new(0, accent and 0.88 or 0.95), NumberSequenceKeypoint.new(1, 1), }) sheenGradient.Parent = sheen local border if not accent and not danger then border = stroke(btn, Theme.stroke, 1, 0.5) end btn.Text = text btn.Font = Enum.Font.GothamBold btn.TextSize = 13 btn.TextColor3 = textColor btn.MouseEnter:Connect(function() tw(btn, 0.16, { BackgroundColor3 = hoverColor }) if border then tw(border, 0.16, { Transparency = 0.2 }) end end) btn.MouseLeave:Connect(function() tw(btn, 0.16, { BackgroundColor3 = baseColor }) if border then tw(border, 0.16, { Transparency = 0.5 }) end end) btn.MouseButton1Click:Connect(function() task.spawn(function() local ok, err = pcall(callback) if not ok then notify(tostring(err), "error") end end) end) return btn end --============================================================== -- state --============================================================== local state = { walkSpeed = 16, jumpPower = 50, infiniteJump = false, fullbright = false, noclip = false, anchored = false, } local function getHumanoid() local character = LocalPlayer.Character if not character then return nil end return character:FindFirstChildOfClass("Humanoid") end local function applyMovement() local humanoid = getHumanoid() if not humanoid then return end humanoid.UseJumpPower = true humanoid.WalkSpeed = state.walkSpeed humanoid.JumpPower = state.jumpPower end local function getRoot() local character = LocalPlayer.Character if not character then return nil end return character:FindFirstChild("HumanoidRootPart") end local function setAnchored(on) state.anchored = on and true or false local root = getRoot() if root then root.Anchored = state.anchored end end local noclipConnection local noclipBackup = {} local function setNoclip(on) state.noclip = on and true or false if state.noclip then if not noclipConnection then noclipConnection = RunService.Stepped:Connect(function() local character = LocalPlayer.Character if not character then return end for _, part in ipairs(character:GetDescendants()) do if part:IsA("BasePart") and part.CanCollide and part.Name ~= "HumanoidRootPart" then if noclipBackup[part] == nil then noclipBackup[part] = part.CanCollide end part.CanCollide = false end end end) end else if noclipConnection then noclipConnection:Disconnect() noclipConnection = nil end for part, value in pairs(noclipBackup) do if part.Parent then part.CanCollide = value end end noclipBackup = {} end end local function teleportToSpawn() local character = LocalPlayer.Character if not character then notify("No character to teleport", "error") return end local spawn = Workspace:FindFirstChildWhichIsA("SpawnLocation", true) if spawn then character:PivotTo(spawn.CFrame + Vector3.new(0, 4, 0)) else character:PivotTo(CFrame.new(0, 20, 0)) end notify("Teleported to spawn", "info") end LocalPlayer.CharacterAdded:Connect(function() task.wait(0.6) applyMovement() if state.anchored then setAnchored(true) end end) UserInputService.JumpRequest:Connect(function() if not state.infiniteJump then return end local humanoid = getHumanoid() if humanoid then humanoid:ChangeState(Enum.HumanoidStateType.Jumping) end end) local lightingBackup local function setFullbright(on) if on then if not lightingBackup then lightingBackup = { Brightness = Lighting.Brightness, ClockTime = Lighting.ClockTime, FogEnd = Lighting.FogEnd, FogStart = Lighting.FogStart, Ambient = Lighting.Ambient, OutdoorAmbient = Lighting.OutdoorAmbient, GlobalShadows = Lighting.GlobalShadows, } end Lighting.Brightness = 3 Lighting.ClockTime = 14 Lighting.FogStart = 0 Lighting.FogEnd = 100000 Lighting.Ambient = Color3.fromRGB(178, 176, 190) Lighting.OutdoorAmbient = Color3.fromRGB(158, 156, 176) Lighting.GlobalShadows = false elseif lightingBackup then for property, value in pairs(lightingBackup) do Lighting[property] = value end lightingBackup = nil end end --============================================================== -- home tab --============================================================== local homePage = addTab("Home") --============================================================== -- home: live dashboard --============================================================== local sessionStart = os.clock() local function formatUptime(seconds) seconds = math.floor(seconds) if seconds >= 3600 then return string.format("%dh %02dm", math.floor(seconds / 3600), math.floor(seconds % 3600 / 60)) end return string.format("%dm %02ds", math.floor(seconds / 60), seconds % 60) end local function fpsTint(value) if value >= 50 then return Color3.fromRGB(126, 217, 160) elseif value >= 30 then return Theme.amber end return Color3.fromRGB(255, 122, 122) end local function pingTint(value) if value <= 90 then return Color3.fromRGB(126, 217, 160) elseif value <= 160 then return Theme.amber end return Color3.fromRGB(255, 122, 122) end local fpsNow = 60 local fpsFrames = 0 local fpsElapsed = 0 local fpsConnection fpsConnection = RunService.RenderStepped:Connect(function(delta) if not homePage.Parent then fpsConnection:Disconnect() return end fpsFrames = fpsFrames + 1 fpsElapsed = fpsElapsed + delta if fpsElapsed >= 0.5 then fpsNow = math.floor(fpsFrames / fpsElapsed + 0.5) fpsFrames = 0 fpsElapsed = 0 end end) ---------------------------------------------------------------- -- profile card ---------------------------------------------------------------- local profile = Instance.new("Frame") profile.Size = UDim2.new(1, -6, 0, 128) profile.BackgroundColor3 = Theme.card profile.BorderSizePixel = 0 profile.ClipsDescendants = true profile.ZIndex = 3 profile.Parent = homePage corner(profile, 16) gradient(profile, Color3.fromRGB(31, 27, 42), Color3.fromRGB(16, 14, 22), 90) stroke(profile, Theme.stroke, 1, 0.4) local profileGlow = Instance.new("Frame") profileGlow.Size = UDim2.fromOffset(200, 200) profileGlow.AnchorPoint = Vector2.new(1, 0.5) profileGlow.Position = UDim2.new(1, -2, 0.5, 0) profileGlow.BackgroundColor3 = Theme.amberDeep profileGlow.BackgroundTransparency = 0.95 profileGlow.BorderSizePixel = 0 profileGlow.ZIndex = 3 profileGlow.Parent = profile corner(profileGlow, 100) local avatar = Instance.new("Frame") avatar.Size = UDim2.fromOffset(58, 58) avatar.Position = UDim2.new(0, 18, 0, 18) avatar.BackgroundColor3 = Theme.panelTop avatar.BorderSizePixel = 0 avatar.ZIndex = 4 avatar.Parent = profile corner(avatar, 15) gradient(avatar, Color3.fromRGB(46, 38, 64), Color3.fromRGB(22, 19, 32), 90) stroke(avatar, Theme.stroke, 1, 0.4) local avatarGlow = Instance.new("Frame") avatarGlow.Size = UDim2.fromOffset(38, 38) avatarGlow.AnchorPoint = Vector2.new(0.5, 0.5) avatarGlow.Position = UDim2.new(0.5, 0, 0.5, 0) avatarGlow.BackgroundColor3 = Theme.amber avatarGlow.BackgroundTransparency = 0.9 avatarGlow.BorderSizePixel = 0 avatarGlow.ZIndex = 4 avatarGlow.Parent = avatar corner(avatarGlow, 19) local avatarRing = Instance.new("Frame") avatarRing.Size = UDim2.fromOffset(26, 26) avatarRing.AnchorPoint = Vector2.new(0.5, 0.5) avatarRing.Position = UDim2.new(0.5, 0, 0.5, 0) avatarRing.BackgroundColor3 = Theme.amber avatarRing.BorderSizePixel = 0 avatarRing.ZIndex = 5 avatarRing.Parent = avatar corner(avatarRing, 13) gradient(avatarRing, Theme.amber, Theme.amberDeep, 90) local avatarDisc = Instance.new("Frame") avatarDisc.Size = UDim2.fromOffset(19, 19) avatarDisc.AnchorPoint = Vector2.new(0.5, 0.5) avatarDisc.Position = UDim2.new(0.5, -1, 0.5, -1) avatarDisc.BackgroundColor3 = Color3.fromRGB(9, 8, 14) avatarDisc.BorderSizePixel = 0 avatarDisc.ZIndex = 6 avatarDisc.Parent = avatar corner(avatarDisc, 10) local profileName = label(profile, LocalPlayer.Name, UDim2.new(1, -200, 0, 22), 17, Enum.Font.GothamBold, Theme.text) profileName.Position = UDim2.new(0, 88, 0, 20) profileName.TextTruncate = Enum.TextTruncate.AtEnd profileName.ZIndex = 5 local profileHandle = label(profile, "@" .. tostring(LocalPlayer.UserId), UDim2.new(1, -200, 0, 14), 10, Enum.Font.GothamMedium, Theme.sub) profileHandle.Position = UDim2.new(0, 89, 0, 44) profileHandle.ZIndex = 5 local function smallChip(parent, x, y, text, accent) local width = 32 + #text * 5.6 local chip = Instance.new("Frame") chip.Size = UDim2.fromOffset(width, 22) chip.Position = UDim2.new(0, x, 0, y) chip.BackgroundColor3 = Theme.track chip.BackgroundTransparency = 0.2 chip.BorderSizePixel = 0 chip.ZIndex = 4 chip.Parent = parent corner(chip, 11) stroke(chip, Theme.stroke, 1, 0.55) local dot = Instance.new("Frame") dot.Size = UDim2.fromOffset(4, 4) dot.AnchorPoint = Vector2.new(0, 0.5) dot.Position = UDim2.new(0, 11, 0.5, 0) dot.BackgroundColor3 = accent or Theme.amber dot.BorderSizePixel = 0 dot.ZIndex = 5 dot.Parent = chip corner(dot, 2) local textLabel = label(chip, text, UDim2.new(1, -22, 1, 0), 9, Enum.Font.GothamBold, Theme.sub) textLabel.Position = UDim2.new(0, 20, 0, 0) textLabel.TextTruncate = Enum.TextTruncate.AtEnd textLabel.ZIndex = 5 return chip, textLabel, width end local serverText = "server " .. #Players:GetPlayers() .. "/" .. Players.MaxPlayers local serverChip, serverChipLabel, serverChipWidth = smallChip(profile, 88, 66, serverText) local sessionChip, sessionChipLabel = smallChip(profile, 88 + serverChipWidth + 6, 66, "session 00m 00s", Theme.violet) local versionChip = Instance.new("Frame") versionChip.Size = UDim2.fromOffset(54, 22) versionChip.AnchorPoint = Vector2.new(1, 0) versionChip.Position = UDim2.new(1, -18, 0, 18) versionChip.BackgroundColor3 = Theme.amber versionChip.BackgroundTransparency = 0.86 versionChip.BorderSizePixel = 0 versionChip.ZIndex = 4 versionChip.Parent = profile corner(versionChip, 11) stroke(versionChip, Theme.amber, 1, 0.55) label(versionChip, "v1.6", UDim2.new(1, 0, 1, 0), 9, Enum.Font.GothamBold, Theme.amber, Enum.TextXAlignment.Center).ZIndex = 5 ---------------------------------------------------------------- -- quick access ---------------------------------------------------------------- addSection(homePage, "QUICK ACCESS") local quickGrid = Instance.new("Frame") quickGrid.Size = UDim2.new(1, -6, 0, 129) quickGrid.BackgroundTransparency = 1 quickGrid.ZIndex = 3 quickGrid.Parent = homePage local quickLayout = Instance.new("UIGridLayout") quickLayout.CellSize = UDim2.new(0.3333, -6, 0, 60) quickLayout.CellPadding = UDim2.new(0, 9, 0, 9) quickLayout.SortOrder = Enum.SortOrder.LayoutOrder quickLayout.Parent = quickGrid local function quickTile(title, subtitle, accent, onClick) local tile = Instance.new("TextButton") tile.Text = "" tile.AutoButtonColor = false tile.BackgroundColor3 = Theme.card tile.BorderSizePixel = 0 tile.ZIndex = 4 tile.Parent = quickGrid corner(tile, 12) gradient(tile, Theme.cardTop, Color3.fromRGB(19, 17, 27), 90) local border = stroke(tile, Theme.stroke, 1, 0.5) local mark = Instance.new("Frame") mark.Size = UDim2.fromOffset(15, 15) mark.Position = UDim2.new(0, 12, 0, 11) mark.BackgroundColor3 = accent mark.BackgroundTransparency = 0.72 mark.BorderSizePixel = 0 mark.ZIndex = 5 mark.Parent = tile corner(mark, 5) local core = Instance.new("Frame") core.Size = UDim2.fromOffset(5, 5) core.AnchorPoint = Vector2.new(0.5, 0.5) core.Position = UDim2.new(0.5, 0, 0.5, 0) core.BackgroundColor3 = accent core.BorderSizePixel = 0 core.ZIndex = 6 core.Parent = mark corner(core, 3) local titleLabel = label(tile, title, UDim2.new(1, -22, 0, 13), 10, Enum.Font.GothamBold, Theme.text) titleLabel.Position = UDim2.new(0, 12, 0, 32) titleLabel.TextTruncate = Enum.TextTruncate.AtEnd titleLabel.ZIndex = 5 local subLabel = label(tile, subtitle, UDim2.new(1, -22, 0, 11), 8, Enum.Font.GothamMedium, Theme.sub) subLabel.Position = UDim2.new(0, 12, 0, 45) subLabel.TextTruncate = Enum.TextTruncate.AtEnd subLabel.ZIndex = 5 tile.MouseEnter:Connect(function() tw(tile, 0.15, { BackgroundColor3 = Color3.fromRGB(38, 34, 54) }) tw(border, 0.15, { Transparency = 0.2 }) end) tile.MouseLeave:Connect(function() tw(tile, 0.15, { BackgroundColor3 = Theme.card }) tw(border, 0.15, { Transparency = 0.5 }) end) tile.MouseButton1Click:Connect(function() task.spawn(function() local ok, err = pcall(onClick) if not ok then notify(tostring(err), "error") end end) end) return tile end quickTile("Commands", "run anything", Theme.amber, function() selectTab("Commands") end) quickTile("Scripts", "live editor", Theme.violet, function() selectTab("Scripts") end) quickTile("Settings", "appearance", Theme.amber, function() selectTab("Settings") end) quickTile("Hide Panel", "RightShift", Theme.violet, function() closePanel() end) quickTile("Rejoin", "new server", Theme.amber, function() TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, LocalPlayer) end) quickTile("Copy Job ID", "clipboard", Theme.violet, function() if copyToClipboard(game.JobId) then notify("Job ID copied") else notify("no clipboard in this executor", "error") end end) ---------------------------------------------------------------- -- list panels ---------------------------------------------------------------- local function listCard(page, rows) local card = Instance.new("Frame") card.Size = UDim2.new(1, -6, 0, rows * 36 + 10) card.BackgroundColor3 = Theme.card card.BorderSizePixel = 0 card.ZIndex = 3 card.Parent = page corner(card, 14) gradient(card, Theme.cardTop, Color3.fromRGB(19, 17, 27), 90) stroke(card, Theme.stroke, 1, 0.5) return card end local function listRow(card, index, total, key, value, valueColor) local row = Instance.new("Frame") row.Size = UDim2.new(1, -24, 0, 36) row.Position = UDim2.new(0, 12, 0, 5 + index * 36) row.BackgroundTransparency = 1 row.ZIndex = 4 row.Parent = card local keyLabel = label(row, key, UDim2.new(0.42, 0, 1, 0), 11, Enum.Font.GothamMedium, Theme.sub) keyLabel.ZIndex = 4 local valueLabel = label(row, value, UDim2.new(0.56, 0, 1, 0), 12, Enum.Font.GothamBold, valueColor or Theme.text, Enum.TextXAlignment.Right) valueLabel.AnchorPoint = Vector2.new(1, 0) valueLabel.Position = UDim2.new(1, 0, 0, 0) valueLabel.TextTruncate = Enum.TextTruncate.AtEnd valueLabel.ZIndex = 4 if index < total - 1 then local sep = Instance.new("Frame") sep.Size = UDim2.new(1, 0, 0, 1) sep.Position = UDim2.new(0, 0, 1, 0) sep.BackgroundColor3 = Theme.stroke sep.BackgroundTransparency = 0.6 sep.BorderSizePixel = 0 sep.ZIndex = 4 sep.Parent = row end return valueLabel end addSection(homePage, "SERVER") local serverCard = listCard(homePage, 4) local fpsRow = listRow(serverCard, 0, 4, "FPS", tostring(fpsNow) .. " fps", fpsTint(fpsNow)) local pingRow = listRow(serverCard, 1, 4, "Ping", pingText(), Theme.text) local playersRow = listRow(serverCard, 2, 4, "Players", #Players:GetPlayers() .. " / " .. Players.MaxPlayers) local placeRow = listRow(serverCard, 3, 4, "Place ID", tostring(game.PlaceId)) addSection(homePage, "SESSION") local sessionCard = listCard(homePage, 3) local playerRow = listRow(sessionCard, 0, 3, "Player", LocalPlayer.Name) local userIdRow = listRow(sessionCard, 1, 3, "User ID", tostring(LocalPlayer.UserId)) local jobRow = listRow(sessionCard, 2, 3, "Job ID", game.JobId ~= "" and game.JobId or "studio") ---------------------------------------------------------------- -- live refresh ---------------------------------------------------------------- task.spawn(function() while homePage.Parent do task.wait(0.5) fpsRow.Text = tostring(fpsNow) .. " fps" fpsRow.TextColor3 = fpsTint(fpsNow) local okPing, livePing = pcall(function() return Stats.Network.ServerStatsItem["Data Ping"]:GetValue() end) if okPing and type(livePing) == "number" then pingRow.Text = string.format("%d ms", math.floor(livePing)) pingRow.TextColor3 = pingTint(livePing) else pingRow.Text = "n/a" pingRow.TextColor3 = Theme.sub end local playerCount = #Players:GetPlayers() playersRow.Text = playerCount .. " / " .. Players.MaxPlayers serverChipLabel.Text = "server " .. playerCount .. "/" .. Players.MaxPlayers local uptime = os.clock() - sessionStart sessionChipLabel.Text = string.format("session %02dm %02ds", math.floor(uptime / 60), math.floor(uptime % 60)) end end) --============================================================== -- commands tab (every action lives here) --============================================================== local commandsPage = addTab("Commands") local commandsHint = label(commandsPage, "FAV commands auto-run when the script loads.", UDim2.new(1, -6, 0, 16), 11, Enum.Font.GothamMedium, Theme.sub) commandsHint.ZIndex = 3 local commandDefs = {} local commandRows = {} local commandOrder = 0 local activeFilter = "All" local FILTERS = { "All", "Favorites", "Custom", "Movement", "World", "Utility" } -- filter bar local filterBar = Instance.new("Frame") filterBar.Size = UDim2.new(1, -6, 0, 28) filterBar.BackgroundTransparency = 1 filterBar.ZIndex = 3 filterBar.Parent = commandsPage local filterLayout = Instance.new("UIListLayout") filterLayout.FillDirection = Enum.FillDirection.Horizontal filterLayout.Padding = UDim.new(0, 6) filterLayout.SortOrder = Enum.SortOrder.LayoutOrder filterLayout.Parent = filterBar -- command list local listHolder = Instance.new("Frame") listHolder.Size = UDim2.new(1, -6, 0, 0) listHolder.AutomaticSize = Enum.AutomaticSize.Y listHolder.BackgroundTransparency = 1 listHolder.ZIndex = 3 listHolder.Parent = commandsPage local listLayout = Instance.new("UIListLayout") listLayout.Padding = UDim.new(0, 8) listLayout.SortOrder = Enum.SortOrder.LayoutOrder listLayout.Parent = listHolder local emptyLabel = label(listHolder, "nothing here yet · favorite a command or add a custom one below", UDim2.new(1, 0, 0, 36), 11, Enum.Font.GothamMedium, Theme.sub, Enum.TextXAlignment.Center) emptyLabel.TextWrapped = true emptyLabel.LayoutOrder = 1 emptyLabel.Visible = false local filterButtons = {} local function applyFilter() local anyVisible = false for _, entry in ipairs(commandRows) do local def = entry.def local show = true if activeFilter == "Favorites" then show = commandState.favorites[def.id] == true elseif activeFilter == "Custom" then show = def.custom == true elseif activeFilter ~= "All" then show = def.group == activeFilter end entry.frame.Visible = show if show then anyVisible = true end end emptyLabel.Visible = not anyVisible end local function refreshFilterStyles() for name, parts in pairs(filterButtons) do local active = name == activeFilter parts.button.BackgroundColor3 = active and Theme.amber or Theme.card parts.button.BackgroundTransparency = active and 0.84 or 0.2 parts.text.TextColor3 = active and Theme.amber or Theme.sub parts.stroke.Color = active and Theme.amber or Theme.stroke end end for index, filterName in ipairs(FILTERS) do local btn = Instance.new("TextButton") btn.Size = UDim2.fromOffset(20 + #filterName * 6, 28) btn.BackgroundColor3 = Theme.card btn.BackgroundTransparency = 0.2 btn.Text = "" btn.AutoButtonColor = false btn.BorderSizePixel = 0 btn.LayoutOrder = index btn.ZIndex = 4 btn.Parent = filterBar corner(btn, 14) local border = stroke(btn, Theme.stroke, 1, 0.5) btn.Text = filterName btn.Font = Enum.Font.GothamBold btn.TextSize = 10 btn.TextColor3 = Theme.sub filterButtons[filterName] = { button = btn, text = btn, stroke = border } btn.MouseButton1Click:Connect(function() activeFilter = filterName refreshFilterStyles() applyFilter() end) end -- row builder local FAV_WIDTH = 34 local FAV_GAP = 8 local CONTROL_X = -(14 + FAV_WIDTH + FAV_GAP) local function buildCommandRow(def) commandOrder = commandOrder + 1 local isSlider = def.kind == "slider" local row = Instance.new("Frame") row.Size = UDim2.new(1, 0, 0, isSlider and 70 or 50) row.BackgroundColor3 = Theme.card row.BorderSizePixel = 0 row.LayoutOrder = commandOrder + 1 row.ZIndex = 3 row.Parent = listHolder corner(row, 12) gradient(row, Theme.cardTop, Color3.fromRGB(19, 17, 27), 90) stroke(row, Theme.stroke, 1, 0.5) local nameLabel = label(row, def.name, UDim2.new(1, -132, 0, 16), 12, Enum.Font.GothamMedium, Theme.text) nameLabel.Position = UDim2.new(0, 14, 0, isSlider and 11 or 8) nameLabel.TextTruncate = Enum.TextTruncate.AtEnd nameLabel.ZIndex = 4 local groupLabel = label(row, def.custom and "CUSTOM" or string.upper(def.group), UDim2.new(1, -132, 0, 12), 9, Enum.Font.GothamBold, Theme.sub) groupLabel.Position = UDim2.new(0, 14, 0, isSlider and 29 or 26) groupLabel.TextTruncate = Enum.TextTruncate.AtEnd groupLabel.ZIndex = 4 local favPill = Instance.new("TextButton") favPill.Size = UDim2.fromOffset(FAV_WIDTH, 20) favPill.AnchorPoint = Vector2.new(1, 0) favPill.Position = UDim2.new(1, -14, 0, isSlider and 13 or 15) favPill.BackgroundColor3 = Theme.track favPill.Text = "" favPill.AutoButtonColor = false favPill.BorderSizePixel = 0 favPill.ZIndex = 5 favPill.Parent = row corner(favPill, 10) local favStroke = stroke(favPill, Theme.stroke, 1, 0.6) favPill.Text = "FAV" favPill.Font = Enum.Font.GothamBold favPill.TextSize = 9 favPill.TextColor3 = Theme.sub local function renderFavorite() local active = commandState.favorites[def.id] == true favPill.BackgroundColor3 = active and Theme.amber or Theme.track favPill.BackgroundTransparency = active and 0.8 or 0.15 favPill.TextColor3 = active and Theme.amber or Theme.sub favStroke.Color = active and Theme.amber or Theme.stroke end favPill.MouseButton1Click:Connect(function() if commandState.favorites[def.id] then commandState.favorites[def.id] = nil else commandState.favorites[def.id] = true end renderFavorite() saveConfig() applyFilter() end) renderFavorite() if def.kind == "toggle" then local pill = Instance.new("TextButton") pill.Size = UDim2.fromOffset(42, 24) pill.AnchorPoint = Vector2.new(1, 0) pill.Position = UDim2.new(1, CONTROL_X, 0, 13) pill.BackgroundColor3 = Theme.track pill.Text = "" pill.AutoButtonColor = false pill.BorderSizePixel = 0 pill.ZIndex = 5 pill.Parent = row corner(pill, 12) local pillStroke = stroke(pill, Theme.stroke, 1, 0.4) local knob = Instance.new("Frame") knob.Size = UDim2.fromOffset(18, 18) knob.AnchorPoint = Vector2.new(0, 0.5) knob.Position = UDim2.new(0, 3, 0.5, 0) knob.BackgroundColor3 = Color3.fromRGB(196, 192, 212) knob.BorderSizePixel = 0 knob.ZIndex = 6 knob.Parent = pill corner(knob, 9) local on = def.value == true local function render(animate) local info = TweenInfo.new(animate and 0.18 or 0, Enum.EasingStyle.Quad, Enum.EasingDirection.Out) TweenService:Create(knob, info, { Position = on and UDim2.new(0, 21, 0.5, 0) or UDim2.new(0, 3, 0.5, 0), BackgroundColor3 = on and Color3.fromRGB(255, 247, 235) or Color3.fromRGB(196, 192, 212), }):Play() TweenService:Create(pill, info, { BackgroundColor3 = on and Theme.amberDeep or Theme.track, }):Play() TweenService:Create(pillStroke, info, { Color = on and Theme.amber or Theme.stroke, }):Play() end local function setValue(value, fire) on = value and true or false def.value = on render(true) if fire then local ok, err = pcall(def.run, on) if not ok then notify(tostring(err), "error") end end end pill.MouseButton1Click:Connect(function() setValue(not on, true) end) render(false) def.control = { Set = function(value) on = value and true or false def.value = on render(false) end, } elseif def.kind == "slider" then local valueChip = Instance.new("Frame") valueChip.Size = UDim2.fromOffset(50, 20) valueChip.AnchorPoint = Vector2.new(1, 0) valueChip.Position = UDim2.new(1, CONTROL_X, 0, 13) valueChip.BackgroundColor3 = Theme.track valueChip.BorderSizePixel = 0 valueChip.ZIndex = 4 valueChip.Parent = row corner(valueChip, 10) stroke(valueChip, Theme.stroke, 1, 0.6) local valueLabel = label(valueChip, "", UDim2.new(1, 0, 1, 0), 10, Enum.Font.GothamBold, Theme.amber, Enum.TextXAlignment.Center) valueLabel.ZIndex = 5 local track = Instance.new("Frame") track.Size = UDim2.new(1, -28, 0, 6) track.Position = UDim2.new(0, 14, 0, 50) track.BackgroundColor3 = Theme.track track.BorderSizePixel = 0 track.ZIndex = 4 track.Parent = row corner(track, 3) local fill = Instance.new("Frame") fill.Size = UDim2.new(0, 0, 1, 0) fill.BackgroundColor3 = Theme.amber fill.BorderSizePixel = 0 fill.ZIndex = 5 fill.Parent = track corner(fill, 3) gradient(fill, Theme.amber, Theme.amberDeep, 0) local sliderKnob = Instance.new("Frame") sliderKnob.Size = UDim2.fromOffset(14, 14) sliderKnob.AnchorPoint = Vector2.new(0.5, 0.5) sliderKnob.Position = UDim2.new(0, 0, 0.5, 0) sliderKnob.BackgroundColor3 = Color3.fromRGB(255, 248, 236) sliderKnob.BorderSizePixel = 0 sliderKnob.ZIndex = 6 sliderKnob.Parent = track corner(sliderKnob, 7) stroke(sliderKnob, Theme.amber, 2, 0.15) local hitbox = Instance.new("TextButton") hitbox.Text = "" hitbox.AutoButtonColor = false hitbox.BackgroundTransparency = 1 hitbox.Size = UDim2.new(1, 0, 0, 24) hitbox.Position = UDim2.new(0, 0, 0, 40) hitbox.ZIndex = 7 hitbox.Parent = row local fmt = "%.0f" if def.step and def.step < 1 then fmt = "%.1f" end local function render(value) local alpha = 0 if def.max > def.min then alpha = math.clamp((value - def.min) / (def.max - def.min), 0, 1) end fill.Size = UDim2.new(alpha, 0, 1, 0) sliderKnob.Position = UDim2.new(alpha, 0, 0.5, 0) valueLabel.Text = string.format(fmt, value) end local function setValue(value, fire) if def.step then value = math.floor(value / def.step + 0.5) * def.step end value = math.clamp(value, def.min, def.max) def.value = value render(value) if fire then local ok, err = pcall(def.run, value) if not ok then notify(tostring(err), "error") end end end local function valueFromX(x) local width = math.max(track.AbsoluteSize.X, 1) local alpha = math.clamp((x - track.AbsolutePosition.X) / width, 0, 1) return def.min + (def.max - def.min) * alpha end local sliding = false hitbox.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then sliding = true setValue(valueFromX(input.Position.X), true) end end) UserInputService.InputChanged:Connect(function(input) if not sliding then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then setValue(valueFromX(input.Position.X), true) end end) UserInputService.InputEnded:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then sliding = false end end) def.control = { Set = function(value) def.value = math.clamp(value, def.min, def.max) render(def.value) end, } render(def.value) else local runBtn = Instance.new("TextButton") runBtn.Size = UDim2.fromOffset(52, 24) runBtn.AnchorPoint = Vector2.new(1, 0) runBtn.Position = UDim2.new(1, CONTROL_X, 0, 13) runBtn.BackgroundColor3 = Theme.track runBtn.Text = "" runBtn.AutoButtonColor = false runBtn.BorderSizePixel = 0 runBtn.ZIndex = 5 runBtn.Parent = row corner(runBtn, 12) stroke(runBtn, Theme.stroke, 1, 0.5) runBtn.Text = "RUN" runBtn.Font = Enum.Font.GothamBold runBtn.TextSize = 9 runBtn.TextColor3 = Theme.amber runBtn.MouseEnter:Connect(function() tw(runBtn, 0.15, { BackgroundColor3 = Color3.fromRGB(44, 37, 60), TextColor3 = Theme.text }) end) runBtn.MouseLeave:Connect(function() tw(runBtn, 0.15, { BackgroundColor3 = Theme.track, TextColor3 = Theme.amber }) end) runBtn.MouseButton1Click:Connect(function() task.spawn(function() local ok, err = pcall(def.run) if not ok then notify(tostring(err), "error") end end) end) end table.insert(commandRows, { def = def, frame = row }) applyFilter() return row end local function defineCommand(def) table.insert(commandDefs, def) return def end -- built-in command library defineCommand({ id = "walkspeed", name = "WalkSpeed", group = "Movement", kind = "slider", min = 8, max = 500, step = 1, value = 16, auto = true, run = function(value) state.walkSpeed = value local humanoid = getHumanoid() if humanoid then humanoid.WalkSpeed = value end end, }) defineCommand({ id = "jumppower", name = "JumpPower", group = "Movement", kind = "slider", min = 50, max = 500, step = 1, value = 50, auto = true, run = function(value) state.jumpPower = value local humanoid = getHumanoid() if humanoid then humanoid.UseJumpPower = true humanoid.JumpPower = value end end, }) defineCommand({ id = "infinitejump", name = "Infinite Jump", group = "Movement", kind = "toggle", value = false, auto = true, run = function(on) state.infiniteJump = on end, }) defineCommand({ id = "noclip", name = "No Clip", group = "Movement", kind = "toggle", value = false, auto = true, run = function(on) setNoclip(on) end, }) defineCommand({ id = "freeze", name = "Freeze Position", group = "Movement", kind = "toggle", value = false, auto = true, run = function(on) setAnchored(on) end, }) defineCommand({ id = "spawn", name = "Teleport to Spawn", group = "Movement", kind = "button", auto = false, run = function() teleportToSpawn() end, }) defineCommand({ id = "heal", name = "Heal Character", group = "Movement", kind = "button", auto = false, run = function() local humanoid = getHumanoid() if not humanoid then notify("No character found", "error") return end humanoid.Health = humanoid.MaxHealth notify("Healed to full") end, }) defineCommand({ id = "reset", name = "Reset Character", group = "Movement", kind = "button", auto = false, run = function() local humanoid = getHumanoid() if humanoid then humanoid.Health = 0 end end, }) defineCommand({ id = "fullbright", name = "Fullbright", group = "World", kind = "toggle", value = false, auto = true, run = function(on) state.fullbright = on setFullbright(on) end, }) defineCommand({ id = "clocktime", name = "Clock Time", group = "World", kind = "slider", min = 0, max = 24, step = 0.5, value = math.clamp(Lighting.ClockTime, 0, 24), auto = true, run = function(value) Lighting.ClockTime = value end, }) defineCommand({ id = "gravity", name = "Gravity", group = "World", kind = "slider", min = 0, max = 300, step = 1, value = math.clamp(Workspace.Gravity, 0, 300), auto = true, run = function(value) Workspace.Gravity = value end, }) defineCommand({ id = "restorelighting", name = "Restore Lighting", group = "World", kind = "button", auto = false, run = function() state.fullbright = false if lightingBackup then for property, value in pairs(lightingBackup) do Lighting[property] = value end lightingBackup = nil notify("Lighting restored") else notify("Nothing to restore", "info") end end, }) defineCommand({ id = "copyjobid", name = "Copy Job ID", group = "Utility", kind = "button", auto = false, run = function() if copyToClipboard(game.JobId) then notify("Job ID copied to clipboard") else notify("This executor has no clipboard function", "error") end end, }) defineCommand({ id = "copyposition", name = "Copy Position", group = "Utility", kind = "button", auto = false, run = function() local root = getRoot() if not root then notify("No character position found", "error") return end local pos = root.Position local text = string.format("%.0f, %.0f, %.0f", pos.X, pos.Y, pos.Z) if copyToClipboard(text) then notify("Copied position " .. text) else notify(text) end end, }) defineCommand({ id = "rejoin", name = "Rejoin Server", group = "Utility", kind = "button", auto = false, run = function() notify("Rejoining…", "info") task.wait(0.4) TeleportService:TeleportToPlaceInstance(game.PlaceId, game.JobId, LocalPlayer) end, }) defineCommand({ id = "hidepanel", name = "Hide Panel", group = "Utility", kind = "button", auto = false, run = function() closePanel() end, }) -- custom commands (saved ones first) local function makeCustomDef(entry) return { id = "custom:" .. string.lower(entry.name), name = entry.name, group = "Custom", kind = "button", custom = true, auto = entry.auto == true, code = entry.code, run = function() local loader = loadstring or load if type(loader) ~= "function" then error("this executor has no loadstring") end local chunk, compileError = loader(entry.code) if not chunk then error("compile error: " .. tostring(compileError)) end if setfenv and getfenv then pcall(setfenv, chunk, getfenv(0)) end chunk() end, } end for _, entry in ipairs(commandState.customDefs) do table.insert(commandDefs, makeCustomDef(entry)) end for _, def in ipairs(commandDefs) do buildCommandRow(def) end refreshFilterStyles() applyFilter() -- add custom command form addSection(commandsPage, "ADD CUSTOM COMMAND") local nameWrap = Instance.new("Frame") nameWrap.Size = UDim2.new(1, -6, 0, 38) nameWrap.BackgroundColor3 = Theme.void nameWrap.BorderSizePixel = 0 nameWrap.ZIndex = 3 nameWrap.Parent = commandsPage corner(nameWrap, 10) stroke(nameWrap, Theme.stroke, 1, 0.45) local nameBox = Instance.new("TextBox") nameBox.Size = UDim2.new(1, -24, 1, 0) nameBox.Position = UDim2.new(0, 12, 0, 0) nameBox.BackgroundTransparency = 1 nameBox.Text = "" nameBox.PlaceholderText = "command name" nameBox.PlaceholderColor3 = Theme.sub nameBox.Font = Enum.Font.Gotham nameBox.TextSize = 12 nameBox.TextColor3 = Theme.text nameBox.TextXAlignment = Enum.TextXAlignment.Left nameBox.ClearTextOnFocus = false nameBox.ZIndex = 4 nameBox.Parent = nameWrap local codeWrap = Instance.new("Frame") codeWrap.Size = UDim2.new(1, -6, 0, 96) codeWrap.BackgroundColor3 = Theme.void codeWrap.BorderSizePixel = 0 codeWrap.ZIndex = 3 codeWrap.Parent = commandsPage corner(codeWrap, 10) stroke(codeWrap, Theme.stroke, 1, 0.45) local codeBox = Instance.new("TextBox") codeBox.Size = UDim2.new(1, -20, 1, -16) codeBox.Position = UDim2.new(0, 10, 0, 8) codeBox.BackgroundTransparency = 1 codeBox.Multiline = true codeBox.ClearTextOnFocus = false codeBox.TextXAlignment = Enum.TextXAlignment.Left codeBox.TextYAlignment = Enum.TextYAlignment.Top codeBox.Font = Enum.Font.Code codeBox.TextSize = 12 codeBox.TextColor3 = Theme.code codeBox.PlaceholderText = "-- Luau this command runs" codeBox.PlaceholderColor3 = Theme.sub codeBox.Text = "" codeBox.ZIndex = 4 codeBox.Parent = codeWrap local pendingAuto = true addToggle(commandsPage, "Run this command on load", true, function(on) pendingAuto = on end) addButton(commandsPage, "Add Command", function() local rawName = nameBox.Text or "" local code = codeBox.Text or "" local name = rawName:gsub("^%s+", ""):gsub("%s+$", "") if name == "" then notify("Give the command a name", "error") return end if code:match("^%s*$") then notify("Paste some Luau first", "error") return end for _, def in ipairs(commandDefs) do if string.lower(def.name) == string.lower(name) then notify("A command with that name already exists", "error") return end end local loader = loadstring or load if type(loader) ~= "function" then notify("This executor has no loadstring", "error") return end local chunk, compileError = loader(code) if not chunk then notify("Compile error: " .. tostring(compileError), "error") return end local entry = { name = name, code = code, auto = pendingAuto } table.insert(commandState.customDefs, entry) local def = makeCustomDef(entry) table.insert(commandDefs, def) buildCommandRow(def) saveConfig() nameBox.Text = "" codeBox.Text = "" activeFilter = "Custom" refreshFilterStyles() applyFilter() notify("Added custom command: " .. name, "info") end, "accent") --============================================================== -- scripts tab --============================================================== local scriptPage = addTab("Scripts") local hint = label(scriptPage, "Paste Luau below and it runs in this game.", UDim2.new(1, -6, 0, 16), 11, Enum.Font.GothamMedium, Theme.sub) hint.TextWrapped = true hint.ZIndex = 3 local editorFrame = Instance.new("Frame") editorFrame.Size = UDim2.new(1, -6, 0, 158) editorFrame.BackgroundColor3 = Theme.void editorFrame.BorderSizePixel = 0 editorFrame.ZIndex = 3 editorFrame.Parent = scriptPage corner(editorFrame, 14) gradient(editorFrame, Color3.fromRGB(12, 11, 18), Color3.fromRGB(18, 16, 25), 90) stroke(editorFrame, Theme.stroke, 1, 0.35) local editor = Instance.new("TextBox") editor.Size = UDim2.new(1, -24, 1, -20) editor.Position = UDim2.new(0, 12, 0, 10) editor.BackgroundTransparency = 1 editor.Multiline = true editor.ClearTextOnFocus = false editor.TextXAlignment = Enum.TextXAlignment.Left editor.TextYAlignment = Enum.TextYAlignment.Top editor.Font = Enum.Font.Code editor.TextSize = 13 editor.TextColor3 = Theme.code editor.PlaceholderText = "-- eclipes · write something bright" editor.PlaceholderColor3 = Theme.sub editor.Text = "" editor.ZIndex = 4 editor.Parent = editorFrame addButton(scriptPage, "Run Script", function() local source = editor.Text if source == nil or source:match("^%s*$") then notify("Editor is empty", "error") return end local loader = loadstring or load if type(loader) ~= "function" then notify("This executor has no loadstring", "error") return end local chunk, compileError = loader(source) if not chunk then notify("Compile error: " .. tostring(compileError), "error") return end if setfenv and getfenv then pcall(setfenv, chunk, getfenv(0)) end local ok, runError = pcall(chunk) if ok then notify("Script finished", "info") else notify("Runtime error: " .. tostring(runError), "error") end end, "accent") addButton(scriptPage, "Clear Editor", function() editor.Text = "" end) --============================================================== -- settings tab --============================================================== local settingsPage = addTab("Settings") addSection(settingsPage, "INTERFACE") addSlider(settingsPage, "UI Scale", 0.7, 1.3, 1, 0.05, function(value) uiScale.Scale = value end) addToggle(settingsPage, "Notifications", true, function(on) notificationsEnabled = on end) addButton(settingsPage, "Reset Window Position", function() local wasMinimized = minimized minimized = false body.Visible = true footer.Visible = true if wasMinimized then tw(window, 0.25, { Size = UDim2.fromOffset(WINDOW_W, WINDOW_H) }, Enum.EasingStyle.Quart) end centerWindow() clampWindow() notify("Window position reset") end) addSection(settingsPage, "ALERTS") addToggle(settingsPage, "Ping Alerts · top right", true, function(on) pingAlertsEnabled = on end) addSlider(settingsPage, "Ping Threshold (ms)", 50, 500, 150, 10, function(value) pingThreshold = value end) addSection(settingsPage, "ABOUT") addInfoRow(settingsPage, "Version", "eclipes v1.6 · orbit") addInfoRow(settingsPage, "Toggle keybind", "RightShift") addInfoRow(settingsPage, "Executor", executorName()) addSection(settingsPage, "PANEL") addInfoRow(settingsPage, "Reopen", "floating eclipse button") addButton(settingsPage, "Close eclipes", function() closePanel() notify("eclipes closed · click the eclipse button to reopen", "info") end, "danger") addButton(settingsPage, "Unload Completely", function() gui:Destroy() end) --============================================================== -- footer --============================================================== footer = Instance.new("Frame") footer.Name = "footer" footer.Size = UDim2.new(1, 0, 0, FOOTER_H) footer.Position = UDim2.new(0, 0, 1, -FOOTER_H) footer.BackgroundColor3 = Theme.void footer.BackgroundTransparency = 0.65 footer.BorderSizePixel = 0 footer.ZIndex = 3 footer.Parent = window local footerLine = Instance.new("Frame") footerLine.Size = UDim2.new(1, -36, 0, 1) footerLine.Position = UDim2.new(0, 18, 0, 0) footerLine.BackgroundColor3 = Theme.stroke footerLine.BackgroundTransparency = 0.6 footerLine.BorderSizePixel = 0 footerLine.ZIndex = 4 footerLine.Parent = footer local footerDot = Instance.new("Frame") footerDot.Size = UDim2.fromOffset(6, 6) footerDot.Position = UDim2.new(0, 20, 0.5, 0) footerDot.AnchorPoint = Vector2.new(0, 0.5) footerDot.BackgroundColor3 = Theme.amber footerDot.BorderSizePixel = 0 footerDot.ZIndex = 4 footerDot.Parent = footer corner(footerDot, 3) local footerText = label(footer, "eclipes v1.6 · " .. executorName(), UDim2.new(0, 300, 1, 0), 10, Enum.Font.GothamMedium, Theme.sub) footerText.Position = UDim2.new(0, 33, 0, 0) footerText.ZIndex = 4 local footerHint = label(footer, "RightShift · toggle", UDim2.new(0, 160, 1, 0), 10, Enum.Font.GothamMedium, Theme.sub, Enum.TextXAlignment.Right) footerHint.Position = UDim2.new(1, -176, 0, 0) footerHint.ZIndex = 4 task.spawn(function() while footerDot.Parent do tw(footerDot, 1.4, { BackgroundTransparency = 0.65 }, Enum.EasingStyle.Sine) task.wait(1.4) tw(footerDot, 1.4, { BackgroundTransparency = 0 }, Enum.EasingStyle.Sine) task.wait(1.4) end end) --============================================================== -- reopen launcher (survives closing the panel) --============================================================== if not launcher then launcher = Instance.new("TextButton") launcher.Name = "launcher" launcher.AnchorPoint = Vector2.new(0, 0) launcher.Size = UDim2.fromOffset(54, 54) local bootViewport = (Workspace.CurrentCamera and Workspace.CurrentCamera.ViewportSize) or Vector2.new(1280, 720) launcher.Position = UDim2.fromOffset(24, math.max(24, math.floor(bootViewport.Y * 0.5 - 27))) launcher.BackgroundColor3 = Theme.panelTop launcher.BackgroundTransparency = 0.05 launcher.Text = "" launcher.AutoButtonColor = false launcher.BorderSizePixel = 0 launcher.Visible = true launcher.ZIndex = 30 launcher.Parent = root corner(launcher, 27) gradient(launcher, Color3.fromRGB(35, 29, 48), Color3.fromRGB(15, 13, 21), 90) local launcherStroke = stroke(launcher, Theme.amber, 1, 0.35) -- orbit logo: a sun core with two tilted orbits and live satellites local orbitGlow = Instance.new("Frame") orbitGlow.Size = UDim2.fromOffset(40, 40) orbitGlow.AnchorPoint = Vector2.new(0.5, 0.5) orbitGlow.Position = UDim2.new(0.5, 0, 0.5, 0) orbitGlow.BackgroundColor3 = Theme.amber orbitGlow.BackgroundTransparency = 0.88 orbitGlow.BorderSizePixel = 0 orbitGlow.ZIndex = 31 orbitGlow.Parent = launcher corner(orbitGlow, 20) -- second orbit lives in a rotated container so it sits on a tilt local orbitTilt = Instance.new("Frame") orbitTilt.Size = UDim2.fromOffset(40, 40) orbitTilt.AnchorPoint = Vector2.new(0.5, 0.5) orbitTilt.Position = UDim2.new(0.5, 0, 0.5, 0) orbitTilt.BackgroundTransparency = 1 orbitTilt.Rotation = -38 orbitTilt.ZIndex = 32 orbitTilt.Parent = launcher local orbitRingB = Instance.new("Frame") orbitRingB.Size = UDim2.fromOffset(34, 13) orbitRingB.AnchorPoint = Vector2.new(0.5, 0.5) orbitRingB.Position = UDim2.new(0.5, 0, 0.5, 0) orbitRingB.BackgroundTransparency = 1 orbitRingB.BorderSizePixel = 0 orbitRingB.ZIndex = 32 orbitRingB.Parent = orbitTilt corner(orbitRingB, 7) stroke(orbitRingB, Theme.violet, 1.5, 0.5) local orbitRingA = Instance.new("Frame") orbitRingA.Size = UDim2.fromOffset(38, 16) orbitRingA.AnchorPoint = Vector2.new(0.5, 0.5) orbitRingA.Position = UDim2.new(0.5, 0, 0.5, 0) orbitRingA.BackgroundTransparency = 1 orbitRingA.BorderSizePixel = 0 orbitRingA.ZIndex = 33 orbitRingA.Parent = launcher corner(orbitRingA, 8) stroke(orbitRingA, Theme.amber, 1.5, 0.45) local orbitDotA = Instance.new("Frame") orbitDotA.Size = UDim2.fromOffset(5, 5) orbitDotA.AnchorPoint = Vector2.new(0.5, 0.5) orbitDotA.Position = UDim2.new(0.5, 18, 0.5, 0) orbitDotA.BackgroundColor3 = Color3.fromRGB(255, 235, 205) orbitDotA.BorderSizePixel = 0 orbitDotA.ZIndex = 35 orbitDotA.Parent = launcher corner(orbitDotA, 3) local orbitDotB = Instance.new("Frame") orbitDotB.Size = UDim2.fromOffset(4, 4) orbitDotB.AnchorPoint = Vector2.new(0.5, 0.5) orbitDotB.Position = UDim2.new(0.5, 15, 0.5, 0) orbitDotB.BackgroundColor3 = Theme.violet orbitDotB.BorderSizePixel = 0 orbitDotB.ZIndex = 34 orbitDotB.Parent = orbitTilt corner(orbitDotB, 2) local orbitSun = Instance.new("Frame") orbitSun.Size = UDim2.fromOffset(13, 13) orbitSun.AnchorPoint = Vector2.new(0.5, 0.5) orbitSun.Position = UDim2.new(0.5, 0, 0.5, 0) orbitSun.BackgroundColor3 = Theme.amber orbitSun.BorderSizePixel = 0 orbitSun.ZIndex = 36 orbitSun.Parent = launcher corner(orbitSun, 7) gradient(orbitSun, Color3.fromRGB(255, 233, 196), Theme.amberDeep, 90) stroke(orbitSun, Color3.fromRGB(255, 224, 172), 1, 0.35) -- satellites revolve, and fade slightly as they pass behind the core local orbitAngle = 0 local orbitConnection orbitConnection = RunService.RenderStepped:Connect(function(delta) if not launcher.Parent then orbitConnection:Disconnect() return end orbitAngle = orbitAngle + delta * 1.7 local angleA = orbitAngle orbitDotA.Position = UDim2.new(0.5, math.cos(angleA) * 18, 0.5, math.sin(angleA) * 7) orbitDotA.BackgroundTransparency = 0.05 + (1 - math.sin(angleA)) * 0.2 local angleB = -orbitAngle * 1.3 + 1.1 orbitDotB.Position = UDim2.new(0.5, math.cos(angleB) * 15, 0.5, math.sin(angleB) * 5.5) orbitDotB.BackgroundTransparency = 0.1 + (1 - math.sin(angleB)) * 0.2 end) task.spawn(function() while orbitGlow.Parent do tw(orbitGlow, 1.7, { Size = UDim2.fromOffset(44, 44), BackgroundTransparency = 0.94 }, Enum.EasingStyle.Sine) task.wait(1.7) tw(orbitGlow, 1.7, { Size = UDim2.fromOffset(36, 36), BackgroundTransparency = 0.8 }, Enum.EasingStyle.Sine) task.wait(1.7) end end) local tip = Instance.new("Frame") tip.Size = UDim2.fromOffset(110, 26) tip.AnchorPoint = Vector2.new(0, 0.5) tip.Position = UDim2.new(0, 64, 0.5, 0) tip.BackgroundColor3 = Theme.panelTop tip.BackgroundTransparency = 1 tip.BorderSizePixel = 0 tip.ZIndex = 30 tip.Parent = launcher corner(tip, 10) local tipStroke = stroke(tip, Theme.stroke, 1, 1) local tipLabel = label(tip, "open eclipes", UDim2.new(1, 0, 1, 0), 11, Enum.Font.GothamBold, Theme.amber, Enum.TextXAlignment.Center) tipLabel.TextTransparency = 1 tipLabel.ZIndex = 31 launcher.MouseEnter:Connect(function() tw(launcher, 0.2, { Size = UDim2.fromOffset(58, 58) }) tw(launcherStroke, 0.2, { Transparency = 0.1 }) tw(tip, 0.2, { BackgroundTransparency = 0.05 }) tw(tipStroke, 0.2, { Transparency = 0.3 }) tw(tipLabel, 0.2, { TextTransparency = 0 }) end) launcher.MouseLeave:Connect(function() tw(launcher, 0.2, { Size = UDim2.fromOffset(54, 54) }) tw(launcherStroke, 0.2, { Transparency = 0.35 }) tw(tip, 0.2, { BackgroundTransparency = 1 }) tw(tipStroke, 0.2, { Transparency = 1 }) tw(tipLabel, 0.2, { TextTransparency = 1 }) end) local function clampLauncher() local cam = Workspace.CurrentCamera local viewport = (cam and cam.ViewportSize) or Vector2.new(1280, 720) local scale = uiScale.Scale local width = launcher.Size.X.Offset * scale local height = launcher.Size.Y.Offset * scale local x = math.clamp(launcher.Position.X.Offset, 8, math.max(8, viewport.X - width - 8)) local y = math.clamp(launcher.Position.Y.Offset, 8, math.max(8, viewport.Y - height - 8)) launcher.Position = UDim2.fromOffset(x, y) end local launcherDragging = false local launcherMoved = false local launcherStart = Vector2.new() local launcherOrigin = UDim2.new() launcher.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then launcherDragging = true launcherMoved = false launcherStart = input.Position launcherOrigin = launcher.Position end end) UserInputService.InputChanged:Connect(function(input) if not launcherDragging then return end if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local delta = input.Position - launcherStart if delta.Magnitude > 5 then launcherMoved = true end local scale = uiScale.Scale launcher.Position = UDim2.fromOffset( launcherOrigin.X.Offset + delta.X / scale, launcherOrigin.Y.Offset + delta.Y / scale ) end end) UserInputService.InputEnded:Connect(function(input) if not launcherDragging then return end if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then launcherDragging = false if launcherMoved then clampLauncher() else setPanelOpen(true) end end end) end function setPanelOpen(open) panelOpen = open and true or false if panelOpen then if minimized then minimized = false body.Visible = true footer.Visible = true window.Size = UDim2.fromOffset(WINDOW_W, WINDOW_H) end clampWindow() window.Visible = true shadow.Visible = true halo.Visible = true launcher.Visible = true else window.Visible = false shadow.Visible = false halo.Visible = false launcher.Visible = true end gui.Enabled = true end --============================================================== -- (drag + keybind are wired just after the header controls) --============================================================== -- keybind already wired above, intentionally not duplicated here --============================================================== -- boot --============================================================== selectTab("Home") applyMovement() -- favourites auto-run on load local autoRan = 0 for _, def in ipairs(commandDefs) do if commandState.favorites[def.id] and def.auto then local ok = pcall(function() if def.kind == "slider" then def.run(def.value) if def.control and def.control.Set then def.control.Set(def.value) end else def.run(true) if def.control and def.control.Set then def.control.Set(true) end end end) if ok then autoRan = autoRan + 1 end end end if autoRan > 0 then notify(autoRan .. " favourite command(s) auto-ran", "info") end notify("eclipes v1.6 loaded · RightShift toggles", "info") task.delay(0.8, function() notify("running on " .. executorName()) end) bootComplete = true