--// Blox Fruits Server Hopper V3 - by Scripture local HttpService = game:GetService("HttpService") local TeleportService = game:GetService("TeleportService") local Players = game:GetService("Players") local placeId = game.PlaceId -- Default Settings local maxPlayers = 1 local retryLimit = 5 local retryDelay = 3 local isTeleporting = false -- Create GUI local gui = Instance.new("ScreenGui", game:GetService("CoreGui")) gui.Name = "ServerHopperV3" local frame = Instance.new("Frame", gui) frame.Size = UDim2.new(0, 300, 0, 200) frame.Position = UDim2.new(0.5, -150, 0.5, -100) frame.BackgroundColor3 = Color3.fromRGB(35, 35, 35) frame.BorderSizePixel = 0 frame.Active = true frame.Draggable = true local title = Instance.new("TextLabel", frame) title.Text = "🔁 Server Hopper V3" title.Size = UDim2.new(1, 0, 0, 30) title.BackgroundColor3 = Color3.fromRGB(25, 25, 25) title.TextColor3 = Color3.fromRGB(255, 255, 255) title.Font = Enum.Font.GothamBold title.TextSize = 18 -- Dropdowns / Inputs local function createLabel(text, yPos) local label = Instance.new("TextLabel", frame) label.Text = text label.Position = UDim2.new(0, 10, 0, yPos) label.Size = UDim2.new(0, 140, 0, 20) label.BackgroundTransparency = 1 label.TextColor3 = Color3.fromRGB(255, 255, 255) label.Font = Enum.Font.Gotham label.TextSize = 14 end local function createBox(defaultText, yPos, callback) local box = Instance.new("TextBox", frame) box.Text = defaultText box.Position = UDim2.new(0, 160, 0, yPos) box.Size = UDim2.new(0, 120, 0, 20) box.BackgroundColor3 = Color3.fromRGB(50, 50, 50) box.TextColor3 = Color3.fromRGB(255, 255, 255) box.Font = Enum.Font.Gotham box.TextSize = 14 box.FocusLost:Connect(function() local num = tonumber(box.Text) if num then callback(num) else box.Text = tostring(callback()) end end) end createLabel("Max Players:", 40) createBox("1", 40, function(v) maxPlayers = v return maxPlayers end) createLabel("Retry Limit:", 70) createBox("5", 70, function(v) retryLimit = v return retryLimit end) createLabel("Retry Delay (s):", 100) createBox("3", 100, function(v) retryDelay = v return retryDelay end) -- Button local button = Instance.new("TextButton", frame) button.Size = UDim2.new(0, 260, 0, 40) button.Position = UDim2.new(0.5, -130, 1, -50) button.BackgroundColor3 = Color3.fromRGB(0, 120, 255) button.TextColor3 = Color3.fromRGB(255, 255, 255) button.Font = Enum.Font.GothamBold button.TextSize = 16 button.Text = "🌐 Join Small Server" button.BorderSizePixel = 0 -- Get low-player servers local function getLowPlayerServers() local servers = {} local cursor = nil repeat local url = ("https://games.roblox.com/v1/games/%d/servers/Public?sortOrder=Asc&limit=100"):format(placeId) if cursor then url = url .. "&cursor=" .. cursor end local success, response = pcall(function() return game:HttpGet(url) end) if success then local data = HttpService:JSONDecode(response) for _, server in pairs(data.data) do if server.playing <= maxPlayers and server.id ~= game.JobId then table.insert(servers, server.id) end end cursor = data.nextPageCursor else warn("⚠️ Failed to fetch servers: ", response) break end until not cursor or #servers > 0 return servers end -- Teleport function local function attemptTeleport() if isTeleporting then return end isTeleporting = true button.Text = "🔍 Searching..." local tries = 0 local servers = {} repeat servers = getLowPlayerServers() tries += 1 if #servers == 0 then print("No servers found, retrying...") task.wait(retryDelay) end until #servers > 0 or tries >= retryLimit if #servers > 0 then local chosen = servers[math.random(1, #servers)] print("🌐 Teleporting to:", chosen) button.Text = "🔁 Teleporting..." TeleportService:TeleportToPlaceInstance(placeId, chosen, Players.LocalPlayer) else warn("❌ Could not find a small server.") button.Text = "❌ Failed. Try Again" task.wait(2) button.Text = "🌐 Join Small Server" end isTeleporting = false end button.MouseButton1Click:Connect(attemptTeleport)