Logo Pastebin.fr
Pastebin

Retrouvez, créez et partagez vos snippets en temps réel.

testv1

--// SERVICES
local RunService = game:GetService("RunService")
local TeleportService = game:GetService("TeleportService")
local HttpService = game:GetService("HttpService")
local Players = game:GetService("Players")
local VirtualUser = game:GetService("VirtualUser")

local lp = Players.LocalPlayer

--// CONFIG
local FIREBASE_URL = "https://hopper-d0883-default-rtdb.firebaseio.com/"
local RAW_URL = "https://pastebin.com/raw/BhBz7UQU"

local HOP_INTERVAL = 6
local SERVER_TIMEOUT = 90

local MIN_VALUE = 5e6
local EXTRA_MIN_VALUE = 5e6

math.randomseed(os.time() + tick() + lp.UserId)

--// VPS OPTIMISATION
RunService:Set3dRenderingEnabled(false)
setfpscap(10)
settings().Rendering.QualityLevel = Enum.QualityLevel.Level01

--// WEBHOOKS
local WEBHOOKS = {
    PUB = {
        [5] = "",
        [100] = "WEBHOOK_100",
        [500] = "WEBHOOK_500"
    },
    PRIV = {
        [5] = "https://discord.com/api/webhooks/1462565974598352977/vTfB8UkaoIHH3Hf4bepLG64QUJQHHuNlZgm9euMBKPIo0WgtgA8k0tryX1P1mTMtc2cn",
        [100] = "https://discord.com/api/webhooks/1462566120174391413/yK9kAe-tm05DdZmyk79AmzPd2JYdkE-Tjw0FRpWskOxeeIvkb-xUZbGK8NJ1kjz_mkC",
        [500] = "https://discord.com/api/webhooks/1462566252634706003/Y81n5RMxNdrhqLl8FSo5ApabmXUo5PBDSRG8IuxvukZ6oSZnNtGuanhxh97YNjFpWE46"
    }
}

--// HTTP SHORTCUT
local request = syn and syn.request or http and http.request or http_request or request

--// BRIDGE
local Bridge = {}

function Bridge.Occupy(jobId)
    pcall(function()
        HttpService:RequestAsync({
            Url = FIREBASE_URL.."active_servers/"..jobId..".json",
            Method = "PUT",
            Body = HttpService:JSONEncode({bot=lp.Name,time=os.time()})
        })
        HttpService:RequestAsync({
            Url = FIREBASE_URL.."blacklist_servers/"..jobId..".json",
            Method = "PUT",
            Body = HttpService:JSONEncode({time=os.time()})
        })
    end)
end

function Bridge.IsBlocked(jobId, path)
    local ok,res = pcall(function()
        return HttpService:GetAsync(FIREBASE_URL..path.."/"..jobId..".json")
    end)
    return ok and res ~= "null"
end

function Bridge.Cleanup()
    pcall(function()
        local data = HttpService:JSONDecode(HttpService:GetAsync(FIREBASE_URL.."active_servers.json"))
        if not data then return end
        for id,info in pairs(data) do
            if os.time() - info.time > 600 then
                HttpService:RequestAsync({
                    Url = FIREBASE_URL.."active_servers/"..id..".json",
                    Method = "DELETE"
                })
            end
        end
    end)
end

--// MARK CURRENT SERVER IMMEDIATELY
Bridge.Occupy(game.JobId)

--// UTIL
local function makeKey(name, value)
    return HttpService:UrlEncode(name.."_"..math.floor(value))
end

local function alreadySent(key)
    local ok,res = pcall(function()
        return HttpService:GetAsync(FIREBASE_URL.."sent/"..key..".json")
    end)
    return ok and res ~= "null"
end

local function markSent(key)
    HttpService:RequestAsync({
        Url = FIREBASE_URL.."sent/"..key..".json",
        Method = "PUT",
        Body = HttpService:JSONEncode({time=os.time(),server=game.JobId})
    })
end

--// VALUE PARSER
local function parseValue(text)
    if not text then return 0 end
    local clean = text:gsub("<[^>]+>", ""):gsub("[^%d%.KMB]", "")
    local mult = 1
    if clean:find("K") then mult = 1e3
    elseif clean:find("M") then mult = 1e6
    elseif clean:find("B") then mult = 1e9 end
    return (tonumber(clean:match("%d+%.?%d*")) or 0) * mult
end

--// SCAN
local function scan()
    local best
    local others = {}

    for _,obj in ipairs(lp.PlayerGui:GetDescendants()) do
        if obj:IsA("TextLabel") and obj.Text:find("%$") then
            local t = obj.Text:lower()
            if t:find("/s") or t:find("sec") or t:find("gen") then
                local val = parseValue(obj.Text)
                if val >= EXTRA_MIN_VALUE then
                    local name = "Unknown"
                    for _,c in ipairs(obj.Parent:GetChildren()) do
                        if c:IsA("TextLabel") and c ~= obj and not c.Text:find("%$") then
                            name = c.Text:gsub("<[^>]+>", ""):gsub("\n"," ")
                            break
                        end
                    end
                    table.insert(others,{name=name,text=obj.Text,value=val})
                    if val >= MIN_VALUE and (not best or val > best.value) then
                        best = {name=name,text=obj.Text,value=val}
                    end
                end
            end
        end
    end
    return best, others
end

--// TELEPORT
local function forceHop()
    local lastJob = game.JobId
    local ok,res = pcall(function()
        return HttpService:JSONDecode(game:HttpGet(
            "https://games.roblox.com/v1/games/"..game.PlaceId.."/servers/Public?limit=100"
        ))
    end)

    if ok and res and res.data then
        for _,srv in ipairs(res.data) do
            if srv.id ~= lastJob and srv.playing < srv.maxPlayers - 1 then
                if not Bridge.IsBlocked(srv.id,"blacklist_servers")
                and not Bridge.IsBlocked(srv.id,"active_servers") then
                    Bridge.Occupy(srv.id)
                    if queue_on_teleport then
                        queue_on_teleport([[loadstring(game:HttpGet("]]..RAW_URL..[["))()]])
                    end
                    TeleportService:TeleportToPlaceInstance(game.PlaceId, srv.id, lp)
                    task.delay(10,function()
                        if game.JobId == lastJob then
                            Bridge.Occupy(lastJob)
                            TeleportService:Teleport(game.PlaceId, lp)
                        end
                    end)
                    return
                end
            end
        end
    end
    TeleportService:Teleport(game.PlaceId, lp)
end

--// ANTI AFK
lp.Idled:Connect(function()
    VirtualUser:CaptureController()
    VirtualUser:ClickButton2(Vector2.new(0,0))
end)

--// SCAN THREAD
task.spawn(function()
    while true do
        local found, others = scan()
        if found then
            local key = makeKey(found.name, found.value)
            if not alreadySent(key) then
                markSent(key)

                local cat = (found.value >= 500e6 and 500)
                         or (found.value >= 100e6 and 100)
                         or 5

                local list = ""
                for _,v in ipairs(others) do
                    list ..= v.name.." - "..v.text.."\n"
                end

                request({
                    Url = WEBHOOKS.PUB[cat],
                    Method = "POST",
                    Headers = {["Content-Type"]="application/json"},
                    Body = HttpService:JSONEncode({
                        embeds={{
                            title="Target Found",
                            description="Name: "..found.name.."\nValue: "..found.text.."\n\n"..list,
                            color=0x2b2d31
                        }}
                    })
                })

                request({
                    Url = WEBHOOKS.PRIV[cat],
                    Method = "POST",
                    Headers = {["Content-Type"]="application/json"},
                    Body = HttpService:JSONEncode({
                        content="||"..found.name.."|"..found.text.."|"..game.JobId.."||"
                    })
                })
            end
        end
        task.wait(1)
    end
end)

--// CLEANUP
task.spawn(function()
    while true do
        Bridge.Cleanup()
        task.wait(60)
    end
end)

--// FORCED HOP
task.spawn(function()
    local joinTime = os.time()
    while true do
        if os.time() - joinTime > SERVER_TIMEOUT then
            forceHop()
            joinTime = os.time()
        end
        task.wait(HOP_INTERVAL)
    end
end)

--// GC
task.spawn(function()
    while task.wait(60) do
        collectgarbage("collect")
    end
end)

Créé il y a 2 semaines.

Rechercher un Pastebin

Aucun paste trouvé.