Walk up and press E (or use ox_target if enabled). A dialog opens showing the machine, the price per drop, how many prizes are left and your balance.
Choose how many drops you want — 1 by default, up to 10. You pay for all of them up front and they are used one after another; the session ends when you run out.
Machines listed in Config.Machines are read-only: they load on start and cannot be edited or deleted in game. Useful for fixed locations you don't want anyone touching.
With Config.Ownership.enabled = true, a machine that is up for sale shows [E] - Buy machine. Once bought, the owner presses G at the cabinet to open the management panel:
Action
Detail
Set the price per drop
Within the configured price limits (100–300 by default)
Collect the till
The takings, minus the city's commission (20 % by default)
Restock
Refills the stock. Costs the restock price per missing prize
Statistics
Prizes won and total revenue
Sell it back
Refunds a share of the purchase price (60 % by default)
A player may own up to maxPerPlayer machines (2 by default).
Owned machines are not auto-restocked by default — that is what the owner is paying for. Unowned machines refill themselves 15 seconds after running out.
Set Config.Gameplay.autoRestockOwned = true if you want owned machines refilled for free too.
{ id = 'teddy', -- internal key, never rename it once machines use it
model = 'prop_bear_01', -- any prop on your server
label = 'Teddy Bear', -- shown in the creator
grip = 0.45, -- 0 = impossible to catch, 1 = always
color = '#f472b6', -- dot colour in the creator
count = 1, -- optional: always stock exactly this many
reward = { item = 'teddy_bear', amount = 1 } },
A reward can be money, an item, or both at once. If the prop is missing from your server, that prize is skipped with a console warning instead of breaking the machine.
Never rename an id once machines are already carrying that prize.
Config.Prizes.defaults lists prizes stocked in every cabinet, whether or not they were ticked in the creator — the eight plush toys sit there, one of each.
A 45,000 machine pays for itself in roughly 1,000 drops. The money created as prizes (~58) almost exactly matches what commission and restock burn (~56), so the machines do not inflate your economy.
Everything you are meant to change is in config/main.lua.
The presentation and physics of the rig — arcade audio, camera work, animations, claw speeds, grab geometry and how the prize pile is built — are calibrated against the cabinets and props the resource ships with and are not exposed in the config. Nothing is missing: those values are fixed by design.
The four cabinets that ship are already calibrated. To add your own, copy an entry in Config.MachineModels and measure it in game with the calibration commands — do not guess the numbers by hand.
Every value is a local offset from the cabinet origin (x = right, y = forward, z = up), so the same numbers work at any position and heading.
Value
What it is
bin
The interior box the claw travels through
clawRest
Where the claw parks
clawFloorZ
The lowest point the claw may descend to
chute
Where the claw goes to release a prize
chuteArea
The hole under the chute — no prize is ever spawned inside it
payout
The tray where the won prize lands
binFloorZ
The floor the prize pile rests on
camera
The play camera: position, target, fov
stand
Where the player is snapped to
handIk
Where the hand sits on the joystick
contactOverlap
How deep the jaws come down over a prize before closing
locales/*.json — over 40 languages included. Set Config.Locale to the one you want.
To edit or add one, copy the English file, translate the values, and name the file after your locale code. Locale files are read at runtime: a resource restart is enough, no rebuild needed.