M
Description
- Auto Farm Boxes - Auto Unlock Next Area - Auto Equip Best - Buy Selected Weapons {} selected weapons might freeze game if u select too many weapons. my friend wanted farm boxes so yea here u go
GAMEUnboxing Simulator
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=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 | <game>",
-- 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 <b>@hidevin</b>",
Description = {
'<font color="#5865F2">' .. GAME_NAME .. "</font> — 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)
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