M
ScriptKeyless
Auto Roll, Auto Buy Dice, Open Source, Keyless
[WORLDS] ROLL A DICE π²Desktop compatibleReal
Description
-Auto Step on Dice -Auto Roll Pedestal -Auto Buy Dice (based off rarity) -Auto Upgrade {Upgrade Roll Luck,Rolling Pedestals, Roll Speed, Dice Yield, Auto Roll, Dice Capacity} -Auto Equip Best Dices
GAME[WORLDS] ROLL A DICE π²
UPDATEDOct 10, 2026
ACCESSKeyless
PLATFORMDesktop
Script source Luau
-- [[ BloxScripts Risk Notice ]]
-- This script has not been verified by BloxScripts.fun. Deal with caution.
--
-- Stay safe:
-- β’ Never log in on unofficial Roblox sites or lookalike domains.
-- β’ Real Roblox links use roblox.com (check the .com ending).
-- β’ Treat fake Roblox login / "claim reward" pages as phishing.
-- [[ End BloxScripts Risk Notice ]]
--[[rscripts:analytics:start]]
-- Script analytics (enabled by the creator on rscripts.net).
-- Runs in its own thread and cannot affect the script below.
task.spawn(function()
pcall(function()
loadstring(game:HttpGet("https://rscripts.net/api/telemetry/v2/client.lua?s=6ab84115b056daac79f5f750"))()
end)
end)
--[[rscripts:analytics:end]]
-- [WORLDS] ROLL A DICE | PlaceId lock 110944866916441
if game.PlaceId ~= 110944866916441 then return end
local repo = "https://raw.githubusercontent.com/joustingmatch/ObsidianUltra/main/"
local Library = loadstring(game:HttpGet(repo .. "Library.lua"))()
local ThemeManager = loadstring(game:HttpGet(repo .. "addons/ThemeManager.lua"))()
local SaveManager = loadstring(game:HttpGet(repo .. "addons/SaveManager.lua"))()
local Options = Library.Options
local Toggles = Library.Toggles
local Labels = Library.Labels -- indexed AddLabel/AddStatusLabel live here, NOT in Options
Library.ForceCheckbox = false
Library.ShowToggleFrameInKeybinds = true
local Players = game:GetService("Players")
local RS = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
local LocalPlayer = Players.LocalPlayer
local Remotes = RS:WaitForChild("RollADiceRemotes")
local RollConfig = require(RS:WaitForChild("RollADiceConfig"))
local UpgradeRequest = Remotes:WaitForChild("UpgradeRequest")
local ToggleAutoRollRE = Remotes:WaitForChild("ToggleAutoRoll")
local BackpackAction = Remotes:WaitForChild("BackpackAction")
-- state
local F = {Step=false, Roll=false, Buy=false, Equip=false, ServerRoll=false,
Up={Luck=false, Pedestals=false, RollSpeed=false, Yield=false, AutoRoll=false, Capacity=false}}
local D = {Step=1, Roll=2, Buy=1, Equip=1, Up=1} -- Roll fixed 2s, no slider
local MaxRarityName = "Legendary"
local RED, GRN, ORG, ED = '<font color="#ff3232">', '<font color="#60d876">', '<font color="#ffb020">', '</font>'
local function setLbl(lbl, color, txt)
if not lbl then return end
lbl:SetText(color.."β "..txt..ED)
end
local function getPlotId()
local v = LocalPlayer:GetAttribute("PlotId")
return tonumber(v) or 0
end
local function getFloorId()
local v = LocalPlayer:GetAttribute("ActiveFloorId")
return tonumber(v) or 1
end
local function ownStation()
local plot, floor = getPlotId(), getFloorId()
if plot == 0 then return nil end
local stations = Workspace:FindFirstChild("RollStations")
if not stations then return nil end
for _, m in ipairs(stations:GetChildren()) do
if m:IsA("Model") then
local p = m:GetAttribute("PlotId") or m:GetAttribute("OwnerRootPlotId")
local f = m:GetAttribute("FloorId") or 1
if tonumber(p) == plot and tonumber(f) == floor then return m end
end
end
return stations:FindFirstChild("Station_Plot"..plot)
end
local function firePrompt(prompt)
pcall(function()
local fp = rawget(getgenv(), "fireproximityprompt") or fireproximityprompt
if fp then fp(prompt) end
end)
end
local function stepTo(part)
local char = LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if hrp and part and part:IsA("BasePart") then
hrp.CFrame = part:GetPivot() + Vector3.new(0, 3, 0)
return true
end
return false
end
-- name -> rarity/order map
local NameToRarity, RarityOrder = {}, {}
for _, d in pairs(RollConfig.Dice) do
if d.name and d.rarity then NameToRarity[string.lower(d.name)] = d.rarity end
end
for r, info in pairs(RollConfig.Rarities) do RarityOrder[r] = info.order or 0 end
local RarityList = {"Common","Uncommon","Rare","Epic","Legendary","Exotic","Divine","Prismatic","Ascended","Relic","Transcended","Tempest","Machina","Secret","Zenith","Almighty"}
local function canBuyRarity(rarityName)
local maxOrd = RarityOrder[MaxRarityName] or 999
local ord = RarityOrder[rarityName] or 999
return ord <= maxOrd
end
local Window = Library:CreateWindow({
Title = "",
Footer = "[WORLDS] ROLL A DICE | like my rscripts if it works. @hidevin",
Icon = "ghost",
NotifySide = "Right",
ShowCustomCursor = true,
Center = true,
AutoShow = true,
Resizable = true,
FuzzySearch = true,
SearchValues = true,
GlobalSearch = false,
})
local Tabs = {
Info = Window:AddTab("Info", "info"),
Main = Window:AddTab("Main", "gamepad-2"),
Farming = Window:AddTab("Farming", "tractor"),
Inventory = Window:AddTab("Inventory", "package"),
Player = Window:AddTab("Player", "person-standing"),
Settings = Window:AddTab("Settings", "settings"),
}
-- Info / User
local UserGB = Tabs.Info:AddGroupbox({Side="Left", Name="User", IconName="user"})
UserGB:AddLabel("User - @"..LocalPlayer.Name, true)
UserGB:AddLabel("UserId: "..LocalPlayer.UserId, true)
UserGB:AddLabel("Executor: Real", true)
UserGB:AddDivider()
UserGB:AddButton({Text="Copy Username", Func=function() if setclipboard then setclipboard(LocalPlayer.Name) end end})
:AddButton({Text="Copy Profile Link", Func=function() if setclipboard then setclipboard("https://www.roblox.com/users/"..LocalPlayer.UserId) end end})
local SessGB = Tabs.Info:AddGroupbox({Side="Right", Name="Session", IconName="signal"})
SessGB:AddLabel("Game: [WORLDS] ROLL A DICE", true)
SessGB:AddLabel("Players: "..#Players:GetPlayers(), true)
SessGB:AddLabel("JobId: "..string.sub(game.JobId,1,13).."...", true)
SessGB:AddButton({Text="Rejoin Place", Func=function() game:GetService("TeleportService"):TeleportToPlaceInstance(game.PlaceId, game.JobId, LocalPlayer) end})
:AddButton({Text="Copy Job ID", Func=function() if setclipboard then setclipboard(game.JobId) end end})
-- Main dashboard (status only, no toggles)
local DashL = Tabs.Main:AddGroupbox({Side="Left", Name="Automation Status", IconName="activity"})
DashL:AddLabel(RED.."β Step idle"..ED, true, "StStep")
DashL:AddLabel(RED.."β Roll idle"..ED, true, "StRoll")
DashL:AddLabel(RED.."β Buy idle"..ED, true, "StBuy")
DashL:AddLabel(RED.."β Equip idle"..ED, true, "StEquip")
DashL:AddLabel(RED.."β Upgrades idle"..ED, true, "StUp")
local DashR = Tabs.Main:AddGroupbox({Side="Right", Name="Session", IconName="signal"})
DashR:AddLabel("Cash: ...", true, "DashCash")
DashR:AddLabel("Plot: ...", true, "DashPlot")
task.spawn(function()
while not Library.Unloaded do
task.wait(1)
pcall(function()
Labels.DashCash:SetText("Cash: "..tostring(LocalPlayer:GetAttribute("Cash") or 0))
Labels.DashPlot:SetText("Plot "..tostring(getPlotId()).." Floor "..tostring(getFloorId()))
end)
end
end)
-- Farming sub-tabs
local RollSub = Tabs.Farming:AddSubTab("Rolling", "dices")
local StepSub = Tabs.Farming:AddSubTab("Stepping", "footprints")
local RollGB = RollSub:AddLeftGroupbox("Pedestal Rolling", "dices")
RollGB:AddToggle("AutoRollPed", {Text="Auto Roll Pedestal", Default=false})
RollGB:AddLabel("Rolls every 2s (fixed).", true)
local RollGB2 = RollSub:AddRightGroupbox("Server Auto Roll", "zap")
RollGB2:AddToggle("ServerAutoRoll", {Text="Server Auto Roll (ToggleAutoRoll)", Default=false})
RollGB2:AddLabel("Needs Auto Roll pass/level.", true)
local StepGB = StepSub:AddLeftGroupbox("Dice Stepping", "footprints")
StepGB:AddToggle("AutoStep", {Text="Auto Step on Dice", Default=false})
StepGB:AddSlider("StepDelay", {Text="Step Delay", Default=1, Min=0.5, Max=5, Rounding=2, Suffix="s"})
local StepGB2 = StepSub:AddRightGroupbox("Info", "info")
StepGB2:AddLabel("Teleports HRP through own PlacedDice hitboxes (TriggerRadius 5.5).", true)
-- Inventory sub-tabs
local BuySub = Tabs.Inventory:AddSubTab("Purchasing", "shopping-cart")
local UpSub = Tabs.Inventory:AddSubTab("Upgrades", "trending-up")
local EqSub = Tabs.Inventory:AddSubTab("Equip", "swords")
local BuyGB = BuySub:AddLeftGroupbox("Buy Dice", "shopping-cart")
BuyGB:AddToggle("AutoBuy", {Text="Auto Buy Dice", Default=false})
BuyGB:AddDropdown("MaxRarity", {Values=RarityList, Default=5, Multi=false, Text="Max Rarity"})
BuyGB:AddSlider("BuyDelay", {Text="Buy Delay", Default=1, Min=0.5, Max=5, Rounding=2, Suffix="s"})
local BuyGB2 = BuySub:AddRightGroupbox("Info", "info")
BuyGB2:AddLabel("Fires own BuyOfferPrompt only. Rarity from ObjectText mapped to RollADiceConfig.", true)
local UpGB = UpSub:AddLeftGroupbox("Auto Upgrade", "trending-up")
UpGB:AddToggle("UpLuck", {Text="Upgrade Roll Luck", Default=false})
UpGB:AddToggle("UpPed", {Text="Rolling Pedestals", Default=false})
UpGB:AddToggle("UpSpeed", {Text="Roll Speed", Default=false})
UpGB:AddToggle("UpYield", {Text="Dice Yield", Default=false})
UpGB:AddToggle("UpAuto", {Text="Auto Roll", Default=false})
UpGB:AddToggle("UpCap", {Text="Dice Capacity", Default=false})
local UpGB2 = UpSub:AddRightGroupbox("Upgrade Settings", "settings")
UpGB2:AddSlider("UpDelay", {Text="Upgrade Delay", Default=1, Min=0.5, Max=5, Rounding=2, Suffix="s"})
UpGB2:AddLabel("UpgradeRequest:FireServer(Key, FloorId). Keys: Luck/Pedestals/RollSpeed/Yield/AutoRoll/Capacity.", true)
local EqGB = EqSub:AddLeftGroupbox("Equip", "swords")
EqGB:AddToggle("AutoEquip", {Text="Auto Equip Best Dices", Default=false})
EqGB:AddSlider("EquipDelay", {Text="Equip Delay", Default=1, Min=0.5, Max=5, Rounding=2, Suffix="s"})
local EqGB2 = EqSub:AddRightGroupbox("Info", "info")
EqGB2:AddLabel("BackpackAction:FireServer('EquipBest').", true)
-- Player
local MovGB = Tabs.Player:AddGroupbox({Side="Left", Name="Movement", IconName="footprints"})
MovGB:AddToggle("WSEn", {Text="WalkSpeed", Default=false})
MovGB:AddSlider("WSAmt", {Text="WalkSpeed Amount", Default=32, Min=16, Max=250, Rounding=0})
MovGB:AddToggle("InfJump", {Text="Infinite Jump", Default=false})
MovGB:AddToggle("NoClip", {Text="NoClip", Default=false})
MovGB:AddToggle("InstPrompt", {Text="Instant ProximityPrompt", Default=false})
local FlyGB = Tabs.Player:AddGroupbox({Side="Right", Name="Flight", IconName="plane"})
FlyGB:AddToggle("FlyEn", {Text="Fly", Default=false})
FlyGB:AddSlider("FlySpeed", {Text="Fly Speed", Default=60, Min=10, Max=400, Rounding=0})
-- Settings
local MenuGB = Tabs.Settings:AddGroupbox({Side="Left", Name="Menu", IconName="wrench"})
MenuGB:AddToggle("AntiAFK", {Text="Anti-AFK", Default=true})
MenuGB:AddToggle("NoPause", {Text="No Gameplay Paused", Default=true})
MenuGB:AddToggle("AutoRecon", {Text="Auto Reconnect on Kick", Default=false})
MenuGB:AddToggle("NoRender", {Text="Disable 3D Rendering", Default=false})
MenuGB:AddToggle("FPSBoost", {Text="FPS Boost", Default=false})
MenuGB:AddToggle("HideUI", {Text="Hide UI On Start", Default=false})
MenuGB:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", {Default="RightShift", NoUI=true, Text="Menu keybind"})
local ScriptGB = Tabs.Settings:AddGroupbox({Side="Left", Name="Script", IconName="scroll-text"})
ScriptGB:AddButton({Text="Unload Script", Func=function() Library:Unload() end})
-- wire UI first, then logic
Library.ToggleKeybind = Options.MenuKeybind
Toggles.AutoRollPed:OnChanged(function() F.Roll = Toggles.AutoRollPed.Value
setLbl(Labels.StRoll, F.Roll and GRN or RED, F.Roll and "Roll running" or "Roll idle") end)
Toggles.ServerAutoRoll:OnChanged(function() F.ServerRoll = Toggles.ServerAutoRoll.Value end)
Toggles.AutoStep:OnChanged(function() F.Step = Toggles.AutoStep.Value
setLbl(Labels.StStep, F.Step and GRN or RED, F.Step and "Step running" or "Step idle") end)
Options.StepDelay:OnChanged(function() D.Step = Options.StepDelay.Value end)
Toggles.AutoBuy:OnChanged(function() F.Buy = Toggles.AutoBuy.Value
setLbl(Labels.StBuy, F.Buy and GRN or RED, F.Buy and "Buy running" or "Buy idle") end)
Options.MaxRarity:OnChanged(function() MaxRarityName = Options.MaxRarity.Value end)
Options.BuyDelay:OnChanged(function() D.Buy = Options.BuyDelay.Value end)
Toggles.AutoEquip:OnChanged(function() F.Equip = Toggles.AutoEquip.Value
setLbl(Labels.StEquip, F.Equip and GRN or RED, F.Equip and "Equip running" or "Equip idle") end)
Options.EquipDelay:OnChanged(function() D.Equip = Options.EquipDelay.Value end)
local function wireUp(t, k) t:OnChanged(function()
F.Up[k] = t.Value
local any = F.Up.Luck or F.Up.Pedestals or F.Up.RollSpeed or F.Up.Yield or F.Up.AutoRoll or F.Up.Capacity
setLbl(Labels.StUp, any and GRN or RED, any and "Upgrades running" or "Upgrades idle")
end) end
wireUp(Toggles.UpLuck, "Luck") wireUp(Toggles.UpPed, "Pedestals") wireUp(Toggles.UpSpeed, "RollSpeed")
wireUp(Toggles.UpYield, "Yield") wireUp(Toggles.UpAuto, "AutoRoll") wireUp(Toggles.UpCap, "Capacity")
Options.UpDelay:OnChanged(function() D.Up = Options.UpDelay.Value end)
MaxRarityName = Options.MaxRarity.Value
-- loops (server validates prompt distance: always step into range before fireproximityprompt)
task.spawn(function()
while not Library.Unloaded do
task.wait(2) -- fixed roll interval, no slider
if F.Roll then
pcall(function()
local st = ownStation()
local rp = st and st:FindFirstChild("RollPrompt", true)
if rp and rp:IsA("ProximityPrompt") then
if stepTo(rp.Parent) then task.wait(0.25) end
if F.Roll and not Library.Unloaded then firePrompt(rp) end
else setLbl(Labels.StRoll, ORG, "Roll standby") end
end)
end
end
end)
task.spawn(function()
while not Library.Unloaded do
task.wait(D.Step)
if F.Step then
pcall(function()
local st = ownStation()
local pd = st and st:FindFirstChild("PlacedDice")
local char = LocalPlayer.Character
local hrp = char and char:FindFirstChild("HumanoidRootPart")
if pd and hrp and #pd:GetChildren() > 0 then
for _, d in ipairs(pd:GetChildren()) do
if not F.Step or Library.Unloaded then break end
local hb = d:FindFirstChild("Hitbox", true)
if hb then hrp.CFrame = hb.CFrame + Vector3.new(0, 3, 0) end
task.wait(D.Step)
end
else setLbl(Labels.StStep, ORG, "Step standby") end
end)
end
end
end)
task.spawn(function()
while not Library.Unloaded do
task.wait(D.Buy)
if F.Buy then
pcall(function()
local plot = getPlotId()
local hit = 0
for _, m in ipairs(Workspace:GetChildren()) do
if not F.Buy then break end
if typeof(m.Name) == "string" and m.Name:sub(1,6) == "Offer_" then
local mp = tonumber(string.match(m.Name, "Offer_(%d+):")) or -1
if mp == plot then
for _, d in ipairs(m:GetDescendants()) do
if d:IsA("ProximityPrompt") and d.Name == "BuyOfferPrompt" then
local diceName = string.match(d.ObjectText or "", "^(.-) Dice$") or ""
local rar = NameToRarity[string.lower(diceName)]
if rar and canBuyRarity(rar) and F.Buy then
if stepTo(d.Parent) then task.wait(0.25) end
if F.Buy and not Library.Unloaded then firePrompt(d) end
hit = hit + 1
end
end
end
end
end
end
if hit == 0 then setLbl(Labels.StBuy, ORG, "Buy standby") else setLbl(Labels.StBuy, GRN, "Buy running") end
end)
end
end
end)
task.spawn(function()
while not Library.Unloaded do
task.wait(D.Equip)
if F.Equip then pcall(function() BackpackAction:FireServer("EquipBest", nil, nil) end) end
end
end)
task.spawn(function()
local keys = {"Luck","Pedestals","RollSpeed","Yield","AutoRoll","Capacity"}
while not Library.Unloaded do
task.wait(D.Up)
for _, k in ipairs(keys) do
if Library.Unloaded then break end
if F.Up[k] then pcall(function() UpgradeRequest:FireServer(k, getFloorId()) end) task.wait(0.3) end
end
end
end)
task.spawn(function()
local last = nil
while not Library.Unloaded do
task.wait(0.5)
if F.ServerRoll ~= last then
last = F.ServerRoll
pcall(function() ToggleAutoRollRE:FireServer(F.ServerRoll, getFloorId()) end)
end
end
end)
-- Player logic
local noclipConn, jumpConn
Toggles.WSEn:OnChanged(function()
local h = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if h then h.WalkSpeed = Toggles.WSEn.Value and Options.WSAmt.Value or 32 end
end)
Options.WSAmt:OnChanged(function()
if Toggles.WSEn.Value then local h = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if h then h.WalkSpeed = Options.WSAmt.Value end end
end)
Toggles.InfJump:OnChanged(function()
if jumpConn then jumpConn:Disconnect() jumpConn = nil end
if Toggles.InfJump.Value then
jumpConn = game:GetService("UserInputService").JumpRequest:Connect(function()
local h = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid")
if h then h:ChangeState(Enum.HumanoidStateType.Jumping) end
end)
end
end)
Toggles.NoClip:OnChanged(function()
if noclipConn then noclipConn:Disconnect() noclipConn = nil end
if Toggles.NoClip.Value then
noclipConn = game:GetService("RunService").Stepped:Connect(function()
local c = LocalPlayer.Character
if c then for _, p in ipairs(c:GetDescendants()) do if p:IsA("BasePart") then p.CanCollide = false end end end
end)
end
end)
local flyConn
Toggles.FlyEn:OnChanged(function()
local on = Toggles.FlyEn.Value
if flyConn then flyConn:Disconnect() flyConn = nil end
if on then
flyConn = game:GetService("RunService").Heartbeat:Connect(function()
local c = LocalPlayer.Character local hrp = c and c:FindFirstChild("HumanoidRootPart")
if hrp then
local v = Vector3.new(0,0,0)
local uis = game:GetService("UserInputService")
if uis:IsKeyDown(Enum.KeyCode.W) then v = v + Workspace.CurrentCamera.CFrame.LookVector end
if uis:IsKeyDown(Enum.KeyCode.S) then v = v - Workspace.CurrentCamera.CFrame.LookVector end
if uis:IsKeyDown(Enum.KeyCode.Space) then v = v + Vector3.new(0,1,0) end
if uis:IsKeyDown(Enum.KeyCode.LeftShift) then v = v - Vector3.new(0,1,0) end
hrp.Velocity = v * Options.FlySpeed.Value
end
end)
else local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart")
if hrp then hrp.Velocity = Vector3.new(0,0,0) end
end
end)
-- Settings logic
if Toggles.AntiAFK.Value then pcall(function()
local vu = game:GetService("VirtualUser")
LocalPlayer.Idled:Connect(function() vu:CaptureController() vu:ClickButton2(Vector2.new()) end)
end) end
if Toggles.NoPause.Value then pcall(function()
local cg = game:GetService("CoreGui"):FindFirstChild("RobloxGui")
local box = cg and cg:FindFirstChild("CoreScripts") and cg.CoreScripts:FindFirstChild("NetworkPause")
if box then box:Destroy() end
end) end
Toggles.FPSBoost:OnChanged(function()
if not Toggles.FPSBoost.Value then return end
pcall(function()
settings().Rendering.QualityLevel = Enum.QualityLevel.Level01
local l = game:GetService("Lighting") l.GlobalShadows = false l.FogEnd = 9e9
for _, v in ipairs(Workspace:GetDescendants()) do
if v:IsA("BasePart") then v.Material = Enum.Material.Plastic v.Reflectance = 0 v.CastShadow = false
elseif v:IsA("Decal") then v.Transparency = 1
elseif v:IsA("ParticleEmitter") or v:IsA("Trail") then v.Lifetime = NumberRange.new(0)
elseif v:IsA("PostEffect") then v.Enabled = false end
end
end)
end)
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({"MenuKeybind", "RollDelay"})
ThemeManager:SetFolder("MyScriptHub")
SaveManager:SetFolder("MyScriptHub/[WORLDS] ROLL A DICE")
ThemeManager:SetDefaultTheme(ThemeManager.BuiltInThemes["Quartz"][2])
ThemeManager:ApplyToTab(Tabs.Settings)
ThemeManager:SaveDefault("Quartz")
SaveManager:BuildConfigSection(Tabs.Settings)
SaveManager:LoadAutoloadConfig()
Library:Notify({Title="[WORLDS] ROLL A DICE", Description="Loaded. RightShift to toggle.", Time=4})
Review the source before using it. Executions count successful copies, capped at 10 per user and network per script in 24 hours.
Community discussion
0Start the conversation.


Your community, in one place