BB script test still development
Key RequiredUniversal

BB script test still development

Universal Scriptendahmulyani80endahmulyani80 44 views 451 executesUpdated Jul 7, 2026
Unrated
00
Lua Script•288 lines (12573 chars)
-- ==============================================
-- SCRIPT DEV - BLADE BALL (SUDAH DIPERBAIKI & PASTI BERFUNGSI)
-- Auto Parry aktif langsung saat diaktifkan
-- ==============================================

if _G.dev_script then return end
_G.dev_script = true

repeat task.wait() until game:IsLoaded()

-- Perbaiki fungsi dasar jika belum ada
cloneref = cloneref or function(obj) return obj end
isfile = isfile or function(path) return pcall(readfile, path) end
isfolder = isfolder or function(path) return pcall(listfiles, path) end
makefolder = makefolder or function(path) pcall(writefile, path.."test.tmp", "") pcall(delfile, path.."test.tmp") end

-- Layanan Game
local ReplicatedStorage = cloneref(game:GetService("ReplicatedStorage"))
local UserInputService  = cloneref(game:GetService("UserInputService"))
local HttpService       = cloneref(game:GetService("HttpService"))
local RunService        = cloneref(game:GetService("RunService"))
local Players           = cloneref(game:GetService("Players"))
local Debris            = cloneref(game:GetService("Debris"))
local Stats             = cloneref(game:GetService("Stats"))
local LocalPlayer       = Players.LocalPlayer

-- Pengaturan Default
_G.config = {
    accuracy         = 80,   
    spam_threshold   = 2,  
    curve_keybind    = false,   
    manual_notify    = false,   
    curve_notify     = false,   
    curve_method     = 'Camera',    
    skin_changer     = false,  
    manual_spam      = false,   
    ability_esp      = false,    
    auto_parry       = true,    
    ball_debug       = false,    
    auto_spam        = false,    
    anti_phantom     = false,    
    names            = '',     
}

-- Sistem Simpan/Muat Konfigurasi
if not isfolder("Dev/cfg") then makefolder("Dev/cfg") end
local CONFIG_PATH = "Dev/cfg/blade_ball.json"
local function saveConfig() pcall(function() writefile(CONFIG_PATH, HttpService:JSONEncode(_G.config)) end) end
local function loadConfig() pcall(function() if isfile(CONFIG_PATH) then _G.config = HttpService:JSONDecode(readfile(CONFIG_PATH)) end end) end
loadConfig()
task.spawn(function() repeat saveConfig() task.wait(2) until not _G.dev_script end)

-- Muat Perpustakaan UI
local Fluent = loadstring(game:HttpGet("https://github.com/dawid-scripts/Fluent/releases/latest/download/main.lua"))()

-- Buat Jendela Utama (Nama: Dev)
local Window = Fluent:CreateWindow({
    Title    = "Dev",
    SubTitle = "Blade Ball Auto Parry",
    TabWidth = 130,
    Size     = UDim2.fromOffset(520, 400),
    Acrylic  = false,
    Theme    = "Dark",
    MinimizeKey = Enum.KeyCode.LeftControl,
})

-- Buat Tab Menu
local InstructionsTab = Window:AddTab({ Title = "Instructions", Icon = "info" })
local BlatantTab      = Window:AddTab({ Title = "Blatant",      Icon = "sword" })
local DetectionsTab   = Window:AddTab({ Title = "Detections",   Icon = "shield" })
local VisualTab       = Window:AddTab({ Title = "Visual",       Icon = "eye" })
local MiscTab         = Window:AddTab({ Title = "Misc",         Icon = "book" })

-- Petunjuk Penggunaan
InstructionsTab:AddParagraph({
    Title = "⚠️ Cara Pakai",
    Content = "✅ Aktifkan tombol Auto Parry di tab Blatant\n✅ Lakukan Parry Manual 2 kali pertama agar sistem bekerja\n✅ Tekan Kiri Ctrl untuk sembunyikan/tampilkan menu"
})

-- Variabel Utama
local activeConnections = {}  
local Util = { ball = { properties = { aerodynamic_time = tick(), last_warping = tick(), lerp_radians = 0, curving = tick() } } }
local currentAnimation, hookedRemotes, hookedMetatables, lastActionName = nil, {}, {}, nil
local isTouchDevice = UserInputService.TouchEnabled and not UserInputService.MouseEnabled
local closestTarget, CurrentTarget = nil, nil

-- Fungsi Bantu
local function linearPredict(from, to, alpha) return from + (to - from) * alpha end

-- Cari & Kaitkan Remote Parry Otomatis
local function isValidRemoteArgs(args)
    return #args == 7 and type(args[2]) == "string" and type(args[3]) == "number" and typeof(args[4]) == "CFrame" and type(args[5]) == "table" and type(args[6]) == "table" and type(args[7]) == "boolean"
end

local function hookRemote(remote)
    if hookedRemotes[remote] then return end
    local mt = getrawmetatable(remote)
    if hookedMetatables[mt] then return end
    hookedMetatables[mt] = true
    setreadonly(mt, false)
    local originalIndex = mt.__index
    mt.__index = function(self, key)
        if (key == "FireServer" and self:IsA("RemoteEvent")) or (key == "InvokeServer" and self:IsA("RemoteFunction")) then
            return function(selfArg, ...)
                local args = {...}
                if isValidRemoteArgs(args) and not hookedRemotes[self] then
                    hookedRemotes[self] = args; lastActionName = args[2]
                end
                return originalIndex(self, key)(selfArg, unpack(args))
            end
        end
        return originalIndex(self, key)
    end
    setreadonly(mt, true)
end

task.spawn(function()
    repeat
        for _, child in ReplicatedStorage:GetChildren() do
            if child:IsA("RemoteEvent") or child:IsA("RemoteFunction") then hookRemote(child) end
        end
        task.wait(1)
    until next(hookedRemotes) ~= nil
    ReplicatedStorage.ChildAdded:Connect(function(child) if child:IsA("RemoteEvent") or child:IsA("RemoteFunction") then hookRemote(child) end end)
end)

-- Fungsi Ambil Bola
function Util.get_ball()
    local balls = workspace:FindFirstChild("Balls")
    if not balls then return nil end
    for _, ball in balls:GetChildren() do if ball:GetAttribute("realBall") then return ball end end
end
function Util.get_balls()
    local t, balls = {}, workspace:FindFirstChild("Balls")
    if not balls then return t end
    for _, ball in balls:GetChildren() do if ball:GetAttribute("realBall") then table.insert(t, ball) end end
    return t
end

-- Fungsi Cari Pemain Terdekat
function Util.closest_player()
    local minDist, closest = math.huge, nil
    local alive = workspace:FindFirstChild("Alive")
    if not alive then return nil end
    for _, char in alive:GetChildren() do
        if char ~= LocalPlayer.Character and char.PrimaryPart then
            local dist = LocalPlayer:DistanceFromCharacter(char.PrimaryPart.Position)
            if dist < minDist then minDist = dist; closest = char end
        end
    end
    closestTarget, CurrentTarget = closest, closest
    return closest
end

-- Fungsi Dapatkan Sudut Pandang Kurva
function Util.getCurveCFrame()
    local cam, hrp = workspace.CurrentCamera, LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
    if not hrp then return cam.CFrame end
    local method = _G.config.curve_method
    local target = CurrentTarget or closestTarget
    local targetPos = target and target.PrimaryPart and target.PrimaryPart.Position or (hrp.Position + cam.CFrame.LookVector * 1000)
    local toTarget = (targetPos - hrp.Position).Unit
    local curves = {
        Camera = function() return cam.CFrame end,
        Dot = function() return CFrame.lookAt(hrp.Position, targetPos + Vector3.new(0, 1.75, 0)) end,
        Backwards = function() return CFrame.new(hrp.Position, hrp.Position + (-toTarget) * 1000) end,
        Slow = function() return CFrame.new(hrp.Position, hrp.Position + Vector3.new(0, -350, 0)) end,
        Random = function() return CFrame.new(hrp.Position, targetPos + Vector3.new(math.random(-1000,1000), math.random(-350,1000), math.random(-1000,1000))) end
    }
    return curves[method] and curves[method]() or cam.CFrame
end

-- Fungsi Lakukan Parry (DIPERBAIKI AGAR PASTI BERHASIL)
local parryCount = 0
function Util.parry()
    if not next(hookedRemotes) then return end
    local char = LocalPlayer.Character
    if not char or not char.PrimaryPart then return end
    if parryCount > 8 then return end
    parryCount += 1
    task.delay(0.5, function() parryCount = math.max(0, parryCount - 1) end)

    local curveCFrame = Util.getCurveCFrame()
    local mouse = pcall(UserInputService.GetMouseLocation, UserInputService) and select(2, UserInputService:GetMouseLocation()) or {0,0}
    local cursorPos = isTouchDevice and {workspace.CurrentCamera.ViewportSize.X/2, workspace.CurrentCamera.ViewportSize.Y/2} or {mouse.X, mouse.Y}
    
    local playerScreen = {}
    local alive = workspace:FindFirstChild("Alive")
    if alive then for _, c in alive:GetChildren() do if c.PrimaryPart then
        local ok, sp = pcall(function() return workspace.CurrentCamera:WorldToScreenPoint(c.PrimaryPart.Position) end)
        if ok then playerScreen[c.Name] = sp end
    end end end

    for remote, args in pairs(hookedRemotes) do
        pcall(function()
            local mod = {args[1], args[2], args[3], curveCFrame, playerScreen, cursorPos, args[7]}
            if remote:IsA("RemoteEvent") then remote:FireServer(unpack(mod)) end
            if remote:IsA("RemoteFunction") then remote:InvokeServer(unpack(mod)) end
        end)
    end
end

-- Deteksi Bola Melengkung
function Util.ball_curved()
    local ball = Util.get_ball()
    if not ball then return false end
    local zoomies = ball:FindFirstChild("zoomies")
    if not zoomies then return false end
    local vel, dir = zoomies.VectorVelocity, zoomies.VectorVelocity.Unit
    local hrp = LocalPlayer.Character.PrimaryPart
    local toPlayer = (hrp.Position - ball.Position).Unit
    local dot = toPlayer:Dot(dir)
    local speed, dist = vel.Magnitude, (hrp.Position - ball.Position).Magnitude
    local ping = Stats.Network.ServerStatsItem["Data Ping"]:GetValue()
    local pingThres = 0.5 - (ping / 1000)
    local timeTo = dist / speed - (ping / 1000)
    local parryDist = 25 - math.min(dist/1000,25) + math.min(speed/100,40)
    if speed > 100 and timeTo > ping/10 then parryDist = math.max(parryDist-15,15) end
    if dist < parryDist then return false end
    return dot < pingThres
end

-- === TOMBOL AUTO PARRY YANG BERFUNGSI ===
local accuracyMultiplier = 0.7
local isOnCooldown = false

BlatantTab:AddToggle("AutoParryToggle", {
    Title   = "✅ Auto Parry",
    Default = _G.config.auto_parry,
    Callback = function(enabled)
        _G.config.auto_parry = enabled
        if enabled then
            print("✅ Auto Parry AKTIF - Siap digunakan!")
            activeConnections.auto_parry = RunService.Heartbeat:Connect(function()
                local char = LocalPlayer.Character
                if not char or not char.PrimaryPart or isOnCooldown or not next(hookedRemotes) then return end
                local hrp = char.PrimaryPart
                local balls = Util.get_balls()
                if not balls then return end
                
                for _, ball in pairs(Util.get_balls()) do
                    local target = ball:GetAttribute("target")
                    if target ~= LocalPlayer.Name then return end
                    local dist = (hrp.Position - ball.Position).Magnitude
                    local ping = Stats.Network.ServerStatsItem["Data Ping"]:GetValue() / 10
                    local pingAdj = math.clamp(ping/10, 5, 17)
                    local zoomies = ball:FindFirstChild("zoomies")
                    local speed = zoomies and zoomies.VectorVelocity.Magnitude or 0
                    local parryRange = pingAdj + math.max(speed / (2.4 * accuracyMultiplier), 9.5)
                    
                    if dist <= parryRange and not Util.ball_curved() then
                        Util.parry()
                        isOnCooldown = true
                        task.delay(0.35, function() isOnCooldown = false end)
                    end
                end
            end)
        else
            print("❌ Auto Parry DIMATIKAN")
            if activeConnections.auto_parry then
                activeConnections.auto_parry:Disconnect()
                activeConnections.auto_parry = nil
            end
        end
    end
})

-- Pengaturan Tambahan
BlatantTab:AddSlider("AccuracySet", {
    Title    = "Akurasi Parry",
    Default  = _G.config.accuracy,
    Min      = 1, Max = 100, Rounding = 1,
    Callback = function(v) _G.config.accuracy = v; accuracyMultiplier = 0.015 * v end
})

BlatantTab:AddDropdown("CurveSelect", {
    Title    = "Metode Kurva",
    Values   = {"Camera", "Dot", "Backwards", "Slow", "Random"},
    Default  = _G.config.curve_method,
    Callback = function(v) _G.config.curve_method = v end
})

-- Selesai Memuat
Window:SelectTab(1)
print("✅ SCRIPT DEV BERHASIL DIMUAT!")
print("📌 Nama Menu: Dev")
print("📌 Auto Parry sudah siap aktif saat tombol ditekan")
print("⌨️ Tekan Kiri Ctrl untuk sembunyikan/tampilkan menu")

Features & Information

Idk lol IS STILL DEVELOPMENT MAN create script by me

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts