zeta-res blox fruits script
KEY SYSTEM 6
Blox Fruits

zeta-res blox fruits script

auto farm level auto farm chest auto farm stats auto farm boss

RPUBLISHERressssUpdated 1 day ago
Script developerzeta-res
Play Game
KEY SYSTEMPC
More
ADVERTISEMENT
TOTAL VIEWS6Views recorded for this script page
SCRIPT UPDATED10/28/2026Latest recorded update for this script
REVIEW STATUSSource information reviewedReview information is a version-specific snapshot, not a permanent safety guarantee. Lua Obfuscator Loadstring Generator URL Checker
VERIFICATION PROCESSHow We Review Roblox ScriptsSee the workflow used to examine source links, loadstrings, Lua code, and compatibility information.
Blox FruitsExplore more Blox Fruits
OVERVIEW

Description

auto farm level auto farm chest auto farm stats auto farm boss

Blox Fruits

Features

auto farm level auto farm chest auto farm stats auto farm boss

1

auto farm

Script Preview1946 lines · 72049 B
Raw
discord: https://discord.gg/FUC4kbjHG
    target: Roblox, Luau (Xeno / Delta / Wave / Solara / Swift / Hydrogen)

    v1.4 changelog:
      - auto farm saldirisi geri geldi: VIM ile menu DIINDA bir noktaya tik
        (toggle ustunde imlec olsa bile cevrilmez), VirtualUser + tool:Activate
        ile sigortali; mouse1click artik son care
      - chest farm: varista 0.9sn oturma, prompt'lar sadece o sandigin icinden
        en fazla 3 deneme, gittiyse ALINDI / hala orada 15sn atlanir —
        "hizli gecip alamiyor" duzeltildi; tarama sadece var olan chest'e gider
      - ESP: oyuncu ESP'si kendi kendini onaran 1sn dongusu (kacan billboard
        geri gelir, hp canli guncellenir); SANDIK ve MEYVE ESP'leri eklendi

    v1.3 changelog:
      - attack tik'i GUI hattindan gecmiyor (VirtualUser + tool:Activate)
      - bounty farm kaldirildi (tumu)
      - chest/fruit farm yeniden yazildi

    v1.2 changelog:
      - TEK PENCERE kurali: her execute onceki pencereleri imha eder, yigilma yok
      - paylasilan durum (getgenv REG): bayraklar execute'lar arasi ortak,
        gorunmeyen kopya artik kendi kendine farm acamaz
      - nesil (generation) korumasi: yeni execute eski loop'lari emekli eder
      - toggle'lar state'e bagli: ayni bayragi tasiyan dugmeler senkron,
        "tumunu kapat" tum dugmeleri indirir
      - ayarlar dosyaya kayitli (zeta_res_cfg.txt): restart/teleport sonra geri gelir
      - key oturum boyunca bir kez: tekrar execute'da sormaz
      - Insert yerine artik Sag Ctrl de calisir (Xeno Insert'i kendi arayuzu icin kullanir)
      - surukleme artik buton uzerinde baslamaz (tiklar kazara suruklemiyordu)

    v1.1 changelog:
      - UI parent: CoreGui yerine PlayerGui (Xeno'da CoreGui yazimi engellenir)
      - boot tamamen pcall altinda, hata olursa kirmizi hata paneli + konsol
      - ilk sekme otomatik secimi duzeltildi (MouseButton1Click:Fire calismiyordu)
      - getgenv zorunlulugu kaldirildi, LocalPlayer gec geliyorsa bekler
      - API probe: konsola executor yetenek listesi yazar
--]]

----------------------------------------------------------------
-- SERVICES
----------------------------------------------------------------
local Players             = game:GetService("Players")
local ReplicatedStorage   = game:GetService("ReplicatedStorage")
local TeleportService     = game:GetService("TeleportService")
local VirtualUser         = game:GetService("VirtualUser")
local VirtualInputManager = game:GetService("VirtualInputManager")
local TweenService        = game:GetService("TweenService")
local UserInputService    = game:GetService("UserInputService")
local HttpService         = game:GetService("HttpService")
local Workspace           = game:GetService("Workspace")

print("[zeta-res] v1.4 exec basladi")

-- LocalPlayer gec geliyorsa kisa sure bekle (autoexec guvenligi)
local LocalPlayer = Players.LocalPlayer
if not LocalPlayer then
    local t0 = os.clock()
    while not LocalPlayer and os.clock() - t0 < 5 do
        LocalPlayer = Players.LocalPlayer
        task.wait(0.2)
    end
end

local Camera = Workspace.CurrentCamera

----------------------------------------------------------------
-- REGISTRY — calistirma (execute) arasinda TEK paylasilan durum
-- her execute yeni kopya acmasin, eski kopyalar temizlensin
----------------------------------------------------------------
local REG = nil
pcall(function()
    if getgenv then
        local g = getgenv()
        if g then
            g.ZETA_REG = g.ZETA_REG or {gen = 0, state = {}, cleanup = {}}
            REG = g.ZETA_REG
        end
    end
end)
if not REG then
    -- getgenv yoksa: calistirma ici tek kopya (eski davranis)
    REG = {gen = 0, state = {}, cleanup = {}}
end
REG.cleanup = REG.cleanup or {}
REG.state   = REG.state or {}

-- yeni nesil: eski koyun looplari kendini emekliye ayirir
REG.gen = (REG.gen or 0) + 1
local MY_GEN = REG.gen

-- eski calistirmanin oyun seviyesi baglantilarini kes
for _, fn in ipairs(REG.cleanup) do pcall(fn) end
REG.cleanup = {}

local function retire(fn)
    table.insert(REG.cleanup, fn)
end

----------------------------------------------------------------
-- CONSTANTS
----------------------------------------------------------------
local KEY      = "zeta-res-44"
local KEY_FILE = "zeta_res_key.txt"
local CFG_FILE = "zeta_res_cfg.txt"
local DISCORD_INV = "https://discord.gg/FUC4kbjHG"

----------------------------------------------------------------
-- SAFE EXECUTOR API WRAPPERS
----------------------------------------------------------------
local function safeWrite(name, data)
    pcall(function()
        if writefile then writefile(name, data) end
    end)
end

local function safeRead(name)
    local ok, res = pcall(function()
        if readfile then return readfile(name) end
    end)
    return ok and res or nil
end

local function safeClipboard(text)
    pcall(function()
        if setclipboard then setclipboard(text)
        elseif toclipboard then toclipboard(text)
        end
    end)
end

local function safeHttpGet(url)
    local ok, res = pcall(function()
        if http_request then
            return http_request({Url = url, Method = "GET"}).Body
        elseif request then
            return request({Url = url, Method = "GET"}).Body
        elseif game.HttpGet then
            return game:HttpGet(url)
        end
    end)
    return ok and res or nil
end

-- menu dikdortgenini bul (PlayerGui'deki zeta_res ScreenGui'den —
-- bu fonksiyon ZetaUI_Main tanimlanmadan once oldugu icin isimle tarar)
local function menuRect()
    local rect = nil
    pcall(function()
        local containers = {}
        local plr = LocalPlayer
        if plr and plr:FindFirstChild("PlayerGui") then
            containers[#containers + 1] = plr.PlayerGui
        end
        pcall(function()
            if gethui then
                local h = gethui()
                if h then containers[#containers + 1] = h end
            end
        end)
        for _, parent in ipairs(containers) do
            local sg = parent:FindFirstChild("zeta_res")
            if sg then
                for _, d in ipairs(sg:GetDescendants()) do
                    if d:IsA("GuiObject") and d.Visible
                        and d.AbsoluteSize.X > 200 and d.AbsoluteSize.Y > 200 then
                        local p = d.AbsolutePosition
                        local s = d.AbsoluteSize
                        rect = {x1 = p.X, y1 = p.Y, x2 = p.X + s.X, y2 = p.Y + s.Y}
                        return
                    end
                end
            end
        end
    end)
    return rect
end

-- menu disinda bir tik noktasi sec (20px guvenlik payi)
local function pickPoint()
    local vs = (Camera and Camera.ViewportSize) or Vector2.new(960, 540)
    local cands = {
        Vector2.new(vs.X * 0.5, vs.Y * 0.5),
        Vector2.new(vs.X * 0.5, vs.Y * 0.84),
        Vector2.new(vs.X * 0.5, vs.Y * 0.16),
        Vector2.new(20, vs.Y - 20),
        Vector2.new(vs.X - 20, vs.Y - 20),
        Vector2.new(vs.X - 20, 20),
    }
    local r = menuRect()
    local m = 20
    for _, c in ipairs(cands) do
        local inside = r
            and c.X > r.x1 - m and c.X < r.x2 + m
            and c.Y > r.y1 - m and c.Y < r.y2 + m
        if not inside then
            return math.floor(c.X), math.floor(c.Y)
        end
    end
    return math.floor(vs.X - 20), math.floor(vs.Y - 20)
end

local function safeMouseClick()
    -- yol 1) VIM: menu DISINDA bir noktaya gercek tik atar (toggle'lar guvende)
    local x, y = pickPoint()
    local ok = pcall(function()
        VirtualInputManager:SendMouseButtonEvent(x, y, 0, true, game, 0)
        task.wait(0.04)
        VirtualInputManager:SendMouseButtonEvent(x, y, 0, false, game, 0)
    end)

    -- yol 2) sigorta: VirtualUser Mouse olayi (GUI islem hatti disi)
    pcall(function()
        VirtualUser:CaptureController()
        local cf = (Camera and Camera.CFrame) or CFrame.new()
        VirtualUser:Button1Down(Vector2.new(0, 0), cf)
        task.wait(0.04)
        VirtualUser:Button1Up(Vector2.new(0, 0), cf)
    end)

    -- yol 3) sigorta: esitli tool'u direkt aktive et
    pcall(function()
        local ch = LocalPlayer and LocalPlayer.Character
        local tool = ch and ch:FindFirstChildOfClass("Tool")
        if tool then tool:Activate() end
    end)

    -- yol 4) son care: mouse1click (nokta secimi yok, sadece VIM tamamen yoksa)
    if not ok then
        pcall(function()
            if mouse1click then mouse1click() end
        end)
    end
end

local function safeKeyPress(keycode)
    pcall(function()
        if keypress then
            keypress(keycode)
            task.wait(0.05)
            keyrelease(keycode)
        end
    end)
end

----------------------------------------------------------------
-- PAYLASILAN DURUM (state) — tum calistirmalar ayni bayraklari okur
----------------------------------------------------------------
local S = REG.state
local STATE_DEFAULTS = {
    autoLevel = false, autoFarm = false, autoBoss = false,
    autoLeviathan = false, autoSecret = false, autoChest = false, autoFruit = false,
    autoStat = false, autoSea = false, autoHaki = false, espEnabled = false,
    espChest = false, espFruit = false,
    statMode = "Melee",
}
for k, v in pairs(STATE_DEFAULTS) do
    if S[k] == nil then S[k] = v end
end

local function saveState()
    pcall(function()
        local lines = {}
        for k, v in pairs(S) do
            lines[#lines + 1] = k .. "=" .. tostring(v)
        end
        safeWrite(CFG_FILE, table.concat(lines, "\n"))
    end)
end

local function loadState()
    pcall(function()
        local raw = safeRead(CFG_FILE)
        if not raw then return end
        for line in raw:gmatch("[^\r\n]+") do
            local k, v = line:match("^([%w_]+)=(.+)$")
            if k and S[k] ~= nil then
                if v == "true" then S[k] = true
                elseif v == "false" then S[k] = false
                else S[k] = v
                end
            end
        end
    end)
end

loadState()

-- her calistirmada taze hook tablosu (eski pencere kalmaz)
REG.hooks = {}

local function onState(key, fn)
    REG.hooks[key] = REG.hooks[key] or {}
    table.insert(REG.hooks[key], fn)
end

local function setState(key, value)
    S[key] = value
    for _, fn in ipairs(REG.hooks[key] or {}) do pcall(fn, value) end
    saveState()
end

----------------------------------------------------------------
-- UI PARENT — PlayerGui once, hicbir executor'da engellenmez
----------------------------------------------------------------
local function uiParent()
    local ok1, pg = pcall(function()
        if not LocalPlayer then return nil end
        return LocalPlayer:FindFirstChild("PlayerGui")
            or LocalPlayer:WaitForChild("PlayerGui", 3)
    end)
    if ok1 and pg then return pg end

    local ok2, hg = pcall(function()
        if gethui then return gethui() end
        return nil
    end)
    if ok2 and hg then return hg end

    local ok3, cg = pcall(function() return game:GetService("CoreGui") end)
    if ok3 and cg then return cg end

    error("[zeta-res] UI parent bulunamadi (PlayerGui / gethui / CoreGui hepsi yok)")
end

----------------------------------------------------------------
-- UTILITY
----------------------------------------------------------------
local function notify(title, text, duration)
    pcall(function()
        game:GetService("StarterGui"):SetCore("SendNotification", {
            Title    = title or "zeta-res",
            Text     = text or "",
            Duration = duration or 4
        })
    end)
end

local function getChar()
    return LocalPlayer and LocalPlayer.Character
end

local function getHRP()
    local c = getChar()
    return c and c:FindFirstChild("HumanoidRootPart")
end

local function getHum()
    local c = getChar()
    return c and c:FindFirstChildOfClass("Humanoid")
end

local SEA_BY_PLACE = {
    [2753915549] = 1,
    [4442272183] = 2,
    [7449423635] = 3,
}

local function currentSea()
    return SEA_BY_PLACE[game.PlaceId] or 1
end

local function teleportTo(pos, jitter)
    local hrp = getHRP()
    if not hrp then return end
    if jitter then
        hrp.CFrame = CFrame.new(pos + Vector3.new(math.random(-5, 5), 3, math.random(-5, 5)))
    else
        hrp.CFrame = CFrame.new(pos + Vector3.new(0, 3, 0))
    end
end

local function dist(a, b)
    if not a or not b then return math.huge end
    return (a - b).Magnitude
end

----------------------------------------------------------------
-- ANTI-AFK
----------------------------------------------------------------
pcall(function()
    if not LocalPlayer then return end
    local idled = LocalPlayer.Idled:Connect(function()
        VirtualUser:CaptureController()
        VirtualUser:ClickButton2(Vector2.new(0, 0), workspace.CurrentCamera.CFrame)
        task.wait(1)
        VirtualUser:ClickButton2(Vector2.new(0, 0), workspace.CurrentCamera.CFrame)
    end)
    retire(function() idled:Disconnect() end)
end)

----------------------------------------------------------------
-- HUMANIZED DELAY
----------------------------------------------------------------
local function hdelay(base)
    task.wait(base + math.random() * 0.15)
end

----------------------------------------------------------------
-- KEY SYSTEM
----------------------------------------------------------------
local function validateKey(input)
    if not input then return false end
    input = input:gsub("^%s+", ""):gsub("%s+$", ""):lower()
    return input == KEY:lower()
end

local function keyUi(onSuccess, onError)
    local sg = Instance.new("ScreenGui")
    sg.Name = "zeta_key"
    sg.ResetOnSpawn = false
    sg.ZIndexBehavior = Enum.ZIndexBehavior.Sibling
    sg.Parent = uiParent()

    local frame = Instance.new("Frame")
    frame.Size = UDim2.new(0, 380, 0, 260)
    frame.Position = UDim2.new(0.5, -190, 0.5, -130)
    frame.BackgroundColor3 = Color3.fromRGB(14, 14, 24)
    frame.BorderSizePixel = 0
    frame.Parent = sg
    Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 10)

    local accent = Instance.new("Frame")
    accent.Size = UDim2.new(1, 0, 0, 3)
    accent.BackgroundColor3 = Color3.fromRGB(124, 77, 255)
    accent.BorderSizePixel = 0
    accent.Parent = frame

    local title = Instance.new("TextLabel")
    title.Size = UDim2.new(1, 0, 0, 42)
    title.Position = UDim2.new(0, 0, 0, 8)
    title.BackgroundTransparency = 1
    title.Text = "◆  zeta-res"
    title.TextColor3 = Color3.fromRGB(235, 235, 245)
    title.Font = Enum.Font.GothamBold
    title.TextSize = 20
    title.Parent = frame

    local sub = Instance.new("TextLabel")
    sub.Size = UDim2.new(1, -30, 0, 18)
    sub.Position = UDim2.new(0, 15, 0, 48)
    sub.BackgroundTransparency = 1
    sub.Text = "discord'dan key al -> gir -> baslat"
    sub.TextColor3 = Color3.fromRGB(120, 120, 145)
    sub.Font = Enum.Font.Gotham
    sub.TextSize = 12
    sub.TextXAlignment = Enum.TextXAlignment.Left
    sub.Parent = frame

    local box = Instance.new("TextBox")
    box.Size = UDim2.new(1, -30, 0, 36)
    box.Position = UDim2.new(0, 15, 0, 78)
    box.BackgroundColor3 = Color3.fromRGB(24, 24, 38)
    box.TextColor3 = Color3.fromRGB(220, 220, 235)
    box.PlaceholderText = "key gir..."
    box.Text = ""
    box.Font = Enum.Font.Gotham
    box.TextSize = 14
    box.ClearTextOnFocus = false
    box.BorderSizePixel = 0
    box.Parent = frame
    Instance.new("UICorner", box).CornerRadius = UDim.new(0, 6)

    local discBtn = Instance.new("TextButton")
    discBtn.Size = UDim2.new(1, -30, 0, 32)
    discBtn.Position = UDim2.new(0, 15, 0, 124)
    discBtn.BackgroundColor3 = Color3.fromRGB(35, 35, 58)
    discBtn.TextColor3 = Color3.fromRGB(160, 130, 255)
    discBtn.Text = "discord — key al (link kopyala)"
    discBtn.Font = Enum.Font.GothamMedium
    discBtn.TextSize = 13
    discBtn.BorderSizePixel = 0
    discBtn.Parent = frame
    Instance.new("UICorner", discBtn).CornerRadius = UDim.new(0, 6)

    discBtn.MouseButton1Click:Connect(function()
        safeClipboard(DISCORD_INV)
        discBtn.Text = "kopyalandi — discord'a yapistir: " .. DISCORD_INV
        task.delay(3, function() discBtn.Text = "discord — key al (link kopyala)" end)
    end)

    local submit = Instance.new("TextButton")
    submit.Size = UDim2.new(1, -30, 0, 36)
    submit.Position = UDim2.new(0, 15, 0, 170)
    submit.BackgroundColor3 = Color3.fromRGB(124, 77, 255)
    submit.TextColor3 = Color3.fromRGB(255, 255, 255)
    submit.Text = "dogrula & baslat"
    submit.Font = Enum.Font.GothamBold
    submit.TextSize = 14
    submit.BorderSizePixel = 0
    submit.Parent = frame
    Instance.new("UICorner", submit).CornerRadius = UDim.new(0, 6)

    local status = Instance.new("TextLabel")
    status.Size = UDim2.new(1, -30, 0, 18)
    status.Position = UDim2.new(0, 15, 0, 216)
    status.BackgroundTransparency = 1
    status.Text = ""
    status.TextColor3 = Color3.fromRGB(255, 100, 100)
    status.Font = Enum.Font.Gotham
    status.TextSize = 12
    status.Parent = frame

    submit.MouseButton1Click:Connect(function()
        if validateKey(box.Text) then
            safeWrite(KEY_FILE, KEY)
            REG.keyValidated = true
            status.TextColor3 = Color3.fromRGB(100, 255, 140)
            status.Text = "key gecerli — yukleniyor..."
            print("[zeta-res] key dogrulandi")
            task.wait(0.4)
            sg:Destroy()
            local ok, err = pcall(onSuccess)
            if not ok and onError then onError(err) end
        else
            status.Text = "gecersiz key — discord'dan al"
            box.BackgroundColor3 = Color3.fromRGB(60, 20, 20)
            task.delay(0.6, function()
                box.BackgroundColor3 = Color3.fromRGB(24, 24, 38)
            end)
        end
    end)

    print("[zeta-res] key UI hazir")
    return sg
end

----------------------------------------------------------------
-- UI LIBRARY
----------------------------------------------------------------
local ZetaUI = {}
ZetaUI.__index = ZetaUI

function ZetaUI:New(class, props)
    local inst = Instance.new(class)
    for k, v in pairs(props or {}) do
        if k ~= "Parent" then inst[k] = v end
    end
    if props and props.Parent then inst.Parent = props.Parent end
    return inst
end

function ZetaUI:Window(title)
    local self = setmetatable({}, ZetaUI)

    self.sg = self:New("ScreenGui", {
        Name = "zeta_res",
        ResetOnSpawn = false,
        ZIndexBehavior = Enum.ZIndexBehavior.Sibling,
        Parent = uiParent()
    })

    self.main = self:New("Frame", {
        Size = UDim2.new(0, 620, 0, 420),
        Position = UDim2.new(0.5, -310, 0.5, -210),
        BackgroundColor3 = Color3.fromRGB(14, 14, 24),
        BorderSizePixel = 0,
        Active = true,
        Parent = self.sg
    })
    Instance.new("UICorner", self.main).CornerRadius = UDim.new(0, 10)

    self:New("Frame", {
        Size = UDim2.new(1, 0, 0, 3),
        BackgroundColor3 = Color3.fromRGB(124, 77, 255),
        BorderSizePixel = 0,
        Parent = self.main
    })

    self:New("TextLabel", {
        Size = UDim2.new(0, 220, 0, 36),
        Position = UDim2.new(0, 15, 0, 8),
        BackgroundTransparency = 1,
        Text = "◆  " .. title,
        TextColor3 = Color3.fromRGB(235, 235, 245),
        Font = Enum.Font.GothamBold,
        TextSize = 18,
        TextXAlignment = Enum.TextXAlignment.Left,
        Parent = self.main
    })

    local closeBtn = self:New("TextButton", {
        Size = UDim2.new(0, 28, 0, 28),
        Position = UDim2.new(1, -36, 0, 10),
        BackgroundColor3 = Color3.fromRGB(30, 30, 48),
        Text = "x",
        TextColor3 = Color3.fromRGB(200, 200, 220),
        Font = Enum.Font.GothamBold,
        TextSize = 16,
        BorderSizePixel = 0,
        AutoButtonColor = false,
        Parent = self.main
    })
    Instance.new("UICorner", closeBtn).CornerRadius = UDim.new(0, 6)

    local minBtn = self:New("TextButton", {
        Size = UDim2.new(0, 28, 0, 28),
        Position = UDim2.new(1, -70, 0, 10),
        BackgroundColor3 = Color3.fromRGB(30, 30, 48),
        Text = "-",
        TextColor3 = Color3.fromRGB(200, 200, 220),
        Font = Enum.Font.GothamBold,
        TextSize = 16,
        BorderSizePixel = 0,
        AutoButtonColor = false,
        Parent = self.main
    })
    Instance.new("UICorner", minBtn).CornerRadius = UDim.new(0, 6)

    -- sol sekme kutusu
    self.tabHolder = self:New("Frame", {
        Size = UDim2.new(0, 130, 1, -50),
        Position = UDim2.new(0, 0, 0, 46),
        BackgroundColor3 = Color3.fromRGB(18, 18, 30),
        BorderSizePixel = 0,
        Parent = self.main
    })
    Instance.new("UICorner", self.tabHolder).CornerRadius = UDim.new(0, 10)

    self:New("UIListLayout", {
        Parent = self.tabHolder,
        Padding = UDim.new(0, 4),
        SortOrder = Enum.SortOrder.LayoutOrder
    })
    self:New("UIPadding", {
        PaddingTop = UDim.new(0, 8),
        PaddingLeft = UDim.new(0, 6),
        PaddingRight = UDim.new(0, 6),
        Parent = self.tabHolder
    })

    -- icerik alani
    self.content = self:New("ScrollingFrame", {
        Size = UDim2.new(1, -145, 1, -50),
        Position = UDim2.new(0, 140, 0, 46),
        BackgroundTransparency = 1,
        BorderSizePixel = 0,
        ScrollBarThickness = 4,
        ScrollBarImageColor3 = Color3.fromRGB(124, 77, 255),
        CanvasSize = UDim2.new(0, 0, 0, 0),
        AutomaticCanvasSize = Enum.AutomaticSize.Y,
        Parent = self.main
    })
    self:New("UIListLayout", {
        Parent = self.content,
        Padding = UDim.new(0, 6),
        SortOrder = Enum.SortOrder.LayoutOrder
    })
    self:New("UIPadding", {
        PaddingTop = UDim.new(0, 4),
        PaddingLeft = UDim.new(0, 4),
        PaddingRight = UDim.new(0, 8),
        Parent = self.content
    })

    -- durum cubugu
    self.statusLabel = self:New("TextLabel", {
        Size = UDim2.new(1, -20, 0, 22),
        Position = UDim2.new(0, 10, 1, -24),
        BackgroundTransparency = 1,
        Text = "● idle",
        TextColor3 = Color3.fromRGB(110, 110, 140),
        Font = Enum.Font.Gotham,
        TextSize = 12,
        TextXAlignment = Enum.TextXAlignment.Left,
        Parent = self.main
    })

    -- surukleme — sadece buton disindan baslayinca (tiklar suruklemesin)
    local dragging, dragStart, startPos
    local c1 = self.main.InputBegan:Connect(function(input)
        if input.UserInputType ~= Enum.UserInputType.MouseButton1 then return end
        local t = input.Target
        if t and t:IsA("GuiButton") then return end
        dragging = true
        dragStart = input.Position
        startPos = self.main.Position
    end)
    local c2 = UserInputService.InputChanged:Connect(function(input)
        if dragging and input.UserInputType == Enum.UserInputType.MouseMovement then
            if not self.main or not self.main.Parent then dragging = false return end
            local delta = input.Position - dragStart
            self.main.Position = UDim2.new(
                startPos.X.Scale, startPos.X.Offset + delta.X,
                startPos.Y.Scale, startPos.Y.Offset + delta.Y
            )
        end
    end)
    local c3 = UserInputService.InputEnded:Connect(function(input)
        if input.UserInputType == Enum.UserInputType.MouseButton1 then dragging = false end
    end)

    -- Insert veya Sag Ctrl ile goster/gizle (Xeno kendi arayuzu icin Insert kullaniyor olabilir)
    local c4 = UserInputService.InputBegan:Connect(function(input, gpe)
        if gpe then return end
        if input.KeyCode == Enum.KeyCode.Insert
            or input.KeyCode == Enum.KeyCode.RightControl then
            if self.main and self.main.Parent then
                self.main.Visible = not self.main.Visible
            end
        end
    end)

    -- bu calistirma sonrasi yenisi gelince baglantilari kes
    retire(function()
        pcall(function() c1:Disconnect() end)
        pcall(function() c2:Disconnect() end)
        pcall(function() c3:Disconnect() end)
        pcall(function() c4:Disconnect() end)
    end)

    -- kucult / kapat
    local minimized = false
    local origSize = self.main.Size
    minBtn.MouseButton1Click:Connect(function()
        minimized = not minimized
        local target = minimized
            and UDim2.new(origSize.X.Scale, origSize.X.Offset, 0, 50)
            or origSize
        TweenService:Create(self.main, TweenInfo.new(0.25), {Size = target}):Play()
    end)

    closeBtn.MouseButton1Click:Connect(function()
        self.sg:Destroy()
        print("[zeta-res] menu kapandi — yeniden acmak icin scripti tekrar execute et")
    end)

    return self
end

function ZetaUI:Tab(name, order)
    local window = self
    local btn = self:New("TextButton", {
        Size = UDim2.new(1, 0, 0, 34),
        BackgroundColor3 = Color3.fromRGB(24, 24, 40),
        Text = name,
        TextColor3 = Color3.fromRGB(160, 160, 185),
        Font = Enum.Font.GothamMedium,
        TextSize = 13,
        BorderSizePixel = 0,
        AutoButtonColor = false,
        LayoutOrder = order or 0,
        Parent = self.tabHolder
    })
    Instance.new("UICorner", btn).CornerRadius = UDim.new(0, 6)

    local content = self:New("Frame", {
        Size = UDim2.new(1, 0, 0, 0),
        BackgroundTransparency = 1,
        Visible = false,
        Parent = self.content
    })
    self:New("UIListLayout", {
        Parent = content,
        Padding = UDim.new(0, 6),
        SortOrder = Enum.SortOrder.LayoutOrder
    })
    content.AutomaticSize = Enum.AutomaticSize.Y

    local function selectTab()
        for _, c in pairs(window.content:GetChildren()) do
            if c:IsA("Frame") then c.Visible = false end
        end
        content.Visible = true
        for _, b in pairs(window.tabHolder:GetChildren()) do
            if b:IsA("TextButton") then
                TweenService:Create(b, TweenInfo.new(0.15), {
                    BackgroundColor3 = Color3.fromRGB(24, 24, 40),
                    TextColor3       = Color3.fromRGB(160, 160, 185)
                }):Play()
            end
        end
        TweenService:Create(btn, TweenInfo.new(0.15), {
            BackgroundColor3 = Color3.fromRGB(40, 32, 70),
            TextColor3       = Color3.fromRGB(210, 190, 255)
        }):Play()
    end

    btn.MouseButton1Click:Connect(selectTab)

    -- ilk olusturulan sekmeyi dogrudan sec (Fire() yok)
    if not window._firstTab then
        window._firstTab = true
        selectTab()
    end

    local tabObj = {content = content, parent = window, select = selectTab}

    function tabObj:Toggle(text, key, cb)
        local t = (S[key] == true)
        local row = self.parent:New("Frame", {
            Size = UDim2.new(1, 0, 0, 34),
            BackgroundColor3 = Color3.fromRGB(22, 22, 36),
            BorderSizePixel = 0,
            Parent = content
        })
        Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6)

        self.parent:New("TextLabel", {
            Size = UDim2.new(1, -60, 1, 0),
            Position = UDim2.new(0, 12, 0, 0),
            BackgroundTransparency = 1,
            Text = text,
            TextColor3 = Color3.fromRGB(200, 200, 220),
            Font = Enum.Font.Gotham,
            TextSize = 13,
            TextXAlignment = Enum.TextXAlignment.Left,
            Parent = row
        })

        local pill = self.parent:New("Frame", {
            Size = UDim2.new(0, 36, 0, 20),
            Position = UDim2.new(1, -46, 0.5, -10),
            BackgroundColor3 = t and Color3.fromRGB(124, 77, 255) or Color3.fromRGB(45, 45, 65),
            BorderSizePixel = 0,
            Parent = row
        })
        Instance.new("UICorner", pill).CornerRadius = UDim.new(1, 0)

        local knob = self.parent:New("Frame", {
            Size = UDim2.new(0, 16, 0, 16),
            Position = t and UDim2.new(1, -18, 0.5, -8) or UDim2.new(0, 2, 0.5, -8),
            BackgroundColor3 = Color3.fromRGB(240, 240, 250),
            BorderSizePixel = 0,
            Parent = pill
        })
        Instance.new("UICorner", knob).CornerRadius = UDim.new(1, 0)

        local hit = self.parent:New("TextButton", {
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            Text = "",
            Parent = row
        })

        local function render(v)
            t = v
            TweenService:Create(pill, TweenInfo.new(0.2), {
                BackgroundColor3 = v and Color3.fromRGB(124, 77, 255) or Color3.fromRGB(45, 45, 65)
            }):Play()
            TweenService:Create(knob, TweenInfo.new(0.2), {
                Position = v and UDim2.new(1, -18, 0.5, -8) or UDim2.new(0, 2, 0.5, -8)
            }):Play()
        end

        -- durum degisince BU dugme (ve ayni key'i tasiyan digerleri) senkron calisir
        onState(key, function(v)
            render(v)
            if cb then pcall(cb, v) end
        end)

        hit.MouseButton1Click:Connect(function()
            setState(key, not t)
        end)

        if cb then pcall(cb, t) end

        return {Set = function(_, v) setState(key, v) end}
    end

    function tabObj:Button(text, cb)
        local b = self.parent:New("TextButton", {
            Size = UDim2.new(1, 0, 0, 32),
            BackgroundColor3 = Color3.fromRGB(35, 28, 60),
            Text = text,
            TextColor3 = Color3.fromRGB(210, 190, 255),
            Font = Enum.Font.GothamMedium,
            TextSize = 13,
            BorderSizePixel = 0,
            Parent = content
        })
        Instance.new("UICorner", b).CornerRadius = UDim.new(0, 6)
        b.MouseEnter:Connect(function()
            TweenService:Create(b, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(50, 40, 85)}):Play()
        end)
        b.MouseLeave:Connect(function()
            TweenService:Create(b, TweenInfo.new(0.15), {BackgroundColor3 = Color3.fromRGB(35, 28, 60)}):Play()
        end)
        b.MouseButton1Click:Connect(cb)
        return b
    end

    function tabObj:Dropdown(text, options, initial, cb)
        local selected = initial or options[1] or ""
        local row = self.parent:New("Frame", {
            Size = UDim2.new(1, 0, 0, 34),
            BackgroundColor3 = Color3.fromRGB(22, 22, 36),
            BorderSizePixel = 0,
            Parent = content
        })
        Instance.new("UICorner", row).CornerRadius = UDim.new(0, 6)

        self.parent:New("TextLabel", {
            Size = UDim2.new(0.5, 0, 1, 0),
            Position = UDim2.new(0, 12, 0, 0),
            BackgroundTransparency = 1,
            Text = text,
            TextColor3 = Color3.fromRGB(200, 200, 220),
            Font = Enum.Font.Gotham,
            TextSize = 13,
            TextXAlignment = Enum.TextXAlignment.Left,
            Parent = row
        })

        local valLbl = self.parent:New("TextLabel", {
            Size = UDim2.new(0.4, -12, 1, 0),
            Position = UDim2.new(0.6, 0, 0, 0),
            BackgroundTransparency = 1,
            Text = selected,
            TextColor3 = Color3.fromRGB(160, 130, 255),
            Font = Enum.Font.GothamMedium,
            TextSize = 12,
            TextXAlignment = Enum.TextXAlignment.Right,
            Parent = row
        })

        local list = self.parent:New("Frame", {
            Size = UDim2.new(1, 0, 0, 0),
            BackgroundColor3 = Color3.fromRGB(18, 18, 30),
            BorderSizePixel = 0,
            Visible = false,
            Parent = content
        })
        Instance.new("UICorner", list).CornerRadius = UDim.new(0, 6)
        self.parent:New("UIListLayout", {Parent = list, Padding = UDim.new(0, 2)})
        list.AutomaticSize = Enum.AutomaticSize.Y

        local hit = self.parent:New("TextButton", {
            Size = UDim2.new(1, 0, 1, 0),
            BackgroundTransparency = 1,
            Text = "",
            Parent = row
        })
        hit.MouseButton1Click:Connect(function()
            list.Visible = not list.Visible
        end)

        for _, opt in ipairs(options) do
            local ob = self.parent:New("TextButton", {
                Size = UDim2.new(1, -8, 0, 26),
                BackgroundColor3 = Color3.fromRGB(28, 28, 46),
                Text = opt,
                TextColor3 = Color3.fromRGB(200, 200, 220),
                Font = Enum.Font.Gotham,
                TextSize = 12,
                BorderSizePixel = 0,
                Parent = list
            })
            Instance.new("UICorner", ob).CornerRadius = UDim.new(0, 4)
            ob.MouseButton1Click:Connect(function()
                selected = opt
                valLbl.Text = opt
                list.Visible = false
                if cb then cb(opt) end
            end)
        end

        if cb then cb(selected) end
        return {Get = function() return selected end}
    end

    function tabObj:Label(text)
        return self.parent:New("TextLabel", {
            Size = UDim2.new(1, 0, 0, 22),
            BackgroundTransparency = 1,
            Text = text,
            TextColor3 = Color3.fromRGB(130, 130, 160),
            Font = Enum.Font.Gotham,
            TextSize = 12,
            TextXAlignment = Enum.TextXAlignment.Left,
            Parent = content
        })
    end

    function tabObj:Section(text)
        return self.parent:New("TextLabel", {
            Size = UDim2.new(1, 0, 0, 20),
            BackgroundTransparency = 1,
            Text = "——  " .. text .. "  ——",
            TextColor3 = Color3.fromRGB(90, 90, 120),
            Font = Enum.Font.GothamBold,
            TextSize = 11,
            TextXAlignment = Enum.TextXAlignment.Left,
            Parent = content
        })
    end

    return tabObj
end

function ZetaUI:SetStatus(text, color)
    if self.statusLabel then
        self.statusLabel.Text = "●  " .. text
        self.statusLabel.TextColor3 = color or Color3.fromRGB(160, 130, 255)
    end
end

----------------------------------------------------------------
-- QUEST DATA (uc deniz)
----------------------------------------------------------------
local Quests = {
    -- FIRST SEA
    {Lv = 1,   Name = "BanditQuest1",       Num = 1, Mob = "Bandit",             Pos = Vector3.new(1608.6, 16.1, 1533.8)},
    {Lv = 10,  Name = "JungleQuest",        Num = 1, Mob = "Monkey",             Pos = Vector3.new(-1602, 36, 152)},
    {Lv = 15,  Name = "JungleQuest",        Num = 2, Mob = "Gorilla",            Pos = Vector3.new(-1602, 36, 152)},
    {Lv = 30,  Name = "PirateTrainee",      Num = 1, Mob = "Pirate Raider",      Pos = Vector3.new(-1138, 13, 537)},
    {Lv = 35,  Name = "VolkovQuest",        Num = 1, Mob = "Brute",              Pos = Vector3.new(398, 13, 412)},
    {Lv = 45,  Name = "SnowQuest",          Num = 1, Mob = "Snow Bandit",        Pos = Vector3.new(453, 29, -1941)},
    {Lv = 55,  Name = "SnowQuest",          Num = 2, Mob = "Snowman",            Pos = Vector3.new(453, 29, -1941)},
    {Lv = 85,  Name = "MarineQuest2",       Num = 1, Mob = "Marine",             Pos = Vector3.new(-2646, 13, 404)},
    {Lv = 100, Name = "SoldierQuest",       Num = 1, Mob = "Military Soldier",   Pos = Vector3.new(-5700, 13, -1220)},
    {Lv = 150, Name = "SkyQuest",           Num = 1, Mob = "Sky Bandit",         Pos = Vector3.new(-4971, 401, -317)},
    {Lv = 220, Name = "PrisonerQuest",      Num = 1, Mob = "Warden",             Pos = Vector3.new(5260, 5, 745)},
    {Lv = 300, Name = "MagmaQuest",         Num = 1, Mob = "Magma Ninja",        Pos = Vector3.new(-5430, 12, -5280)},
    {Lv = 400, Name = "IceQuest",           Num = 1, Mob = "Yeti",               Pos = Vector3.new(1216, 27, -5320)},
    {Lv = 500, Name = "ShipQuest1",         Num = 1, Mob = "Fishman Raider",     Pos = Vector3.new(61120, 18, 5890)},
    {Lv = 625, Name = "AmazonQuest",        Num = 1, Mob = "Amazon Warrior",     Pos = Vector3.new(5580, 1000, -3000)},
    {Lv = 675, Name = "SnowQuest",          Num = 1, Mob = "Arctic Warrior",     Pos = Vector3.new(4000, 100, -5000)},

    -- SECOND SEA
    {Lv = 700, Name = "Area1Quest",         Num = 1, Mob = "Rebel",              Pos = Vector3.new(-5420, 11, -5250)},
    {Lv = 750, Name = "Area2Quest",         Num = 1, Mob = "Swan Pirate",        Pos = Vector3.new(635, 18, 843)},
    {Lv = 850, Name = "Area2Quest",         Num = 3, Mob = "Shanda",             Pos = Vector3.new(3730, 13, -6540)},
    {Lv = 900, Name = "Area2Quest",         Num = 4, Mob = "Royal Squad",        Pos = Vector3.new(-5430, 11, -5280)},
    {Lv = 1000,Name = "Area2Quest",         Num = 5, Mob = "Royal Soldier",      Pos = Vector3.new(-5430, 11, -5280)},
    {Lv = 1200,Name = "Area2Quest",         Num = 2, Mob = "Galley Pirate",      Pos = Vector3.new(635, 18, 843)},
    {Lv = 1300,Name = "Area2Quest",         Num = 3, Mob = "Galley Captain",     Pos = Vector3.new(635, 18, 843)},
    {Lv = 1400,Name = "TurtleQuest",        Num = 1, Mob = "Marine Captain",     Pos = Vector3.new(-6800, 15, -6000)},
    {Lv = 1450,Name = "TurtleQuest",        Num = 2, Mob = "Magma Ninja",        Pos = Vector3.new(-6800, 15, -6000)},

    -- THIRD SEA
    {Lv = 1500,Name = "PirateVillageQuest", Num = 1, Mob = "Pirate Millionaire", Pos = Vector3.new(-4000, 50, -2000)},
    {Lv = 1550,Name = "PirateVillageQuest", Num = 2, Mob = "Pistol Billionaire", Pos = Vector3.new(-4000, 50, -2000)},
    {Lv = 1650,Name = "TurtleQuest",        Num = 1, Mob = "Reborn Skeleton",    Pos = Vector3.new(-6800, 15, -6000)},
    {Lv = 1750,Name = "TurtleQuest",        Num = 3, Mob = "Demonic Soul",       Pos = Vector3.new(-6800, 15, -6000)},
    {Lv = 1800,Name = "TurtleQuest",        Num = 4, Mob = "Posessed Mummy",     Pos = Vector3.new(-6800, 15, -6000)},
    {Lv = 1900,Name = "TurtleQuest",        Num = 5, Mob = "Forest Pirate",      Pos = Vector3.new(-6800, 15, -6000)},
    {Lv = 2000,Name = "TurtleQuest",        Num = 6, Mob = "Dragon Crew Warrior",Pos = Vector3.new(-6800, 15, -6000)},
    {Lv = 2200,Name = "TurtleQuest",        Num = 7, Mob = "Dragon Crew Archer", Pos = Vector3.new(-6800, 15, -6000)},
    {Lv = 2300,Name = "TurtleQuest",        Num = 8, Mob = "Water Fighter",      Pos = Vector3.new(-6800, 15, -6000)},
    {Lv = 2450,Name = "TurtleQuest",        Num = 9, Mob = "Venom Captain",      Pos = Vector3.new(-6800, 15, -6000)},
}

local function getQuestForLevel(lv)
    local best = nil
    for _, q in ipairs(Quests) do
        if lv >= q.Lv and (not best or q.Lv > best.Lv) then
            best = q
        end
    end
    return best
end

----------------------------------------------------------------
-- BOSS DATA
----------------------------------------------------------------
local Bosses = {
    "The Gorilla King", "Bobby", "The Saw", "Yeti", "Greybeard",
    "Mob Leader", "Vice Admiral", "Warden", "Chief Warden", "Swan",
    "Magma Admiral", "Fishman Lord", "Wysper", "Thunder God", "Cyborg",
    "Ice Admiral", "Longma", "Saber Expert", "Darkbeard", "rip_indra",
    "Cursed Captain", "Order", "Tide Keeper", "Beautiful Pirate",
    "Cake Queen", "Cake Prince",
}

local function findBossInWorkspace()
    for _, v in ipairs(Workspace.Enemies:GetChildren()) do
        for _, bname in ipairs(Bosses) do
            if v.Name:find(bname, 1, true)
                and v:FindFirstChild("HumanoidRootPart")
                and v:FindFirstChildOfClass("Humanoid") then
                return v
            end
        end
    end
    return nil
end

----------------------------------------------------------------
-- MOB SEARCH
----------------------------------------------------------------
local function findMob(name)
    local hrp = getHRP()
    if not hrp then return nil end
    local best, bestDist = nil, math.huge
    for _, v in ipairs(Workspace.Enemies:GetChildren()) do
        local hum = v:FindFirstChildOfClass("Humanoid")
        local root = v:FindFirstChild("HumanoidRootPart")
        if hum and root and hum.Health > 0 and v.Name:lower():find(name:lower(), 1, true) then
            local d = dist(root.Position, hrp.Position)
            if d < bestDist then
                best = v
                bestDist = d
            end
        end
    end
    return best
end

----------------------------------------------------------------
-- QUEST REMOTE + PROGRESS
----------------------------------------------------------------
local function startQuest(questName, questNum)
    pcall(function()
        ReplicatedStorage.Remotes.CommF_:InvokeServer("StartQuest", questName, questNum)
    end)
end

local function getQuestProgress()
    local ok, txt = pcall(function()
        local pg = LocalPlayer and LocalPlayer:FindFirstChild("PlayerGui")
        local gui = pg and pg:FindFirstChild("Main")
        if gui and gui:FindFirstChild("Quest") and gui.Quest.Visible then
            local container = gui.Quest:FindFirstChild("Container")
            local qt = container and container:FindFirstChild("QuestTitle")
            local title = qt and qt:FindFirstChild("Title")
            if title then return title.Text end
        end
        return nil
    end)
    if ok and txt then
        local cur, req = txt:match("%((%d+)/(%d+)%)")
        if cur then return tonumber(cur), tonumber(req) end
        cur, req = txt:match("(%d+)/(%d+)")
        if cur then return tonumber(cur), tonumber(req) end
    end
    return nil, nil
end

----------------------------------------------------------------
-- ATTACK
----------------------------------------------------------------
local function attackTarget(target)
    if not target then return end
    local hrp = getHRP()
    local root = target:FindFirstChild("HumanoidRootPart")
    if not hrp or not root then return end

    local offset = root.CFrame.LookVector * -3 + Vector3.new(0, 2, 0)
    hrp.CFrame = CFrame.new(root.Position + offset, root.Position)
    hdelay(0.05)
    safeMouseClick()
end

----------------------------------------------------------------
-- FARM LOOP RUNNER
----------------------------------------------------------------
local running = {}

local function startLoop(name, func)
    if running[name] then return end
    running[name] = true
    task.spawn(function()
        while running[name] do
            -- yeni calistirma (nesil) basladiysa bu loop kendini durdurur
            if MY_GEN ~= REG.gen then
                running[name] = nil
                return
            end
            local ok, err = pcall(func)
            if not ok then
                warn("[zeta-res] " .. name .. " hatasi: " .. tostring(err))
            end
            task.wait(0.1)
        end
    end)
end

----------------------------------------------------------------
-- GLOBAL DURUM — hepsi REG.state (S) icinde, execute'lar arasi ortak
----------------------------------------------------------------
local ZetaUI_Main = nil

local STATE_KEYS = {
    "autoLevel", "autoFarm", "autoBoss",
    "autoLeviathan", "autoSecret", "autoChest", "autoFruit",
    "autoStat", "autoSea", "autoHaki", "espEnabled", "espChest", "espFruit",
}

local function stopAll()
    for _, k in ipairs(STATE_KEYS) do
        S[k] = false
        for _, fn in ipairs(REG.hooks[k] or {}) do pcall(fn, false) end
    end
    saveState()
end

----------------------------------------------------------------
-- AUTO LEVEL FARM
----------------------------------------------------------------
startLoop("AutoLevel", function()
    if not S.autoLevel then task.wait(0.3) return end
    local lv = LocalPlayer.Data.Level.Value
    local quest = getQuestForLevel(lv)
    if not quest then task.wait(1) return end

    if ZetaUI_Main then
        ZetaUI_Main:SetStatus("auto level -> " .. quest.Mob .. " (lv " .. lv .. ")")
    end

    startQuest(quest.Name, quest.Num)
    hdelay(0.2)

    local cur, req = getQuestProgress()
    local attempts = 0
    while S.autoLevel and attempts < 40 do
        attempts = attempts + 1
        cur, req = getQuestProgress()
        if cur and req and cur >= req then break end

        local mob = findMob(quest.Mob)
        if mob then
            attackTarget(mob)
        else
            teleportTo(quest.Pos, true)
            hdelay(0.3)
        end
        hdelay(0.15)
    end
    hdelay(0.2)
end)

----------------------------------------------------------------
-- AUTO FARM — en yakin mob (questsuz, her haritada)
----------------------------------------------------------------
startLoop("AutoFarm", function()
    if not S.autoFarm then task.wait(0.3) return end
    local hrp = getHRP()
    if not hrp then task.wait(0.5) return end

    if ZetaUI_Main then ZetaUI_Main:SetStatus("auto farm -> en yakin mob") end

    local best, bestDist = nil, math.huge
    for _, v in ipairs(Workspace.Enemies:GetChildren()) do
        local hum = v:FindFirstChildOfClass("Humanoid")
        local root = v:FindFirstChild("HumanoidRootPart")
        if hum and root and hum.Health > 0 then
            local d = dist(root.Position, hrp.Position)
            if d < bestDist then best = v; bestDist = d end
        end
    end

    if best then attackTarget(best) end
    hdelay(0.1)
end)

----------------------------------------------------------------
-- AUTO BOSS
----------------------------------------------------------------
startLoop("AutoBoss", function()
    if not S.autoBoss then task.wait(0.3) return end
    if ZetaUI_Main then ZetaUI_Main:SetStatus("auto boss -> taraniyor") end

    local boss = findBossInWorkspace()
    if boss then
        attackTarget(boss)
    else
        task.wait(1)
    end
    hdelay(0.15)
end)

----------------------------------------------------------------
-- AUTO LEVIATHAN / SEA EVENTS
----------------------------------------------------------------
local seaEventList = {"Leviathan", "Sea Beast", "Terrorshark", "Pirate Ship", "Ghost Ship", "Kitsune"}

local function findSeaEvent()
    for _, v in ipairs(Workspace.Enemies:GetChildren()) do
        for _, name in ipairs(seaEventList) do
            if v.Name:lower():find(name:lower(), 1, true) and v:FindFirstChild("HumanoidRootPart") then
                return v
            end
        end
    end
    local seaBeasts = Workspace:FindFirstChild("SeaBeasts")
    if seaBeasts then
        for _, v in ipairs(seaBeasts:GetChildren()) do
            if v:FindFirstChild("HumanoidRootPart") then return v end
        end
    end
    return nil
end

startLoop("AutoLeviathan", function()
    if not S.autoLeviathan then task.wait(0.3) return end
    if ZetaUI_Main then
        ZetaUI_Main:SetStatus("auto leviathan -> sea event taraniyor", Color3.fromRGB(80, 200, 255))
    end

    local event = findSeaEvent()
    if event then
        attackTarget(event)
    else
        task.wait(2)
        if not findSeaEvent() and S.autoLeviathan then
            if ZetaUI_Main then
                ZetaUI_Main:SetStatus("server hop -> yeni spawn sansi", Color3.fromRGB(80, 200, 255))
            end
            pcall(function()
                local body = safeHttpGet("https://games.roblox.com/v1/games/" .. game.PlaceId .. "/servers/Public?sortOrder=Asc&limit=100")
                if body then
                    local data = HttpService:JSONDecode(body)
                    for _, s in ipairs(data.data or {}) do
                        if s.id ~= game.JobId and s.playing and s.maxPlayers and s.playing < s.maxPlayers then
                            TeleportService:TeleportToPlaceInstance(game.PlaceId, s.id, LocalPlayer)
                            break
                        end
                    end
                end
            end)
            task.wait(4)
        end
    end
    hdelay(0.15)
end)

----------------------------------------------------------------
-- AUTO SECRET LEVEL (v4 trial / dungeon / raid)
----------------------------------------------------------------
startLoop("AutoSecret", function()
    if not S.autoSecret then task.wait(0.3) return end
    if ZetaUI_Main then
        ZetaUI_Main:SetStatus("auto secret -> trial/dungeon aktif", Color3.fromRGB(255, 200, 80))
    end

    local raid = Workspace:FindFirstChild("RaidEnemies") or Workspace:FindFirstChild("Enemies")
    if raid then
        for _, v in ipairs(raid:GetChildren()) do
            local hum = v:FindFirstChildOfClass("Humanoid")
            local root = v:FindFirstChild("HumanoidRootPart")
            if hum and root and hum.Health > 0 then
                attackTarget(v)
                break
            end
        end
    end

    pcall(function()
        ReplicatedStorage.Remotes.CommF_:InvokeServer("RaceV4Progress", "Check")
    end)
    task.wait(1)
end)

----------------------------------------------------------------
-- AUTO CHEST
----------------------------------------------------------------
local chestCd = {}   -- sogutme: [inst] = os.clock() + saniye
local chestRun = {}  -- aktif deneme: [inst] = {arrived=bool, tries=n}

local function chestCdSet(inst, secs)
    if inst then chestCd[inst] = os.clock() + secs end
end

local function chestCooling(inst)
    local t = chestCd[inst]
    return t ~= nil and os.clock() < t
end

local function isChestName(s)
    s = tostring(s):lower()
    return s:find("chest", 1, true) or s:find("treasure", 1, true)
end

local function chestPart(v)
    if v:IsA("Model") and isChestName(v.Name) then
        return v.PrimaryPart or v:FindFirstChildOfClass("BasePart")
    elseif v:IsA("BasePart") and isChestName(v.Name) then
        return v
    end
    return nil
end

startLoop("AutoChest", function()
    if not S.autoChest then task.wait(0.3) return end
    if ZetaUI_Main then ZetaUI_Main:SetStatus("auto chest -> sandik taraniyor") end

    local hrp = getHRP()
    if not hrp then task.wait(0.5) return end

    -- 1) devam eden deneme: AYNI sandikta kal, baska hedefe ziplama
    local target, part = nil, nil
    for inst, st in pairs(chestRun) do
        local alive = false
        pcall(function()
            alive = inst.Parent ~= nil and inst:IsDescendantOf(Workspace)
        end)
        if alive then
            target = inst
            part = chestPart(inst) or (inst:IsA("BasePart") and inst or nil)
        else
            chestRun[inst] = nil
        end
    end

    -- 2) hedef yoksa en yakin taze adayi sec (soguyan/15sn atlanan hari)
    if not target then
        local best, bestDist = nil, math.huge
        for _, v in ipairs(Workspace:GetDescendants()) do
            if not chestCooling(v) then
                local cp = chestPart(v)
                if cp and not chestCooling(cp) then
                    local d = dist(cp.Position, hrp.Position)
                    if d < bestDist then best, bestDist = v, d end
                end
            end
        end
        if not best then
            task.wait(1.2) -- spawn dongusu
            return
        end
        target = best
        part = chestPart(target)
        chestRun[target] = {arrived = false, tries = 0}
    end

    part = part or chestPart(target)
    if not part then
        chestRun[target] = nil
        task.wait(0.3)
        return
    end

    local st = chestRun[target]
    if not st then chestRun[target] = {arrived = false, tries = 0} st = chestRun[target] end

    -- 3) VARIS: ustune in ve OTUR (dokunma ile toplama + prompt icin zaman)
    if not st.arrived then
        local d = math.floor(dist(part.Position, hrp.Position))
        if ZetaUI_Main then ZetaUI_Main:SetStatus("auto chest -> hedef " .. d .. "m") end
        hrp.CFrame = CFrame.new(part.Position + Vector3.new(0, 1.2, 0))
        st.arrived = true
        task.wait(0.9)
        return
    end

    -- 4) TETIKLE: sadece bu sandigin prompt/clickdetector'i, en fazla 3 deneme
    st.tries = st.tries + 1
    pcall(function()
        local function tryFire(inst)
            if inst:IsA("ProximityPrompt") then
                fireproximityprompt(inst)
            elseif inst:IsA("ClickDetector") then
                fireclickdetector(inst)
            end
        end
        if target:IsA("Model") then
            for _, c in ipairs(target:GetDescendants()) do tryFire(c) end
        end
        tryFire(target)
        for _, c in ipairs(part:GetChildren()) do tryFire(c) end
    end)
    if ZetaUI_Main then
        ZetaUI_Main:SetStatus("auto chest -> aciliyor (" .. st.tries .. "/3)")
    end
    task.wait(1.0) -- server'a toplama zamani tanimla

    -- 5) DOGRULA: gittiyse alindi; hala duruyorsa denemeye devam
    local gone = false
    pcall(function()
        gone = not (part.Parent ~= nil and part:IsDescendantOf(Workspace))
    end)
    if gone then
        chestRun[target] = nil
        if ZetaUI_Main then
            ZetaUI_Main:SetStatus("auto chest -> ALINDI", Color3.fromRGB(100, 255, 140))
        end
    elseif st.tries >= 3 then
        chestCdSet(target, 15)
        chestCdSet(part, 15)
        chestRun[target] = nil
        if ZetaUI_Main then
            ZetaUI_Main:SetStatus("auto chest -> alinamadi, 15sn atlandi", Color3.fromRGB(255, 180, 80))
        end
    end
end)

----------------------------------------------------------------
-- AUTO FRUIT (yerdeki fruit)
----------------------------------------------------------------
startLoop("AutoFruit", function()
    if not S.autoFruit then task.wait(0.3) return end
    if ZetaUI_Main then
        ZetaUI_Main:SetStatus("auto fruit -> fruit taraniyor", Color3.fromRGB(180, 100, 255))
    end

    local hrp = getHRP()
    if not hrp then task.wait(0.5) return end

    -- tum workspace icinde (klasorler dahil) en yakin fruit tool
    local best, bestDist = nil, math.huge
    for _, v in ipairs(Workspace:GetDescendants()) do
        if v:IsA("Tool") and v.Name:lower():find("fruit", 1, true) then
            local h = v:FindFirstChild("Handle") or v:FindFirstChildOfClass("BasePart")
            if h then
                local d = dist(h.Position, hrp.Position)
                if d < bestDist then best = v; bestDist = d end
            end
        end
    end

    if best then
        local h = best:FindFirstChild("Handle") or best:FindFirstChildOfClass("BasePart")
        if h and ZetaUI_Main then
            ZetaUI_Main:SetStatus("auto fruit -> " .. best.Name .. " (" .. math.floor(bestDist) .. "m)")
            hrp.CFrame = CFrame.new(h.Position + Vector3.new(0, 1.5, 0))
            hdelay(0.3)
            pcall(function()
                local cd = best:FindFirstChildOfClass("ClickDetector") or h:FindFirstChildOfClass("ClickDetector")
                if cd then fireclickdetector(cd) end
                local pp = best:FindFirstChildOfClass("ProximityPrompt") or h:FindFirstChildOfClass("ProximityPrompt")
                if pp then fireproximityprompt(pp) end
            end)
        end
    end
    task.wait(1.5)
end)

----------------------------------------------------------------
-- AUTO STAT
----------------------------------------------------------------
startLoop("AutoStat", function()
    if not S.autoStat then task.wait(0.3) return end
    pcall(function()
        ReplicatedStorage.Remotes.CommF_:InvokeServer("AddPoint", S.statMode, 1)
    end)
    task.wait(0.5)
end)

----------------------------------------------------------------
-- AUTO HAKI
----------------------------------------------------------------
startLoop("AutoHaki", function()
    if not S.autoHaki then task.wait(0.3) return end
    safeKeyPress(118) -- V
    task.wait(3)
end)

----------------------------------------------------------------
-- AUTO SECOND / THIRD SEA
----------------------------------------------------------------
startLoop("AutoSea", function()
    if not S.autoSea then task.wait(0.3) return end
    if ZetaUI_Main then ZetaUI_Main:SetStatus("auto sea -> gecis bekleniyor") end
    pcall(function()
        if currentSea() == 1 then
            ReplicatedStorage.Remotes.CommF_:InvokeServer("TravelDressrosa")
        elseif currentSea() == 2 then
            ReplicatedStorage.Remotes.CommF_:InvokeServer("TravelZou")
        end
    end)
    task.wait(30)
end)

----------------------------------------------------------------
-- ESP
----------------------------------------------------------------
local espCache = {}

local function attachEsp(part, text, color, billName)
    if not part or part:FindFirstChild(billName) then return end
    local bill = Instance.new("BillboardGui")
    bill.Name = billName
    bill.Size = UDim2.new(0, 130, 0, 28)
    bill.AlwaysOnTop = true
    bill.Adornee = part
    bill.Parent = part
    local lbl = Instance.new("TextLabel")
    lbl.Size = UDim2.new(1, 0, 1, 0)
    lbl.BackgroundTransparency = 1
    lbl.Text = text
    lbl.TextColor3 = color
    lbl.TextStrokeTransparency = 0.4
    lbl.Font = Enum.Font.GothamBold
    lbl.TextSize = 13
    lbl.Parent = bill
end

local function destroyEspBillboards(billName)
    pcall(function()
        for _, d in ipairs(Workspace:GetDescendants()) do
            if d.Name == billName then d:Destroy() end
        end
    end)
end

local function makeEsp(player)
    if not player or player == LocalPlayer then return end
    local entry = espCache[player]
    if entry then
        -- kendi kendini onar: billboard silinmis/yenilenmisse tekrar kur
        pcall(entry.setup)
        return
    end

    local function setup()
        local c = player.Character
        if not c then return end
        local hrp = c:FindFirstChild("HumanoidRootPart")
        if not hrp then return end
        if hrp:FindFirstChild("zeta_esp") then return end

        local bill = Instance.new("BillboardGui")
        bill.Name = "zeta_esp"
        bill.Size = UDim2.new(0, 140, 0, 34)
        bill.AlwaysOnTop = true
        bill.Adornee = hrp
        bill.Parent = hrp

        local lbl = Instance.new("TextLabel")
        lbl.Name = "Info"
        lbl.Size = UDim2.new(1, 0, 1, 0)
        lbl.BackgroundTransparency = 1
        lbl.Text = player.Name
        lbl.TextColor3 = Color3.fromRGB(124, 77, 255)
        lbl.TextStrokeTransparency = 0.5
        lbl.Font = Enum.Font.GothamBold
        lbl.TextSize = 13
        lbl.Parent = bill
    end

    if player.Character then pcall(setup) end
    local conn
    conn = player.CharacterAdded:Connect(function()
        task.wait(1)
        if S.espEnabled then setup() else if conn then conn:Disconnect() end end
    end)
    espCache[player] = {setup = setup, conn = conn}
end

local function clearEsp()
    pcall(function()
        for _, p in ipairs(Players:GetPlayers()) do
            local c = p.Character
            local hrp = c and c:FindFirstChild("HumanoidRootPart")
            local b = hrp and hrp:FindFirstChild("zeta_esp")
            if b then b:Destroy() end
        end
    end)
    for _, entry in pairs(espCache) do
        if entry.conn then pcall(function() entry.conn:Disconnect() end) end
    end
    espCache = {}
end

local paConn = Players.PlayerAdded:Connect(function(p)
    if S.espEnabled then makeEsp(p) end
end)
retire(function() paConn:Disconnect() end)

-- oyuncu ESP: 1sn'de bir hp guncelle + kacani kacirma (sessiz setup hatasi telafisi)
startLoop("EspPlayers", function()
    if not S.espEnabled then task.wait(0.5) return end
    for _, p in ipairs(Players:GetPlayers()) do
        if p ~= LocalPlayer then
            local c = p.Character
            local hrp = c and c:FindFirstChild("HumanoidRootPart")
            local h = c and c:FindFirstChildOfClass("Humanoid")
            if hrp and h then
                local bill = hrp:FindFirstChild("zeta_esp")
                if bill then
                    local lbl = bill:FindFirstChild("Info")
                    if lbl then
                        lbl.Text = p.Name .. "  " .. math.floor(math.max(0, h.Health)) .. "/" .. math.floor(h.MaxHealth)
                    end
                else
                    makeEsp(p)
                end
            end
        end
    end
    task.wait(1.0)
end)

-- sandik ESP
startLoop("EspChest", function()
    if not S.espChest then task.wait(0.5) return end
    pcall(function()
        for _, v in ipairs(Workspace:GetDescendants()) do
            local part = nil
            if v:IsA("Model") and isChestName(v.Name) then
                part = v.PrimaryPart or v:FindFirstChildOfClass("BasePart")
            elseif v:IsA("BasePart") and isChestName(v.Name) then
                part = v
            end
            if part then
                attachEsp(part, "SANDIK", Color3.fromRGB(80, 255, 140), "zeta_espC")
            end
        end
    end)
    task.wait(1.0)
end)

-- meyve ESP
startLoop("EspFruit", function()
    if not S.espFruit then task.wait(0.5) return end
    pcall(function()
        for _, v in ipairs(Workspace:GetDescendants()) do
            if v:IsA("Tool") and v.Name:lower():find("fruit", 1, true) then
                local h = v:FindFirstChild("Handle") or v:FindFirstChildOfClass("BasePart")
                if h then
                    attachEsp(h, v.Name, Color3.fromRGB(200, 120, 255), "zeta_espF")
                end
            end
        end
    end)
    task.wait(1.0)
end)

----------------------------------------------------------------
-- HATA PANELI
----------------------------------------------------------------
local function showError(errText)
    errText = tostring(errText)
    warn("[zeta-res] BOOT HATASI: " .. errText)
    pcall(function()
        local sg = Instance.new("ScreenGui")
        sg.Name = "zeta_error"
        sg.ResetOnSpawn = false
        sg.Parent = (LocalPlayer and LocalPlayer:FindFirstChild("PlayerGui"))
            or game:GetService("CoreGui")

        local frame = Instance.new("Frame")
        frame.Size = UDim2.new(0, 520, 0, 240)
        frame.Position = UDim2.new(0.5, -260, 0.5, -120)
        frame.BackgroundColor3 = Color3.fromRGB(30, 10, 14)
        frame.BorderSizePixel = 0
        frame.Parent = sg
        Instance.new("UICorner", frame).CornerRadius = UDim.new(0, 10)

        local bar = Instance.new("Frame")
        bar.Size = UDim2.new(1, 0, 0, 3)
        bar.BackgroundColor3 = Color3.fromRGB(255, 70, 70)
        bar.BorderSizePixel = 0
        bar.Parent = frame

        local t = Instance.new("TextLabel")
        t.Size = UDim2.new(1, -20, 0, 30)
        t.Position = UDim2.new(0, 10, 0, 10)
        t.BackgroundTransparency = 1
        t.Text = "zeta-res — boot hatasi"
        t.TextColor3 = Color3.fromRGB(255, 120, 120)
        t.Font = Enum.Font.GothamBold
        t.TextSize = 16
        t.TextXAlignment = Enum.TextXAlignment.Left
        t.Parent = frame

        local e = Instance.new("TextLabel")
        e.Size = UDim2.new(1, -20, 0, 140)
        e.Position = UDim2.new(0, 10, 0, 44)
        e.BackgroundTransparency = 1
        e.Text = errText
        e.TextColor3 = Color3.fromRGB(230, 220, 225)
        e.Font = Enum.Font.Code
        e.TextSize = 13
        e.TextWrapped = true
        e.TextXAlignment = Enum.TextXAlignment.Left
        e.TextYAlignment = Enum.TextYAlignment.Top
        e.Parent = frame

        local copy = Instance.new("TextButton")
        copy.Size = UDim2.new(1, -20, 0, 32)
        copy.Position = UDim2.new(0, 10, 1, -44)
        copy.BackgroundColor3 = Color3.fromRGB(60, 22, 26)
        copy.Text = "hatayi kopyala"
        copy.TextColor3 = Color3.fromRGB(255, 160, 160)
        copy.Font = Enum.Font.GothamMedium
        copy.TextSize = 13
        copy.BorderSizePixel = 0
        copy.Parent = frame
        Instance.new("UICorner", copy).CornerRadius = UDim.new(0, 6)
        copy.MouseButton1Click:Connect(function()
            safeClipboard(errText)
            copy.Text = "kopyalandi — discord'a gonder"
        end)
    end)
end

----------------------------------------------------------------
-- API PROBE
----------------------------------------------------------------
local function probeApi()
    local r = {}
    pcall(function() r.getgenv = (getgenv ~= nil) end)
    pcall(function() r.gethui = (gethui ~= nil) end)
    pcall(function() r.writefile = (writefile ~= nil) end)
    pcall(function() r.readfile = (readfile ~= nil) end)
    pcall(function() r.setclipboard = (setclipboard ~= nil) end)
    pcall(function() r.mouse1click = (mouse1click ~= nil) end)
    pcall(function() r.firecd = (fireclickdetector ~= nil) end)
    pcall(function() r.firepp = (fireproximityprompt ~= nil) end)
    pcall(function() r.http = ((http_request ~= nil) or (request ~= nil)) end)
    local out = {}
    for k, v in pairs(r) do out[#out + 1] = k .. "=" .. tostring(v) end
    table.sort(out)
    print("[zeta-res] api: " .. table.concat(out, "  "))
end

----------------------------------------------------------------
-- ANA MENU
----------------------------------------------------------------
local function buildMain()
    local W = ZetaUI:Window("zeta-res")
    ZetaUI_Main = W

    ----------------------------------------------------------------
    -- TAB: FARM
    ----------------------------------------------------------------
    local farmTab = W:Tab("Farm  (level/boss)", 1)

    farmTab:Section("otomatik level")
    farmTab:Toggle("auto farm level (quest)", "autoLevel")
    farmTab:Toggle("auto farm (en yakin mob)", "autoFarm")

    farmTab:Section("boss")
    farmTab:Toggle("auto farm boss", "autoBoss")

    farmTab:Section("deniz olaylari")
    farmTab:Toggle("auto farm leviathan + sea event", "autoLeviathan")
    farmTab:Label("leviathan, sea beast, terrorshark, pirate/ghost ship, kitsune taranir; spawn yoksa server hop.")

    farmTab:Section("gizli / special")
    farmTab:Toggle("auto farm secret level (v4/dungeon)", "autoSecret")

    ----------------------------------------------------------------
    -- TAB: COLLECT
    ----------------------------------------------------------------
    local collectTab = W:Tab("Collect", 2)

    collectTab:Section("toplama")
    collectTab:Toggle("auto farm chest", "autoChest")
    collectTab:Toggle("auto farm fruit (yerdeki)", "autoFruit")
    collectTab:Label("chest: en yakin sandiga isinlanir, prompt/clickdetector tetikler.")
    collectTab:Label("fruit: workspace icindeki Fruit tool'larini toplar.")

    ----------------------------------------------------------------
    -- TAB: COMBAT
    ----------------------------------------------------------------
    local combatTab = W:Tab("Combat", 3)

    combatTab:Section("stat")
    combatTab:Toggle("auto stat (point harca)", "autoStat")
    combatTab:Dropdown("stat modu", {"Melee", "Defense", "Sword", "Gun", "Devil Fruit"}, S.statMode, function(v)
        setState("statMode", v)
    end)

    ----------------------------------------------------------------
    -- TAB: PLAYER
    ----------------------------------------------------------------
    local playerTab = W:Tab("Player", 4)

    playerTab:Section("gorunum")
    playerTab:Toggle("ESP — oyuncular", "espEnabled", function(v)
        if v then
            for _, p in ipairs(Players:GetPlayers()) do makeEsp(p) end
        else
            clearEsp()
        end
    end)
    playerTab:Toggle("ESP — sandiklar", "espChest", function(v)
        if not v then pcall(destroyEspBillboards, "zeta_espC") end
    end)
    playerTab:Toggle("ESP — meyveler", "espFruit", function(v)
        if not v then pcall(destroyEspBillboards, "zeta_espF") end
    end)
    playerTab:Label("sandik/meyve ESP'i acikken her saniye workspace taranir, yeni spawn'lar gorunur.")

    playerTab:Section("deniz gecisi")
    playerTab:Toggle("auto second/third sea", "autoSea")

    playerTab:Section("haki")
    playerTab:Toggle("auto haki / observation", "autoHaki")

    ----------------------------------------------------------------
    -- TAB: SETTINGS
    ----------------------------------------------------------------
    local setTab = W:Tab("Settings", 5)

    setTab:Section("menu")
    setTab:Label("gizle/goster: Insert veya Sag Ctrl | surukle: bos alandan | kucult: - | kapat: x")
    setTab:Label("menu kapansa bile farm calisir — ayarlar dosyaya kayitli, execute edince geri gelir.")
    setTab:Button("tum farm'lari kapat", function()
        stopAll()
        clearEsp()
        W:SetStatus("her sey durduruldu", Color3.fromRGB(255, 100, 100))
        notify("zeta-res", "tum farm'lar kapatildi")
    end)

    setTab:Section("key & discord")
    setTab:Label("key: zeta-res-44")
    setTab:Button("discord — kopyala: " .. DISCORD_INV, function()
        safeClipboard(DISCORD_INV)
        notify("zeta-res", "discord linki kopyalandi")
    end)

    setTab:Section("hakkinda")
    setTab:Label("zeta-res v1.4 — blox fruits full suite")
    setTab:Label("executor: xeno / delta / wave / solara / swift / hydrogen")

    W:SetStatus("hazir — farm sec", Color3.fromRGB(100, 255, 140))
    print("[zeta-res] ana menu hazir | nesil=" .. tostring(MY_GEN)
        .. " level=" .. tostring(S.autoLevel)
        .. " farm=" .. tostring(S.autoFarm)
        .. " chest=" .. tostring(S.autoChest))
end

----------------------------------------------------------------
-- BOOT
----------------------------------------------------------------
local function destroyOldUIs()
    pcall(function()
        local parent = uiParent()
        for _, g in ipairs(parent:GetChildren()) do
            local n = g.Name
            if g:IsA("ScreenGui") and (n == "zeta_res" or n == "zeta_key" or n == "zeta_error") then
                g:Destroy()
            end
        end
    end)
end

local function boot()
    -- onceki kopyalarin pencerelerini imha et: tek pencere kurali
    destroyOldUIs()
    probeApi()
    print("[zeta-res] nesil " .. tostring(MY_GEN) .. " | REG durum: level="
        .. tostring(S.autoLevel) .. " farm=" .. tostring(S.autoFarm)
        .. " chest=" .. tostring(S.autoChest))

    if validateKey(safeRead(KEY_FILE)) then
        REG.keyValidated = true
    end

    if REG.keyValidated then
        buildMain()
        notify("zeta-res", "menu acildi")
    else
        keyUi(function()
            REG.keyValidated = true
            buildMain()
            notify("zeta-res", "key dogrulandi — zeta-res aktif")
        end, showError)
    end
end

local ok, err = pcall(boot)
if not ok then showError(err) end
-- Script provided by RobxScript.com
ADVERTISEMENT
MORE SCRIPTS

Related Scripts

COMMUNITY

Comments

Questions, setup notes and feedback from signed-in RobxScript users.

0
Loading comments...
BROWSE MORE

Browse more Blox Fruits

Popular scripts from Blox Fruits.

View category
FRESH POSTS

Browse the latest

Recently published Roblox scripts from across RobxScript.