

Description
Use this Hidevin hub for Hamster Village Roblox!! Now you can get features like Auto Loot Seeds, Auto Merge Hamsters, Auto Collect Cash, Auto Upgrade Buy Tier and Anti AFK, and More!!
The menu is headed @hidevin and splits into Main, Farming, Inventory and Settings, with Farming broken into Collecting and Cash. On Collecting, the Auto-Collect card has the Auto Loot Seeds toggle and a Loot loop delay set to 1s out of 5s, with a note that depositing is done by Auto Collect Cash on the Cash page. The Info card next to it explains the loop: hamsters drop seeds, touching them puts them in your Carry, and a deposit turns Carry into stock you can sell. Inventory is where you set Auto Buy Hamster for 1, 5, 25 or 100 at a time, Auto Merge three of the same tier into a higher one, and upgrade your selling rate and buy tier. Anti AFK is on by default under Settings. The code is open source and only runs inside Hamster Village, so it will not fire in the wrong game. No key on this one, so paste the script and go!!
Features
- Auto Merge Hamsters
- Auto Loot Seeds
- Auto Buy Hamsters in Bulk
- Auto Collect Cash
- Auto Upgrade Buy Tier
- Auto Upgrade Selling Rate
- Anti AFK

Hamster Village
Explore more scripts for this game (1)
-- Hamster Village | @hidevin
-- Game lock: never run outside Hamster Village universe
if game.GameId ~= 10739044772 then
warn("[hidevin] Wrong game. This script only runs in Hamster Village (10739044772).")
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 Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Workspace = game:GetService("Workspace")
local VirtualUser = game:GetService("VirtualUser")
local LocalPlayer = Players.LocalPlayer
local Remotes = ReplicatedStorage:WaitForChild("Remotes")
local GetData = Remotes:WaitForChild("GetData")
-- Design tokens (UI_STYLE.json)
local ACCENT = Color3.fromRGB(88, 101, 242) -- #5865F2
pcall(function()
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 = ACCENT
Library.Scheme.FontColor = Color3.fromRGB(255, 255, 255)
end)
local Window = Library:CreateWindow({
Title = "@hidevin",
Footer = "Hamster Village | Leave a like on Rscripts if it works. @hidevin",
NotifySide = "Right",
ShowCustomCursor = true,
DisableSearch = true,
Minimizable = true,
})
pcall(function() Window:SetCornerRadius(10) end)
local Toggles = Library.Toggles
local Options = Library.Options
-- Tabs (Rebirth deleted: no rebirth mechanic in Hamster Village)
local Tabs = {
Main = Window:AddTab("Main", "home"),
Farming = Window:AddTab("Farming", "wheat"),
Inventory = Window:AddTab("Inventory", "backpack"),
Settings = Window:AddTab("Settings", "settings"),
}
-- ============ Helpers ============
local function getPlot()
local plotName = LocalPlayer:GetAttribute("Plot")
if typeof(plotName) ~= "string" then return nil end
local tycoons = Workspace:FindFirstChild("Tycoon")
if tycoons then tycoons = tycoons:FindFirstChild("Tycoons") end
if not tycoons then return nil end
return tycoons:FindFirstChild(plotName)
end
local function getHRP()
local c = LocalPlayer.Character
if not c then return nil end
return c:FindFirstChild("HumanoidRootPart")
end
local function getButtonBase(name)
local plot = getPlot()
if not plot then return nil end
local buttons = plot:FindFirstChild("Buttons")
if not buttons then return nil end
local btn = buttons:FindFirstChild(name)
if not btn then return nil end
return btn:FindFirstChild("Base") or btn:FindFirstChildWhichIsA("BasePart", true)
end
-- Physical press: teleport to button, hold, return. Proven live:
-- firetouchinterest does NOT trigger these buttons; teleport does.
local function pressButton(name, holdTime)
holdTime = holdTime or 0.7
local base, hrp
pcall(function()
base = getButtonBase(name)
hrp = getHRP()
end)
if not base or not hrp then return false end
local ok = pcall(function()
local cf = hrp.CFrame
hrp.CFrame = base.CFrame + Vector3.new(0, 3, 0)
task.wait(holdTime)
if hrp and hrp.Parent then hrp.CFrame = cf end
end)
task.wait(0.55) -- ButtonTouchCooldown 0.5
return ok
end
local function getDropTouchParts(limit)
local folder = Workspace:FindFirstChild("Drops")
if not folder then return {} end
local out = {}
for _, m in ipairs(folder:GetChildren()) do
if string.match(m.Name, "^Drop_%d+$") then
local t = m:FindFirstChild("Touch", true)
if t and t:IsA("BasePart") then
table.insert(out, t)
if limit and #out >= limit then break end
end
end
end
return out
end
local function fetchData()
local ok, res = pcall(function() return GetData:InvokeServer() end)
if ok and typeof(res) == "table" then return res end
return nil
end
-- State flags (driven by UI)
local F = {
AutoBuy = false, BuyAmounts = { ["1"] = true },
AutoMerge = false,
AutoLoot = false,
AutoCash = false,
AutoUpgradeSell = false,
AutoUpgradeTier = false,
AntiAFK = true,
LootDelay = 1.0, ButtonDelay = 1.0,
}
-- ============ MAIN TAB (no mechanics, info only) ============
local MainL = Tabs.Main:AddLeftGroupbox("Status")
MainL:AddLabel("Hamster Village", true)
MainL:AddLabel("Buy Hamsters, collect Seeds, Deposit, Cashier, Merge for higher tiers.", true)
local CashLabel = MainL:AddLabel("Cash: ...", true, "CashStatus")
local CarryLabel = MainL:AddLabel("Carry: ...", true, "CarryStatus")
local SessionLabel = MainL:AddLabel("Session: 0s", true, "SessionStatus")
local MainR = Tabs.Main:AddRightGroupbox("Help")
MainR:AddLabel("Farming > Collecting: loot seeds.\nFarming > Cash: deposit + cashier.\nInventory > Hamsters: buy + merge.\nInventory > Upgrades: selling + buy tier.", true)
MainR:AddButton({ Text = "Claim Cashier Once", Func = function() task.spawn(function() pressButton("Cashier", 0.7) end) end })
MainR:AddButton({ Text = "Deposit Once", Func = function() task.spawn(function() pressButton("Deposit", 0.9) end) end })
task.spawn(function()
local t0 = os.clock()
while not Library.Unloaded do
task.wait(2)
local ok, _ = pcall(function()
local r = fetchData()
if r then
pcall(function() CashLabel:SetText(string.format("Cash: $%s | PendingCash: %s | PendingDrop: %s", tostring(r.Cash), tostring(r.Tycoon.Shop.PendingCash), tostring(r.Tycoon.Shop.PendingDrop))) end)
pcall(function() CarryLabel:SetText(string.format("Carry: %s | BuyTier: %s | Upgrades: %s", tostring(r.Tycoon.Carry), tostring(r.Tycoon.Shop.BuyTier), tostring(r.Tycoon.Shop.UpgradeCount))) end)
end
pcall(function() SessionLabel:SetText(string.format("Session: %ds | Plot: %s", math.floor(os.clock() - t0), tostring(LocalPlayer:GetAttribute("Plot")))) end)
end)
if not ok then task.wait(2) end
end
end)
-- ============ FARMING TAB (sub-tabs required) ============
local FarmCollect = Tabs.Farming:AddSubTab("Collecting", "basket")
local FarmCash = Tabs.Farming:AddSubTab("Cash", "coins")
local CL = FarmCollect:AddLeftGroupbox("Auto-Collect")
CL:AddToggle("AutoLoot", { Text = "Auto Loot Seeds", Default = false, Tooltip = "Teleport to dropped seeds to collect to Carry." })
CL:AddSlider("LootDelay", { Text = "Loot loop delay", Default = 1, Min = 0.5, Max = 5, Rounding = 1, Suffix = "s" })
CL:AddLabel("Deposit is handled by Auto Collect Cash.", true)
local CR = FarmCollect:AddRightGroupbox("Info")
CR:AddLabel("Seeds drop from hamsters. Touch collects to Carry. Deposit converts Carry to sellable stock.", true)
local SL = FarmCash:AddLeftGroupbox("Selling")
SL:AddToggle("AutoCash", { Text = "Auto Collect Cash", Default = false, Tooltip = "Presses Deposit then Cashier every loop." })
SL:AddSlider("ButtonDelay", { Text = "Cash loop delay", Default = 1, Min = 0.5, Max = 5, Rounding = 1, Suffix = "s" })
SL:AddLabel("Deposit: Carry -> PendingDrop/PendingCash. Cashier: PendingCash -> Cash.", true)
Toggles.AutoLoot:OnChanged(function() F.AutoLoot = Toggles.AutoLoot.Value end)
Toggles.AutoCash:OnChanged(function() F.AutoCash = Toggles.AutoCash.Value end)
Options.LootDelay:OnChanged(function() F.LootDelay = Options.LootDelay.Value end)
Options.ButtonDelay:OnChanged(function() F.ButtonDelay = Options.ButtonDelay.Value end)
-- Auto Loot loop
task.spawn(function()
while not Library.Unloaded do
task.wait(F.LootDelay or 1)
if F.AutoLoot then
pcall(function()
local hrp = getHRP()
if not hrp then return end
local parts = getDropTouchParts(8)
if #parts == 0 then return end
local home = hrp.CFrame
for _, touch in ipairs(parts) do
if not F.AutoLoot or Library.Unloaded then break end
if touch and touch.Parent then
pcall(function()
hrp.CFrame = touch.CFrame + Vector3.new(0, 2, 0)
end)
task.wait(0.35)
end
end
pcall(function() if hrp and hrp.Parent then hrp.CFrame = home end end)
end)
end
end
end)
-- Auto Collect Cash loop (Deposit + Cashier)
task.spawn(function()
while not Library.Unloaded do
task.wait(F.ButtonDelay or 1)
if F.AutoCash then
pcall(function() pressButton("Deposit", 0.9) end)
task.wait(0.4)
if F.AutoCash then pcall(function() pressButton("Cashier", 0.7) end) end
end
end
end)
-- ============ INVENTORY TAB (sub-tabs required) ============
local InvBuy = Tabs.Inventory:AddSubTab("Hamsters", "squirrel")
local InvUpg = Tabs.Inventory:AddSubTab("Upgrades", "arrow-up")
local BL = InvBuy:AddLeftGroupbox("Purchasing")
BL:AddToggle("AutoBuy", { Text = "Auto Buy Hamster", Default = false, Tooltip = "Buys selected amounts every 1s." })
BL:AddDropdown("BuyAmounts", {
Values = { "1", "5", "25", "100" },
Default = 1, Multi = true,
Text = "Buy Amounts (multi)",
Tooltip = "Maps to Add1/Add5/Add25/Add100 buttons.",
})
BL:AddLabel("Costs scale with owned units. Skips silently if cash is short.", true)
local BR = InvBuy:AddRightGroupbox("Merging")
BR:AddToggle("AutoMerge", { Text = "Auto Merge", Default = false, Tooltip = "3 same-tier -> 1 higher tier." })
BR:AddLabel("Needs 3 identical tiers on tower. Presses Merge button.", true)
local UL = InvUpg:AddLeftGroupbox("Stat Upgrades")
UL:AddToggle("AutoUpgradeSell", { Text = "Auto Upgrade Selling Seeds", Default = false, Tooltip = "Upgrade button: raises sale rate." })
UL:AddToggle("AutoUpgradeTier", { Text = "Auto Upgrade Buy Tier", Default = false, Tooltip = "TierUpgrader: raises spawned hamster tier." })
UL:AddLabel("Both cost Cash. Loops press their buttons every 1s.", true)
Toggles.AutoBuy:OnChanged(function() F.AutoBuy = Toggles.AutoBuy.Value end)
Toggles.AutoMerge:OnChanged(function() F.AutoMerge = Toggles.AutoMerge.Value end)
Toggles.AutoUpgradeSell:OnChanged(function() F.AutoUpgradeSell = Toggles.AutoUpgradeSell.Value end)
Toggles.AutoUpgradeTier:OnChanged(function() F.AutoUpgradeTier = Toggles.AutoUpgradeTier.Value end)
Options.BuyAmounts:OnChanged(function()
local v = Options.BuyAmounts.Value
if typeof(v) == "table" then F.BuyAmounts = v else F.BuyAmounts = { [tostring(v)] = true } end
end)
task.spawn(function()
while not Library.Unloaded do
task.wait(1)
if F.AutoBuy then
local amounts = F.BuyAmounts
if typeof(amounts) == "table" then
for _, a in ipairs({ "1", "5", "25", "100" }) do
if amounts[a] then
if not F.AutoBuy or Library.Unloaded then break end
pcall(function() pressButton("Add" .. a, 0.6) end)
task.wait(0.3)
end
end
end
end
if F.AutoMerge then pcall(function() pressButton("Merge", 0.6) end) end
if F.AutoUpgradeSell then pcall(function() pressButton("Upgrade", 0.6) end) end
if F.AutoUpgradeTier then pcall(function() pressButton("TierUpgrader", 0.6) end) end
end
end)
-- ============ SETTINGS TAB ============
local SG = Tabs.Settings:AddLeftGroupbox("Automation")
SG:AddToggle("AntiAFK", { Text = "Anti-AFK", Default = true, Tooltip = "Blocks Roblox kick + 960s idle rejoin teleport." })
Toggles.AntiAFK:OnChanged(function() F.AntiAFK = Toggles.AntiAFK.Value end)
-- Anti-AFK: Roblox Idled + custom IdleClient (960s Teleport)
pcall(function()
LocalPlayer.Idled:Connect(function()
if F.AntiAFK and not Library.Unloaded then
pcall(function()
VirtualUser:CaptureController();
VirtualUser:ClickButton2(Vector2.new());
end)
end
end)
end)
-- Block idle rejoin Teleport(PlaceId) while Anti-AFK is on
do
local okHook
local old
okHook, old = pcall(function()
return hookmetamethod(game, "__namecall", function(self, ...)
local m = getnamecallmethod()
if m == "Teleport" and F.AntiAFK then
local ok2, svc = pcall(function() return game:GetService("TeleportService") end)
if ok2 and self == svc then return nil end
end
return old(self, ...)
end)
end)
if not okHook then warn("[hidevin] Teleport hook unavailable, idle-rejoin block off") end
end
local MG = Tabs.Settings:AddRightGroupbox("Menu")
MG:AddLabel("Menu bind"):AddKeyPicker("MenuKeybind", { Default = "RightShift", NoUI = true, Text = "Menu keybind" })
MG:AddButton("Unload", function() Library:Unload() end)
Library.ToggleKeybind = Options.MenuKeybind
-- SaveManager / ThemeManager
ThemeManager:SetLibrary(Library)
SaveManager:SetLibrary(Library)
SaveManager:IgnoreThemeSettings()
SaveManager:SetIgnoreIndexes({ "MenuKeybind" })
ThemeManager:SetFolder("hidevin")
SaveManager:SetFolder("hidevin/Hamster Village")
SaveManager:BuildConfigSection(Tabs.Settings)
ThemeManager:ApplyToTab(Tabs.Settings)
SaveManager:LoadAutoloadConfig()
Library:Notify({ Title = "hidevin", Description = "Hamster Village loaded on pincoat4", Time = 4, Type = "Success" })