Jumping off the same cliff for the hundredth time gets old fast, which is why using a Broken Bones IV script helps skip the repetitive grind and makes launching your character way more fun.
This classic ragdoll physics simulator is all about jumping off massive drops to break as many bones as possible, earning cash to unlock new levels, gear, and upgrades.
If you want to automate your falls and track your stats without all the manual hassle, check out the working script below.
Broken Bones IV Script – Horizon Hub
--[=[
██╗ ██╗ ██████╗ ██████╗ ██╗███████╗ ██████╗ ███╗ ██╗
██║ ██║██╔═══██╗██╔══██╗██║╚══███╔╝██╔═══██╗████╗ ██║
███████║██║ ██║██████╔╝██║ ███╔╝ ██║ ██║██╔██╗ ██║
██╔══██║██║ ██║██╔══██╗██║ ███╔╝ ██║ ██║██║╚██╗██║
██║ ██║╚██████╔╝██║ ██║██║███████╗╚██████╔╝██║ ╚████║
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═══╝
H O R I Z O N H U B
OPEN SOURCE PROJECT
────────────────────────────────────────────────────────
ORIGINAL PROJECT : HORIZON HUB
RELEASE TYPE : OPEN SOURCE
ATTRIBUTION : PLEASE PRESERVE THE ORIGINAL CREDITS
This script is released to the community by Horizon Hub.
Built with dedication. Shared for the community.
You are welcome to study, learn from, and modify this code
in accordance with the terms of the applicable license.
Please give credit to Horizon Hub when redistributing
or publishing modified versions of this project.
────────────────────────────────────────────────────────
HORIZON HUB © 2026
BUILT DIFFERENT. BUILT TO LAST.
]=]
local WindUI = nil
local WindUIOk = pcall(function()
WindUI = loadstring(game:HttpGet("https://raw.githubusercontent.com/Footagesus/WindUI/main/dist/main.lua"))()
end)
if not WindUIOk or not WindUI then warn("Horizon Hub: WindUI failed to load, check your internet connection."); return end
local Players = game:GetService("Players")
local RunService = game:GetService("RunService")
local TweenService = game:GetService("TweenService")
local Debris = game:GetService("Debris")
local LocalPlayer = Players.LocalPlayer
local Red = Color3.fromHex("#FF4040")
local Orange = Color3.fromHex("#FF8C00")
local Green = Color3.fromHex("#10C550")
local Blue = Color3.fromHex("#3B9EFF")
local Purple = Color3.fromHex("#7775F2")
local Yellow = Color3.fromHex("#ECA201")
local Grey = Color3.fromHex("#A0A0A0")
local White = Color3.fromHex("#FFFFFF")
local notificationsEnabled = true
local showEffects = true
local effectSize = 3
local function getHRP()
local char = LocalPlayer.Character
return char and char:FindFirstChild("HumanoidRootPart")
end
local function getRoot()
return LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
end
local function notify(title, content, icon, duration)
if not notificationsEnabled then return end
WindUI:Notify({
Title = title,
Content = content,
Icon = icon or "solar:bell-bold",
Duration = duration or 3,
})
end
pcall(function()
local mt = getrawmetatable(game)
local oldNamecall = mt.__namecall
setreadonly(mt, false)
mt.__namecall = newcclosure(function(self, ...)
local method = getnamecallmethod()
if method == "Kick" then return end
return oldNamecall(self, ...)
end)
setreadonly(mt, true)
end)
local breaker = {
active = false,
mode = "FAST",
power = 1,
totalBones = 0,
maxDamage = 0,
dps = 0
}
local modeSettings = {
["FAST"] = { vel = 150, int = 0.3, cnt = 1 },
["POWER"] = { vel = 350, int = 1, cnt = 1 },
["COMBO"] = { vel = 200, int = 0.15, cnt = 5 }
}
local function createEffect(pos)
if not showEffects then return end
local p = Instance.new("Part")
p.Size = Vector3.new(0.5, 0.5, 0.5)
p.Position = pos
p.Anchored = true
p.CanCollide = false
p.Material = Enum.Material.Neon
p.Color = Color3.fromRGB(220, 38, 38)
p.Transparency = 0.3
p.Parent = workspace
task.spawn(function()
task.wait(0.5)
pcall(function() p:Destroy() end)
end)
pcall(function()
TweenService:Create(p, TweenInfo.new(0.5), { Size = Vector3.new(effectSize, effectSize, effectSize), Transparency = 1 }):Play()
end)
end
local function performHit()
local root = getRoot()
if not root then return end
local settings = modeSettings[breaker.mode]
if not settings then return end
local velocity = settings.vel * breaker.power
local ray = Ray.new(root.Position, root.CFrame.LookVector * 20)
local hit, pos = workspace:FindPartOnRayWithIgnoreList(ray, { LocalPlayer.Character })
if hit then
createEffect(pos)
local bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(100000, 100000, 100000)
bv.Velocity = root.CFrame.LookVector * velocity
bv.Parent = root
Debris:AddItem(bv, 0.1)
breaker.totalBones = breaker.totalBones + 1
if velocity > breaker.maxDamage then
breaker.maxDamage = math.floor(velocity)
end
end
end
local lastHit = tick()
local dmgCount = 0
local lastDmgCheck = tick()
local connection = nil
local function autoLoop()
if not breaker.active then return end
if not getRoot() then return end
local now = tick()
local settings = modeSettings[breaker.mode]
if not settings then return end
if now - lastHit >= settings.int then
for i = 1, settings.cnt do
performHit()
if settings.cnt > 1 then task.wait(0.05) end
end
lastHit = now
dmgCount = dmgCount + 1
end
if now - lastDmgCheck >= 1 then
breaker.dps = dmgCount
dmgCount = 0
lastDmgCheck = now
end
end
local function startFarm()
if not breaker.active then
breaker.active = true
if connection then pcall(function() connection:Disconnect() end) end
connection = RunService.Heartbeat:Connect(autoLoop)
end
end
local function stopFarm()
if breaker.active then
breaker.active = false
if connection then
pcall(function() connection:Disconnect() end)
connection = nil
end
end
end
local posLockActive = false
local lockedCFrame = nil
local posLockConn = nil
local Window = WindUI:CreateWindow({
Title = "Horizon Hub",
SubTitle = "Bone Breaker Edition",
TabWidth = 160,
Size = UDim2.fromOffset(580, 460),
Folder = "HorizonHub",
Theme = "Midnight",
Themeable = { Background = false },
HidePanelBackground = true,
NewElements = false,
HideSearchBar = false,
Icon = "solar:shield-check-bold-duotone",
Topbar = { Height = 44, ButtonsType = "Default" },
OpenButton = {
Title = "Horizon Hub",
CornerRadius = UDim.new(1, 0),
StrokeThickness = 2,
Enabled = true,
Draggable = true,
OnlyMobile = false,
Scale = 1.15,
Color = ColorSequence.new(
Color3.fromHex("#FF6B6B"),
Color3.fromHex("#FF8E53")
),
},
User = {
Enabled = true,
Anonymous = false,
Callback = function()
WindUI:Notify({
Title = "Profile",
Content = LocalPlayer.DisplayName .. " • @" .. LocalPlayer.Name,
Icon = "solar:user-bold",
Duration = 3,
})
end,
},
})
pcall(function() Window:SetPanelBackground(false) end)
Window:Tag({ Title = "v1.2", Icon = "solar:tag-bold", Color = Purple, Border = true })
local fpsTag = Window:Tag({ Title = "FPS: --", Icon = "solar:cpu-bolt-bold", Color = Green, Border = true })
local pingTag = Window:Tag({ Title = "Ping: --ms", Icon = "solar:radar-bold", Color = Yellow, Border = true })
Window:Tag({ Title = "✦ Premium Quality", Icon = "solar:shield-check-bold", Color = Purple, Border = true })
task.spawn(function()
while true do
task.wait(1)
local fps = math.floor(1 / RunService.Heartbeat:Wait())
local ok, ping = pcall(function()
return game:GetService("Stats").Network.ServerStatsItem["Data Ping"]:GetValue()
end)
fpsTag:SetTitle("FPS: " .. fps)
pingTag:SetTitle("Ping: " .. (ok and math.floor(ping) or "??") .. "ms")
end
end)
local FarmSection = Window:Section({ Title = "Farm" })
local TeleportSection = Window:Section({ Title = "Teleport" })
local InterfaceSection = Window:Section({ Title = "Interface" })
local SettingsSection = Window:Section({ Title = "Settings" })
local StrikeTab = FarmSection:Tab({
Title = "Auto Strike",
Desc = "Core bone breaker automation",
Icon = "solar:bone-broken-bold",
IconColor = Red,
IconShape = "Square",
Border = true,
})
StrikeTab:Paragraph({
Title = "Bone Breaker Strike Center",
Desc = "Choose a strike mode, tune your power, then start farming. Every hit uses forward velocity impact.",
Image = "solar:bone-broken-bold",
ImageSize = 36,
})
StrikeTab:Space()
local ModeSection = StrikeTab:Section({
Title = "Strike Mode",
Desc = "Select how the breaker hits. Each mode has unique velocity and interval.",
Box = true,
BoxBorder = true,
Opened = true,
})
local intervalPara = ModeSection:Paragraph({
Title = "Current Interval",
Desc = "Interval: 0.3 sec | Hits per cycle: 1",
Image = "solar:clock-circle-bold",
ImageSize = 28,
})
ModeSection:Space()
local modeDropdown = ModeSection:Dropdown({
Flag = "StrikeMode",
Title = "Strike Mode",
Desc = "FAST many hits, POWER max damage, COMBO hit series.",
Icon = "solar:target-bold",
IconColor = Red,
Values = { "FAST", "POWER", "COMBO" },
Value = "FAST",
Callback = function(val)
breaker.mode = val
local s = modeSettings[val]
if s and intervalPara and intervalPara.SetDesc then
intervalPara:SetDesc("Interval: " .. tostring(s.int) .. " sec | Hits per cycle: " .. tostring(s.cnt))
end
notify("Strike Mode", "Mode set to " .. tostring(val), "solar:target-bold")
end,
})
ModeSection:Space()
ModeSection:Toggle({
Flag = "ShowHitEffects",
Title = "Show Hit Effects",
Desc = "Display neon impact effect on every successful hit.",
Icon = "solar:stars-bold",
IconColor = Yellow,
Type = "Checkbox",
Value = true,
Callback = function(state)
showEffects = state
notify("Effects", state and "Hit effects enabled." or "Hit effects disabled.", "solar:stars-bold")
end,
})
StrikeTab:Space()
local PowerSection = StrikeTab:Section({
Title = "Strike Power",
Desc = "Fine tune velocity multiplier and visual impact size.",
Box = true,
BoxBorder = true,
Opened = true,
})
PowerSection:Slider({
Flag = "StrikePower",
Title = "Strike Power",
Desc = "Velocity multiplier from 10 percent to 200 percent.",
Icon = "solar:bolt-bold",
IconColor = Orange,
IsTooltip = true,
IsTextbox = true,
Icons = { From = "sfsymbols:sunMinFill", To = "sfsymbols:sunMaxFill" },
Step = 1,
Value = { Min = 10, Max = 200, Default = 100 },
Callback = function(v)
breaker.power = v / 100
notify("Strike Power", "Power set to " .. tostring(v) .. "%", "solar:bolt-bold")
end,
})
PowerSection:Space()
PowerSection:Slider({
Flag = "EffectSize",
Title = "Effect Size",
Desc = "Size of the neon impact effect on hit.",
Icon = "solar:maximize-bold",
IconColor = Purple,
IsTooltip = true,
IsTextbox = true,
Icons = { From = "sfsymbols:sunMinFill", To = "sfsymbols:sunMaxFill" },
Step = 1,
Value = { Min = 1, Max = 10, Default = 3 },
Callback = function(v)
effectSize = v
notify("Effect Size", "Effect size set to " .. tostring(v), "solar:maximize-bold")
end,
})
StrikeTab:Space()
local ControlSection = StrikeTab:Section({
Title = "Automation Control",
Desc = "Start, stop, and automate the bone breaking loop.",
Box = true,
BoxBorder = true,
Opened = true,
})
ControlSection:Toggle({
Flag = "AutoStrike",
Title = "Auto Strike",
Desc = "Automatically perform strikes using the selected mode.",
Icon = "solar:play-bold",
IconColor = Green,
Value = false,
Callback = function(state)
if state then
startFarm()
notify("Auto Strike", "Auto strike enabled on " .. breaker.mode .. " mode.", "solar:play-bold")
else
stopFarm()
notify("Auto Strike", "Auto strike disabled.", "solar:stop-bold")
end
end,
})
ControlSection:Space()
ControlSection:Toggle({
Flag = "AutoFarmSync",
Title = "Auto Farm Sync",
Desc = "Secondary automation mirror for config saving.",
Icon = "solar:refresh-bold",
IconColor = Orange,
Type = "Checkbox",
Value = false,
Callback = function(state)
if state then
startFarm()
notify("Auto Farm", "Auto farm sync enabled.", "solar:refresh-bold")
else
stopFarm()
notify("Auto Farm", "Auto farm sync disabled.", "solar:refresh-bold")
end
end,
})
StrikeTab:Space()
local StrikeGroup = StrikeTab:Group({})
StrikeGroup:Button({
Title = "Start",
Desc = "Start the strike loop.",
Icon = "solar:play-circle-bold",
IconColor = Green,
Color = Green,
Justify = "Center",
Callback = function()
startFarm()
notify("Strike", "Strike loop started.", "solar:play-circle-bold")
end,
})
StrikeGroup:Space()
StrikeGroup:Button({
Title = "Stop",
Desc = "Stop the strike loop.",
Icon = "solar:stop-circle-bold",
IconColor = Red,
Color = Red,
Justify = "Center",
Callback = function()
stopFarm()
notify("Strike", "Strike loop stopped.", "solar:stop-circle-bold")
end,
})
StrikeTab:Space()
local ManualGroup = StrikeTab:Group({})
ManualGroup:Button({
Title = "Single Hit",
Desc = "Perform one manual strike now.",
Icon = "solar:sledgehammer-bold",
IconColor = Yellow,
Color = Orange,
Justify = "Center",
Callback = function()
performHit()
notify("Manual Hit", "Single strike executed.", "solar:sledgehammer-bold")
end,
})
ManualGroup:Space()
ManualGroup:Button({
Title = "Reset Counters",
Desc = "Reset bones, max velocity and hits per second.",
Icon = "solar:restart-bold",
IconColor = Grey,
Color = Grey,
Justify = "Center",
Callback = function()
breaker.totalBones = 0
breaker.maxDamage = 0
breaker.dps = 0
notify("Statistics", "All counters reset.", "solar:restart-bold")
end,
})
local StatsTab = FarmSection:Tab({
Title = "Statistics",
Desc = "Live bones and damage tracking",
Icon = "solar:chart-bold",
IconColor = Yellow,
IconShape = "Square",
Border = true,
})
StatsTab:Paragraph({
Title = "Live Breaker Statistics",
Desc = "Real time tracking of broken bones, hits per second, and maximum velocity.",
Image = "solar:chart-bold",
ImageSize = 36,
})
StatsTab:Space()
local LiveSection = StatsTab:Section({
Title = "Live Counters",
Desc = "Values update automatically every 0.2 seconds.",
Box = true,
BoxBorder = true,
Opened = true,
})
local statsPara = LiveSection:Paragraph({
Title = "Breaker Overview",
Desc = "Broken: 0 | Hits/sec: 0 | Max Vel: 0",
Image = "solar:pulse-bold",
ImageSize = 28,
})
LiveSection:Space()
LiveSection:Paragraph({
Title = "Session Info",
Desc = "Mode: FAST | Power: 100% | Status: Idle",
Image = "solar:info-circle-bold",
ImageSize = 28,
})
local sessionPara = LiveSection:Paragraph({
Title = "Session Time",
Desc = "00:00:00",
Image = "solar:clock-circle-bold",
ImageSize = 28,
})
task.spawn(function()
local startTime = tick()
while true do
task.wait(0.2)
pcall(function()
if statsPara and statsPara.SetDesc then
statsPara:SetDesc("Broken: " .. tostring(breaker.totalBones) .. " | Hits/sec: " .. tostring(breaker.dps) .. " | Max Vel: " .. tostring(breaker.maxDamage))
end
local e = math.floor(tick() - startTime)
local h = math.floor(e / 3600)
local m = math.floor((e % 3600) / 60)
local s = e % 60
if sessionPara and sessionPara.SetDesc then
sessionPara:SetDesc(string.format("%02d:%02d:%02d", h, m, s))
end
end)
end
end)
StatsTab:Space()
local DetailSection = StatsTab:Section({
Title = "Detailed View",
Desc = "Individual stat toggles for focused monitoring.",
Box = true,
BoxBorder = true,
Opened = true,
})
DetailSection:Toggle({
Flag = "ShowBrokenCount",
Title = "Track Broken Bones",
Desc = "Include broken bone count in live updates.",
Icon = "solar:bone-bold",
IconColor = Red,
Type = "Checkbox",
Value = true,
Callback = function(state)
notify("Statistics", state and "Broken bone tracking on." or "Broken bone tracking off.", "solar:bone-bold")
end,
})
DetailSection:Space()
DetailSection:Toggle({
Flag = "TrackVelocity",
Title = "Track Max Velocity",
Desc = "Include maximum velocity in live updates.",
Icon = "solar:rocket-bold",
IconColor = Blue,
Type = "Checkbox",
Value = true,
Callback = function(state)
notify("Statistics", state and "Velocity tracking on." or "Velocity tracking off.", "solar:rocket-bold")
end,
})
StatsTab:Space()
local StatsGroup = StatsTab:Group({})
StatsGroup:Button({
Title = "Copy Stats",
Desc = "Copy current stats to clipboard.",
Icon = "solar:copy-bold",
IconColor = Blue,
Color = Blue,
Justify = "Center",
Callback = function()
local text = "Broken: " .. breaker.totalBones .. " | Hits/sec: " .. breaker.dps .. " | Max Vel: " .. breaker.maxDamage
if setclipboard then setclipboard(text) end
notify("Statistics", "Stats copied: " .. text, "solar:copy-bold")
end,
})
StatsGroup:Space()
StatsGroup:Button({
Title = "Reset Stats",
Desc = "Clear all statistic counters.",
Icon = "solar:trash-bin-2-bold",
IconColor = Orange,
Color = Orange,
Justify = "Center",
Callback = function()
breaker.totalBones = 0
breaker.maxDamage = 0
breaker.dps = 0
notify("Statistics", "Statistics cleared.", "solar:trash-bin-2-bold")
end,
})
local MovementTab = TeleportSection:Tab({
Title = "Movement",
Desc = "Dash and position utilities",
Icon = "solar:map-point-bold",
IconColor = Blue,
IconShape = "Square",
Border = true,
})
MovementTab:Paragraph({
Title = "Movement Utilities",
Desc = "Forward dash, upward boost, and position lock to control your breaker character.",
Image = "solar:map-point-bold",
ImageSize = 36,
})
MovementTab:Space()
local DashSection = MovementTab:Section({
Title = "Dash Controls",
Desc = "Manual velocity bursts using the same physics as auto strikes.",
Box = true,
BoxBorder = true,
Opened = true,
})
DashSection:Slider({
Flag = "DashPower",
Title = "Dash Power",
Desc = "Velocity used by manual dash buttons.",
Icon = "solar:running-bold",
IconColor = Blue,
IsTooltip = true,
IsTextbox = true,
Icons = { From = "sfsymbols:sunMinFill", To = "sfsymbols:sunMaxFill" },
Step = 10,
Value = { Min = 50, Max = 500, Default = 200 },
Callback = function(v)
notify("Dash Power", "Dash power set to " .. tostring(v), "solar:running-bold")
end,
})
MovementTab:Space()
local DashGroup = MovementTab:Group({})
DashGroup:Button({
Title = "Forward Dash",
Desc = "Dash forward with breaker velocity.",
Icon = "solar:arrow-right-bold",
IconColor = Blue,
Color = Blue,
Justify = "Center",
Callback = function()
local root = getRoot()
if root then
local bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(100000, 100000, 100000)
bv.Velocity = root.CFrame.LookVector * (150 * breaker.power)
bv.Parent = root
Debris:AddItem(bv, 0.15)
notify("Dash", "Forward dash executed.", "solar:arrow-right-bold")
else
notify("Dash", "No character found.", "solar:close-circle-bold")
end
end,
})
DashGroup:Space()
DashGroup:Button({
Title = "Upward Boost",
Desc = "Boost upward for better fall impact.",
Icon = "solar:arrow-up-bold",
IconColor = Purple,
Color = Purple,
Justify = "Center",
Callback = function()
local root = getRoot()
if root then
local bv = Instance.new("BodyVelocity")
bv.MaxForce = Vector3.new(100000, 100000, 100000)
bv.Velocity = Vector3.new(0, 200 * breaker.power, 0)
bv.Parent = root
Debris:AddItem(bv, 0.15)
notify("Boost", "Upward boost executed.", "solar:arrow-up-bold")
else
notify("Boost", "No character found.", "solar:close-circle-bold")
end
end,
})
MovementTab:Space()
local LockSection = MovementTab:Section({
Title = "Position Lock",
Desc = "Lock your character in place or reset physics state.",
Box = true,
BoxBorder = true,
Opened = true,
})
LockSection:Toggle({
Flag = "PositionLock",
Title = "Enable Position Lock",
Desc = "Locks your HumanoidRootPart at its current position.",
Icon = "solar:lock-bold",
IconColor = Purple,
Value = false,
Callback = function(state)
posLockActive = state
if state then
local hrp = getHRP()
if hrp then
lockedCFrame = hrp.CFrame
if posLockConn then pcall(function() posLockConn:Disconnect() end) end
posLockConn = RunService.Heartbeat:Connect(function()
local h = getHRP()
if h and lockedCFrame then
h.CFrame = lockedCFrame
end
end)
notify("Position Lock", "Your position is now locked.", "solar:lock-bold")
else
notify("Position Lock", "No character found.", "solar:close-circle-bold")
end
else
if posLockConn then
pcall(function() posLockConn:Disconnect() end)
posLockConn = nil
end
lockedCFrame = nil
notify("Position Lock", "Position lock released.", "solar:lock-keyhole-bold")
end
end,
})
LockSection:Space()
local LockGroup = MovementTab:Group({})
LockGroup:Button({
Title = "Stop Velocity",
Desc = "Clear all velocity from your character.",
Icon = "solar:stop-bold",
IconColor = Green,
Color = Green,
Justify = "Center",
Callback = function()
local root = getRoot()
if root then
root.Velocity = Vector3.new(0, 0, 0)
root.RotVelocity = Vector3.new(0, 0, 0)
notify("Physics", "Velocity cleared.", "solar:stop-bold")
end
end,
})
LockGroup:Space()
LockGroup:Button({
Title = "Respawn",
Desc = "Respawn your character safely.",
Icon = "solar:refresh-bold",
IconColor = Red,
Color = Red,
Justify = "Center",
Callback = function()
local char = LocalPlayer.Character
local hum = char and char:FindFirstChildOfClass("Humanoid")
if hum then
hum.Health = 0
notify("Respawn", "Respawning character.", "solar:refresh-bold")
else
notify("Respawn", "No humanoid found.", "solar:close-circle-bold")
end
end,
})
local ConfigTab = InterfaceSection:Tab({
Title = "Config",
Desc = "Save, load and delete configs",
Icon = "solar:folder-with-files-bold",
IconColor = Grey,
IconShape = "Square",
Border = true,
})
ConfigTab:Paragraph({
Title = "Configuration Manager",
Desc = "Save your current settings, load a saved config, or delete configs you no longer need.",
Image = "solar:folder-with-files-bold",
ImageSize = 36,
})
ConfigTab:Space()
local CfgSection = ConfigTab:Section({
Title = "Save and Load",
Desc = "Manage named configuration profiles.",
Box = true,
BoxBorder = true,
Opened = true,
})
local ConfigManager = Window.ConfigManager
local ConfigName = "default"
local ConfigNameInput = CfgSection:Input({
Flag = "ConfigName",
Title = "Config Name",
Desc = "Name for the config file.",
Icon = "solar:pen-bold",
IconColor = White,
Placeholder = "Enter config name...",
Value = "default",
Callback = function(value)
ConfigName = value
end,
})
ConfigTab:Space()
local AllConfigs = {}
if ConfigManager and ConfigManager.AllConfigs then
pcall(function() AllConfigs = ConfigManager:AllConfigs() or {} end)
end
local DefaultConfigValue = (#AllConfigs > 0 and table.find(AllConfigs, ConfigName)) and ConfigName or nil
local AllConfigsDropdown = CfgSection:Dropdown({
Flag = "SelectedConfig",
Title = "Saved Configs",
Desc = "Select an existing config to load or delete.",
Icon = "solar:folder-open-bold",
IconColor = Yellow,
Values = AllConfigs,
Value = DefaultConfigValue,
Callback = function(value)
ConfigName = value
if ConfigNameInput and ConfigNameInput.Set then
ConfigNameInput:Set(value)
end
notify("Config", "Selected config: " .. tostring(value), "solar:folder-open-bold")
end,
})
ConfigTab:Space()
local ActionGroup = ConfigTab:Group({})
ActionGroup:Button({
Title = "Save",
Desc = "Save current settings.",
Icon = "solar:diskette-bold",
IconColor = Green,
Color = Green,
Justify = "Center",
Callback = function()
if ConfigManager then
pcall(function()
local cfg = ConfigManager:Config(ConfigName)
if cfg then
Window.CurrentConfig = cfg
cfg:Save()
notify("Config Saved", "'" .. ConfigName .. "' has been saved.", "solar:diskette-bold")
if AllConfigsDropdown and AllConfigsDropdown.Refresh then
local configs = {}
pcall(function() configs = ConfigManager:AllConfigs() or {} end)
AllConfigsDropdown:Refresh(configs)
end
end
end)
else
notify("Config", "ConfigManager not available.", "solar:info-circle-bold")
end
end,
})
ActionGroup:Space()
ActionGroup:Button({
Title = "Load",
Desc = "Load selected config.",
Icon = "solar:import-bold",
IconColor = Blue,
Color = Blue,
Justify = "Center",
Callback = function()
if ConfigManager then
pcall(function()
local cfg = ConfigManager:Config(ConfigName)
if cfg then
Window.CurrentConfig = cfg
cfg:Load()
notify("Config Loaded", "'" .. ConfigName .. "' has been loaded.", "solar:import-bold")
end
end)
else
notify("Config", "ConfigManager not available.", "solar:info-circle-bold")
end
end,
})
ActionGroup:Space()
ActionGroup:Button({
Title = "Delete",
Desc = "Delete selected config.",
Icon = "solar:trash-bin-2-bold",
IconColor = Red,
Color = Red,
Justify = "Center",
Callback = function()
if ConfigManager then
pcall(function()
local cfg = nil
if ConfigManager.GetConfig then
cfg = ConfigManager:GetConfig(ConfigName)
elseif ConfigManager.Config then
cfg = ConfigManager:Config(ConfigName)
end
if cfg and cfg.Delete then
cfg:Delete()
notify("Config Deleted", "'" .. ConfigName .. "' has been deleted.", "solar:trash-bin-2-bold")
if AllConfigsDropdown and AllConfigsDropdown.Refresh then
local configs = {}
pcall(function() configs = ConfigManager:AllConfigs() or {} end)
AllConfigsDropdown:Refresh(configs)
end
else
notify("Config", "Config '" .. ConfigName .. "' not found.", "solar:info-circle-bold")
end
end)
else
notify("Config", "ConfigManager not available.", "solar:info-circle-bold")
end
end,
})
ConfigTab:Space()
CfgSection:Button({
Title = "Reset to Default",
Desc = "Reset config name and reload defaults.",
Icon = "solar:restart-bold",
IconColor = Orange,
Color = Orange,
Justify = "Center",
Callback = function()
ConfigName = "default"
if ConfigNameInput and ConfigNameInput.Set then ConfigNameInput:Set("default") end
notify("Config", "Config name reset to default.", "solar:restart-bold")
end,
})
local SettingsTab = SettingsSection:Tab({
Title = "Settings",
Desc = "Keybinds and hub options",
Icon = "solar:tuning-2-bold",
IconColor = Purple,
IconShape = "Square",
Border = true,
})
SettingsTab:Paragraph({
Title = "Hub Settings",
Desc = "Configure toggle key, notifications, anti AFK, and hub lifecycle options.",
Image = "solar:tuning-2-bold",
ImageSize = 36,
})
SettingsTab:Space()
local KeybindSection = SettingsTab:Section({
Title = "Keybinds",
Desc = "Set the key to toggle the hub open and closed.",
Box = true,
BoxBorder = true,
Opened = true,
})
KeybindSection:Keybind({
Flag = "MenuKeybind",
Title = "Toggle Hub",
Desc = "Press this key to show or hide the hub.",
Icon = "solar:keyboard-bold",
IconColor = Blue,
Value = "RightShift",
Callback = function(v)
local ok, code = pcall(function() return Enum.KeyCode[v] end)
if ok and code then
Window:SetToggleKey(code)
notify("Keybind", "Toggle key set to " .. tostring(v), "solar:keyboard-bold")
end
end,
})
SettingsTab:Space()
local MiscSection = SettingsTab:Section({
Title = "Miscellaneous",
Desc = "Additional hub options and safety features.",
Box = true,
BoxBorder = true,
Opened = true,
})
MiscSection:Toggle({
Flag = "NotificationsEnabled",
Title = "Notifications",
Desc = "Enable or disable all hub notifications.",
Icon = "solar:bell-bold",
IconColor = Yellow,
Type = "Checkbox",
Value = true,
Callback = function(state)
notificationsEnabled = state
if state then
notify("Notifications", "Notifications enabled.", "solar:bell-bold")
end
end,
})
MiscSection:Space()
MiscSection:Toggle({
Flag = "AutoStartFeatures",
Title = "Auto Start Features",
Desc = "Automatically enable last used features on load.",
Icon = "solar:play-circle-bold",
IconColor = Green,
Type = "Checkbox",
Value = false,
Callback = function(state)
notify("Auto Start", state and "Auto start enabled." or "Auto start disabled.", "solar:play-circle-bold")
end,
})
MiscSection:Space()
local AntiAFKConn = nil
MiscSection:Toggle({
Flag = "AntiAFK",
Title = "Anti AFK",
Desc = "Prevents kick for inactivity using VirtualUser.",
Icon = "solar:user-check-bold",
IconColor = Green,
Value = false,
Callback = function(state)
if state then
local VirtualUser = game:GetService("VirtualUser")
AntiAFKConn = LocalPlayer.Idled:Connect(function()
pcall(function()
VirtualUser:Button2Down(Vector2.new(0, 0), workspace.CurrentCamera.CFrame)
task.wait(1)
VirtualUser:Button2Up(Vector2.new(0, 0), workspace.CurrentCamera.CFrame)
end)
end)
notify("Anti AFK", "Anti AFK enabled.", "solar:user-check-bold")
else
if AntiAFKConn then
pcall(function() AntiAFKConn:Disconnect() end)
AntiAFKConn = nil
end
notify("Anti AFK", "Anti AFK disabled.", "solar:user-check-bold")
end
end,
})
SettingsTab:Space()
local HubGroup = SettingsTab:Group({})
HubGroup:Button({
Title = "Save Settings",
Desc = "Persist current settings to config.",
Icon = "solar:diskette-bold",
IconColor = Green,
Color = Green,
Justify = "Center",
Callback = function()
if ConfigManager then
pcall(function()
local cfg = ConfigManager:Config(ConfigName)
if cfg then
Window.CurrentConfig = cfg
cfg:Save()
end
end)
end
notify("Settings", "Settings saved.", "solar:diskette-bold")
end,
})
HubGroup:Space()
HubGroup:Button({
Title = "Close Hub",
Desc = "Close the Horizon Hub window.",
Icon = "solar:close-circle-bold",
IconColor = Red,
Color = Red,
Justify = "Center",
Callback = function()
notify("Hub", "Closing Horizon Hub.", "solar:close-circle-bold")
task.wait(0.5)
stopFarm()
if posLockConn then pcall(function() posLockConn:Disconnect() end) end
if AntiAFKConn then pcall(function() AntiAFKConn:Disconnect() end) end
pcall(function() Window:Destroy() end)
end,
})
Window:SetToggleKey(Enum.KeyCode.RightShift)
task.wait(1)
notify("Horizon Hub Loaded", "Welcome, " .. LocalPlayer.DisplayName .. "! Bone Breaker ready.", "solar:shield-check-bold", 5)Copy the code above into a compatible Roblox script executor if you choose to test it.
Broken Bones IV Script Status
Roblox and game updates can affect compatibility, so the script’s status should be treated as temporary rather than guaranteed.
What Is a Broken Bones IV Script?
A Broken Bones IV script is Lua code intended to run alongside the Roblox game through a third-party script executor.
Different scripts can contain different code and features. This version includes the following features:
How to Use the Broken Bones IV Script
If you decide to test a third-party Roblox script, the general process involves a compatible executor and the Lua code provided above.
Can a Broken Bones IV Script Get Your Roblox Account Banned?
- Only use code from a source you trust.
- Never enter your Roblox password into a script or executor.
- Test on an alternate account first.
Broken Bones IV Script for Mobile
If you’re searching for a Broken Bones IV script for mobile, check whether both the executor and the script support your device and current Roblox version. Mobile executor support does not guarantee that every script will work.
Frequently Asked Questions
What is a Broken Bones IV script?
A Broken Bones IV script is third-party Lua code intended to run alongside the Roblox game through a compatible script executor.
What features does this Broken Bones IV script include?
Different scripts contain different code. This version includes: # Horizon Hub | Bone Breaker Edition, Features**, Auto Strike**, Auto Strike, Auto Farm Sync, FAST, POWER & COMBO modes, Adjustable Strike Power (10—200%), Hit Effects Toggle, Adjustable Effect Size (1—10), Manual Single Hit, Start / Stop Controls, Reset Counters.
How do you use the Broken Bones IV script?
Pick a compatible executor such as Hydrogen, MacSploit, AWP.GG, Delta, Fluxus, Codex, launch Roblox and join the game, copy the complete Lua code from the script card above, paste it into the executor’s editor, and click Run or Execute. Compatibility changes over time, so a name here doesn’t guarantee current support.
Can a Broken Bones IV script get your Roblox account banned?
Yes. Third-party scripts can violate Roblox rules and may put an account at risk. Only use code from a source you trust, never enter your Roblox password into a script or executor, and test on an alternate account first.
Does the Broken Bones IV script work on mobile?
Check whether both the executor and the script support your device and the current Roblox version. Mobile executor support does not guarantee that every script will work.