-- [[ 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=6aaafe3a10c635eda8fb0632"))() end) end) --[[rscripts:analytics:end]] -- hidevin | Unboxing Simulator [UPDATE] -- Rules cached for session: header "@hidevin" no icons, footer "Leave a like on Rscripts if it works. @hidevin | ", -- tabs Main(dashboard only)/Farming(Boxes,Areas)/Inventory(Equipping,Shop)/Settings(Config+AntiAFK on), no Rebirth. -- UI lib: ObsidianUltra | Tokens: bg #0d0d0d card #282828 border #3a3a3a radius 10 accent #5865F2 | Hide key RightShift 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 -- Design tokens (UI_STYLE.json) Library.Scheme.BackgroundColor = Color3.fromRGB(13, 13, 13) Library.Scheme.MainColor = Color3.fromRGB(40, 40, 40) Library.Scheme.OutlineColor = Color3.fromRGB(58, 58, 58) Library.Scheme.AccentColor = Color3.fromRGB(88, 101, 242) Library.Scheme.FontColor = Color3.fromRGB(255, 255, 255) -- Safe requires (game modules) local function tryRequire(path) local ok, mod = pcall(function() return require(path) end) if ok then return mod end return nil end local BoxController = tryRequire(ReplicatedStorage.Controllers.BoxController) local InventoryController = tryRequire(ReplicatedStorage.Controllers.InventoryController) local AreaController = tryRequire(ReplicatedStorage.Controllers.AreaController) local ShopController = tryRequire(ReplicatedStorage.Controllers.ShopController) local Boxes = tryRequire(ReplicatedStorage.Modules.Remotes.Boxes) local Economy = tryRequire(ReplicatedStorage.Modules.Remotes.Economy) local World = tryRequire(ReplicatedStorage.Modules.Remotes.World) local PlayerData = tryRequire(ReplicatedStorage.Modules.PlayerData) local Clock = tryRequire(ReplicatedStorage.Shared.Clock) local AreaData = tryRequire(ReplicatedStorage.Shared.AreaData) local WeaponList = tryRequire(ReplicatedStorage.Shared.WeaponList) local GAME_NAME = "Unboxing Simulator [UPDATE]" local Window = Library:CreateWindow({ Title = "@hidevin", Footer = "Leave a like on Rscripts if it works. @hidevin | " .. GAME_NAME, CopyableFooter = false, Center = true, AutoShow = true, Resizable = true, DisableSearch = true, Minimizable = true, ShowCustomCursor = false, CornerRadius = 10, NotifySide = "Right", ToggleKeybind = Enum.KeyCode.RightShift, }) Window:SetCornerRadius(10) pcall(function() Library:SetDPIScale(100) end) -- Tabs (Rebirth deleted: no mechanic in this game) local MainTab = Window:AddTab({ Name = "Main", Description = "Dashboard", SingleColumn = true }) local FarmingTab = Window:AddTab({ Name = "Farming", Description = "Auto farming" }) local InventoryTab = Window:AddTab({ Name = "Inventory", Description = "Items and shop" }) local SettingsTab = Window:AddTab({ Name = "Settings", Description = "Config and menu" }) -- Main: dashboard only, no mechanics MainTab:AddPlayerInfo("MainBanner", { Title = "Welcome to @hidevin", Description = { '' .. GAME_NAME .. " — dashboard only", "Farming and shop live in their own tabs.", }, ThumbnailType = "HeadShot", Height = 84, }) local InfoBox = MainTab:AddGroupbox({ Name = "Info" }) local GameLabel = InfoBox:AddLabel(GAME_NAME, true) local SessionLabel = InfoBox:AddLabel("Session: 00:00", true) local StatusBox = MainTab:AddGroupbox({ Name = "Status" }) local FarmStatus = StatusBox:AddLabel("Farm: idle", true) local UnlockStatus = StatusBox:AddLabel("Unlock: idle", true) local EquipStatus = StatusBox:AddLabel("Equip: idle", true) -- Farming sub-tabs (mandate: >1 feature must split) local FarmBoxes = FarmingTab:AddSubTab({ Name = "Boxes" }) local FarmAreas = FarmingTab:AddSubTab({ Name = "Areas" }) local FarmBox = FarmBoxes:AddLeftGroupbox("Auto Farm") FarmBox:AddToggle("AutoFarm", { Text = "Auto Click / Farm Boxes", Default = false, Tooltip = "Attacks closest box in range" }) FarmBox:AddSlider("FarmRange", { Text = "Farm Range", Default = 150, Min = 50, Max = 300, Rounding = 0, Suffix = " studs" }) FarmBox:AddSlider("FarmDelay", { Text = "Loop Delay", Default = 0.5, Min = 0.15, Max = 2, Rounding = 2, Suffix = "s" }) FarmBox:AddToggle("TeleportToBox", { Text = "Teleport To Box", Default = true, Tooltip = "Move to box when out of hit range" }) local FarmHelp = FarmBoxes:AddRightGroupbox("Info") FarmHelp:AddLabel("Farms nearest box via BoxController + AttackBox remote.", true) FarmHelp:AddLabel("Set delay to 1s to match project auto-rule; lower is faster.", true) local UnlockBox = FarmAreas:AddLeftGroupbox("Auto Unlock") UnlockBox:AddToggle("AutoUnlock", { Text = "Auto Unlock Next Area", Default = false }) local NextAreaLabel = UnlockBox:AddLabel("Next: ...", true) local UnlockHelp = FarmAreas:AddRightGroupbox("Info") UnlockHelp:AddLabel("Buys next area when affordable. Skips prompt to avoid spam.", true) -- Inventory sub-tabs (mandate: separate purchasing from equipping) local InvEquip = InventoryTab:AddSubTab({ Name = "Equipping" }) local InvShop = InventoryTab:AddSubTab({ Name = "Shop" }) local EquipBox = InvEquip:AddLeftGroupbox("Best Equipment") EquipBox:AddToggle("AutoEquipHats", { Text = "Auto Equip Best Hats", Default = false }) EquipBox:AddToggle("AutoEquipPets", { Text = "Auto Equip Best Pets", Default = false }) EquipBox:AddToggle("AutoEquipWeapon", { Text = "Auto Equip Best Weapon", Default = false }) local EquipHelp = InvEquip:AddRightGroupbox("Info") EquipHelp:AddLabel("Hats/Pets use EquipBest. Weapon equips highest unlocked index.", true) local ShopBox = InvShop:AddLeftGroupbox("Buy Weapons") -- Build weapon dropdown values dynamically from WeaponList local WeaponNames = { "Wing Blade", "Iron Sword", "Stone Hammer" } local WeaponIdxByName = {} pcall(function() if WeaponList then local tmp = {} for idx, info in pairs(WeaponList) do if type(idx) == "number" and type(info) == "table" and info.Name then table.insert(tmp, { Index = info.WeaponIndex or idx, Name = tostring(info.Name) }) end end table.sort(tmp, function(a, b) return a.Index < b.Index end) if #tmp > 0 then WeaponNames = {} WeaponIdxByName = {} for _, e in ipairs(tmp) do if WeaponIdxByName[e.Name] == nil then table.insert(WeaponNames, e.Name) WeaponIdxByName[e.Name] = e.Index end end else for _, n in ipairs(WeaponNames) do WeaponIdxByName[n] = nil end end end end) ShopBox:AddDropdown("SelectedWeapons", { Text = "Buy Selected Weapons", Values = WeaponNames, Default = {}, Multi = true, AllowNull = true, Searchable = true, Expandable = true, ExpandColumns = 2, MaxVisibleDropdownItems = 8, }) ShopBox:AddToggle("AutoBuySelected", { Text = "Auto Buy Selected", Default = false }) local BuySelectedOnceFn = nil ShopBox:AddButton({ Text = "Buy Selected Once", Func = function() task.spawn(function() if BuySelectedOnceFn then BuySelectedOnceFn() end end) end }) local ShopInfo = InvShop:AddRightGroupbox("Info") local OwnedLabel = ShopInfo:AddLabel("Owned weapons: ...", true) ShopInfo:AddLabel("Multi-select weapons, then buy once or auto-buy every 1s.", true) -- Settings: config + anti-afk (on by default) local MenuBox = SettingsTab:AddLeftGroupbox("Menu") MenuBox:AddToggle("AntiAFK", { Text = "Anti-AFK", Default = true, Tooltip = "Prevents idle kick" }) MenuBox:AddToggle("KeybindMenuOpen", { Text = "Open Keybind Menu", Default = Library.KeybindFrame and Library.KeybindFrame.Visible or false, Callback = function(v) Library.KeybindFrame.Visible = v end }) MenuBox:AddToggle("ShowCustomCursor", { Text = "Custom Cursor", Default = Library.ShowCustomCursor, Callback = function(v) Library.ShowCustomCursor = v end }) MenuBox:AddDropdown("NotificationSide", { Text = "Notification Side", Values = { "Left", "Right" }, Default = "Right", Callback = function(v) Library:SetNotifySide(v) end }) MenuBox:AddSlider("CornerRadius", { Text = "Corner Radius", Default = 10, Min = 0, Max = 20, Rounding = 0, Callback = function(v) Window:SetCornerRadius(v) end }) MenuBox:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", { Default = "RightShift", NoUI = true, Text = "Menu keybind" }) 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/" .. GAME_NAME) SaveManager:BuildConfigSection(SettingsTab) ThemeManager:ApplyToTab(SettingsTab) SaveManager:LoadAutoloadConfig() -- Helpers local function getHRP() local char = LocalPlayer.Character if not char then return nil, nil end local hrp = char:FindFirstChild("HumanoidRootPart") or char.PrimaryPart return hrp, char end local function getMiscCount(currency) if PlayerData and PlayerData.Inventory and PlayerData.Inventory.GetMiscCount then local ok, n = pcall(function() return PlayerData.Inventory:GetMiscCount(currency) end) if ok and type(n) == "number" then return n end end if PlayerData and PlayerData.data and PlayerData.data.Miscs then local m = PlayerData.data.Miscs[currency] if m and type(m.Count) == "number" then return m.Count end end return 0 end local function findWeaponStand(weaponIndex) for _, d in ipairs(Workspace:GetDescendants()) do local ok, v = pcall(function() return d:GetAttribute("WeaponIndex") end) if ok and v == weaponIndex then return d end end return nil end BuySelectedOnceFn = function() if not Economy or not Options.SelectedWeapons then return "no economy" end local sel = Options.SelectedWeapons.Value if type(sel) ~= "table" then return "nothing selected" end local picked = {} for name, on in pairs(sel) do if on then table.insert(picked, name) end end -- Single-select shape: Value may be a string if #picked == 0 and type(sel) == "string" then picked = { sel } end if #picked == 0 and Options.SelectedWeapons.GetActiveValues then local ok, act = pcall(function() return Options.SelectedWeapons:GetActiveValues() end) if ok and type(act) == "table" then picked = act end end if #picked == 0 then Library:Notify({ Title = "@hidevin", Description = "Select at least one weapon first.", Time = 3 }) return "empty" end for _, name in ipairs(picked) do local idx = WeaponIdxByName[name] if idx == nil then -- Fallback: resolve by scanning WeaponList for the name pcall(function() for i, info in pairs(WeaponList) do if type(info) == "table" and tostring(info.Name) == tostring(name) then idx = info.WeaponIndex or i break end end end) end if idx == nil then continue end if PlayerData and PlayerData.data and PlayerData.data.WeaponsUnlocked and PlayerData.data.WeaponsUnlocked >= idx then continue end local stand = findWeaponStand(idx) if stand then local currency = stand:GetAttribute("Currency") local price = stand:GetAttribute("Price") if currency and price and getMiscCount(currency) < price then continue end pcall(function() Economy.PurchaseItem.Call(stand) end) task.wait(0.5) end end return "done" end -- Anti-AFK (enabled by default) LocalPlayer.Idled:Connect(function() local t = Toggles.AntiAFK if t and not t.Value then return end pcall(function() VirtualUser:CaptureController() VirtualUser:ClickButton2(Vector2.new()) end) end) -- Session timer + status local StartTime = os.clock() task.spawn(function() while not Library.Unloaded do task.wait(1) pcall(function() local el = math.floor(os.clock() - StartTime) local mm = string.format("%02d:%02d", math.floor(el / 60), el % 60) SessionLabel:SetText("Session: " .. mm) if PlayerData and PlayerData.data then OwnedLabel:SetText("Owned weapons: " .. tostring(PlayerData.data.WeaponsUnlocked) .. " | Equipped: " .. tostring(PlayerData.data.Weapon)) local nextIdx = (PlayerData.data.AreasUnlocked or 1) + 1 if AreaData then local ok, info = pcall(function() return AreaData.Get(nextIdx) end) if ok and info then NextAreaLabel:SetText("Next: " .. tostring(info.Name) .. " (" .. tostring(info.Price) .. ")") else NextAreaLabel:SetText("Next: max / unknown") end end end end) end end) -- Auto farm boxes (fast loop; set 1s to match project auto-rule) task.spawn(function() while not Library.Unloaded do local delay = 0.5 pcall(function() delay = tonumber(Options.FarmDelay.Value) or 0.5 end) task.wait(delay) if not (Toggles.AutoFarm and Toggles.AutoFarm.Value) then continue end pcall(function() if not (BoxController and Boxes and Clock) then FarmStatus:SetText("Farm: missing controllers") return end local hrp = getHRP() if not hrp then return end local range = 150 pcall(function() range = tonumber(Options.FarmRange.Value) or 150 end) local box = BoxController.GetClosestBoxInRange(hrp.Position, range, {}) if not box or not box.Field or not box.Id then FarmStatus:SetText("Farm: no box in range") return end local dist = (box.CFrame.Position - hrp.Position).Magnitude local reach = (box.HitRange or 8) + 6 if dist > reach then if Toggles.TeleportToBox and Toggles.TeleportToBox.Value then hrp.CFrame = CFrame.new(box.CFrame.Position + Vector3.new(0, 3, 4), box.CFrame.Position) FarmStatus:SetText("Farm: moving to box " .. tostring(box.Id)) else FarmStatus:SetText("Farm: box too far (" .. math.floor(dist) .. ")") end return end local dmg = box:GetDamage() if not dmg or dmg <= 0 then FarmStatus:SetText("Farm: equip a hat (0 dmg)") return end local ts = Clock.now() box:TakeDamage(dmg, ts) Boxes.AttackBox.Fire(box.Field.Id, box.Id, ts) FarmStatus:SetText("Farm: hitting " .. tostring(box.Id)) end) end end) -- Auto unlock (1s loop per project rule) task.spawn(function() while not Library.Unloaded do task.wait(1) if not (Toggles.AutoUnlock and Toggles.AutoUnlock.Value) then continue end pcall(function() if not (PlayerData and PlayerData.data and AreaData and AreaController) then return end local nextIdx = (PlayerData.data.AreasUnlocked or 1) + 1 local ok, info = pcall(function() return AreaData.Get(nextIdx) end) if not ok or not info then UnlockStatus:SetText("Unlock: max area") return end if (info.Price or 0) <= getMiscCount(info.Currency) then AreaController.Purchase(info, true) UnlockStatus:SetText("Unlock: bought " .. tostring(info.Name)) else UnlockStatus:SetText("Unlock: saving for " .. tostring(info.Name)) end end) end end) -- Auto equip best (1s loops per project rule) task.spawn(function() while not Library.Unloaded do task.wait(1) pcall(function() if not (PlayerData and PlayerData.data and InventoryController) then return end local did = {} if Toggles.AutoEquipHats and Toggles.AutoEquipHats.Value then InventoryController.EquipBest("Hat") table.insert(did, "hats") end if Toggles.AutoEquipPets and Toggles.AutoEquipPets.Value then InventoryController.EquipBest("Pet") table.insert(did, "pets") end if Toggles.AutoEquipWeapon and Toggles.AutoEquipWeapon.Value and ShopController then local unlocked = PlayerData.data.WeaponsUnlocked or 1 if (PlayerData.data.Weapon or 1) ~= unlocked then ShopController.EquipWeapon(unlocked) end table.insert(did, "weapon") end if #did > 0 then EquipStatus:SetText("Equip: " .. table.concat(did, "+")) end end) end end) -- Auto buy selected (1s loop per project rule) task.spawn(function() while not Library.Unloaded do task.wait(1) if not (Toggles.AutoBuySelected and Toggles.AutoBuySelected.Value) then continue end pcall(function() if BuySelectedOnceFn then BuySelectedOnceFn() end end) end end) Toggles.AutoFarm:OnChanged(function() Library:Notify({ Title = "@hidevin", Description = "Auto Farm: " .. tostring(Toggles.AutoFarm.Value), Time = 2 }) end) Library:OnUnload(function() print("[@hidevin] Unloaded.") end)