-- services --
local players = game:GetService("Players")
local TS = game:GetService("TweenService")
local workspace = game:GetService("Workspace")
local runService = game:GetService("RunService")
local lighting = game:GetService("Lighting")
local userInput = game:GetService("UserInputService")
local vim = game:GetService("VirtualInputManager")
local replicatedStorage = game:GetService("ReplicatedStorage")
-- local player
local player = players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local HRP = character:WaitForChild("HumanoidRootPart")
-- flags --
local tweening = false
local autoFarmEnabled = false
local autoClickerEnabled = false
local autoCollectEnabled = false
local noClipEnabled = false
local flyEnabled = false
local speedEnabled = false
local boatSpeedEnabled = false
local espEnabled = false
local aimbotEnabled = false
local infiniteJumpEnabled = false
local antiAFKEnabled = true
local godModeEnabled = false
local showBuildPreview = true
local rescaleClick = false
local ignoreAnchored = true
-- auto farm values --
local currentStage = 1
local farmDelay = 2
-- esp storage
local espObjects = {}
-- fly variables
local flySpeed = 50
local flyBodyVelocity = nil
local flyConnection = nil
local flyDirection = {f=0, b=0, l=0, r=0, u=0, d=0}
-- speed variables
local originalWalkSpeed = 16
local currentSpeed = 50
local currentBoatSpeed = 100
local boatSpeedConnection = nil
-- image build variables
local imageBuildInProgress = false
local selectedBlockForBuild = "WoodBlock"
local selectedVehicleBlock = "IronBlock"
local currentBuildPosition = nil
local buildPreviewParts = {}
local pastePercent = 0
local isPasting = false
local buildNotification = nil
local clipboard = nil
local selectedBase = nil
local playerToBring = nil
--paths
local blockData = player:WaitForChild("Data")
local blocksFolder = workspace:WaitForChild("Blocks")
local usedList = {}
-- rayfield --
local Rayfield = loadstring(game:HttpGet('https://sirius.menu/rayfield'))()
local Window = Rayfield:CreateWindow({
Name = "BABFT | Ultimate Edition",
Icon = 0,
LoadingTitle = "Ultimate BABFT Script",
LoadingSubtitle = "3D Sphere Builder + Realistic Vehicles",
Theme = "Default",
ToggleUIKeybind = "G",
DisableRayfieldPrompts = false,
DisableBuildWarnings = false,
ConfigurationSaving = {
Enabled = true,
FolderName = "BABFT",
FileName = "Ultimate Config"
},
})
-- All Blocks List --
local allBlocks = {
"WoodBlock", "StoneBlock", "GoldBlock", "DiamondBlock", "IronBlock",
"SteelBlock", "TitaniumBlock", "CopperBlock", "BronzeBlock", "SilverBlock",
"PlatinumBlock", "RedBlock", "BlueBlock", "GreenBlock", "YellowBlock",
"PurpleBlock", "OrangeBlock", "PinkBlock", "CyanBlock", "WhiteBlock", "BlackBlock"
}
-- Color to Block Mapping --
local function getBlockFromColor(r, g, b)
local colors = {
{r=255,g=0,b=0, block="RedBlock"},
{r=0,g=0,b=255, block="BlueBlock"},
{r=0,g=255,b=0, block="GreenBlock"},
{r=255,g=255,b=0, block="YellowBlock"},
{r=255,g=165,b=0, block="OrangeBlock"},
{r=255,g=192,b=203, block="PinkBlock"},
{r=128,g=0,b=128, block="PurpleBlock"},
{r=0,g=255,b=255, block="CyanBlock"},
{r=255,g=255,b=255, block="WhiteBlock"},
{r=0,g=0,b=0, block="BlackBlock"},
{r=139,g=69,b=19, block="WoodBlock"},
{r=128,g=128,b=128, block="StoneBlock"},
{r=255,g=215,b=0, block="GoldBlock"},
{r=192,g=192,b=192, block="IronBlock"},
{r=176,g=196,b=222, block="SteelBlock"},
{r=135,g=206,b=235, block="TitaniumBlock"},
}
local bestMatch = "WoodBlock"
local smallestDiff = math.huge
for _, color in pairs(colors) do
local diff = math.abs(color.r - r) + math.abs(color.g - g) + math.abs(color.b - b)
if diff = blockID) then
local relative = getJoint(block)
relative = (relative == hisBase) and myBase or relative
usedList[block.Name] = (usedList[block.Name] or 0) + 1
table.insert(t, {
Name = block.Name,
Pos = getNewBlockPos(hisBase, block, myBase),
Relative = getPlayerZone(player),
Transparency = block.PPart.Transparency,
Anchored = block.PPart.Anchored,
Size = block.PPart.Size,
Color = block.PPart.Color
})
end
end
end
return t
end
local function getBlock(expected, createdList)
local best = nil
local bestDist = math.huge
for _, b in ipairs(createdList) do
if b and b:FindFirstChild("PPart") and b.Name == expected.Name then
local dist = (b.PPart.Position - expected.Pos.Position).Magnitude
if dist 5
local playerBaseList = folder:GetChildren()
for i, v in ipairs(t) do
local b = getBlock(v, playerBaseList)
if b then
pcall(function()
rescaleBlock(b, v.Pos, v.Size)
paintBlock(b, v.Color)
setTransparency(v.Transparency, b)
end)
end
pastePercent = 50 + (i / tCount) * 50
if buildNotification and buildNotification.Update then
pcall(function()
buildNotification:Update({
Title = "Build In Progress",
Content = "Painting & scaling... " .. math.floor(pastePercent) .. "%"
})
end)
end
if i % 20 == 0 then
task.wait(0.05)
end
end
c:Disconnect()
pastePercent = 0
isPasting = false
if buildNotification and buildNotification.Dismiss then
pcall(function()
buildNotification:Dismiss()
end)
end
Rayfield:Notify({
Title = "Build Complete!",
Content = "Successfully built " .. tCount .. " blocks!",
Duration = 2
})
end
local function getPlayers()
local playersList = {}
for _, p in pairs(players:GetPlayers()) do
table.insert(playersList, p.DisplayName)
end
return playersList
end
local function getRealName(displayName)
for _, p in pairs(players:GetPlayers()) do
if p.DisplayName == displayName then return p.Name end
end
return nil
end
local function bringPlayer(targetPlayer, firstSeat, secondSeat)
local originalPos = character:GetPivot()
local targetChar = targetPlayer.Character
if not targetChar then
Rayfield:Notify({Title = "Error", Content = "Target player has no character", Duration = 3})
return
end
local offset = firstSeat.CFrame:Inverse() * secondSeat.CFrame
local torso = targetChar:FindFirstChild("LowerTorso") or targetChar:FindFirstChild("Torso")
if torso then
local newPivot = torso.CFrame * offset:Inverse()
firstSeat:PivotTo(newPivot + Vector3.new(math.random(-1,1), math.random(-1,1), math.random(-1,1)))
task.wait(0.5)
end
firstSeat:PivotTo(originalPos)
Rayfield:Notify({Title = "Success", Content = "Player brought to seat!", Duration = 3})
end
local function getCar()
return humanoid.SeatPart and humanoid.SeatPart.Parent or nil
end
-- Create Build Preview --
local function createBuildPreview(position, width, height, blockSize)
for _, preview in pairs(buildPreviewParts) do
if preview and preview.Parent then
preview:Destroy()
end
end
buildPreviewParts = {}
if not showBuildPreview then return end
for x = 0, width - 1 do
for y = 0, height - 1 do
local previewPart = Instance.new("Part")
previewPart.Size = Vector3.new(blockSize, blockSize, blockSize)
previewPart.Position = position.Position + Vector3.new(x * blockSize, y * blockSize, 0)
previewPart.Anchored = true
previewPart.CanCollide = false
previewPart.Transparency = 0.6
previewPart.Color = Color3.fromRGB(0, 255, 255)
previewPart.Material = Enum.Material.Neon
previewPart.Parent = workspace
table.insert(buildPreviewParts, previewPart)
end
end
end
-- 3D SPHERE/BALL PREVIEW --
local function createSpherePreview(center, radius, blockSize)
for _, preview in pairs(buildPreviewParts) do
if preview and preview.Parent then
preview:Destroy()
end
end
buildPreviewParts = {}
if not showBuildPreview then return end
local radiusBlocks = math.floor(radius / blockSize)
local previewCount = 0
-- Create a wireframe sphere preview
for theta = 0, math.pi, math.pi / 20 do
for phi = 0, 2 * math.pi, math.pi / 20 do
local x = radius * math.sin(theta) * math.cos(phi)
local y = radius * math.cos(theta)
local z = radius * math.sin(theta) * math.sin(phi)
local previewPart = Instance.new("Part")
previewPart.Size = Vector3.new(blockSize * 0.8, blockSize * 0.8, blockSize * 0.8)
previewPart.Position = center.Position + Vector3.new(x, y, z)
previewPart.Anchored = true
previewPart.CanCollide = false
previewPart.Transparency = 0.5
previewPart.Color = Color3.fromRGB(255, 100, 0)
previewPart.Material = Enum.Material.Neon
previewPart.Parent = workspace
table.insert(buildPreviewParts, previewPart)
previewCount = previewCount + 1
if previewCount % 100 == 0 then
task.wait()
end
end
end
end
local function clearBuildPreview()
for _, preview in pairs(buildPreviewParts) do
if preview and preview.Parent then
preview:Destroy()
end
end
buildPreviewParts = {}
end
-- 3D SPHERE/BALL BUILDER --
local function build3DSphere(center, radius, blockSize, blockType, hollow, thickness)
if imageBuildInProgress then
Rayfield:Notify({Title = "Busy", Content = "A build is already in progress!", Duration = 2})
return
end
imageBuildInProgress = true
local notification = Rayfield:Notify({
Title = "Building 3D Sphere",
Content = "Calculating sphere points...",
Duration = math.huge
})
task.spawn(function()
local blocksPlaced = 0
local centerPos = center.Position
local radiusBlocks = radius / blockSize
local totalVolume = (4/3) * math.pi * (radiusBlocks ^ 3)
local estimatedBlocks = math.floor(totalVolume)
if notification and notification.Update then
notification:Update({
Title = "Building 3D Sphere",
Content = string.format("Radius: %.1f blocks, Estimated blocks: %d", radiusBlocks, estimatedBlocks)
})
end
-- Use sphere equation: x² + y² + z² ≤ r²
for x = -radiusBlocks, radiusBlocks do
for y = -radiusBlocks, radiusBlocks do
for z = -radiusBlocks, radiusBlocks do
local dist = math.sqrt(x^2 + y^2 + z^2)
local shouldPlace = false
if hollow then
-- Hollow sphere: only place blocks within thickness range
local innerRadius = radiusBlocks - thickness
if dist = innerRadius then
shouldPlace = true
end
else
-- Solid sphere: place all blocks within radius
if dist <= radiusBlocks then
shouldPlace = true
end
end
if shouldPlace then
local blockPos = centerPos + Vector3.new(x * blockSize, y * blockSize, z * blockSize)
placeBlockAtPosition(blockType, blockPos)
blocksPlaced = blocksPlaced + 1
if notification and notification.Update then
local percent = (blocksPlaced / estimatedBlocks) * 100
notification:Update({
Title = "Building 3D Sphere",
Content = string.format("Building sphere: %.1f%% (%d blocks)", percent, blocksPlaced)
})
end
if blocksPlaced % 50 == 0 then
task.wait(0.05)
end
end
end
end
end
if notification and notification.Dismiss then
notification:Dismiss()
end
Rayfield:Notify({
Title = "Sphere Complete!",
Content = string.format("Built %d blocks in a perfect 3D sphere! Radius: %.1f studs", blocksPlaced, radius),
Duration = 4
})
imageBuildInProgress = false
end)
end
-- PAINT PATTERN FUNCTION --
local function paintPattern(patternType, startPosition, width, height, blockSize, customBlock)
if imageBuildInProgress then
Rayfield:Notify({Title = "Busy", Content = "A build is already in progress!", Duration = 2})
return
end
imageBuildInProgress = true
local notification = Rayfield:Notify({
Title = "Building Pattern",
Content = "Starting...",
Duration = math.huge
})
task.spawn(function()
local totalBlocks = width * height
local blocksPlaced = 0
local startPos = startPosition.Position
for y = 0, height - 1 do
for x = 0, width - 1 do
local r, g, b
if patternType == "Rainbow" then
local hue = (x / width) % 1
local color = Color3.fromHSV(hue, 1, 1)
r, g, b = color.R * 255, color.G * 255, color.B * 255
elseif patternType == "Checkerboard" then
local isEven = ((x + y) % 2 == 0)
if isEven then
r, g, b = 255, 255, 255
else
r, g, b = 0, 0, 0
end
elseif patternType == "Stripes" then
if x % 2 == 0 then
r, g, b = 255, 0, 0
else
r, g, b = 0, 0, 255
end
elseif patternType == "Gradient" then
r = (x / width) * 255
g = (y / height) * 255
b = 128
elseif patternType == "Heart" then
local nx = (x / width) * 2 - 1
local ny = (y / height) * 2 - 1
local heart = (nx^2 + (ny - 0.5 * math.abs(nx))^2 - 0.3)
if heart < 0 then
r, g, b = 255, 0, 0
else
r, g, b = 100, 100, 100
end
elseif patternType == "Target" then
local centerX = width / 2
local centerY = height / 2
local dist = math.floor(math.sqrt((x - centerX)^2 + (y - centerY)^2) / 3)
local ringColors = {{255,0,0}, {255,255,255}, {255,0,0}, {0,0,255}}
local color = ringColors[(dist % #ringColors) + 1]
r, g, b = color[1], color[2], color[3]
elseif patternType == "Mario" then
local marioPattern = {
{0,0,0,0,1,1,1,1,1,1,0,0,0,0},
{0,0,0,1,1,1,1,1,1,1,1,0,0,0},
{0,0,0,2,2,2,1,1,2,1,1,0,0,0},
{0,0,2,2,2,2,1,1,2,1,1,1,0,0},
{0,0,2,2,2,2,2,2,2,2,2,1,1,0},
{0,0,2,2,2,2,2,2,2,2,2,1,1,0},
{0,0,0,2,2,2,1,1,2,2,2,0,0,0},
{0,0,0,1,1,1,1,1,1,1,1,0,0,0},
{0,0,0,0,1,1,1,1,1,1,0,0,0,0},
}
local px = math.floor(x / (width / #marioPattern[1]))
local py = math.floor(y / (height / #marioPattern))
if py <= #marioPattern and px 50 and Color3.new(0, 1, 0) or (healthPercent > 25 and Color3.new(1, 1, 0) or Color3.new(1, 0, 0))
esp.healthLabel.TextColor3 = color
esp.healthLabel.Text = math.floor(healthPercent) .. "%"
end
end
local function removeESP(part)
local esp = espObjects[part]
if esp then
if esp.billboard then esp.billboard:Destroy() end
if esp.outline then esp.outline:Destroy() end
espObjects[part] = nil
end
end
local function setupESP()
if not espEnabled then return end
for part, _ in pairs(espObjects) do
removeESP(part)
end
espObjects = {}
for _, p in pairs(players:GetPlayers()) do
if p ~= player and p.Character then
local head = p.Character:FindFirstChild("Head")
if head then
local humanoidChar = p.Character:FindFirstChild("Humanoid")
local healthPercent = humanoidChar and (humanoidChar.Health / humanoidChar.MaxHealth) * 100 or 100
espObjects[head] = createESP(head, p.DisplayName)
updateESPHealth(head, healthPercent)
end
end
end
end
-- God Mode --
local function enableGodMode()
if not character or not humanoid then return end
godModeEnabled = true
humanoid.MaxHealth = math.huge
humanoid.Health = math.huge
humanoid.BreakJointsOnDeath = false
Rayfield:Notify({Title = "God Mode", Content = "God Mode Enabled!", Duration = 2})
end
local function disableGodMode()
godModeEnabled = false
if character and humanoid then
humanoid.MaxHealth = 100
humanoid.Health = 100
humanoid.BreakJointsOnDeath = true
end
Rayfield:Notify({Title = "God Mode", Content = "God Mode Disabled!", Duration = 2})
end
-- Fly Functions --
local function startFly()
if flyEnabled then return end
local partToFly = HRP
if partToFly then
flyEnabled = true
flyBodyVelocity = Instance.new("BodyVelocity")
flyBodyVelocity.Name = "FlyBV"
flyBodyVelocity.MaxForce = Vector3.new(9e9, 9e9, 9e9)
flyBodyVelocity.Parent = partToFly
flyConnection = runService.RenderStepped:Connect(function()
if not flyEnabled or not flyBodyVelocity then return end
local cam = workspace.CurrentCamera
local moveDir = (cam.CFrame.LookVector * (flyDirection.f + flyDirection.b)) +
(cam.CFrame.RightVector * (flyDirection.r + flyDirection.l)) +
(Vector3.new(0, flyDirection.u + flyDirection.d, 0))
if moveDir.Magnitude > 0 then
flyBodyVelocity.Velocity = moveDir.Unit * flySpeed
else
flyBodyVelocity.Velocity = Vector3.zero
end
end)
Rayfield:Notify({Title = "Fly", Content = "Fly mode enabled! Use WASD + Space/Ctrl", Duration = 2})
end
end
local function stopFly()
flyEnabled = false
if flyBodyVelocity then
flyBodyVelocity:Destroy()
flyBodyVelocity = nil
end
if flyConnection then
flyConnection:Disconnect()
flyConnection = nil
end
end
-- Input Handling for Fly --
userInput.InputBegan:Connect(function(input, processed)
if processed then return end
if flyEnabled then
if input.KeyCode == Enum.KeyCode.W then flyDirection.f = 1 end
if input.KeyCode == Enum.KeyCode.S then flyDirection.b = -1 end
if input.KeyCode == Enum.KeyCode.A then flyDirection.l = -1 end
if input.KeyCode == Enum.KeyCode.D then flyDirection.r = 1 end
if input.KeyCode == Enum.KeyCode.Space then flyDirection.u = 1 end
if input.KeyCode == Enum.KeyCode.LeftControl then flyDirection.d = -1 end
end
end)
userInput.InputEnded:Connect(function(input)
if flyEnabled then
if input.KeyCode == Enum.KeyCode.W then flyDirection.f = 0 end
if input.KeyCode == Enum.KeyCode.S then flyDirection.b = 0 end
if input.KeyCode == Enum.KeyCode.A then flyDirection.l = 0 end
if input.KeyCode == Enum.KeyCode.D then flyDirection.r = 0 end
if input.KeyCode == Enum.KeyCode.Space then flyDirection.u = 0 end
if input.KeyCode == Enum.KeyCode.LeftControl then flyDirection.d = 0 end
end
end)
-- No Clip --
local function toggleNoClip()
noClipEnabled = not noClipEnabled
if noClipEnabled then
Rayfield:Notify({Title = "No Clip", Content = "No clip enabled!", Duration = 2})
else
Rayfield:Notify({Title = "No Clip", Content = "No clip disabled!", Duration = 2})
end
end
runService.Stepped:Connect(function()
if noClipEnabled and character then
for _, part in pairs(character:GetDescendants()) do
if part:IsA("BasePart") then
part.CanCollide = false
end
end
end
end)
-- Infinite Jump --
local infiniteJumpConnection = nil
local function setupInfiniteJump()
if infiniteJumpConnection then infiniteJumpConnection:Disconnect() end
infiniteJumpConnection = userInput.InputBegan:Connect(function(input)
if infiniteJumpEnabled and input.KeyCode == Enum.KeyCode.Space and humanoid then
humanoid:ChangeState(Enum.HumanoidStateType.Jumping)
end
end)
end
-- Auto Farm --
local function startAutoFarm()
autoFarmEnabled = not autoFarmEnabled
if autoFarmEnabled then
task.spawn(function()
while autoFarmEnabled do
task.wait(farmDelay)
if not HRP then continue end
local stages = workspace:FindFirstChild("BoatStages")
if not stages then continue end
local normalStages = stages:FindFirstChild("NormalStages")
if not normalStages then continue end
if currentStage == 11 then
local endpoint = normalStages:FindFirstChild("TheEnd")
if endpoint then
local chest = endpoint:FindFirstChild("GoldenChest")
if chest then
HRP:PivotTo(chest:GetPivot() + Vector3.new(0, 0, -10))
task.wait(10)
currentStage = 1
end
end
else
local roomName = "CaveStage" .. currentStage
local stage = normalStages:FindFirstChild(roomName)
if stage then
local darkPart = stage:FindFirstChild("DarknessPart")
if darkPart then
character:PivotTo(darkPart.CFrame - Vector3.new(0, 0, 15))
local tween = TS:Create(HRP, TweenInfo.new(2, Enum.EasingStyle.Linear), {
CFrame = darkPart.CFrame + Vector3.new(0, 0, 20)
})
tweening = true
tween:Play()
tween.Completed:Wait()
tweening = false
currentStage = currentStage + 1
end
end
end
end
end)
Rayfield:Notify({Title = "Auto Farm", Content = "Auto farm enabled!", Duration = 2})
else
Rayfield:Notify({Title = "Auto Farm", Content = "Auto farm disabled!", Duration = 2})
end
end
-- Auto Collect --
local function startAutoCollect()
autoCollectEnabled = not autoCollectEnabled
if autoCollectEnabled then
task.spawn(function()
while autoCollectEnabled do
task.wait(0.5)
for _, v in pairs(workspace:GetDescendants()) do
if v:IsA("BasePart") and (string.find(string.lower(v.Name), "coin") or string.find(string.lower(v.Name), "gold")) then
if HRP and (v.Position - HRP.Position).Magnitude 0 then
local base = getPlayerBase()
if base then
pasteBuild(clipboard, base)
else
Rayfield:Notify({Title = "Error", Content = "Could not find your base folder", Duration = 3})
end
else
Rayfield:Notify({Title = "Error", Content = "No base copied to clipboard", Duration = 3})
end
end,
})
local pasteStatus = buildingTab:CreateParagraph({
Title = "Build Progress",
Content = "0%"
})
task.spawn(function()
while task.wait(0.2) do
pasteStatus:Set({Title = "Build Progress", Content = tostring(pastePercent) .. "%"})
end
end)
buildingTab:CreateSection("Build Settings")
buildingTab:CreateToggle({
Name = "Ignore Anchored State",
CurrentValue = true,
Callback = function(Value)
ignoreAnchored = Value
end,
})
-- 3D SPHERE/BALL TAB --
sphereTab:CreateSection("3D Sphere Settings")
local sphereRadius = 10
local sphereBlockSize = 1
local sphereBlockType = "StoneBlock"
local hollowSphere = false
local sphereThickness = 1
sphereTab:CreateSlider({
Name = "Sphere Radius (studs)",
Range = {3, 25},
Increment = 0.5,
Suffix = " studs",
CurrentValue = 10,
Callback = function(value)
sphereRadius = value
if showBuildPreview and currentBuildPosition then
createSpherePreview(currentBuildPosition, sphereRadius, sphereBlockSize)
end
end,
})
sphereTab:CreateSlider({
Name = "Block Size (studs)",
Range = {0.5, 2},
Increment = 0.5,
Suffix = " studs",
CurrentValue = 1,
Callback = function(value)
sphereBlockSize = value
if showBuildPreview and currentBuildPosition then
createSpherePreview(currentBuildPosition, sphereRadius, sphereBlockSize)
end
end,
})
sphereTab:CreateToggle({
Name = "Hollow Sphere",
CurrentValue = false,
Callback = function(value)
hollowSphere = value
if showBuildPreview and currentBuildPosition then
createSpherePreview(currentBuildPosition, sphereRadius, sphereBlockSize)
end
end,
})
sphereTab:CreateSlider({
Name = "Wall Thickness (hollow only)",
Range = {1, 5},
Increment = 1,
Suffix = " blocks",
CurrentValue = 1,
Callback = function(value)
sphereThickness = value
end,
})
sphereTab:CreateSection("Block Selection")
local sphereBlockDropdown = sphereTab:CreateDropdown({
Name = "Select Block Material",
Options = allBlocks,
CurrentOption = {"StoneBlock"},
MultipleOptions = false,
Callback = function(Options)
sphereBlockType = Options[1]
Rayfield:Notify({Title = "Material", Content = "Using: " .. sphereBlockType, Duration = 2})
end,
})
sphereTab:CreateSection("Build Position")
sphereTab:CreateButton({
Name = "Set Sphere Center Here",
Callback = function()
currentBuildPosition = HRP.CFrame + Vector3.new(0, sphereRadius, 0)
if showBuildPreview then
createSpherePreview(currentBuildPosition, sphereRadius, sphereBlockSize)
end
Rayfield:Notify({Title = "Center Set", Content = "Sphere center set at your position!", Duration = 2})
end,
})
sphereTab:CreateButton({
Name = "Set Center in Front",
Callback = function()
currentBuildPosition = HRP.CFrame + Vector3.new(0, sphereRadius, 10)
if showBuildPreview then
createSpherePreview(currentBuildPosition, sphereRadius, sphereBlockSize)
end
Rayfield:Notify({Title = "Center Set", Content = "Sphere center set in front of you!", Duration = 2})
end,
})
sphereTab:CreateButton({
Name = "Clear Preview",
Callback = function()
clearBuildPreview()
Rayfield:Notify({Title = "Preview Cleared", Content = "Sphere preview removed!", Duration = 2})
end,
})
sphereTab:CreateSection("Build")
sphereTab:CreateButton({
Name = "BUILD 3D SPHERE",
Callback = function()
if not currentBuildPosition then
Rayfield:Notify({Title = "Error", Content = "Please set a build position first!", Duration = 3})
return
end
clearBuildPreview()
build3DSphere(currentBuildPosition, sphereRadius, sphereBlockSize, sphereBlockType, hollowSphere, sphereThickness)
end,
})
sphereTab:CreateParagraph({
Title = "Sphere Info",
Content = "⚪ Creates a perfect 3D sphere/ball using sphere equation x²+y²+z² ≤ r²\n" ..
"⚪ Solid spheres are completely filled\n" ..
"⚪ Hollow spheres create a shell with adjustable thickness\n" ..
"⚪ Orange preview shows wireframe sphere outline\n" ..
"⚪ Choose any block material for your sphere!"
})
-- REALISTIC VEHICLES TAB --
vehicleTab:CreateSection("Choose Vehicle")
local realisticVehicles = {
"Lamborghini Aventador",
"Ferrari F40",
"Bugatti Chiron",
"F-22 Raptor",
"Boeing 747",
"Luxury Yacht",
"Aircraft Carrier"
}
local selectedVehicle = "Lamborghini Aventador"
local vehicleDropdown = vehicleTab:CreateDropdown({
Name = "Select Realistic Vehicle",
Options = realisticVehicles,
CurrentOption = {"Lamborghini Aventador"},
MultipleOptions = false,
Callback = function(Options)
selectedVehicle = Options[1]
Rayfield:Notify({Title = "Vehicle", Content = "Selected: " .. selectedVehicle, Duration = 2})
end,
})
vehicleTab:CreateSection("Choose Block Material")
local vehicleBlockDropdown = vehicleTab:CreateDropdown({
Name = "Select Block Material",
Options = allBlocks,
CurrentOption = {"IronBlock"},
MultipleOptions = false,
Callback = function(Options)
selectedVehicleBlock = Options[1]
Rayfield:Notify({Title = "Material", Content = "Using: " .. selectedVehicleBlock, Duration = 2})
end,
})
vehicleTab:CreateSection("Build Position")
vehicleTab:CreateButton({
Name = "Build In Front of Me",
Callback = function()
currentBuildPosition = HRP.CFrame + Vector3.new(0, 0, 15)
Rayfield:Notify({Title = "Position Set", Content = "Vehicle will build in front of you!", Duration = 2})
end,
})
vehicleTab:CreateButton({
Name = "Build at My Feet",
Callback = function()
currentBuildPosition = HRP.CFrame + Vector3.new(0, 0, 5)
Rayfield:Notify({Title = "Position Set", Content = "Vehicle will build at your feet!", Duration = 2})
end,
})
vehicleTab:CreateSection("Build")
vehicleTab:CreateButton({
Name = "BUILD REALISTIC VEHICLE",
Callback = function()
if not currentBuildPosition then
Rayfield:Notify({Title = "Error", Content = "Please set a build position first!", Duration = 3})
return
end
buildRealisticVehicle(selectedVehicle, currentBuildPosition, selectedVehicleBlock)
end,
})
-- Image Paint Tab --
imagePaintTab:CreateSection("Pattern Selection")
local paintWidth = 30
local paintHeight = 30
local paintBlockSize = 2
local selectedPattern = "Rainbow"
local patternDropdown = imagePaintTab:CreateDropdown({
Name = "Select Pattern",
Options = {"Rainbow", "Checkerboard", "Stripes", "Gradient", "Heart", "Target", "Mario"},
CurrentOption = {"Rainbow"},
MultipleOptions = false,
Callback = function(Options)
selectedPattern = Options[1]
Rayfield:Notify({Title = "Pattern", Content = "Selected: " .. selectedPattern, Duration = 2})
end,
})
imagePaintTab:CreateSection("Choose Block Type")
local patternBlockDropdown = imagePaintTab:CreateDropdown({
Name = "Select Block Material",
Options = {"Auto (Color Match)", "WoodBlock", "StoneBlock", "GoldBlock", "IronBlock", "SteelBlock", "TitaniumBlock", "CopperBlock", "RedBlock", "BlueBlock", "GreenBlock", "YellowBlock", "WhiteBlock", "BlackBlock"},
CurrentOption = {"Auto (Color Match)"},
MultipleOptions = false,
Callback = function(Options)
selectedBlockForBuild = Options[1]
Rayfield:Notify({Title = "Block", Content = "Using: " .. selectedBlockForBuild, Duration = 2})
end,
})
imagePaintTab:CreateSection("Size Settings")
imagePaintTab:CreateSlider({
Name = "Width (blocks)",
Range = {5, 50},
Increment = 1,
Suffix = " blocks",
CurrentValue = 30,
Callback = function(value)
paintWidth = value
if showBuildPreview and currentBuildPosition then
createBuildPreview(currentBuildPosition, paintWidth, paintHeight, paintBlockSize)
end
end,
})
imagePaintTab:CreateSlider({
Name = "Height (blocks)",
Range = {5, 50},
Increment = 1,
Suffix = " blocks",
CurrentValue = 30,
Callback = function(value)
paintHeight = value
if showBuildPreview and currentBuildPosition then
createBuildPreview(currentBuildPosition, paintWidth, paintHeight, paintBlockSize)
end
end,
})
imagePaintTab:CreateSlider({
Name = "Block Size (studs)",
Range = {1, 4},
Increment = 0.5,
Suffix = " studs",
CurrentValue = 2,
Callback = function(value)
paintBlockSize = value
if showBuildPreview and currentBuildPosition then
createBuildPreview(currentBuildPosition, paintWidth, paintHeight, paintBlockSize)
end
end,
})
imagePaintTab:CreateSection("Build Preview")
imagePaintTab:CreateToggle({
Name = "Show Build Preview",
CurrentValue = true,
Callback = function(value)
showBuildPreview = value
if not value then
clearBuildPreview()
elseif currentBuildPosition then
createBuildPreview(currentBuildPosition, paintWidth, paintHeight, paintBlockSize)
end
end,
})
imagePaintTab:CreateSection("Build Position")
imagePaintTab:CreateButton({
Name = "Set Position Here (Preview)",
Callback = function()
currentBuildPosition = HRP.CFrame + Vector3.new(0, 5, 15)
if showBuildPreview then
createBuildPreview(currentBuildPosition, paintWidth, paintHeight, paintBlockSize)
end
Rayfield:Notify({Title = "Position Set", Content = "Build position set to front of you!", Duration = 2})
end,
})
imagePaintTab:CreateButton({
Name = "Set Position at Feet",
Callback = function()
currentBuildPosition = HRP.CFrame + Vector3.new(0, 0, 5)
if showBuildPreview then
createBuildPreview(currentBuildPosition, paintWidth, paintHeight, paintBlockSize)
end
Rayfield:Notify({Title = "Position Set", Content = "Build position set at your feet!", Duration = 2})
end,
})
imagePaintTab:CreateButton({
Name = "Clear Preview",
Callback = function()
clearBuildPreview()
Rayfield:Notify({Title = "Preview Cleared", Content = "Build preview removed!", Duration = 2})
end,
})
imagePaintTab:CreateSection("Build")
imagePaintTab:CreateButton({
Name = "BUILD PATTERN",
Callback = function()
if not currentBuildPosition then
Rayfield:Notify({Title = "Error", Content = "Please set a build position first!", Duration = 3})
return
end
clearBuildPreview()
paintPattern(selectedPattern, currentBuildPosition, paintWidth, paintHeight, paintBlockSize, selectedBlockForBuild)
end,
})
-- Auto Farm Tab --
farmTab:CreateToggle({
Name = "Auto Farm",
CurrentValue = false,
Callback = function(value)
if value then
startAutoFarm()
else
autoFarmEnabled = false
end
end,
})
farmTab:CreateSlider({
Name = "Farm Delay (seconds)",
Range = {0.5, 5},
Increment = 0.1,
Suffix = "s",
CurrentValue = farmDelay,
Callback = function(value)
farmDelay = value
end,
})
farmTab:CreateParagraph({
Title = "Current Stage",
Content = tostring(currentStage) .. " / 10"
})
task.spawn(function()
while task.wait(1) do
if farmTab then
pcall(function()
farmTab:UpdateParagraph("Current Stage", tostring(currentStage) .. " / 10")
end)
end
end
end)
farmTab:CreateToggle({
Name = "Auto Collect Items",
CurrentValue = false,
Callback = function(value)
if value then
startAutoCollect()
else
autoCollectEnabled = false
end
end,
})
-- Movement Tab --
movementTab:CreateToggle({
Name = "Fly Mode (WASD + Space/Ctrl)",
CurrentValue = false,
Callback = function(value)
if value then
startFly()
else
stopFly()
end
end,
})
movementTab:CreateSlider({
Name = "Fly Speed",
Range = {20, 200},
Increment = 5,
Suffix = " studs/s",
CurrentValue = flySpeed,
Callback = function(value)
flySpeed = value
end,
})
movementTab:CreateToggle({
Name = "No Clip",
CurrentValue = false,
Callback = function(value)
toggleNoClip()
end,
})
movementTab:CreateToggle({
Name = "Speed Boost",
CurrentValue = false,
Callback = function(value)
speedEnabled = value
if value then
originalWalkSpeed = humanoid.WalkSpeed
setSpeed(currentSpeed)
Rayfield:Notify({Title = "Speed Boost", Content = "Walk speed set to " .. currentSpeed .. " studs/s!", Duration = 2})
else
setSpeed(originalWalkSpeed)
Rayfield:Notify({Title = "Speed Boost", Content = "Walk speed restored to normal!", Duration = 2})
end
end,
})
movementTab:CreateSlider({
Name = "Walk Speed",
Range = {16, 250},
Increment = 5,
Suffix = " studs/s",
CurrentValue = currentSpeed,
Callback = function(value)
currentSpeed = value
if speedEnabled then
setSpeed(value)
end
end,
})
movementTab:CreateToggle({
Name = "Infinite Jump",
CurrentValue = false,
Callback = function(value)
infiniteJumpEnabled = value
setupInfiniteJump()
end,
})
-- Boat Speed Tab --
boatTab:CreateToggle({
Name = "Boat Speed Boost",
CurrentValue = false,
Callback = function(value)
if value then
startBoatSpeed()
else
stopBoatSpeed()
end
end,
})
boatTab:CreateSlider({
Name = "Boat Speed",
Range = {50, 500},
Increment = 10,
Suffix = " studs/s",
CurrentValue = currentBoatSpeed,
Callback = function(value)
currentBoatSpeed = value
if boatSpeedEnabled then
Rayfield:Notify({Title = "Boat Speed", Content = "Boat speed set to " .. value .. " studs/s!", Duration = 2})
end
end,
})
boatTab:CreateButton({
Name = "Stop Boat",
Callback = function()
local car = getCar()
if car then
for _, part in pairs(car:GetDescendants()) do
if part:IsA("BasePart") then
part.Velocity = Vector3.zero
part.RotVelocity = Vector3.zero
end
local velocity = part:FindFirstChild("BodyVelocity")
if velocity then
velocity:Destroy()
end
end
Rayfield:Notify({Title = "Stopped", Content = "Boat has been stopped!", Duration = 2})
end
end,
})
-- Combat Tab --
combatTab:CreateToggle({
Name = "ESP (Player Names & Health)",
CurrentValue = false,
Callback = function(value)
espEnabled = value
if value then
setupESP()
Rayfield:Notify({Title = "ESP", Content = "ESP enabled! Player names and health visible!", Duration = 3})
else
for part, _ in pairs(espObjects) do
removeESP(part)
end
espObjects = {}
Rayfield:Notify({Title = "ESP", Content = "ESP disabled!", Duration = 2})
end
end,
})
combatTab:CreateToggle({
Name = "God Mode",
CurrentValue = false,
Callback = function(value)
if value then
enableGodMode()
else
disableGodMode()
end
end,
})
-- Utility Tab --
utilityTab:CreateToggle({
Name = "Auto Clicker",
CurrentValue = false,
Callback = function(value)
startAutoClicker()
end,
})
utilityTab:CreateSlider({
Name = "Click Delay (seconds)",
Range = {0.05, 0.5},
Increment = 0.01,
Suffix = "s",
CurrentValue = clickDelay,
Callback = function(value)
clickDelay = value
end,
})
utilityTab:CreateToggle({
Name = "Anti AFK",
CurrentValue = true,
Callback = function(value)
antiAFKEnabled = value
end,
})
utilityTab:CreateButton({
Name = "Rejoin Game",
Callback = function()
game:GetService("TeleportService"):Teleport(game.PlaceId, player)
end,
})
-- Fun Tab --
local firstSeat = nil
local secondSeat = nil
funTab:CreateSection("Bring Player")
local dd2 = funTab:CreateDropdown({
Name = "Choose Player To Bring",
Options = getPlayers(),
CurrentOption = {"None Selected"},
MultipleOptions = false,
Callback = function(Options)
local realName = getRealName(Options[1])
if realName then
playerToBring = players:FindFirstChild(realName)
end
end,
})
players.PlayerAdded:Connect(function()
dd2:Refresh(getPlayers())
end)
funTab:CreateButton({
Name = "Set First Seat (Sit In It)",
Callback = function()
if humanoid.SeatPart then
firstSeat = humanoid.SeatPart
Rayfield:Notify({Title = "Seat Set", Content = "First seat selected!", Duration = 2})
else
Rayfield:Notify({Title = "Error", Content = "You are not sitting in a seat!", Duration = 2})
end
end,
})
funTab:CreateButton({
Name = "Set Second Seat (Sit In It)",
Callback = function()
if humanoid.SeatPart then
secondSeat = humanoid.SeatPart
Rayfield:Notify({Title = "Seat Set", Content = "Second seat selected!", Duration = 2})
else
Rayfield:Notify({Title = "Error", Content = "You are not sitting in a seat!", Duration = 2})
end
end,
})
funTab:CreateButton({
Name = "Bring Player to Second Seat",
Callback = function()
if not firstSeat or not secondSeat then
Rayfield:Notify({Title = "Error", Content = "Please set both seats first!", Duration = 3})
return
end
if firstSeat == secondSeat then
Rayfield:Notify({Title = "Error", Content = "Seats must be different!", Duration = 3})
return
end
if not playerToBring then
Rayfield:Notify({Title = "Error", Content = "Please select a player to bring!", Duration = 3})
return
end
bringPlayer(playerToBring, firstSeat, secondSeat)
end,
})
funTab:CreateSection("Visual Effects")
funTab:CreateToggle({
Name = "Rainbow Sky",
CurrentValue = false,
Callback = function(value)
if value then
task.spawn(function()
local hue = 0
while value do
hue = (hue + 0.01) % 1
lighting.Sky.SkyboxBk = Color3.fromHSV(hue, 1, 1)
lighting.Sky.SkyboxDn = Color3.fromHSV(hue, 1, 1)
lighting.Sky.SkyboxFt = Color3.fromHSV(hue, 1, 1)
lighting.Sky.SkyboxLf = Color3.fromHSV(hue, 1, 1)
lighting.Sky.SkyboxRt = Color3.fromHSV(hue, 1, 1)
lighting.Sky.SkyboxUp = Color3.fromHSV(hue, 1, 1)
task.wait(0.05)
end
end)
else
lighting.Sky.SkyboxBk = Color3.fromRGB(0, 0, 0)
lighting.Sky.SkyboxDn = Color3.fromRGB(0, 0, 0)
lighting.Sky.SkyboxFt = Color3.fromRGB(0, 0, 0)
lighting.Sky.SkyboxLf = Color3.fromRGB(0, 0, 0)
lighting.Sky.SkyboxRt = Color3.fromRGB(0, 0, 0)
lighting.Sky.SkyboxUp = Color3.fromRGB(0, 0, 0)
end
end,
})
funTab:CreateButton({
Name = "Rainbow Character",
Callback = function()
task.spawn(function()
while true do
local hue = tick() % 1
local color = Color3.fromHSV(hue, 1, 1)
if character then
for _, part in pairs(character:GetDescendants()) do
if part:IsA("BasePart") then
part.Color = color
end
end
end
task.wait(0.1)
end
end)
end,
})
funTab:CreateButton({
Name = "Explode Character",
Callback = function()
if character and HRP then
local explosion = Instance.new("Explosion")
explosion.BlastRadius = 10
explosion.Position = HRP.Position
explosion.Parent = workspace
end
end,
})
-- Load Configuration --
Rayfield:LoadConfiguration()
print("=" .. string.rep("=", 60))
print("ULTIMATE BABFT Script Loaded Successfully!")
print("")
print("NEW 3D SPHERE/BALL BUILDER:")
print("⚪ Creates perfect 3D spheres using sphere equation x²+y²+z² ≤ r²")
print("⚪ Solid spheres are completely filled")
print("⚪ Hollow spheres create a shell with adjustable thickness")
print("⚪ Orange preview shows wireframe sphere outline")
print("⚪ Choose any block material for your sphere!")
print("")
print("REALISTIC VEHICLES:")
print("🏎️ Lamborghini Aventador - Scissor doors, LED headlights")
print("🏎️ Ferrari F40 - Pop-up headlights, classic design")
print("🏎️ Bugatti Chiron - Horseshoe grille")
print("✈️ F-22 Raptor - Stealth fighter, missiles")
print("✈️ Boeing 747 - Jumbo jet with upper deck")
print("⛵ Luxury Yacht - Cabin, mast, sail")
print("🚢 Aircraft Carrier - Flight deck, island")
print("")
print("OTHER FEATURES:")
print("🎨 Pattern Painter - Rainbow, Checkerboard, Stripes, Gradient, Heart, Target, Mario")
print("👁️ ESP with Player Names & Health")
print("🕊️ Fly Mode, No Clip, Speed Boost")
print("🤖 Auto Farm, Auto Collect, Auto Clicker")
print("⛵ Boat Speed Boost")
print("👑 God Mode")
print("=" .. string.rep("=", 60))