--// HOURS Subject Potions GUI (Pink/Black) --// Drag-enabled + opacity variable at top --// Unload hotkey: M (FULL unload: disconnects + destroys GUI) -- ========================= -- SETTINGS (EDIT THESE) -- ========================= local UI_OPACITY = 0.15 -- 0.00 = fully transparent, 1.00 = fully opaque -- ========================= -- FULL UNLOAD + SINGLETON -- ========================= local SINGLETON_KEY = "__HOURS_POTIONS_GUI_SINGLETON__" local function safeDisconnect(conn) if conn and typeof(conn) == "RBXScriptConnection" then pcall(function() conn:Disconnect() end) end end if getgenv and getgenv()[SINGLETON_KEY] and type(getgenv()[SINGLETON_KEY]) == "table" then pcall(function() local old = getgenv()[SINGLETON_KEY] if old.Unload then old.Unload() end end) end local Players = game:GetService("Players") local UserInputService = game:GetService("UserInputService") local TextService = game:GetService("TextService") local lp = Players.LocalPlayer local pg = lp:WaitForChild("PlayerGui") local connections = {} local gui local function Unload() for _, c in ipairs(connections) do safeDisconnect(c) end table.clear(connections) if gui then pcall(function() gui:Destroy() end) gui = nil end if getgenv then getgenv()[SINGLETON_KEY] = nil end end if getgenv then getgenv()[SINGLETON_KEY] = { Unload = Unload } end -- ========================= -- POTION DATA -- ========================= local potions = { { name = "Life", imbue = "L L L L", throw = "R L L L" }, { name = "Water", imbue = "L L L R", throw = "R L L R" }, { name = "Crystal", imbue = "L L L Q", throw = "R L L Q" }, { name = "Earth", imbue = "L L R L", throw = "R L R L" }, { name = "Wind", imbue = "L L R R", throw = "R L R R" }, { name = "Blood", imbue = "L L R Q", throw = "R L R Q" }, { name = "Lightning", imbue = "L R L Q", throw = "R R L Q" }, { name = "Poison", imbue = "L R L R", throw = "R R L R" }, { name = "Fire", imbue = "L R L L", throw = "R R L L" }, { name = "Shadow", imbue = "L R R L", throw = "R R R L" }, { name = "Frost", imbue = "L R R R", throw = "R R R R" }, { name = "Nether", imbue = "L R R Q", throw = "R R R Q" }, } local function buildPotionText() local lines = {} table.insert(lines, "HOURS • Subject Potions") table.insert(lines, "------------------------") table.insert(lines, "") for _, p in ipairs(potions) do table.insert(lines, string.format("%s (Imbue): %s", p.name, p.imbue)) table.insert(lines, string.format("%s (Throw): %s", p.name, p.throw)) table.insert(lines, "") end return table.concat(lines, "\n") end -- ========================= -- SIMPLE DRAG HELPER (Frame drag) -- ========================= local function makeDraggable(frame, dragHandle) dragHandle = dragHandle or frame local dragging = false local dragStart, startPos local dragConn1, dragConn2 local function update(input) local delta = input.Position - dragStart frame.Position = UDim2.new( startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y ) end dragConn1 = dragHandle.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = frame.Position local endedConn endedConn = input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false safeDisconnect(endedConn) end end) end end) dragConn2 = dragHandle.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then local moveConn moveConn = UserInputService.InputChanged:Connect(function(i) if dragging and i == input then update(i) end end) -- keep it lightweight: disconnect after drag ends table.insert(connections, moveConn) end end) table.insert(connections, dragConn1) table.insert(connections, dragConn2) end -- ========================= -- GUI -- ========================= gui = Instance.new("ScreenGui") gui.Name = "HoursPotionsGui" gui.ResetOnSpawn = false gui.IgnoreGuiInset = true gui.Parent = pg local main = Instance.new("Frame") main.Name = "Main" main.AnchorPoint = Vector2.new(0.5, 0.5) main.Position = UDim2.new(0.5, 0, 0.5, 0) main.Size = UDim2.new(0, 520, 0, 420) main.BackgroundColor3 = Color3.fromRGB(10, 10, 12) main.BackgroundTransparency = math.clamp(1 - UI_OPACITY, 0, 1) main.BorderSizePixel = 0 main.Parent = gui local stroke = Instance.new("UIStroke") stroke.Thickness = 2 stroke.Color = Color3.fromRGB(255, 105, 180) stroke.Parent = main local corner = Instance.new("UICorner") corner.CornerRadius = UDim.new(0, 12) corner.Parent = main local title = Instance.new("TextLabel") title.Name = "Title" title.BackgroundTransparency = 1 title.Position = UDim2.new(0, 16, 0, 10) title.Size = UDim2.new(1, -32, 0, 28) title.Font = Enum.Font.GothamBold title.TextSize = 20 title.TextXAlignment = Enum.TextXAlignment.Left title.TextColor3 = Color3.fromRGB(255, 105, 180) title.Text = "Subject Potions • Craft Combos" title.Parent = main local closeHint = Instance.new("TextLabel") closeHint.Name = "CloseHint" closeHint.BackgroundTransparency = 1 closeHint.Position = UDim2.new(0, 16, 0, 38) closeHint.Size = UDim2.new(1, -32, 0, 18) closeHint.Font = Enum.Font.Gotham closeHint.TextSize = 13 closeHint.TextXAlignment = Enum.TextXAlignment.Left closeHint.TextColor3 = Color3.fromRGB(210, 210, 210) closeHint.Text = "Drag the title bar • Press M to unload" closeHint.Parent = main local scroll = Instance.new("ScrollingFrame") scroll.Name = "Scroll" scroll.Position = UDim2.new(0, 16, 0, 64) scroll.Size = UDim2.new(1, -32, 1, -110) scroll.BackgroundColor3 = Color3.fromRGB(16, 16, 20) scroll.BackgroundTransparency = math.clamp(1 - UI_OPACITY, 0, 1) scroll.BorderSizePixel = 0 scroll.ScrollBarThickness = 8 scroll.ScrollingDirection = Enum.ScrollingDirection.Y scroll.CanvasSize = UDim2.new(0, 0, 0, 0) scroll.Parent = main local scrollCorner = Instance.new("UICorner") scrollCorner.CornerRadius = UDim.new(0, 10) scrollCorner.Parent = scroll local scrollStroke = Instance.new("UIStroke") scrollStroke.Thickness = 1 scrollStroke.Color = Color3.fromRGB(255, 105, 180) scrollStroke.Transparency = 0.35 scrollStroke.Parent = scroll local pad = Instance.new("UIPadding") pad.PaddingTop = UDim.new(0, 10) pad.PaddingBottom = UDim.new(0, 10) pad.PaddingLeft = UDim.new(0, 10) pad.PaddingRight = UDim.new(0, 10) pad.Parent = scroll local content = Instance.new("TextLabel") content.Name = "Content" content.BackgroundTransparency = 1 content.Size = UDim2.new(1, -20, 0, 0) content.Position = UDim2.new(0, 0, 0, 0) content.Font = Enum.Font.Code content.TextSize = 16 content.TextXAlignment = Enum.TextXAlignment.Left content.TextYAlignment = Enum.TextYAlignment.Top content.TextColor3 = Color3.fromRGB(245, 245, 245) content.TextWrapped = true content.RichText = false content.Parent = scroll local tip = Instance.new("TextLabel") tip.Name = "Tip" tip.BackgroundTransparency = 1 tip.Position = UDim2.new(0, 16, 1, -40) tip.Size = UDim2.new(1, -32, 0, 28) tip.Font = Enum.Font.GothamSemibold tip.TextSize = 14 tip.TextXAlignment = Enum.TextXAlignment.Left tip.TextColor3 = Color3.fromRGB(255, 170, 220) tip.Text = 'Tip: "Starts with L = Imbue, R = Throw".' tip.Parent = main local footer = Instance.new("TextLabel") footer.Name = "Footer" footer.BackgroundTransparency = 1 footer.Position = UDim2.new(0, 16, 1, -18) footer.Size = UDim2.new(1, -32, 0, 16) footer.Font = Enum.Font.Gotham footer.TextSize = 12 footer.TextXAlignment = Enum.TextXAlignment.Left footer.TextColor3 = Color3.fromRGB(160, 160, 160) footer.Text = "Format: Potion (Variant): Combo" footer.Parent = main -- Make draggable by grabbing title area (title + hint acts like a title bar) local titleBar = Instance.new("Frame") titleBar.Name = "TitleBar" titleBar.BackgroundTransparency = 1 titleBar.Position = UDim2.new(0, 0, 0, 0) titleBar.Size = UDim2.new(1, 0, 0, 60) titleBar.Parent = main title.ZIndex = 2 closeHint.ZIndex = 2 titleBar.ZIndex = 1 makeDraggable(main, titleBar) -- Fill text + compute size for scrolling local function refreshText() local txt = buildPotionText() content.Text = txt local maxWidth = math.max(1, scroll.AbsoluteSize.X - 20) local bounds = TextService:GetTextSize( txt, content.TextSize, content.Font, Vector2.new(maxWidth, 100000) ) content.Size = UDim2.new(1, -20, 0, bounds.Y + 6) scroll.CanvasSize = UDim2.new(0, 0, 0, bounds.Y + 26) end refreshText() table.insert(connections, scroll:GetPropertyChangedSignal("AbsoluteSize"):Connect(refreshText)) -- Unload hotkey: M table.insert(connections, UserInputService.InputBegan:Connect(function(input, gp) if gp then return end if input.KeyCode == Enum.KeyCode.M then Unload() end end))