Server Hopper or Player Finder Ignore Areadly Joined Servers
Key RequiredUniversal

Server Hopper or Player Finder Ignore Areadly Joined Servers

Universal Scriptdavidisnotafurrydavidisnotafurry 2.2K views 5.8K executesUpdated Nov 26, 2025
2.3/ 5(13 votes)
6746% Positive
Lua Script•360 lines (12752 chars)
-- ULTIMATE ServerHopper3000 + PlayerFinder3000 v3
-- Mobile + PC Drag | Scrollable Guide | Perfect for Delta Auto-Execute

local Players = game:GetService("Players")
local TeleportService = game:GetService("TeleportService")
local HttpService = game:GetService("HttpService")
local UserInputService = game:GetService("UserInputService")
local player = Players.LocalPlayer

local FOLDER = "ServerHopperStorage"
local IGNORED_FILE = FOLDER.."/IgnoredServers"
local TOGGLE_FILE = FOLDER.."/PlayerFinderToggleState"
local NAME_FILE = FOLDER.."/PlayerFinderTextboxName"

if not isfolder(FOLDER) then makefolder(FOLDER) end
if not isfile(IGNORED_FILE) then writefile(IGNORED_FILE, "") end
if not isfile(TOGGLE_FILE) then writefile(TOGGLE_FILE, "false") end
if not isfile(NAME_FILE) then writefile(NAME_FILE, "") end

local function getToggleState() return readfile(TOGGLE_FILE):lower() == "true" end
local function getTargetName() return readfile(NAME_FILE):gsub("^%s*(.-)%s*$", "%1") end
local function setToggle(s) writefile(TOGGLE_FILE, tostring(s)) end
local function setName(n) writefile(NAME_FILE, n) end

local function loadIgnored()
    local t = {}
    for line in (readfile(IGNORED_FILE)):gmatch("[^\r\n]+") do
        if line:match("^[%w-]+$") then table.insert(t, line) end
    end
    return t
end

local function ignoreCurrentServer()
    if game.JobId ~= "" then
        appendfile(IGNORED_FILE, game.JobId.."\n"..game.PlaceId.."\n")
    end
end

-- ==================== MAIN GUI ====================
local ScreenGui = Instance.new("ScreenGui")
ScreenGui.Name = "UltimateHopper3000"
ScreenGui.ResetOnSpawn = false
ScreenGui.Parent = player:WaitForChild("PlayerGui")

local MainFrame = Instance.new("Frame")
MainFrame.Size = UDim2.new(0, 340, 0, 220)
MainFrame.Position = UDim2.new(0.5, -170, 0.5, -110)
MainFrame.BackgroundColor3 = Color3.fromRGB(22, 22, 33)
MainFrame.BorderSizePixel = 0
MainFrame.ClipsDescendants = true
MainFrame.Parent = ScreenGui

-- Rounded corners
local Corner = Instance.new("UICorner", MainFrame)
Corner.CornerRadius = UDim.new(0, 12)

local Stroke = Instance.new("UIStroke", MainFrame)
Stroke.Color = Color3.fromRGB(255, 80, 120)
Stroke.Thickness = 2.5

local Title = Instance.new("TextLabel")
Title.Size = UDim2.new(1,0,0,45)
Title.BackgroundTransparency = 1
Title.Text = "ServerHopper3000"
Title.TextColor3 = Color3.fromRGB(255, 100, 140)
Title.Font = Enum.Font.GothamBlack
Title.TextSize = 22
Title.Parent = MainFrame

-- Mode Switch Button
local ModeBtn = Instance.new("TextButton")
ModeBtn.Size = UDim2.new(0,26,0,26)
ModeBtn.Position = UDim2.new(1,-34,0,8)
ModeBtn.BackgroundColor3 = Color3.fromRGB(100, 100, 255)
ModeBtn.Text = "Switch"
ModeBtn.TextSize = 10
ModeBtn.Font = Enum.Font.GothamBold
local mc = Instance.new("UICorner", ModeBtn); mc.CornerRadius = UDim.new(0,8)
ModeBtn.Parent = MainFrame

-- =============== SERVER HOPPER MODE ===============
local HopBtn = Instance.new("TextButton")
HopBtn.Size = UDim2.new(0.88,0,0,48)
HopBtn.Position = UDim2.new(0.06,0,0.28,0)
HopBtn.BackgroundColor3 = Color3.fromRGB(50, 180, 80)
HopBtn.Text = "ServerHop"
HopBtn.TextColor3 = Color3.new(1,1,1)
HopBtn.Font = Enum.Font.GothamBold
HopBtn.TextSize = 20
local hc = Instance.new("UICorner", HopBtn); hc.CornerRadius = UDim.new(0,10)
HopBtn.Visible = true
HopBtn.Parent = MainFrame

local ClearBtn = Instance.new("TextButton")
ClearBtn.Size = UDim2.new(0.88,0,0,40)
ClearBtn.Position = UDim2.new(0.06,0,0.68,0)
ClearBtn.BackgroundColor3 = Color3.fromRGB(200, 60, 60)
ClearBtn.Text = "Clear Ignore List"
ClearBtn.TextColor3 = Color3.new(1,1,1)
ClearBtn.Font = Enum.Font.Gotham
ClearBtn.TextSize = 16
local cc = Instance.new("UICorner", ClearBtn); cc.CornerRadius = UDim.new(0,10)
ClearBtn.Visible = true
ClearBtn.Parent = MainFrame

-- =============== PLAYER FINDER MODE ===============
local FindBtn = Instance.new("TextButton")
FindBtn.Size = UDim2.new(0.88,0,0,48)
FindBtn.Position = UDim2.new(0.06,0,0.22,0)
FindBtn.BackgroundColor3 = Color3.fromRGB(90, 90, 220)
FindBtn.Text = "Click to start finding (read guide first)"
FindBtn.TextColor3 = Color3.new(1,1,1)
FindBtn.Font = Enum.Font.GothamBold
FindBtn.TextSize = 15
local fc = Instance.new("UICorner", FindBtn); fc.CornerRadius = UDim.new(0,10)
FindBtn.Visible = false
FindBtn.Parent = MainFrame

local TargetBox = Instance.new("TextBox")
TargetBox.Size = UDim2.new(0.88,0,0,40)
TargetBox.Position = UDim2.new(0.06,0,0.55,0)
TargetBox.BackgroundColor3 = Color3.fromRGB(45,45,65)
TargetBox.PlaceholderText = "Player name here"
TargetBox.Text = ""
TargetBox.TextColor3 = Color3.new(1,1,1)
TargetBox.Font = Enum.Font.Gotham
TargetBox.TextSize = 16
local tc = Instance.new("UICorner", TargetBox); tc.CornerRadius = UDim.new(0,10)
TargetBox.Visible = false
TargetBox.Parent = MainFrame

local GuideBtn = Instance.new("TextButton")
GuideBtn.Size = UDim2.new(0,28,0,28)
GuideBtn.Position = UDim2.new(0,8,0,8)
GuideBtn.BackgroundTransparency = 0.4
GuideBtn.Text = "Guide"
GuideBtn.TextSize = 14
GuideBtn.Visible = false
local gc = Instance.new("UICorner", GuideBtn); gc.CornerRadius = UDim.new(0,8)
GuideBtn.Parent = MainFrame

-- =============== SCROLLABLE GUIDE GUI ===============
local GuideGui = Instance.new("ScreenGui")
GuideGui.Parent = player.PlayerGui

local GuideFrame = Instance.new("Frame")
GuideFrame.Size = UDim2.new(0, 360, 0, 480)
GuideFrame.Position = UDim2.new(0.5, -180, 0.5, -240)
GuideFrame.BackgroundColor3 = Color3.fromRGB(20,20,35)
GuideFrame.Visible = false
GuideFrame.Parent = GuideGui
local gcorner = Instance.new("UICorner", GuideFrame); gcorner.CornerRadius = UDim.new(0,14)
local gstroke = Instance.new("UIStroke", GuideFrame)
gstroke.Color = Color3.fromRGB(255,120,180)
gstroke.Thickness = 2

local GuideTitle = Instance.new("TextLabel")
GuideTitle.Size = UDim2.new(1,0,0,40)
GuideTitle.BackgroundTransparency = 1
GuideTitle.Text = "PlayerFinder3000 Guide"
GuideTitle.TextColor3 = Color3.fromRGB(255,140,180)
GuideTitle.Font = Enum.Font.GothamBold
GuideTitle.TextSize = 18
GuideTitle.Parent = GuideFrame

local CloseGuideBtn = Instance.new("TextButton")
CloseGuideBtn.Size = UDim2.new(0,32,0,32)
CloseGuideBtn.Position = UDim2.new(1,-38,0,4)
CloseGuideBtn.BackgroundColor3 = Color3.fromRGB(220,60,60)
CloseGuideBtn.Text = "X"
CloseGuideBtn.TextColor3 = Color3.new(1,1,1)
local xc = Instance.new("UICorner", CloseGuideBtn); xc.CornerRadius = UDim.new(0,10)
CloseGuideBtn.Parent = GuideFrame
CloseGuideBtn.MouseButton1Click:Connect(function() GuideFrame.Visible = false end)

local ScrollingFrame = Instance.new("ScrollingFrame")
ScrollingFrame.Size = UDim2.new(1,-20,1,-50)
ScrollingFrame.Position = UDim2.new(0,10,0,40)
ScrollingFrame.BackgroundTransparency = 1
ScrollingFrame.ScrollBarThickness = 6
ScrollingFrame.CanvasSize = UDim2.new(0,0,0,800)
ScrollingFrame.Parent = GuideFrame

local GuideText = Instance.new("TextLabel")
GuideText.Size = UDim2.new(1,-10,0,800)
GuideText.Position = UDim2.new(0,5,0,0)
GuideText.BackgroundTransparency = 1
GuideText.TextColor3 = Color3.new(0.95,0.95,0.95)
GuideText.TextWrapped = true
GuideText.TextYAlignment = Enum.TextYAlignment.Top
GuideText.Font = Enum.Font.Gotham
GuideText.TextSize = 15
GuideText.Text = [[How to use PlayerFinder3000

• Put this script in Delta's Auto-Execute folder
• Join the game you want to hunt in
• Switch to PlayerFinder3000 mode
• Type the EXACT username or display name
• Press the button → it will hop forever until found!

The script remembers your target even after rejoin!
It ignores every server that doesn't have the player.

Player found? → Auto stops + clears name

Stuck in infinite hop?
→ Open ZArchiver → search "ServerHopperStorage"
→ Edit PlayerFinderTextboxName → delete everything
→ Edit PlayerFinderToggleState → write "false"
→ Done! You're free

PRO TIP: Always clear ignored servers before hunting a new player!

Happy hunting! Go find those YouTubers]]
GuideText.Parent = ScrollingFrame

-- =============== SUPER SMOOTH DRAG (MOBILE + PC) ===============
local function makeDraggable(frame)
    local dragging = false
    local dragInput, mousePos, framePos

    frame.InputBegan:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
            dragging = true
            mousePos = input.Position
            framePos = frame.Position

            input.Changed:Connect(function()
                if input.UserInputState == Enum.UserInputState.End then
                    dragging = false
                end
            end)
        end
    end)

    frame.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 dragging and (input == dragInput) then
            local delta = input.Position - mousePos
            frame.Position = UDim2.new(framePos.X.Scale, framePos.X.Offset + delta.X, framePos.Y.Scale, framePos.Y.Offset + delta.Y)
        end
    end)
end

makeDraggable(MainFrame)
makeDraggable(GuideFrame)

-- =============== MODE SWITCHING ===============
local isFinderMode = false
local function switchMode()
    isFinderMode = not isFinderMode
    Title.Text = isFinderMode and "PlayerFinder3000" or "ServerHopper3000"
    ModeBtn.BackgroundColor3 = isFinderMode and Color3.fromRGB(200,80,200) or Color3.fromRGB(100,100,255)

    HopBtn.Visible = not isFinderMode
    ClearBtn.Visible = not isFinderMode
    FindBtn.Visible = isFinderMode
    TargetBox.Visible = isFinderMode
    GuideBtn.Visible = isFinderMode

    if isFinderMode then
        TargetBox.Text = getTargetName()
        FindBtn.Text = getToggleState() and "Finding..." or "Click to start finding (read guide first)"
    end
end
ModeBtn.MouseButton1Click:Connect(switchMode)
GuideBtn.MouseButton1Click:Connect(function() GuideFrame.Visible = true end)

-- =============== SERVER HOP FUNCTION ===============
local function hopToRandom(exclude)
    local data = HttpService:JSONDecode(game:HttpGet("https://games.roblox.com/v1/games/"..game.PlaceId.."/servers/Public?sortOrder=Asc&limit=100"))
    local servers = {}
    for _,v in pairs(data.data) do
        if v.playing < v.maxPlayers and v.id ~= game.JobId and not table.find(exclude, v.id) then
            table.insert(servers, v.id)
        end
    end
    if #servers == 0 then task.wait(3); return hopToRandom(exclude) end
    TeleportService:TeleportToPlaceInstance(game.PlaceId, servers[math.random(#servers)], player)
end

-- =============== PLAYER FINDER ===============
local function startFinding()
    local name = TargetBox.Text:gsub("^%s*(.-)%s*$", "%1")
    if name == "" then
        FindBtn.Text = "Enter a name first!"
        task.wait(2)
        FindBtn.Text = "Click to start finding (read guide first)"
        return
    end

    setName(name)
    setToggle(true)
    FindBtn.Text = "Finding " .. name .. "..."

    task.spawn(function()
        while getToggleState() and getTargetName() == name do
            local found = false
            for _, p in Players:GetPlayers() do
                if p.Name:lower() == name:lower() or p.DisplayName:lower() == name:lower() then
                    found = true; break
                end
            end

            if found then
                FindBtn.Text = "FOUND " .. name .. "!"
                FindBtn.BackgroundColor3 = Color3.fromRGB(50,220,80)
                setToggle(false)
                setName("")
                TargetBox.Text = ""
                task.wait(5)
                FindBtn.Text = "Click to start finding (read guide first)"
                FindBtn.BackgroundColor3 = Color3.fromRGB(90,90,220)
                break
            else
                ignoreCurrentServer()
                hopToRandom(loadIgnored())
            end
            task.wait(1)
        end
    end)
end

FindBtn.MouseButton1Click:Connect(function()
    if getToggleState() then
        setToggle(false)
        FindBtn.Text = "Stopped"
        task.wait(1.5)
        FindBtn.Text = "Click to start finding (read guide first)"
    else
        startFinding()
    end
end)

HopBtn.MouseButton1Click:Connect(function()
    HopBtn.Text = "Hopping..."
    ignoreCurrentServer()
    hopToRandom(loadIgnored())
end)

ClearBtn.MouseButton1Click:Connect(function()
    writefile(IGNORED_FILE, "")
    ClearBtn.Text = "Cleared!"
    task.wait(1)
    ClearBtn.Text = "Clear Ignore List"
end)

-- Auto-start if was active
if getToggleState() and getTargetName() ~= "" then
    switchMode()
    task.wait(0.5)
    startFinding()
end

print("ServerHopper3000 + PlayerFinder3000 v3 LOADED! Mobile-ready + Scrollable Guide")

Features & Information

This script is made for helping you on the question of server hopping because some scripts dont ignore areadly traveled servers BUT THIS ONE DOES!!! it ALSO has a player tracker but make sure that the player IS playing the game ur playing so that it can find the player while server hopping. It also ignores areadly joined servers too! So yeah have fun!
#Server#Serverfinder#Serverhopper#Hop#Jobid

Community Comments (11)

stopbeingnotsigmastopbeingnotsigmaNov 26, 2025

Bad script doesn't work anymore

davidisnotafurrydavidisnotafurryNov 30, 2025

@Moonsec ?????

quiiquiiNov 30, 2025

Bad Script

jjrrooadlinejjrrooadlineNov 30, 2025

@Moonsec where in the script does it hack your account? Its literally open source, get a brain, also you're a member farmer

Replying to @jjrrooadline
davidisnotafurrydavidisnotafurryDec 20, 2025

@jjrrooadline that moonsec guy is spam disliking and saying every script is a virus 😭 hell nah man i cant belive they say a god * script IS a virus 🥀 i dint even add a webhook on it even tho most executors block webhooks that give information not actually send..

Replying to @davidisnotafurry
jjrrooadlinejjrrooadlineDec 23, 2025

@davidisnotafurry frrrrr

v0idluav0idluaDec 6, 2025

Is this AI generated or smth

Replying to @v0idlua
davidisnotafurrydavidisnotafurryDec 20, 2025

@PlayerZN so? I mean im at least trying to help others with server hopping problems.

ZynxzyZynxzyDec 18, 2025

thats so ai twin

Replying to @Zynxzy
davidisnotafurrydavidisnotafurryDec 20, 2025

@ojtek whats the problem on that??? Im tryna make unique scripts that can actually help..

davidisnotafurrydavidisnotafurryJun 3, 2026

"its aii its aiiii" yes it is cry abt it better having a script than not having a script.

More Scripts for Universal Scripts