--[[ SIMPLE SCRIPTBLOX HUB Criado por: AI Assistant Funcionalidades: Drag, Scroll, Minimize, Search API ]] local UserInputService = game:GetService("UserInputService") local HttpService = game:GetService("HttpService") local CoreGui = game:GetService("CoreGui") -- Detectar função de request do executor local requestFunc = http_request or request or (syn and syn.request) or (fluxus and fluxus.request) if not requestFunc then game.StarterGui:SetCore("SendNotification", { Title = "Erro"; Text = "Seu executor não suporta requisições HTTP!"; Duration = 5; }) return end -- Limpar UI antiga se existir if CoreGui:FindFirstChild("ScriptBloxHub") then CoreGui:FindFirstChild("ScriptBloxHub"):Destroy() end -- 1. CRIAÇÃO DA UI PRINCIPAL local ScreenGui = Instance.new("ScreenGui") ScreenGui.Name = "ScriptBloxHub" ScreenGui.Parent = CoreGui -- Frame Principal local MainFrame = Instance.new("Frame") MainFrame.Name = "MainFrame" MainFrame.Size = UDim2.new(0, 500, 0, 350) MainFrame.Position = UDim2.new(0.5, -250, 0.5, -175) MainFrame.BackgroundColor3 = Color3.fromRGB(35, 35, 35) MainFrame.BorderSizePixel = 0 MainFrame.Parent = ScreenGui -- Bordas arredondadas local UICorner = Instance.new("UICorner") UICorner.CornerRadius = UDim.new(0, 8) UICorner.Parent = MainFrame -- Barra de Título (Para arrastar) local TopBar = Instance.new("Frame") TopBar.Name = "TopBar" TopBar.Size = UDim2.new(1, 0, 0, 30) TopBar.BackgroundColor3 = Color3.fromRGB(45, 45, 45) TopBar.BorderSizePixel = 0 TopBar.Parent = MainFrame local TopCorner = Instance.new("UICorner") TopCorner.CornerRadius = UDim.new(0, 8) TopCorner.Parent = TopBar -- Título local Title = Instance.new("TextLabel") Title.Text = "ScriptBlox Searcher" Title.Size = UDim2.new(1, -60, 1, 0) Title.Position = UDim2.new(0, 10, 0, 0) Title.BackgroundTransparency = 1 Title.TextColor3 = Color3.fromRGB(255, 255, 255) Title.Font = Enum.Font.GothamBold Title.TextSize = 14 Title.TextXAlignment = Enum.TextXAlignment.Left Title.Parent = TopBar -- Botão de Minimizar local MinButton = Instance.new("TextButton") MinButton.Text = "-" MinButton.Size = UDim2.new(0, 30, 0, 30) MinButton.Position = UDim2.new(1, -30, 0, 0) MinButton.BackgroundTransparency = 1 MinButton.TextColor3 = Color3.fromRGB(255, 255, 255) MinButton.Font = Enum.Font.GothamBold MinButton.TextSize = 18 MinButton.Parent = TopBar -- Botão de Abrir (Fica invisível inicialmente) local OpenButton = Instance.new("TextButton") OpenButton.Name = "OpenButton" OpenButton.Size = UDim2.new(0, 50, 0, 50) OpenButton.Position = UDim2.new(0, 20, 0.5, 0) OpenButton.BackgroundColor3 = Color3.fromRGB(45, 45, 45) OpenButton.Text = "HUB" OpenButton.TextColor3 = Color3.fromRGB(255, 255, 255) OpenButton.Font = Enum.Font.GothamBold OpenButton.Visible = false OpenButton.Parent = ScreenGui local OpenCorner = Instance.new("UICorner") OpenCorner.CornerRadius = UDim.new(0, 25) -- Redondo OpenCorner.Parent = OpenButton -- 2. SISTEMA DE DRAG (ARRASTAR) local dragging, dragInput, dragStart, startPos local function update(input) local delta = input.Position - dragStart MainFrame.Position = UDim2.new(startPos.X.Scale, startPos.X.Offset + delta.X, startPos.Y.Scale, startPos.Y.Offset + delta.Y) end TopBar.InputBegan:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then dragging = true dragStart = input.Position startPos = MainFrame.Position input.Changed:Connect(function() if input.UserInputState == Enum.UserInputState.End then dragging = false end end) end end) TopBar.InputChanged:Connect(function(input) if input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch then dragInput = input end end) UserInputService.InputChanged:Connect(function(input) if input == dragInput and dragging then update(input) end end) -- Lógica do Minimizar/Voltar MinButton.MouseButton1Click:Connect(function() MainFrame.Visible = false OpenButton.Visible = true end) OpenButton.MouseButton1Click:Connect(function() MainFrame.Visible = true OpenButton.Visible = false end) -- 3. BARRA DE PESQUISA E CONTEÚDO local SearchBox = Instance.new("TextBox") SearchBox.PlaceholderText = "Pesquise um script (ex: Blox Fruits)..." SearchBox.Text = "" SearchBox.Size = UDim2.new(1, -70, 0, 35) SearchBox.Position = UDim2.new(0, 10, 0, 40) SearchBox.BackgroundColor3 = Color3.fromRGB(50, 50, 50) SearchBox.TextColor3 = Color3.fromRGB(255, 255, 255) SearchBox.Font = Enum.Font.Gotham SearchBox.TextSize = 14 SearchBox.Parent = MainFrame local SearchCorner = Instance.new("UICorner") SearchCorner.Parent = SearchBox local SearchBtn = Instance.new("TextButton") SearchBtn.Text = "🔍" SearchBtn.Size = UDim2.new(0, 40, 0, 35) SearchBtn.Position = UDim2.new(1, -50, 0, 40) SearchBtn.BackgroundColor3 = Color3.fromRGB(0, 120, 215) SearchBtn.TextColor3 = Color3.fromRGB(255, 255, 255) SearchBtn.Font = Enum.Font.GothamBold SearchBtn.TextSize = 18 SearchBtn.Parent = MainFrame local BtnCorner = Instance.new("UICorner") BtnCorner.Parent = SearchBtn -- Área de Scroll para Resultados local ScrollFrame = Instance.new("ScrollingFrame") ScrollFrame.Size = UDim2.new(1, -20, 1, -90) ScrollFrame.Position = UDim2.new(0, 10, 0, 85) ScrollFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30) ScrollFrame.ScrollBarThickness = 4 ScrollFrame.BorderSizePixel = 0 ScrollFrame.Parent = MainFrame local UIListLayout = Instance.new("UIListLayout") UIListLayout.Padding = UDim.new(0, 5) UIListLayout.SortOrder = Enum.SortOrder.LayoutOrder UIListLayout.Parent = ScrollFrame -- 4. FUNÇÃO DE BUSCA (SCRIPTBLOX API) function SearchScripts(query) -- Limpa resultados anteriores for _, child in pairs(ScrollFrame:GetChildren()) do if not child:IsA("UIListLayout") then child:Destroy() end end if query == "" then return end SearchBox.TextEditable = false SearchBox.PlaceholderText = "Buscando..." -- Chamada API (Modo Free para evitar scripts pagos/privados) -- API oficial da ScriptBlox local url = "https://scriptblox.com/api/script/search?q="..HttpService:UrlEncode(query).."&mode=free&page=1" local success, response = pcall(function() return requestFunc({ Url = url, Method = "GET" }) end) if success and response.StatusCode == 200 then local data = HttpService:JSONDecode(response.Body) local scripts = data.result.scripts if #scripts == 0 then local ErrLabel = Instance.new("TextLabel") ErrLabel.Text = "Nenhum resultado encontrado." ErrLabel.Size = UDim2.new(1, 0, 0, 30) ErrLabel.TextColor3 = Color3.fromRGB(150, 150, 150) ErrLabel.BackgroundTransparency = 1 ErrLabel.Parent = ScrollFrame end for i, scriptData in pairs(scripts) do -- Criar Cartão do Script local Card = Instance.new("Frame") Card.Size = UDim2.new(1, -10, 0, 80) Card.BackgroundColor3 = Color3.fromRGB(45, 45, 45) Card.Parent = ScrollFrame local CardCorner = Instance.new("UICorner") CardCorner.Parent = Card -- Nome do Jogo local GameName = Instance.new("TextLabel") GameName.Text = "Jogo: " .. (scriptData.game.name or "Unknown") GameName.Size = UDim2.new(1, -10, 0, 20) GameName.Position = UDim2.new(0, 10, 0, 5) GameName.BackgroundTransparency = 1 GameName.TextColor3 = Color3.fromRGB(100, 255, 100) GameName.Font = Enum.Font.GothamBold GameName.TextSize = 12 GameName.TextXAlignment = Enum.TextXAlignment.Left GameName.Parent = Card -- Título do Script local ScriptTitle = Instance.new("TextLabel") ScriptTitle.Text = scriptData.title ScriptTitle.Size = UDim2.new(1, -80, 0, 20) ScriptTitle.Position = UDim2.new(0, 10, 0, 25) ScriptTitle.BackgroundTransparency = 1 ScriptTitle.TextColor3 = Color3.fromRGB(255, 255, 255) ScriptTitle.Font = Enum.Font.Gotham ScriptTitle.TextSize = 13 ScriptTitle.TextXAlignment = Enum.TextXAlignment.Left ScriptTitle.TextTruncate = Enum.TextTruncate.AtEnd ScriptTitle.Parent = Card -- Botão de Copiar (Loadstring ou Script) local CopyBtn = Instance.new("TextButton") CopyBtn.Text = "Copy" CopyBtn.Size = UDim2.new(0, 60, 0, 25) CopyBtn.Position = UDim2.new(1, -70, 0.5, -12) CopyBtn.BackgroundColor3 = Color3.fromRGB(60, 60, 60) CopyBtn.TextColor3 = Color3.fromRGB(255, 255, 255) CopyBtn.Font = Enum.Font.GothamBold CopyBtn.TextSize = 12 CopyBtn.Parent = Card local CopyCorner = Instance.new("UICorner") CopyCorner.Parent = CopyBtn -- Função de Copiar CopyBtn.MouseButton1Click:Connect(function() -- ScriptBlox as vezes retorna o script direto ou o loadstring -- A API retorna o slug, precisamos buscar o script ou montar o script -- Para simplificar, vamos tentar pegar o script direto se disponivel, -- se for muito grande, copiaremos o link scriptblox. -- Em muitos casos ScriptBlox requer clicar para ver, mas a API retorna 'script' se for raw local scriptContent = scriptData.script if scriptContent then setclipboard(scriptContent) CopyBtn.Text = "Copied!" wait(1) CopyBtn.Text = "Copy" else -- Fallback se o script não vier no JSON de busca (raro) CopyBtn.Text = "Error" end end) -- Views count local Views = Instance.new("TextLabel") Views.Text = "Views: " .. tostring(scriptData.views) Views.Size = UDim2.new(0, 100, 0, 20) Views.Position = UDim2.new(0, 10, 0, 50) Views.BackgroundTransparency = 1 Views.TextColor3 = Color3.fromRGB(150, 150, 150) Views.Font = Enum.Font.Gotham Views.TextSize = 11 Views.TextXAlignment = Enum.TextXAlignment.Left Views.Parent = Card end -- Atualiza tamanho do scroll ScrollFrame.CanvasSize = UDim2.new(0, 0, 0, UIListLayout.AbsoluteContentSize.Y + 10) else warn("Erro ao conectar na ScriptBlox: " .. tostring(response.StatusCode)) local ErrLabel = Instance.new("TextLabel") ErrLabel.Text = "Erro na API." ErrLabel.Parent = ScrollFrame end SearchBox.TextEditable = true SearchBox.PlaceholderText = "Pesquise um script..." end -- Evento de clique na busca SearchBtn.MouseButton1Click:Connect(function() SearchScripts(SearchBox.Text) end) -- Evento de Enter na caixa de texto SearchBox.FocusLost:Connect(function(enterPressed) if enterPressed then SearchScripts(SearchBox.Text) end end)