-- [[ 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=6aa8b9674e0196ca2c5db023"))() end) end) --[[rscripts:analytics:end]] --// Star RNG | @hidevin 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 Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local Workspace = game:GetService("Workspace") local VirtualUser = game:GetService("VirtualUser") local LocalPlayer = Players.LocalPlayer local Options = Library.Options local Toggles = Library.Toggles local RARITIES = {"Common","Uncommon","Rare","Epic","Legendary","Mythic","Exotic","Radiant","Secret","Exalted","Divine","Eternal","Transcendent","Absolute"} local RARITY_ORDER = {} for i, r in ipairs(RARITIES) do RARITY_ORDER[r] = i end local MUTATION_IDS = {"SyringeNeedle","MoonNeedle","CometNeedle","PlanetNeedle","AlienNeedle","GalaxyNeedle","BlackholeNeedle"} local EGG_NAMES = {"Starlight Egg","Orbit Egg","Nebula Egg","Cosmic Egg","Eclipse Egg","Celestial Egg","Mythic Egg","Apex Egg"} local GEAR_IDS = {"Energizer","Overloader","Supercharger","Turbocharger"} local function GetOwnArea() local map = Workspace:FindFirstChild("RollForStarsMap") if not map then return nil end for _, v in ipairs(map:GetChildren()) do if v.Name:match("^PlayerArea_%d+$") then local o = v:FindFirstChild("Owner") if o and o.Value == LocalPlayer then return v end end end return nil end local function GetRollPrompt() local area = GetOwnArea() if not area then return nil end local roller = area:FindFirstChild("Roller") local lever = roller and roller:FindFirstChild("LeverAssembly") local anchor = lever and lever:FindFirstChild("RollPromptAnchor") local p = anchor and anchor:FindFirstChildOfClass("ProximityPrompt") return p end local function GetTrashPrompt() local area = GetOwnArea() if not area then return nil end local d = area:FindFirstChild("Dumpster") d = d and d:FindFirstChild("Dumpster") if d then return d:FindFirstChild("TrashPrompt") end return nil end local function GetCollectTrigger() local area = GetOwnArea() if not area then return nil end local c = area:FindFirstChild("Collector") if c then return c:FindFirstChild("CollectTrigger") end return nil end local function GetOwnRollingStars() local out = {} local area = GetOwnArea() if not area then return out end for _, d in ipairs(area:GetDescendants()) do if d:IsA("ProximityPrompt") and d.Parent and d.Parent.Name == "RollingStar" then table.insert(out, {Prompt = d, Star = d.Parent}) end end return out end local function GetEmptyAltars() local out = {} local area = GetOwnArea() if not area then return out end local rm = area:FindFirstChild("RegionMarker") local altars = rm and rm:FindFirstChild("Altars") if not altars then return out end for _, a in ipairs(altars:GetChildren()) do if a:IsA("Model") and a:FindFirstChild("DepositedStar", true) == nil then table.insert(out, a) end end return out end local function FireRemote(name, a, b) local r local ok = pcall(function() r = ReplicatedStorage:WaitForChild(name, 5) end) if not ok or not r then return end if a == nil then pcall(function() r:FireServer() end) elseif b == nil then pcall(function() r:FireServer(a) end) else pcall(function() r:FireServer(a, b) end) end end local function FirePrompt(p) if p ~= nil and p.Parent ~= nil then pcall(function() fireproximityprompt(p) end) end end -- Server enforces MaxActivationDistance on prompts (Trash = 10). -- Teleport into range, fire, restore. Only used where the target is -- inherently elsewhere (Dumpster); Roll/Buy assume you park at the roller. local function DoPromptNear(prompt, holdWait) if prompt == nil or prompt.Parent == nil then return false end local char = LocalPlayer.Character local hrp = char and char:FindFirstChild("HumanoidRootPart") if not hrp then FirePrompt(prompt) return false end local part = prompt.Parent while part and not part:IsA("BasePart") do part = part.Parent end if not part then FirePrompt(prompt) return false end local maxD = prompt.MaxActivationDistance or 10 if (hrp.Position - part.Position).Magnitude <= (maxD - 1) then FirePrompt(prompt) return true end local orig = hrp.CFrame pcall(function() hrp.CFrame = part.CFrame + Vector3.new(0, 3, 0) end) task.wait(0.35) FirePrompt(prompt) task.wait(holdWait or 0.8) pcall(function() hrp.CFrame = orig end) return true end local function FindStarTool() local places = {LocalPlayer.Character, LocalPlayer:FindFirstChild("Backpack")} for _, c in ipairs(places) do if c then for _, t in ipairs(c:GetChildren()) do if t:IsA("Tool") and (t:GetAttribute("StarName") or t:GetAttribute("StarAsset") or t:GetAttribute("StarIncome")) then return t end end end end return nil end local function IsSelected(idx, key) local o = Options[idx] if not o then return false end local v = o.Value if type(v) ~= "table" then return false end if v[key] ~= nil then return v[key] == true end for _, k in pairs(v) do if k == key then return true end end return false end -- First star tool whose rarity is in the Trash multi-select. local function FindTrashTool() local places = {LocalPlayer.Character, LocalPlayer:FindFirstChild("Backpack")} for _, c in ipairs(places) do if c then for _, t in ipairs(c:GetChildren()) do if t:IsA("Tool") and t:GetAttribute("StarAsset") then local r = t:GetAttribute("StarRarity") if r and IsSelected("TrashRarities", r) then return t end end end end end return nil end local Window = Library:CreateWindow({ Title = "@hidevin", Footer = "[⭐] Star RNG | Leave a like on Rscripts if it works. @hidevin", CopyableFooter = false, DisableSearch = true, Minimizable = true, ShowCustomCursor = true, NotifySide = "Right", Animations = {TabSwitch = true, Groupbox = true, Dropdown = true}, }) pcall(function() Window:SetCornerRadius(10) Library:SetDPIScale(100) if Library.Scheme then Library.Scheme.AccentColor = Color3.fromRGB(88, 101, 242) end end) local Tabs = { Main = Window:AddTab({Name = "Main", Description = "Overview & status"}), Farming = Window:AddTab({Name = "Farming", Description = "Place, unlock, collect, sell"}), Inventory = Window:AddTab({Name = "Inventory", Description = "Roll, buy, upgrade, shops"}), Settings = Window:AddTab({Name = "Settings", Description = "Configure the menu"}), } Tabs.Main:AddPlayerInfo("MainBanner", { Title = "Welcome, @hidevin", Description = {"[⭐] Star RNG — roll, place, upgrade", "All Auto loops run on a 1s interval."}, ThumbnailType = "HeadShot", Height = 84, }) local MainInfo = Tabs.Main:AddLeftGroupbox("Session") MainInfo:AddLabel("StatusLabel", {Text = "Status: loading...", DoesWrap = true}) MainInfo:AddLabel("AreaLabel", {Text = "Plot: ...", DoesWrap = true}) MainInfo:AddLabel("SessionLabel", {Text = "Session: 0s", DoesWrap = true}) MainInfo:AddDivider() MainInfo:AddButton({Text = "Teleport: Base", Func = function() FireRemote("TeleportToBase") end}) MainInfo:AddButton({Text = "Teleport: Market", Func = function() FireRemote("TeleportToMarket") end}) local MainRight = Tabs.Main:AddRightGroupbox("Quick Status") MainRight:AddLabel("CashLabel", {Text = "Cash: ...", DoesWrap = true}) MainRight:AddLabel("AltarLabel", {Text = "Altars: ...", DoesWrap = true}) MainRight:AddLabel("PedestalLabel", {Text = "Rolling stars: ...", DoesWrap = true}) --// Farming: single tab, no sub-tabs (one feature per group) ---------------- local FarmAuto = Tabs.Farming:AddLeftGroupbox("Automation") FarmAuto:AddToggle("AutoPlace", {Text = "Auto Place Best Stars", Default = false, Tooltip = "Hits Equip Best (EquipBestStarsEvent). 1s loop."}) FarmAuto:AddToggle("AutoUnlock", {Text = "Auto Unlock Altars", Default = false, Tooltip = "Fires UpgradeAltarEvent. 1s loop."}) FarmAuto:AddToggle("AutoCollect", {Text = "Auto Collect Income", Default = false, Tooltip = "Touches your Collector via firetouchinterest. Works at range. 1s loop."}) local SellBox = Tabs.Farming:AddRightGroupbox("Selling") SellBox:AddToggle("AutoTrash", {Text = "Auto Trash Stars", Default = false, Tooltip = "Equips a matching star, teleports to Dumpster (prompt needs range), trashes, returns. 1s loop."}) SellBox:AddDropdown("TrashRarities", {Text = "Rarities To Trash", Values = RARITIES, Default = {"Common"}, Multi = true, Searchable = true}) --// Inventory: Roll & Buy combined into one sub-tab ------------------------- local InvRB = Tabs.Inventory:AddSubTab({Name = "Roll & Buy"}) local InvUpg = Tabs.Inventory:AddSubTab({Name = "Upgrades"}) local InvShop = Tabs.Inventory:AddSubTab({Name = "Shops"}) local RollBox = InvRB:AddLeftGroupbox("Auto Roll") RollBox:AddToggle("AutoRoll", {Text = "Auto Roll Stars", Default = false, Tooltip = "Fires Roll prompt. Park near your roller. 1s loop."}) RollBox:AddDropdown("RollStopRarity", {Text = "Stop On Rarity", Values = RARITIES, Default = 5, Tooltip = "Used with Stop toggle below."}) RollBox:AddToggle("RollStopEnabled", {Text = "Stop Rolling On Target+", Default = false, Tooltip = "Pause rolling when a pedestal star meets/exceeds target rarity."}) local BuyBox = InvRB:AddRightGroupbox("Auto Buy Stars") BuyBox:AddToggle("AutoBuyStars", {Text = "Auto Buy Stars", Default = false, Tooltip = "Buys pedestal stars matching rarities. 1s loop."}) BuyBox:AddDropdown("BuyStarRarities", {Text = "Rarities To Buy", Values = RARITIES, Default = RARITIES, Multi = true, Searchable = true}) local UpgBox = InvUpg:AddLeftGroupbox("Star Upgrades") UpgBox:AddToggle("AutoLuck", {Text = "Auto Upgrade Star Luck", Default = false, Tooltip = "UpgradeBoardEvent Luck. 1s loop."}) UpgBox:AddToggle("AutoPedestal", {Text = "Auto Add Pedestals", Default = false, Tooltip = "UpgradeBoardEvent Pedestal. 1s loop."}) local MutBox = InvShop:AddLeftGroupbox("Mutation Merchant") MutBox:AddToggle("AutoMut", {Text = "Auto Buy Mutation Items", Default = false}) MutBox:AddDropdown("MutItems", {Text = "Items (Multi-Select)", Values = MUTATION_IDS, Default = MUTATION_IDS, Multi = true}) local EggBox = InvShop:AddRightGroupbox("Pet Eggs") EggBox:AddToggle("AutoEgg", {Text = "Auto Buy Pet Eggs", Default = false}) EggBox:AddDropdown("EggItems", {Text = "Eggs (Multi-Select)", Values = EGG_NAMES, Default = EGG_NAMES, Multi = true}) local GearBox = InvShop:AddLeftGroupbox("Gear Shop") GearBox:AddToggle("AutoGear", {Text = "Auto Buy Gear", Default = false}) GearBox:AddDropdown("GearItems", {Text = "Gear (Multi-Select)", Values = GEAR_IDS, Default = GEAR_IDS, Multi = true}) GearBox:AddDropdown("GearQty", {Text = "Quantity", Values = {"1", "10"}, Default = 1}) local MenuBox = Tabs.Settings:AddLeftGroupbox("Menu") MenuBox:AddToggle("AntiAFK", {Text = "Anti-AFK", Default = true, Tooltip = "Fires AFKActivity + anti-idle. Enabled by default."}) MenuBox:AddLabel("MenuKeyLabel"):AddKeyPicker("MenuKeybind", {Default = "RightShift", NoUI = true, Text = "Menu keybind"}) MenuBox:AddDropdown("DPIScale", {Text = "DPI Scale", Values = {"50%","75%","100%","125%","150%","175%","200%"}, Default = "100%", Callback = function(v) Library:SetDPIScale(tonumber((v:gsub("%%","")))) end}) MenuBox:AddSlider("CornerRadius", {Text = "Corner Radius", Default = 10, Min = 0, Max = 20, Rounding = 0, Callback = function(v) Window:SetCornerRadius(v) end}) MenuBox:AddDivider() MenuBox:AddButton("Unload", function() Library:Unload() end) Library.ToggleKeybind = Options.MenuKeybind ThemeManager:SetLibrary(Library) SaveManager:SetLibrary(Library) SaveManager:IgnoreThemeSettings() SaveManager:SetIgnoreIndexes({"MenuKeybind"}) ThemeManager:SetFolder("hidevin") SaveManager:SetFolder("hidevin/Star RNG") SaveManager:BuildConfigSection(Tabs.Settings) ThemeManager:ApplyToTab(Tabs.Settings) SaveManager:LoadAutoloadConfig() task.spawn(function() while not Library.Unloaded do if Toggles.AutoRoll and Toggles.AutoRoll.Value then local skip = false if Toggles.RollStopEnabled and Toggles.RollStopEnabled.Value and Options.RollStopRarity then local target = Options.RollStopRarity.Value local ti = RARITY_ORDER[target] or 0 for _, e in ipairs(GetOwnRollingStars()) do local r = e.Star:GetAttribute("StarRarity") if r and (RARITY_ORDER[r] or 0) >= ti then skip = true break end end end if not skip then FirePrompt(GetRollPrompt()) end end task.wait(1) end end) task.spawn(function() while not Library.Unloaded do if Toggles.AutoBuyStars and Toggles.AutoBuyStars.Value then for _, e in ipairs(GetOwnRollingStars()) do local r = e.Star:GetAttribute("StarRarity") if r and IsSelected("BuyStarRarities", r) then FirePrompt(e.Prompt) task.wait(0.2) end end end task.wait(1) end end) task.spawn(function() while not Library.Unloaded do if Toggles.AutoPlace and Toggles.AutoPlace.Value then FireRemote("EquipBestStarsEvent") end task.wait(1) end end) task.spawn(function() while not Library.Unloaded do if Toggles.AutoUnlock and Toggles.AutoUnlock.Value then FireRemote("UpgradeAltarEvent") end if Toggles.AutoLuck and Toggles.AutoLuck.Value then FireRemote("UpgradeBoardEvent", "Luck") end if Toggles.AutoPedestal and Toggles.AutoPedestal.Value then FireRemote("UpgradeBoardEvent", "Pedestal") end if Toggles.AutoCollect and Toggles.AutoCollect.Value then local trig = GetCollectTrigger() local hrp = LocalPlayer.Character and LocalPlayer.Character:FindFirstChild("HumanoidRootPart") if trig and hrp then pcall(function() firetouchinterest(hrp, trig, 0) task.wait(0.3) firetouchinterest(hrp, trig, 1) end) end end task.wait(1) end end) task.spawn(function() while not Library.Unloaded do if Toggles.AutoMut and Toggles.AutoMut.Value then for _, id in ipairs(MUTATION_IDS) do if IsSelected("MutItems", id) then FireRemote("MutationShopPurchaseEvent", id) task.wait(0.2) end end end if Toggles.AutoEgg and Toggles.AutoEgg.Value then for i, name in ipairs(EGG_NAMES) do if IsSelected("EggItems", name) then FireRemote("PurchaseEggEvent", i) task.wait(0.2) end end end if Toggles.AutoGear and Toggles.AutoGear.Value then local q = 1 if Options.GearQty then q = tonumber(Options.GearQty.Value) or 1 end for _, id in ipairs(GEAR_IDS) do if IsSelected("GearItems", id) then FireRemote("ShopPurchaseEvent", id, q) task.wait(0.2) end end end task.wait(1) end end) -- Trash runs solo: equip match, teleport-fire-restore only when needed. task.spawn(function() while not Library.Unloaded do if Toggles.AutoTrash and Toggles.AutoTrash.Value then local tool = FindTrashTool() if tool then if tool.Parent ~= LocalPlayer.Character then pcall(function() local h = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Humanoid") if h then h:EquipTool(tool) end end) task.wait(0.4) end local held = LocalPlayer.Character and LocalPlayer.Character:FindFirstChildOfClass("Tool") if held and held:GetAttribute("StarAsset") then DoPromptNear(GetTrashPrompt(), 0.8) end end end task.wait(1) end end) do pcall(function() LocalPlayer.Idled:Connect(function() if Toggles.AntiAFK and Toggles.AntiAFK.Value then VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end end) end) task.spawn(function() while not Library.Unloaded do if Toggles.AntiAFK and Toggles.AntiAFK.Value then FireRemote("AFKActivity") end task.wait(30) end end) end do local t0 = os.clock() task.spawn(function() while not Library.Unloaded do local dt = math.floor(os.clock() - t0) pcall(function() local area = GetOwnArea() local ls = LocalPlayer:FindFirstChild("leaderstats") local cash = ls and ls:FindFirstChild("Cash") Options.StatusLabel:SetText("Status: " .. tostring(#GetEmptyAltars()) .. " empty altar(s), " .. tostring(#GetOwnRollingStars()) .. " star(s) on pedestals") Options.AreaLabel:SetText("Plot: " .. tostring(area and area.Name or "?") .. " | Unlocked: " .. tostring(area and area:GetAttribute("UnlockedAltarCount") or "?")) Options.SessionLabel:SetText(string.format("Session: %dm %ds", math.floor(dt/60), dt%60)) Options.CashLabel:SetText("Cash: " .. tostring(cash and cash.Value or "?")) local a2 = GetOwnArea() local rm = a2 and a2:FindFirstChild("RegionMarker") local alt = rm and rm:FindFirstChild("Altars") Options.AltarLabel:SetText("Altars total: " .. tostring(alt and #alt:GetChildren() or "?")) Options.PedestalLabel:SetText("Rolling stars: " .. tostring(#GetOwnRollingStars())) end) task.wait(1) end end) end Library:Notify({Title = "@hidevin", Description = "Star RNG loaded. Farming single tab; Roll & Buy combined.", Time = 5}) Library:OnUnload(function() print("[@hidevin] Star RNG unloaded") end)