
Key Required VerifiedUniversal

if game.PlaceId ~= 537413528 then
return
end
task.spawn(function()
loadstring(game:HttpGet('https://raw.githubusercontent.com/TheRealAsu/BABFT/refs/heads/main/MessageIssue.lua'))()
end)
if not isfolder("BABFT") then
makefolder("BABFT")
end
if not isfolder("BABFT/Image") then
makefolder("BABFT/Image")
end
if not isfolder("BABFT/Build") then
makefolder("BABFT/Build")
end
local FcMaster = true
local folderName = "ImagePreview"
local previewFolder = Workspace:FindFirstChild(folderName) or Instance.new("Folder", Workspace)
previewFolder.Name = folderName
for _, v in ipairs(previewFolder:GetChildren()) do
v:Destroy()
end
task.delay(10, function()
if game:GetService("CoreGui"):FindFirstChild("MSGISSUE") then
game:GetService("CoreGui").MSGISSUE:Destroy()
end
end)
local Rayfield
local success
success, Rayfield = pcall(function()
return loadstring(game:HttpGet('https://sirius.menu/rayfield'))()
end)
if not success then
success, Rayfield = pcall(function()
return loadstring(game:HttpGet('https://raw.githubusercontent.com/SiriusSoftwareLtd/Rayfield/ab965bf9a6f9890e6447c9b377678f5bffd8a379/source.lua'))()
end)
end
if not success then
success, Rayfield = pcall(function()
return loadstring(game:HttpGet('https://github.com/SiriusSoftwareLtd/Rayfield/blob/28c7c270669c16a2ae1526eaaac1dbf927aa881e/source.lua'))()
end)
end
local HttpService = cloneref(game:GetService("HttpService"))
local TeleportService = cloneref(game:GetService("TeleportService"))
local Players = game:GetService("Players")
local Workspace = game:GetService("Workspace")
local VirtualUser = game:GetService("VirtualUser")
local httprequest = (syn and syn.request) or (http and http.request) or http_request or (fluxus and fluxus.request) or request
local JobId = game.JobId
local PlaceId = game.PlaceId
local queueteleport = (syn and syn.queue_on_teleport) or queue_on_teleport or (fluxus and fluxus.queue_on_teleport)
local RunService = game:GetService("RunService")
local Window = Rayfield:CreateWindow({
Name = "Build A Boat For Treasure",
Icon = 85108798400826,
LoadingTitle = "Build A Boat For Treasure",
LoadingSubtitle = "Made With ❤️ by @thereal_asu",
Theme = "DarkBlue",
DisableRayfieldPrompts = true,
DisableBuildWarnings = true,
ConfigurationSaving = {
Enabled = false,
FolderName = nil,
FileName = "Big Hub"
},
Discord = {
Enabled = true,
Invite = "MdtGaG7vdx",
RememberJoins = true
},
KeySystem = false,
KeySettings = {
Title = "discord.gg/uGhnBu89SM",
Subtitle = "Key System",
Note = "Key available in discord, link copied to clipboard",
FileName = "ASUBABFTKey",
SaveKey = true,
GrabKeyFromSite = false,
Key = {"terraria"} -- yes there is a keysystem but my script is not obfuscated lol
}
})
local Global = Window:CreateTab("Global", 125428076789049)
local ImageLoader = Window:CreateTab("Image Loader", 91865122737183)
local AutoBuild = Window:CreateTab("Auto Build", 128207976113050)
local BlockNeeded = Window:CreateTab("Block Needed", 138460602231983)
local Miscellaneous = Window:CreateTab("Miscellaneous", 90305619538335)
local Information = Window:CreateTab("Information", 84130531909418)
local Credit = Window:CreateTab("Credit", 103654977021797)
local Section = Credit:CreateSection("Discord")
Section = Information:CreateSection("Discord")
local Button = Credit:CreateButton({
Name = "Join the Community!",
Callback = function()
setclipboard("https://discord.gg/zrAB2m5gvz")
Rayfield:Notify({
Title = "Copied!",
Content = "the discord link has been successfully copied to the clipboard",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
local yjdtjf = Global:CreateButton({
Name = "Unload Script",
Callback = function()
for _, v in ipairs(previewFolder:GetChildren()) do
v:Destroy()
end
FcMaster = false
Rayfield:Destroy()
local GameStuff = {
"Blocks",
"Challenge",
"TempStuff",
"Teams",
"MainTerrain",
"OtherStages",
"BlackZone",
"CamoZone",
"MagentaZone",
"New YellerZone",
"Really blueZone",
"Really redZone",
"Sand",
"Water",
"WhiteZone",
"WaterMask"
}
for _, v in ipairs(GameStuff) do
local object = game:GetService("ReplicatedStorage"):FindFirstChild(v)
if object then
if v == "OtherStages" then
game:GetService("ReplicatedStorage").OtherStages.Parent = workspace.BoatStages
else
object.Parent = workspace
end
end
end
end,
})
local qzdqzd = Global:CreateDivider()
Section = Credit:CreateSection("Owner")
local Labeld = Credit:CreateLabel("Owner: @thereal_asu", 93981953300699, Color3.fromRGB(255, 255, 255), true)
local Paragraph = Credit:CreateParagraph({Title = "About this script", Content = "This script is one of my projects that I'm taking time to make, I'm leaving it open source to allow people to check if this script is trusted, but also to let people learn the different techniques used in this script to do specific things. Please don't be a bad “skid” and credit me if you use this script to create your own script. It's ok to copy and paste my work for your script or improve my script to your own style, to suggest different versions of it, but please respect me, respect my work and have fun."})
local aButton = Information:CreateButton({
Name = "Join the Community!",
Callback = function()
setclipboard("https://discord.gg/zrAB2m5gvz")
Rayfield:Notify({
Title = "Copied!",
Content = "the discord link has been successfully copied to the clipboard",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
Section = Information:CreateSection("Auto Farm")
local Paragraph = Information:CreateParagraph({Title = "Information", Content = "let me know if you've ever seen an auto farm more powerful than this one in terms of gold per hour, you can use a webhook to follow the auto farm stats when you're not in front of your screen.\n\n - With no boost: 20K/hour\n - With x1.25: 25K/hour\n - With x2: 40K/hour\n - With Both: 50k/hour"})
Section = Information:CreateSection("Image Loader")
local Paragraph = Information:CreateParagraph({Title = "Requirement", Content = "Paste the image URL in the textbox and let the server convert the image, the server can't access certain images (it's not a coding problem) OR you can convert the image yourself: (more images are supported) Images are created from files that contain special data (RGB), to have these files or to create your own files from an image that you have chosen you must join the discord, you need an external script (open source) that converts the image into a file suitable for this script to be used, a tutorial is in the Discord Server.\n\n - Build Speed: You can choose the speed at which the image is built. If you have a slow internet connection, set the speed to low. Do not set it to max for large images\n\n- Preview: Displays a preview of the image, making it easier to use modifiers or to see how the image will look. It is also required to build the image.\n\n- Change Speed: Stop the current process by opening your inventory and checking if no more blocks are being placed. Change the speed and press 'Load Image' again. It should automatically resume from where it stopped.\n\n- Optimize Mode: Allows even the weakest PCs or those without a good connection to load images."})
local Button = Information:CreateButton({
Name = "copy the list of working sites",
Callback = function()
setclipboard("https://www.pythonanywhere.com/whitelist/")
Rayfield:Notify({
Title = "Copied!",
Content = "past the link in your browser to see which sites work",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
Section = Information:CreateSection("Auto Build")
local Paragraph = Information:CreateParagraph({Title = "Information - [AUTO BUILD IS IN WORK IN PROGRESS]", Content = "this feature does not require any external requirement, if you save a build with a name that already existed, it will overwrite it. You can download and shares files in the Discord Server.\n\n - Safe Mode: prevents crashes during loading if you have a poor internet connection, this toggle slows down build speed.\n\n - Preview: displays a preview of the build."})
local player = game.Players.LocalPlayer
local Nplayer = game.Players.LocalPlayer.Name
local characterConnection
local connection
local function enableAntiAFK()
if not connection then
Rayfield:Notify({
Title = "Anti-Afk | ON",
Content = "you won't get kicked after 20 minutes of inactivity",
Duration = 6.5,
Image = 124144713366592,
})
connection = player.Idled:Connect(function()
if getgenv().afk6464 then
VirtualUser:CaptureController()
VirtualUser:ClickButton2(Vector2.new())
end
end)
end
end
local function disableAntiAFK()
if connection then
connection:Disconnect()
connection = nil
Rayfield:Notify({
Title = "Anti-Afk | OFF",
Content = "you will be kicked after 20 minutes of inactivity",
Duration = 6.5,
Image = 124144713366592,
})
end
end
local function loop()
while true do
if getgenv().afk6464 then
enableAntiAFK()
else
disableAntiAFK()
end
wait(1)
end
end
spawn(loop)
Section = Global:CreateSection("Utilities")
local AFKToggle = Global:CreateToggle({
Name = "Anti-Afk",
CurrentValue = false,
Flag = "",
Callback = function(Value)
getgenv().afk6464 = Value
end,
})
if getgenv().afk6464 == true then
AFKToggle:Set(true)
end
local Button = Global:CreateButton({
Name = "Load Infinite Yield",
Callback = function()
loadstring(game:HttpGet('https://raw.githubusercontent.com/EdgeIY/infiniteyield/master/source'))()
end,
})
local Button = Global:CreateButton({
Name = "Tp tool",
Callback = function()
mouse = game.Players.LocalPlayer:GetMouse()
tool = Instance.new("Tool")
tool.RequiresHandle = false
tool.Name = "Tp tool"
tool.ToolTip = "Equip + click = tp"
tool.Activated:connect(function()
local pos = mouse.Hit+Vector3.new(0,2.5,0)
pos = CFrame.new(pos.X,pos.Y,pos.Z)
game.Players.LocalPlayer.Character.HumanoidRootPart.CFrame = pos
end)
tool.Parent = game.Players.LocalPlayer.Backpack
end,
})
local Button = Global:CreateButton({ -- From IY
Name = "Rejoin",
Callback = function()
Rayfield:Notify({
Title = "Rejoin",
Content = "hold on a sec",
Duration = 6.5,
Image = 124144713366592,
})
wait(0.2)
if #Players:GetPlayers() <= 1 then
Players.LocalPlayer:Kick("\nRejoining...")
wait()
TeleportService:Teleport(PlaceId, Players.LocalPlayer)
else
TeleportService:TeleportToPlaceInstance(PlaceId, JobId, Players.LocalPlayer)
end
wait(5)
Rayfield:Notify({
Title = "Rejoin may have failed",
Content = "try with infinite yield",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
local Button = Global:CreateButton({ -- From IY by IY devs and NoobSploit
Name = "Server Hop",
Callback = function()
if httprequest then
Rayfield:Notify({
Title = "Server Hop",
Content = "hold on a sec",
Duration = 6.5,
Image = 124144713366592,
})
wait(0.2)
local servers = {}
local req = httprequest({Url = string.format("https://games.roblox.com/v1/games/%d/servers/Public?sortOrder=Desc&limit=100&excludeFullGames=true", PlaceId)})
local body = HttpService:JSONDecode(req.Body)
if body and body.data then
for i, v in next, body.data do
if type(v) == "table" and tonumber(v.playing) and tonumber(v.maxPlayers) and v.playing < v.maxPlayers and v.id ~= JobId then
table.insert(servers, 1, v.id)
end
end
end
if #servers > 0 then
TeleportService:TeleportToPlaceInstance(PlaceId, servers[math.random(1, #servers)], Players.LocalPlayer)
else
Rayfield:Notify({
Title = "Error",
Content = "Couldn't find a server.",
Duration = 6.5,
Image = 124144713366592,
})
end
wait(5)
Rayfield:Notify({
Title = "Server Hop may have failed",
Content = "try with infinite yield",
Duration = 6.5,
Image = 124144713366592,
})
end
end,
})
local Silent = false
Section = Global:CreateSection("Auto Farm - The most powerful one")
local AutoFarm1 = Global:CreateToggle({
Name = "Auto Farm",
CurrentValue = false,
Flag = "",
Callback = function(Value)
getgenv().AF = Value
local isFarming = false
local function startAutoFarm()
if Value == false then return end
local character = player.Character or player.CharacterAdded:Wait()
local humanoidRootPart = character:WaitForChild("HumanoidRootPart") -- What are you looking for, basket ? :) no skid ;)
local newPart = Instance.new("Part")
newPart.Size = Vector3.new(5, 1, 5)
newPart.Transparency = 1
newPart.CanCollide = true
newPart.Anchored = true
newPart.Parent = workspace
local decal = Instance.new("Decal")
decal.Texture = "rbxassetid://139953968294114"
decal.Face = Enum.NormalId.Top
decal.Parent = newPart
local function TPAF(iteration)
if not Silent then
if Value == false then return end
if iteration == 5 then
firetouchinterest(game.Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart"), workspace.BoatStages.NormalStages.TheEnd.GoldenChest.Trigger, 0)
task.delay(0.8, function()
workspace.ClaimRiverResultsGold:FireServer()
end)
humanoidRootPart.CFrame = CFrame.new(-51, 65, 984 + (iteration - 1) * 770)
else
if iteration == 1 then
humanoidRootPart.CFrame = CFrame.new(160.16104125976562, 29.595888137817383, 973.813720703125)
else
humanoidRootPart.CFrame = CFrame.new(-51, 65, 984 + (iteration - 1) * 770)
end
end
newPart.Position = humanoidRootPart.Position - Vector3.new(0, 2, 0)
wait(2.3) -- if lower, it can't work every time
if iteration == 1 then
wait(2.3)
end
if iteration == 4 then
else
workspace.ClaimRiverResultsGold:FireServer()
end
else
if Value == false then return end
if iteration == 1 then
humanoidRootPart.CFrame = CFrame.new(160.16104125976562, 29.595888137817383, 973.813720703125)
elseif iteration == 5 then
firetouchinterest(game.Players.LocalPlayer.Character:WaitForChild("HumanoidRootPart"), workspace.BoatStages.NormalStages.TheEnd.GoldenChest.Trigger, 0)
task.delay(0.8, function()
workspace.ClaimRiverResultsGold:FireServer()
end)
humanoidRootPart.CFrame = CFrame.new(70.02417755126953, 138.9026336669922, 1371.6341552734375 + (iteration - 2) * 770)
else
humanoidRootPart.CFrame = CFrame.new(70.02417755126953, 138.9026336669922, 1371.6341552734375 + (iteration - 2) * 770)
end
newPart.Position = humanoidRootPart.Position - Vector3.new(0, 2, 0)
wait(2.3) -- if lower, it can't work every time
if iteration == 1 then
wait(2.3)
end
if iteration == 4 then
else
workspace.ClaimRiverResultsGold:FireServer()
end
end
end
for i = 1, 10 do
if not Value then
break
end
TPAF(i)
end
newPart:Destroy()
end
local function onCharacterRespawned()
if getgenv().AF == true then
if FcMaster == false then return end
local character = player.Character or player.CharacterAdded:Wait()
character:WaitForChild("HumanoidRootPart")
-- wait(2)
startAutoFarm()
end
end
if Value then
Rayfield:Notify({
Title = "Auto Farm - Enabled",
Content = "Isolation mode and Anti-afk is recommended",
Duration = 6.5,
Image = 124144713366592,
})
game.Players.LocalPlayer.Character:BreakJoints()
wait(1)
game.Players.LocalPlayer.CharacterAdded:Connect(onCharacterRespawned)
else
Rayfield:Notify({
Title = "Auto Farm - Disabled",
Content = "Please, wait for the iteration to finish...",
Duration = 6.5,
Image = 124144713366592,
})
game.Players.LocalPlayer.CharacterAdded:Connect(function() end)
end
end,
})
local Toggle = Global:CreateToggle({
Name = "Make it Silent",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
Silent = Value
end,
})
local FStats = Global:CreateParagraph({Title = "Stats", Content = "Elapsed time: -".."\n".."GoldBlock Gained: -".."\n".."Gold Gained: -".."\n".."\n".."Gold per hour: -"})
local clockTime = 0
local running = false
local totalGoldGained = 0
local Ftime = 0
local totalGoldBlock = 0
local GoldPerHour = 0
local lastGoldValue = game:GetService("Players").LocalPlayer.Data.Gold.Value
local IGBLOCK = game:GetService("Players").LocalPlayer.Data.GoldBlock.Value
local function formatTime(seconds)
local hours = math.floor(seconds / 3600)
local minutes = math.floor((seconds % 3600) / 60)
local sec = seconds % 60
return hours .. " hours " .. minutes .. " minutes " .. sec .. " seconds"
end
local function startClock()
if running then return end
running = true
while running do
if getgenv().AF then
clockTime = clockTime + 1
else
running = false
end
task.wait(1)
end
end
game:GetService("RunService").Stepped:Connect(function()
if getgenv().AF and not running then
wait(5)
startClock()
end
end)
function initclock()
while true do
local FinalGold = game:GetService("Players").LocalPlayer.Data.Gold.Value
Ftime = formatTime(clockTime)
local GoldGained = FinalGold - lastGoldValue
totalGoldGained = totalGoldGained + GoldGained
local FGBLOCK = game:GetService("Players").LocalPlayer.Data.GoldBlock.Value
totalGoldBlock = FGBLOCK - IGBLOCK
GoldPerHour = (totalGoldGained / clockTime) * 3600
FStats:Set({
Title = "Stats",
Content = "Elapsed time: " .. Ftime .. "\n" ..
"GoldBlock Gained: " .. totalGoldBlock .. "\n" ..
"Gold Gained: " .. totalGoldGained .. "\n" ..
"Gold per hour: " .. math.floor(GoldPerHour),
})
lastGoldValue = FinalGold
wait(1)
end
end
GoldPerHour = 0
function SendMessageEMBED(url, embed)
local http = game:GetService("HttpService")
local headers = {
["Content-Type"] = "application/json"
}
local data = {
["embeds"] = {
{
["title"] = embed.title,
["description"] = embed.description,
["color"] = embed.color,
["fields"] = embed.fields,
["footer"] = {
["text"] = embed.footer.text
},
["thumbnail"] = {
["url"] = embed.thumbnail_url
}
}
}
}
local body = http:JSONEncode(data)
local response = request({
Url = url,
Method = "POST",
Headers = headers,
Body = body
})
end
local WebHook = "a"
local interval = 1800
function SendAUTOFARMInfo(Ftime, totalGoldBlock, totalGoldGained, GoldPerHour)
local embed = {
["title"] = "BABFT | Auto Farm",
["description"] = "Stats",
["color"] = 16777215,
["fields"] = {
{
["name"] = "Time Elapsed",
["value"] = Ftime or 0
},
{
["name"] = "GoldBlock Gained:",
["value"] = tostring(totalGoldBlock) or 0
},
{
["name"] = "Gold Gained:",
["value"] = tostring(totalGoldGained) or 0
},
{
["name"] = "Gold per hour:",
["value"] = tostring(math.floor(GoldPerHour)) or 0
},
{
["name"] = "Total Gold:",
["value"] = game:GetService("Players").LocalPlayer.Data.Gold.Value or 0
},
},
["footer"] = {
["text"] = "Script by @thereal_asu"
},
["thumbnail_url"] = "https://tr.rbxcdn.com/180DAY-5cc07c05652006d448479ae66212782d/768/432/Image/Webp/noFilter"
}
if WebHook then
print("send")
SendMessageEMBED(WebHook, embed)
end
end
--[[
local embed2 = { -- Hello, this webhook is just for me to know how many people execute this script, everything is anonymous
["title"] = "Build A Boat For Treasure",
["description"] = "Script Executed!",
["color"] = math.random(1, 16777215),
["footer"] = {
["text"] = "Script by @thereal_asu"
},
["thumbnail_url"] = "https://tr.rbxcdn.com/180DAY-5cc07c05652006d448479ae66212782d/768/432/Image/Webp/noFilter"
}
SendMessageEMBED("the webhook got found and removed, i won't put a new one lol, thanks for the 15K executions in 3 days. - 7th january 2025", embed2)
]]
local InputWebHook = Global:CreateInput({
Name = "Discord Webhook URL:",
CurrentValue = "",
PlaceholderText = "URL",
RemoveTextAfterFocusLost = false,
Flag = "Input1",
Callback = function(Text)
WebHook = Text
end,
})
local InputInterval = Global:CreateInput({
Name = "Time between messages:",
CurrentValue = "1800",
PlaceholderText = "Seconds",
RemoveTextAfterFocusLost = false,
Flag = "Input2",
Callback = function(Text)
interval = tonumber(Text)
end,
})
local Toggle = Global:CreateToggle({
Name = "Use WebHook",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
getgenv().WBhook = Value
end,
})
coroutine.wrap(function()
while true do
if getgenv().WBhook and getgenv().AF and not getgenv().intervalLock then
getgenv().intervalLock = true
SendAUTOFARMInfo(Ftime, totalGoldBlock, totalGoldGained, GoldPerHour)
task.wait(interval)
getgenv().intervalLock = false
end
task.wait(1)
end
end)()
local BlockId = loadstring(game:HttpGet('https://raw.githubusercontent.com/TheRealAsu/BABFT/refs/heads/main/BlockId.lua'))()
local ImageFiles = {}
local function updateImageFiles()
local files = listfiles("BABFT/Image")
ImageFiles = {}
for _, file in ipairs(files) do
if isfile(file) then
table.insert(ImageFiles, file)
end
end
end
local Label = ImageLoader:CreateLabel("Check the Information tab to use this feature", 134637165939940, Color3.fromRGB(204, 156, 0), true)
--[[
local Dropdownimg = ImageLoader:CreateDropdown({ --When shlex adds a script to refresh the dropdown
Name = "Files",
Options = ImageFiles,
CurrentOption = {""},
MultipleOptions = false,
Flag = "",
Callback = function(Options)
end,
})
--]]
local function LPTEAM()
local teamName = player.Team.Name
local zoneMapping = {
black = "BlackZone",
blue = "Really blueZone",
green = "CamoZone",
red = "Really redZone",
white = "WhiteZone",
yellow = "New YellerZone",
magenta = "MagentaZone"
}
local selectedZoneName = zoneMapping[teamName]
if selectedZoneName then
local zone = workspace:FindFirstChild(selectedZoneName)
if zone then
return zone.position + Vector3.new(-100, 150, 0)
end
end
end
local function LPTEAM3()
local teamName = player.Team.Name
local zoneMapping = {
black = "BlackZone",
blue = "Really blueZone",
green = "CamoZone",
red = "Really redZone",
white = "WhiteZone",
yellow = "New YellerZone",
magenta = "MagentaZone"
}
local selectedZoneName = zoneMapping[teamName]
if selectedZoneName then
local zone = workspace:FindFirstChild(selectedZoneName)
if zone then
return zone.position
end
end
end
function BuildingTool()
game:GetService("Players").LocalPlayer.Backpack.BuildingTool.RF:InvokeServer("WoodBlock",58,workspace.BlackZone,CFrame.new(0, 6, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),true,CFrame.new(),false)
end
local imagePreviewFolder = workspace:FindFirstChild("ImagePreview") or Instance.new("Folder")
imagePreviewFolder.Name = "ImagePreview"
imagePreviewFolder.Parent = workspace
local UserBlockList = {}
local dataFolder = game:GetService("Players").LocalPlayer.Data
local BlockType = "PlasticBlock"
local LPBlockvalue = UserBlockList[BlockType]
local blockSize = 2
local startPosition = nil
local PreviewPart = nil
local kflxjdhgw = nil
local currentConnection = nil
local FileImage = nil
local HalfblockSize = blockSize / 2
local cooloffset = Vector3.new(0, 0, 0)
local Unit = 45
local Bdepth = 2
local angleY = 0
local ImgCenterimage = nil
local Brainrot = CFrame.identity
local rotationCFrame = CFrame.Angles(0, 0, 0)
local batchSize = 700
local TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLong = 0
local USEURL = nil
local TempData = {}
local BlockLoaded = true
local TASK1, TASK2, TASK3, TASK4, TASK5 = false, false, false, false, false
getgenv().ImgLoaderStat = true
local function LPTEAM2()
local teamName = player.Team.Name
local zoneMapping = {
black = "BlackZone",
blue = "Really blueZone",
green = "CamoZone",
red = "Really redZone",
white = "WhiteZone",
yellow = "New YellerZone",
magenta = "MagentaZone"
}
local selectedZoneName = zoneMapping[teamName]
if selectedZoneName then
local zone = workspace:FindFirstChild(selectedZoneName)
if zone then
return zone.Name
end
end
end
local function UUserBlockList()
UserBlockList = {}
for _, feuh in ipairs(dataFolder:GetChildren()) do
if feuh.Value ~= nil then
UserBlockList[feuh.Name] = feuh.Value
end
end
end
local function readFile(filePath)
if not isfile(filePath) then
return nil
end
return readfile(filePath)
end
local function parseColors(fileContent)
local data = {}
for value in string.gmatch(fileContent, "[^,]+") do
value = value:match("^%s*(.-)%s*$")
table.insert(data, tonumber(value) or value)
end
return data
end
local function calculateFrameSize(data)
local width = 0
local height = 0
local currentWidth = 0
for i = 1, #data, 3 do
local r, g, b = data[i], data[i + 1], data[i + 2]
if r == "B" and g == "B" and b == "B" then
height += 1
width = math.max(width, currentWidth)
currentWidth = 0
elseif r == "R" and g == "R" and b == "R" then
currentWidth += 1
elseif type(r) == "number" and type(g) == "number" and type(b) == "number" then
currentWidth += 1
end
end
height += 1
width = math.max(width, currentWidth)
return Vector3.new(width * blockSize, height * blockSize, Bdepth)
end
local function previewFrame(frameSize, position, blockSize)
startPosition = LPTEAM()
if PreviewPart then
PreviewPart:Destroy()
PreviewPart = nil
end
PreviewPart = Instance.new("Part")
PreviewPart.Size = frameSize
PreviewPart.Position = position + Vector3.new(HalfblockSize - blockSize + frameSize.X / 2, HalfblockSize + blockSize - frameSize.Y / 2, 0) + cooloffset
PreviewPart.Transparency = 1
PreviewPart.Color = Color3.new(1, 1, 1)
PreviewPart.Anchored = true
PreviewPart.CanCollide = false
PreviewPart.Name = "PreviewSize"
PreviewPart.Parent = previewFolder
PreviewPart.Rotation = Vector3.new(0, angleY - 90, 0)
local textureId = "rbxassetid://133978572926918"
local function applyTextureToSurface(surface, sizeX, sizeY)
local texture = Instance.new("Texture")
texture.Texture = textureId
texture.Face = surface
texture.Parent = PreviewPart
texture.StudsPerTileU = blockSize
texture.StudsPerTileV = blockSize
texture.Transparency = 0.2
end
applyTextureToSurface(Enum.NormalId.Front, frameSize.X, frameSize.Y)
applyTextureToSurface(Enum.NormalId.Back, frameSize.X, frameSize.Y)
applyTextureToSurface(Enum.NormalId.Left, frameSize.Z, frameSize.Y)
applyTextureToSurface(Enum.NormalId.Right, frameSize.Z, frameSize.Y)
applyTextureToSurface(Enum.NormalId.Top, frameSize.X, frameSize.Z)
applyTextureToSurface(Enum.NormalId.Bottom, frameSize.X, frameSize.Z)
end
local function Centerimage(frameSize, position, blockSize)
startPosition = LPTEAM()
if kflxjdhgw then
kflxjdhgw:Destroy()
kflxjdhgw = nil
end
kflxjdhgw = Instance.new("Part")
kflxjdhgw.Size = frameSize
kflxjdhgw.Position = position + Vector3.new(HalfblockSize - blockSize + frameSize.X / 2, HalfblockSize + blockSize - frameSize.Y / 2, 0)
kflxjdhgw.Transparency = 1
kflxjdhgw.Color = Color3.new(1, 1, 1)
kflxjdhgw.Anchored = true
kflxjdhgw.CanCollide = false
kflxjdhgw.Name = "Centerimage"
kflxjdhgw.Parent = previewFolder
return kflxjdhgw.Position
end
local function buildImageFAST()
local folder = workspace:FindFirstChild("ImagePreview")
if not folder then
return
end
for _, part in ipairs(folder:GetChildren()) do
if part:IsA("BasePart") and part.Name == "Part" then
part.Transparency = 0.8
end
end
local parts = {}
for _, part in ipairs(folder:GetChildren()) do
if part:IsA("BasePart") and part.Name == "Part" then
table.insert(parts, part)
end
end
if #parts == 0 then
return
end
local paintData = {}
UUserBlockList()
local uszLPBlockvalue = UserBlockList[BlockType]
local Zonesss = LPTEAM2()
local LNplayer = nil
if game:GetService("Players").LocalPlayer.Settings.ShareBlocks.Value == false then
LNplayer = Nplayer
else
local playerteam = player.Team.Name
local blocktoget = game:GetService("Teams"):FindFirstChild(playerteam).TeamLeader.Value
LNplayer = blocktoget
end
for i = 1, #parts do
if getgenv().ImgLoaderStat == false then
break
end
task.spawn(function()
local part = parts[i]
if not part then
return
end
if getgenv().ImgLoaderStat == false then
return
end
local WORLDPOS = part.Position
local partRot = part.CFrame - part.Position
local newCFrame = CFrame.new(math.random(-69, 69), math.random(-2200000, -120000), math.random(-69, 69))
if getgenv().ImgLoaderStat == false then
return
end
local BuildPath = player.Backpack:FindFirstChild("BuildingTool") or player.Character:FindFirstChild("BuildingTool")
BuildPath.RF:InvokeServer(
BlockType,
uszLPBlockvalue,
workspace:FindFirstChild(Zonesss),
newCFrame,
true
)
end)
end
TASK1 = true
local blocks = workspace.Blocks:FindFirstChild(LNplayer):GetChildren()
while #blocks < #parts do
task.wait(0.5)
blocks = workspace.Blocks:FindFirstChild(LNplayer):GetChildren()
end
for i = 1, #parts do
if getgenv().ImgLoaderStat == false then
break
end
task.spawn(function()
local part = parts[i]
if not part then
return
end
if getgenv().ImgLoaderStat == false then
return
end
local WORLDPOS = part.Position
local partRot = part.CFrame - part.Position
local newwCFrame = CFrame.new(WORLDPOS) * partRot * CFrame.Angles(0, math.rad(90), 0)
local targetBlock = blocks[TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLong + i]
if getgenv().ImgLoaderStat == false then
return
end
local ScalePath = player.Backpack:FindFirstChild("ScalingTool") or player.Character:FindFirstChild("ScalingTool")
ScalePath.RF:InvokeServer(
targetBlock,
Vector3.new(Bdepth, blockSize, blockSize),
newwCFrame
)
end)
end
TASK2 = true
ImgParts = workspace.ImagePreview:GetChildren()
for i = 1, #parts + 1 do
local color = ImgParts[i].Color
table.insert(paintData, {
blocks[TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLong + i - 1],
Color3.new(color.R, color.G, color.B)
})
end
local PaintPath = player.Backpack:FindFirstChild("PaintingTool") or player.Character:FindFirstChild("PaintingTool")
PaintPath.RF:InvokeServer(paintData)
for _, part in ipairs(folder:GetChildren()) do
part:destroy()
end
TASK3 = true
if getgenv().ImgLoaderStat == false then
task.delay(1, function()
Rayfield:Notify({
Title = "Image aborted",
Content = "All unplaced blocks will be deleted",
Duration = 6.5,
Image = 124144713366592,
})
end)
else
task.delay(1, function()
Rayfield:Notify({
Title = "Image successfully loaded",
Content = "You can now use your inventory again",
Duration = 6.5,
Image = 124144713366592,
})
end)
end
task.wait(0.15)
TASK4 = true
local remote = player.Character:FindFirstChild("DeleteTool") or player.Backpack:FindFirstChild("DeleteTool")
for i = 1, #blocks do
task.spawn(function()
local block = blocks[i]
if not block then
return
end
local blockY = block.PrimaryPart and block.PrimaryPart.Position.Y or nil
if blockY and blockY >= -2200000 and blockY <= -120000 then
remote.RF:InvokeServer(blocks[i])
end
end)
end
TASK5 = true
end
function onImgBlockSecChanged()
getgenv().COCO = false
wait(0.1)
getgenv().COCO = true
buildImage()
end
local function buildImagePREVIEW(data, blockSize)
local frameSize = calculateFrameSize(data)
startPosition = LPTEAM() + cooloffset
ImgCenterimage = Centerimage(frameSize, startPosition, blockSize)
local centerImage = workspace.ImagePreview.Centerimage
if not centerImage then
return
end
rotationCFrame = CFrame.Angles(0, math.rad(angleY - 90), 0)
Brainrot = centerImage.CFrame * rotationCFrame
local currentX = startPosition.X
local currentY = startPosition.Y
local currentZ = startPosition.Z
local initialX = startPosition.X
local dataIndex = 1
local centerImage = workspace.ImagePreview.Centerimage
if not centerImage then
return
end
local centerCFrame = centerImage.CFrame
if currentConnection then
currentConnection:Disconnect()
end
currentConnection = RunService.Heartbeat:Connect(function()
local finished = false
for _ = 1, batchSize do
if dataIndex > #data then
finished = true
break
end
local r, g, b = data[dataIndex], data[dataIndex + 1], data[dataIndex + 2]
if r == "B" and g == "B" and b == "B" then
currentX = initialX
currentY = currentY - blockSize
elseif r == "R" and g == "R" and b == "R" then
currentX = currentX + blockSize
elseif type(r) == "number" and type(g) == "number" and type(b) == "number" then
local block = Instance.new("Part")
block.Size = Vector3.new(blockSize, blockSize, Bdepth)
block.Color = Color3.fromRGB(r, g, b)
block.Anchored = true
block.Material = Enum.Material.SmoothPlastic
block.CastShadow = false
block.Parent = previewFolder
local blockPosition = Vector3.new(currentX, currentY, currentZ) + cooloffset
local relativeCFrame = centerCFrame:ToObjectSpace(CFrame.new(blockPosition))
block.CFrame = Brainrot * relativeCFrame
currentX = currentX + blockSize
end
dataIndex += 3
end
if finished then
currentConnection:Disconnect()
currentConnection = nil
end
end)
end
Section = ImageLoader:CreateSection("Import Image")
local ImageLoaderFile = ImageLoader:CreateLabel("Details will be displayed here", 72272740678757, Color3.fromRGB(121, 188, 226), false)
local URL_RESO_VALUE = 4
local TBLOCK = 0
local BLKLD = 0
local FI = 0
local Input = ImageLoader:CreateInput({
Name = "File or Url",
CurrentValue = "",
PlaceholderText = "File/Url",
RemoveTextAfterFocusLost = true,
Flag = "Input1",
Callback = function(Text)
TBLOCK = 0
BLKLD = 0
TempData = {}
USEURL= nil
cooloffset = Vector3.new(0, 0, 0)
Brainrot = CFrame.identity
angleY = 0
rotationCFrame = CFrame.Angles(0, 0, 0)
local fileName = Text .. ".txt"
local filePath = "BABFT/Image/" .. fileName
ImageLoaderFile:Set("Fetching...", 72272740678757, Color3.fromRGB(121, 188, 226), false)
if string.sub(Text, 1, 6) == "https:" then
ImageLoaderFile:Set("Method: URL | Status: Fetching...", 110690411966110, Color3.fromRGB(121, 188, 226), false)
local url = "https://therealasu.pythonanywhere.com/process_image" -- It is useless to DDOS it, all you're going to do is DDOS pythonanywhere which are protected against that, and the server doesn't cost me anything, it's free
local headers = {
["Content-Type"] = "application/json"
}
local function getImageData(imageUrl, resolution)
local body = HttpService:JSONEncode({
image_url = imageUrl,
resolution = resolution
})
local success, result = pcall(function()
return request({
Url = url,
Method = "POST",
Headers = headers,
Body = body
})
end)
if success then
if result.StatusCode == 200 then
local responseData = result.Body
return responseData
else
ImageLoaderFile:Set("Method: URL | Status: Error", 110690411966110, Color3.fromRGB(255, 66, 41), false)
return nil
end
else
ImageLoaderFile:Set("Method: URL | Status: Error", 110690411966110, Color3.fromRGB(255, 66, 41), false)
Rayfield:Notify({
Title = "Error ",
Content = "Could not Fetch data",
Duration = 6.5,
Image = 124144713366592,
})
return nil
end
end
local response = getImageData(Text, URL_RESO_VALUE)
if response then
local success, result = pcall(function()
return HttpService:JSONDecode(response)
end)
if success and result then
if result.error then
ImageLoaderFile:Set("Method: URL | Status: Error", 110690411966110, Color3.fromRGB(255, 66, 41), false)
Rayfield:Notify({
Title = "Error",
Content = "The API may be overloaded OR Url not supported , there's an alternative and a easy fix tutorial in the Discord server",
Duration = 6.5,
Image = 124144713366592,
})
else
USEURL = true
TempData = response
ImageLoaderFile:Set("Method: URL | Status: Fetched | You can enable preview", 110690411966110, Color3.fromRGB(133, 230, 138), false)
Rayfield:Notify({
Title = "Success!",
Content = "Your URL has been converted and is ready to use",
Duration = 6.5,
Image = 124144713366592,
})
end
else
TempData = response
USEURL = true
ImageLoaderFile:Set("Method: URL | Status: Fetched | You can enable preview", 110690411966110, Color3.fromRGB(133, 230, 138), false) -- how the fk
Rayfield:Notify({
Title = "Success!",
Content = "Your URL has been converted and is ready to use",
Duration = 6.5,
Image = 124144713366592,
})
--[[
ImageLoaderFile:Set("Method: URL | Status: Error", 110690411966110, Color3.fromRGB(255, 66, 41), false)
Rayfield:Notify({
Title = "Error",
Content = "Failed to decode the server response. The url may not be supported or valid",
Duration = 6.5,
Image = 124144713366592,
})
]]
end
else
ImageLoaderFile:Set("Method: URL | Status: Error", 110690411966110, Color3.fromRGB(255, 66, 41), false)
Rayfield:Notify({
Title = "Error",
Content = "The API may be overloaded OR Url not supported , there's an alternative and a easy fix tutorial in the Discord server",
Duration = 6.5,
Image = 124144713366592,
})
end
else
USEURL = false
if isfile(filePath) then
FileImage = fileName
ImageLoaderFile:Set("Method: File | Status: Success | You can enable preview", 81435876451920, Color3.fromRGB(133, 230, 138), false)
Rayfield:Notify({
Title = "Success!",
Content = "file: " .. fileName .. " found!",
Duration = 6.5,
Image = 124144713366592,
})
else
FileImage = nil
ImageLoaderFile:Set("Method: File | Status: Error", 81435876451920, Color3.fromRGB(255, 66, 41), false)
Rayfield:Notify({
Title = "Error | File not found",
Content = "Make sure the file " .. fileName .. " exists or the URL is valid, do not put '.txt' in the TextBox",
Duration = 6.5,
Image = 124144713366592,
})
end
end
end,
})
local Input = ImageLoader:CreateInput({
Name = "Resolution [only for URL] [Higher = less blocks]",
CurrentValue = "4",
PlaceholderText = "Number",
RemoveTextAfterFocusLost = false,
Flag = "Input1",
Callback = function(Nb)
URL_RESO_VALUE = tostring(Nb)
end,
})
local Divider = ImageLoader:CreateDivider()
Section = ImageLoader:CreateSection("Preview")
local TogglePreview = ImageLoader:CreateToggle({
Name = "Preview",
CurrentValue = false,
Callback = function(Value)
if Value then
BLKLD = 0
TBLOCK = 0
local filePath = "BABFT/Image/" .. (FileImage or "default.txt")
local fileContent = {}
if USEURL == false then
fileContent = readFile(filePath)
else
fileContent = TempData
end
if not fileContent then return end
local data
data = parseColors(fileContent)
buildImagePREVIEW(data, blockSize)
else
for _, skibidi in ipairs(previewFolder:GetChildren()) do
if skibidi.Name ~= "PreviewSize" then
skibidi:Destroy()
end
end
end
end,
})
local ToggleGrid = ImageLoader:CreateToggle({
Name = "Grid",
CurrentValue = false,
Callback = function(Value)
if Value then
local filePath = "BABFT/Image/" .. (FileImage or "default.txt")
local fileContent = {}
if USEURL == false then
fileContent = readFile(filePath)
else
fileContent = TempData
end
if not fileContent then return end
local data = parseColors(fileContent)
local frameSize = calculateFrameSize(data)
startPosition = LPTEAM()
previewFrame(frameSize, startPosition, blockSize)
else
if PreviewPart then
PreviewPart:Destroy()
PreviewPart = nil
else
Rayfield:Notify({
Title = "Error",
Content = "No file or invalid file",
Duration = 6.5,
Image = 124144713366592,
})
end
end
end,
})
local Slider = ImageLoader:CreateSlider({
Name = "Preview loading speed",
Range = {100, 4000},
Increment = 25,
Suffix = "block/sec",
CurrentValue = 750,
Flag = "",
Callback = function(Value)
batchSize = Value
end,
})
local Divider = ImageLoader:CreateDivider()
Section = ImageLoader:CreateSection("modifiers")
local Dropdown = ImageLoader:CreateDropdown({
Name = "Block Type",
Options = {
"BrickBlock",
"CoalBlock",
"ConcreteBlock",
"FabricBlock",
"GlassBlock",
"GoldBlock",
"GrassBlock",
"IceBlock",
"MarbleBlock",
"MetalBlock",
"NeonBlock",
"ObsidianBlock",
"PlasticBlock",
"RustedBlock",
"SmoothWoodBlock",
"StoneBlock",
"TitaniumBlock",
"ToyBlock",
"WoodBlock"
},
CurrentOption = {"PlasticBlock"},
MultipleOptions = false,
Flag = "",
Callback = function(Options)
BlockType = Options[1]
end,
})
local Input = ImageLoader:CreateInput({
Name = "Move multiplier",
CurrentValue = "45",
PlaceholderText = "number",
RemoveTextAfterFocusLost = false,
Flag = "Input1",
Callback = function(Text)
Unit = tostring(Text)
end,
})
local originalCFrames = {}
local Input = ImageLoader:CreateInput({
Name = "Rotate",
CurrentValue = "0",
PlaceholderText = "0 - 360",
RemoveTextAfterFocusLost = false,
Flag = "",
Callback = function(Text)
angleY = tonumber(Text)
if not angleY then
return
end
local centerImage = workspace.ImagePreview.Centerimage
if not centerImage then
return
end
local rotationCFrame = CFrame.Angles(0, math.rad(angleY), 0)
Brainrot = centerImage.CFrame * rotationCFrame
for _, skibidi in ipairs(previewFolder:GetChildren()) do
if skibidi:IsA("BasePart") and skibidi ~= centerImage then
local centerCFrame = centerImage.CFrame
if not originalCFrames[skibidi] then
originalCFrames[skibidi] = skibidi.CFrame
end
local originalCFrame = originalCFrames[skibidi]
local relativeCFrame = centerCFrame:ToObjectSpace(originalCFrame)
local ghaaa = centerCFrame * rotationCFrame * relativeCFrame
skibidi.CFrame = ghaaa
end
end
end,
})
local Input = ImageLoader:CreateInput({
Name = "Block Depth",
CurrentValue = "2",
PlaceholderText = "Value",
RemoveTextAfterFocusLost = false,
Flag = "",
Callback = function(Text)
Bdepth = tonumber(Text)
for _, skibidi in ipairs(previewFolder:GetChildren()) do
skibidi.Size = Vector3.new(skibidi.Size.X, skibidi.Size.Y, Bdepth)
end
end,
})
local Slider = ImageLoader:CreateSlider({
Name = "Size",
Range = {0.1, 10},
Increment = 0.1,
Suffix = "x",
CurrentValue = 2,
Flag = "",
Callback = function(Value)
blockSize = Value
end,
})
local Button = ImageLoader:CreateButton({
Name = "Move +X",
Callback = function()
for _, skibidi in ipairs(previewFolder:GetChildren()) do
skibidi.Position = skibidi.Position + Vector3.new(Unit, 0, 0)
end
cooloffset = cooloffset + Vector3.new(Unit, 0, 0)
end,
})
local Button = ImageLoader:CreateButton({
Name = "Move -X",
Callback = function()
for _, skibidi in ipairs(previewFolder:GetChildren()) do
skibidi.Position = skibidi.Position + Vector3.new(-Unit, 0, 0)
end
cooloffset = cooloffset + Vector3.new(-Unit, 0, 0)
end,
})
local Button = ImageLoader:CreateButton({
Name = "Move +Y",
Callback = function()
for _, skibidi in ipairs(previewFolder:GetChildren()) do
skibidi.Position = skibidi.Position + Vector3.new(0, Unit, 0)
end
cooloffset = cooloffset + Vector3.new(0, Unit, 0)
end,
})
local Button = ImageLoader:CreateButton({
Name = "Move -Y",
Callback = function()
for _, skibidi in ipairs(previewFolder:GetChildren()) do
skibidi.Position = skibidi.Position + Vector3.new(0, -Unit, 0)
end
cooloffset = cooloffset + Vector3.new(0, -Unit, 0)
end,
})
local Button = ImageLoader:CreateButton({
Name = "Move +Z",
Callback = function()
for _, skibidi in ipairs(previewFolder:GetChildren()) do
skibidi.Position = skibidi.Position + Vector3.new(0, 0, Unit)
end
cooloffset = cooloffset + Vector3.new(0, 0, Unit)
end,
})
local Button = ImageLoader:CreateButton({
Name = "Move -Z",
Callback = function()
for _, skibidi in ipairs(previewFolder:GetChildren()) do
skibidi.Position = skibidi.Position + Vector3.new(0, 0, -Unit)
end
cooloffset = cooloffset + Vector3.new(0, 0, -Unit)
end,
})
local Divider = ImageLoader:CreateDivider()
local TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLongButThisOneChangeLol = 0
local TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLongButThisOneDoesntChangeLol = 0
local ImgStatsP = ImageLoader:CreateParagraph({Title = "Information", Content = "Require PaintTool and ScalingTool"})
local Button = ImageLoader:CreateButton({
Name = "Build Image | Preview must be enabled",
Callback = function()
Rayfield:Notify({
Title = "Image Loader",
Content = "DO NOT place blocks until finished",
Duration = 10,
Image = 124144713366592,
})
TBLOCK = 0
TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLong = 0
local blocksFolder = workspace:FindFirstChild("Blocks")
if blocksFolder then
local blockssFolder = blocksFolder:FindFirstChild(Nplayer)
if blockssFolder then
TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLong = #blockssFolder:GetChildren()
TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLongButThisOneDoesntChangeLol = #blockssFolder:GetChildren()
local parts = {}
local folder = workspace:FindFirstChild("ImagePreview")
for _, part in ipairs(folder:GetChildren()) do
if part:IsA("BasePart") and part.Name == "Part" then
table.insert(parts, part)
end
end
TBLOCK = #parts
else
Rayfield:Notify({
Title = "Error",
Content = "Folder not found, try rejoin",
Duration = 6.5,
Image = 124144713366592,
})
end
else
Rayfield:Notify({
Title = "Error",
Content = "Folder not found, try rejoin",
Duration = 6.5,
Image = 124144713366592,
})
end
BlockLoaded = false
getgenv().ImgLoaderStat = true
task.spawn(buildImageFAST)
end,
})
local Button = ImageLoader:CreateButton({
Name = "Abort",
Callback = function()
getgenv().ImgLoaderStat = false
Rayfield:Notify({
Title = "Abortion request",
Content = "the next task will not be applied, note that this button is only useful during the task where blocks are loaded",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
local Label = ImageLoader:CreateLabel("Building speed will also depend on your ping. You can crash if your wifi speed is too slow.", 134637165939940, Color3.fromRGB(204, 156, 0), true)
local Label = ImageLoader:CreateLabel("the image may not load if many blocks have already been placed, I have to fix this", 134637165939940, Color3.fromRGB(204, 156, 0), true)
function ImgStats()
local startTime = tick()
while true do
local blocksFolder = workspace:FindFirstChild("Blocks")
local blockssFolder = blocksFolder:FindFirstChild(Nplayer)
local totalBlocks = #blockssFolder:GetChildren()
local BLKLD = totalBlocks - TotalBlockInBlocksFolderBeforeBuildImageInitYesThisVarIsVeryLongButThisOneDoesntChangeLol
local elapsedTime = tick() - startTime
local blocksPerSecond = BLKLD / elapsedTime
local blocksRemaining = TBLOCK - BLKLD
local timeRemaining = blocksRemaining / blocksPerSecond
local FI = math.max(timeRemaining, 0)
if not BlockLoaded then
ImgStatsP:Set({
Title = "Information",
Content = "Blocks Loaded: "..BLKLD.."/"..TBLOCK..
"\nFinish in: " .. math.floor(FI) .. "s"
})
if BLKLD >= TBLOCK then
BlockLoaded = true
end
end
task.wait(1.2)
end
end
function ImgStats2()
while true do
if BlockLoaded then
if TASK1 then
ImgStatsP:Set({
Title = "Information",
Content = "Blocks Loaded!\nPlacing Blocks..."
})
TASK1 = false
elseif TASK2 then
ImgStatsP:Set({
Title = "Information",
Content = "Blocks Loaded!\nPlacing Blocks..."
})
TASK2 = false
elseif TASK3 then
ImgStatsP:Set({
Title = "Information",
Content = "Blocks Loaded!\nBlocks Placed!\nColoring Blocks..."
})
TASK3 = false
elseif TASK4 then
ImgStatsP:Set({
Title = "Information",
Content = "Blocks Loaded!\nBlocks Placed!\nBlocks Colored!\ndeleting unplaced blocks..."
})
TASK4 = false
elseif TASK5 then
ImgStatsP:Set({
Title = "Information",
Content = "Blocks Loaded!\nBlocks Placed!\nBlocks Colored!\nUnplaced blocks deleted!\nProcess end"
})
TASK5 = false
end
end
wait(0.2)
end
end
local initimgfilesbool = false
function initimgfiles()
while initimgfilesbool == true do
updateImageFiles()
wait(1)
end
end
--AUTO BUILD
local Label = AutoBuild:CreateLabel("Check the Information tab to use this feature", 134637165939940, Color3.fromRGB(204, 156, 0), true)
local Label = AutoBuild:CreateLabel("THIS FEATURE IS IN WIP - it's not working right now", 134637165939940, Color3.fromRGB(204, 31, 0), true)
local Divider = AutoBuild:CreateDivider()
--[[
Section = AutoBuild:CreateSection("Steal Build")
local Dropdown = AutoBuild:CreateDropdown({
Name = "Target Player",
Options = {"Option 1","Option 2"},
CurrentOption = {"Option 1"},
MultipleOptions = false,
Flag = "Dropdown1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
Callback = function(Options)
-- The function that takes place when the selected option is changed
-- The variable (Options) is a table of strings for the current selected options
end,
})
local Input = AutoBuild:CreateInput({
Name = "Build Name",
CurrentValue = "",
PlaceholderText = "Name",
RemoveTextAfterFocusLost = false,
Flag = "Input1",
Callback = function(Text)
-- The function that takes place when the input is changed
-- The variable (Text) is a string for the value in the text box
end,
})
local Button = AutoBuild:CreateButton({
Name = "Save",
Callback = function()
-- The function that takes place when the button is pressed
end,
})
local Divider = AutoBuild:CreateDivider()
Section = AutoBuild:CreateSection("Auto Build")
local Dropdown = AutoBuild:CreateDropdown({
Name = "Build File",
Options = {"Option 1","Option 2"},
CurrentOption = {"Option 1"},
MultipleOptions = false,
Flag = "Dropdown1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
Callback = function(Options)
-- The function that takes place when the selected option is changed
-- The variable (Options) is a table of strings for the current selected options
end,
})
local Toggle = AutoBuild:CreateToggle({
Name = "Preview",
CurrentValue = false,
Flag = "Toggle1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
Callback = function(Value)
-- The function that takes place when the toggle is pressed
-- The variable (Value) is a boolean on whether the toggle is true or false
end,
})
local Toggle = AutoBuild:CreateToggle({
Name = "Safe Mode",
CurrentValue = false,
Flag = "Toggle1", -- A flag is the identifier for the configuration file, make sure every element has a different flag if you're using configuration saving to ensure no overlaps
Callback = function(Value)
-- The function that takes place when the toggle is pressed
-- The variable (Value) is a boolean on whether the toggle is true or false
end,
})
local Button = AutoBuild:CreateButton({
Name = "Load",
Callback = function()
-- The function that takes place when the button is pressed
end,
})
]]
local Paragraph = BlockNeeded:CreateParagraph({Title = "Important", Content = "Preview mode must be enabled to calculate the number of blocks required"})
local Divider = BlockNeeded:CreateDivider()
Section = BlockNeeded:CreateSection("Image Loader")
local LblBlockNeeded = BlockNeeded:CreateLabel("No block found", 72272740678757, Color3.fromRGB(255, 255, 255), true)
local Divider = BlockNeeded:CreateDivider()
Section = BlockNeeded:CreateSection("Auto Build")
local Label = BlockNeeded:CreateLabel("THIS FEATURE IS IN WIP", 134637165939940, Color3.fromRGB(204, 31, 0), true)
local Divider = BlockNeeded:CreateDivider()
local NbBlockneeded = 0
local NbBlockmissing = 0
local Button = BlockNeeded:CreateButton({
Name = "Refresh List",
Callback = function()
NbBlockneeded = 0
local blocktypeID = BlockId[BlockType]
for _, skibidi in ipairs(workspace.ImagePreview:GetChildren()) do
if skibidi.Name == "Part" then
local blockVolume = skibidi.Size.X * skibidi.Size.Y * skibidi.Size.Z
local blockSize = (blockVolume < 8) and 8 or blockVolume
NbBlockneeded = NbBlockneeded + blockSize
end
end
UUserBlockList()
LPBlockvalue = UserBlockList[BlockType]
NbBlockneeded = math.ceil(NbBlockneeded / 8)
NbBlockmissing = NbBlockneeded - LPBlockvalue
if NbBlockmissing < 0 then
NbBlockmissing = 0
end
LblBlockNeeded:Set("Need " .. tostring(NbBlockneeded) .. " " .. BlockType .. " and " .. tostring(NbBlockmissing) .. " blocks are missing", blocktypeID, Color3.fromRGB(255, 255, 255), true)
end,
})
Section = Miscellaneous:CreateSection("Teleportation")
local Button = Miscellaneous:CreateButton({
Name = "White",
Callback = function()
game.Players.LocalPlayer.Character:SetPrimaryPartCFrame(CFrame.new(-49.8510132, -9.7000021, -520.37085, -1, 0, 0, 0, 1, 0, 0, 0, -1))
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Black",
Callback = function()
game.Players.LocalPlayer.Character:SetPrimaryPartCFrame(CFrame.new(-503.82843, -9.7000021, -69.433342, 0, 0, -1, 0, 1, 0, 1, 0, 0))
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Red",
Callback = function()
game.Players.LocalPlayer.Character:SetPrimaryPartCFrame(CFrame.new(396.697418, -9.7000021, -64.7801361, 0, 0, 1, 0, 1, -0, -1, 0, 0))
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Blue",
Callback = function()
game.Players.LocalPlayer.Character:SetPrimaryPartCFrame(CFrame.new(396.697418, -9.7000021, 300.219849, 0, 0, 1, 0, 1, -0, -1, 0, 0))
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Magenta",
Callback = function()
game.Players.LocalPlayer.Character:SetPrimaryPartCFrame(CFrame.new(396.697418, -9.7000021, 647.219849, 0, 0, 1, 0, 1, -0, -1, 0, 0))
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Yellow",
Callback = function()
game.Players.LocalPlayer.Character:SetPrimaryPartCFrame(CFrame.new(-503.82843, -9.7000021, 640.56665, 0, 0, -1, 0, 1, 0, 1, 0, 0))
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Green",
Callback = function()
game.Players.LocalPlayer.Character:SetPrimaryPartCFrame(CFrame.new(-503.82843, -9.7000021, 293.56665, 0, 0, -1, 0, 1, 0, 1, 0, 0))
end,
})
Section = Miscellaneous:CreateSection("Troll")
local Button = Miscellaneous:CreateButton({
Name = "Disable Maximum click detector distance",
Callback = function()
for _, object in ipairs(game:GetDescendants()) do
if object:IsA("ClickDetector") then
object.MaxActivationDistance = 9995649849899589
end
end
Rayfield:Notify({
Title = "Maximum click detector distance Disabled!",
Content = "You can click on a lever, button, etc.. from anywhere",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Force Share Mode",
Callback = function()
local args = {
[1] = "ShareBlocks",
[2] = true
}
workspace.SettingFunction:InvokeServer(unpack(args))
Rayfield:Notify({
Title = "Share Mode",
Content = "you can use leader's blocks now",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
local Button = Miscellaneous:CreateButton({
Name = "disable Share Mode",
Callback = function()
local args = {
[1] = "ShareBlocks",
[2] = false
}
workspace.SettingFunction:InvokeServer(unpack(args))
Rayfield:Notify({
Title = "Share Mode",
Content = "Share Mode is disabled",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Color all blocks",
Callback = function()
local playerteam = player.Team.Name
local blocktoget = game:GetService("Teams"):FindFirstChild(playerteam).TeamLeader.Value
local playerFolder = game.Workspace.Blocks:FindFirstChild(blocktoget)
local paintData = {}
local totalBlocks = #playerFolder:GetChildren()
for _, block in ipairs(playerFolder:GetChildren()) do
local color = Color3.new(
math.random(0, 1000) / 1000,
math.random(0, 1000) / 1000,
math.random(0, 1000) / 1000
)
table.insert(paintData, {
block,
color
})
if #paintData >= 10000 then
game:GetService("Players").LocalPlayer.Backpack.PaintingTool.RF:InvokeServer(paintData)
paintData = {}
end
end
if #paintData > 0 then
game:GetService("Players").LocalPlayer.Backpack.PaintingTool.RF:InvokeServer(paintData)
end
end,
})
local Toggle = Miscellaneous:CreateToggle({
Name = "Loop Color all blocks",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
while Value do
if Value then
local playerteam = player.Team.Name
local blocktoget = game:GetService("Teams"):FindFirstChild(playerteam).TeamLeader.Value
local playerFolder = game.Workspace.Blocks:FindFirstChild(blocktoget)
local paintData = {}
local totalBlocks = #playerFolder:GetChildren()
for _, block in ipairs(playerFolder:GetChildren()) do
local color = Color3.new(
math.random(0, 1000) / 1000,
math.random(0, 1000) / 1000,
math.random(0, 1000) / 1000
)
table.insert(paintData, {
block,
color
})
if #paintData >= 10000 then
game:GetService("Players").LocalPlayer.Backpack.PaintingTool.RF:InvokeServer(paintData)
paintData = {}
end
end
if #paintData > 0 then
game:GetService("Players").LocalPlayer.Backpack.PaintingTool.RF:InvokeServer(paintData)
end
task.wait()
end
end
end,
})
local FStats = Miscellaneous:CreateParagraph({Title = "Info", Content = "The button above will colors all the player's blocks with random colors (if sharing mode enable, it will color the team leader's blocks, it also works when you are the leader), if it doesn't stop, use the paint tool, it will stop the script"})
local function removeLock()
local Teams = {"BlackZone", "CamoZone", "MagentaZone", "New YellerZone", "Really blueZone", "Really redZone", "WhiteZone"}
for _, teamName in ipairs(Teams) do
local teamPart = workspace:FindFirstChild(teamName)
if teamPart then
local lockFolder = teamPart:FindFirstChild("Lock")
if lockFolder then
lockFolder:Destroy()
end
end
end
end
local previousPosition = nil
local counterIsoMODE = false
local function trackPlayerPosition()
while FcMaster == true do
if counterIsoMODE then
removeLock()
local character = player.Character
if character then
local humanoidRootPart = character:FindFirstChild("HumanoidRootPart")
if humanoidRootPart then
previousPosition = humanoidRootPart.CFrame
end
end
end
task.wait(.1)
end
end
local function onCharacterAdded(character)
if counterIsoMODE then
local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
if previousPosition then
humanoidRootPart.CFrame = previousPosition
end
end
end
player.CharacterAdded:Connect(onCharacterAdded)
task.spawn(trackPlayerPosition)
local Toggle = Miscellaneous:CreateToggle({
Name = "Counter Isolation Mode",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
counterIsoMODE = Value
if counterIsoMODE then
Rayfield:Notify({
Title = "Counter Isolation Mode",
Content = "you will reappear where you died",
Duration = 6.5,
Image = 124144713366592,
})
else
Rayfield:Notify({
Title = "Counter Isolation Mode",
Content = "you will no longer reappear where you died",
Duration = 6.5,
Image = 124144713366592,
})
end
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Disable Blocks zone restriction for quest",
Callback = function()
workspace:FindFirstChild(LPTEAM2()).QuestNum.Value = 0
Rayfield:Notify({
Title = "Blocks restriction",
Content = "the restriction zone is disabled",
Duration = 6.5,
Image = 124144713366592,
})
end,
})
Section = Miscellaneous:CreateSection("FPS Booster")
local Button = Miscellaneous:CreateButton({
Name = "Remove All Texture",
Callback = function()
for _, obj in ipairs(game:GetDescendants()) do
if obj:IsA("Texture") or obj:IsA("Decal") then
obj:Destroy()
end
if obj:IsA("BasePart") then
obj.Material = Enum.Material.SmoothPlastic
end
end
end,
})
local Toggle = Miscellaneous:CreateToggle({
Name = "Hide useless parts",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
if Value then
workspace.MainTerrain.Parent = game:GetService("ReplicatedStorage")
else
game:GetService("ReplicatedStorage").MainTerrain.Parent = workspace
end
end,
})
local Toggle = Miscellaneous:CreateToggle({
Name = "Hide players blocks",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
if Value then
workspace.Blocks.Parent = game:GetService("ReplicatedStorage")
else
game:GetService("ReplicatedStorage").Blocks.Parent = workspace
end
end,
})
local Toggle = Miscellaneous:CreateToggle({
Name = "Hide All [Optimized for Auto Farm]",
CurrentValue = false,
Flag = "Toggle1",
Callback = function(Value)
local Stuff = {
"Blocks",
"Challenge",
"TempStuff",
"Teams",
"MainTerrain",
"OtherStages",
"BlackZone",
"CamoZone",
"MagentaZone",
"New YellerZone",
"Really blueZone",
"Really redZone",
"Sand",
"Water",
"WhiteZone",
"WaterMask"
}
if Value then
for _, v in ipairs(Stuff) do
local object = workspace:FindFirstChild(v) or workspace.BoatStages:FindFirstChild("OtherStages")
if object then
object.Parent = game:GetService("ReplicatedStorage")
end
end
else
for _, v in ipairs(Stuff) do
local object = game:GetService("ReplicatedStorage"):FindFirstChild(v)
if object then
if v == "OtherStages" then
game:GetService("ReplicatedStorage").OtherStages.Parent = workspace.BoatStages
else
object.Parent = workspace
end
end
end
end
end,
})
local spoofSpeed = 40
Section = Miscellaneous:CreateSection("Spoofer")
local Slider = Miscellaneous:CreateSlider({
Name = "Wheel Speed",
Range = {10, 1000},
Increment = 10,
Suffix = " - MaxSpeed",
CurrentValue = 40,
Flag = "Slider1",
Callback = function(Value)
spoofSpeed = Value
end,
})
local Button = Miscellaneous:CreateButton({
Name = "Spoof speed",
Callback = function()
local itcihmsoeoesoes = workspace.Blocks:FindFirstChild(Nplayer)
if itcihmsoeoesoes then
for _, model in ipairs(itcihmsoeoesoes:GetChildren()) do
if model:IsA("Model") then
local maxSpeed = model:FindFirstChild("MaxSpeed")
if maxSpeed and maxSpeed:IsA("NumberValue") then
maxSpeed.Value = spoofSpeed
end
end
end
end
end,
})
Section = Miscellaneous:CreateSection("Teleport to Place")
local Button = Miscellaneous:CreateButton({
Name = "Inner Cloud",
Callback = function()
TeleportService:Teleport(1930863474, game.Players.LocalPlayer)
end,
})
Button = Miscellaneous:CreateButton({
Name = "Christmas",
Callback = function()
TeleportService:Teleport(1930866268, game.Players.LocalPlayer)
end,
})
local function Init()
local initclock = coroutine.create(initclock)
local ImgStats = coroutine.create(ImgStats)
local initimgfiles = coroutine.create(initimgfiles)
local ImgStats2 = coroutine.create(ImgStats2)
coroutine.resume(initclock)
coroutine.resume(ImgStats)
coroutine.resume(initimgfiles)
coroutine.resume(ImgStats2)
end
zdzddz = Miscellaneous:CreateButton({
Name = "Halloween [maybe need an anti-kick]",
Callback = function()
TeleportService:Teleport(1930665568, game.Players.LocalPlayer) -- WARNING: YOU WILL GET KICKED WHEN YOU JOIN IT, need to try with a client-sided anti kick
end,
})
-- queueteleport(loadstring(game:HttpGet('https://raw.githubusercontent.com/TheRealAsu/BABFT/refs/heads/main/Source.lua'))())
--[[
]]
Init()



Make the auto build tab visible
Doesnt work