-- [[ Rscripts Risk Notice ]] -- This script is not verified by rscripts.net. 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 Rscripts 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 = '', '', '', '' 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})