Bartender Script
Step behind the bar and mix drinks like a pro. An interactive bartender job with a drink-making minigame, recipes, tips, and a slick NUI that turns any bar into a living workplace.
Walk up to a bartender ped, target them, and order a drink. The drink is served over the bar — you pay, your character drinks it on the spot (animation + glass prop), your thirst is restored, and alcohol builds a buzz that turns into a drunk effect and wears off over time. Nothing is kept in your inventory.
Fully in-game setup — admins place, move, rename and delete bartenders with the /bartender command. No config editing, no SQL file to import: the database table creates itself on first start and every change syncs to all players instantly.
In-game setup (/bartender)
Admin-only (see Permissions below). Opens a menu with two options:
- Place a new bartender — enter a bar name, pick a ped from the preset
list (or type any custom ped model), optionally enable a map blip and pick
its color. A translucent ghost ped then appears in front of you:
- 🚶 walk around to position it
- ← / → rotate it
- ↑ / ↓ push it away / pull it closer
- E confirm · Backspace cancel
On confirm it's saved to the database and appears for every player on the server immediately.
- Manage bartenders — lists every placed bartender sorted by distance. Pick one to teleport to it, move it (ghost preview again), rename it, or delete it (with confirmation).
Permissions
Server admins can use /bartender out of the box — the check accepts the command or admin aces (which the standard Qbox/QBCore templates grant to the admin group) and the framework's own admin/god permission. To grant access to other groups or players, add the dedicated ace in server.cfg:
add_ace group.mod rrbartender.admin allow
The command name and ace are configurable via Config.AdminCommand and Config.AdminAce. All permission checks run server-side.
How it works
- A bartender ped spawns at each bar (in-game placements + optional config
entries) when you get close and despawns when you leave (via
ox_libpoints). ox_targeton the ped → Order a drink → a menu of drinks with prices.- The server takes payment (cash first, then bank) and only allows it if you are actually standing at the bar. Prices live server-side so they can't be spoofed.
- Drinking plays an animation with the matching glass, tops up thirst (Qbox thirst statebag), and adds a buzz. Water and coffee lower the buzz, so players can sober up at the bar.
Buzz / drunk effect
Buzz is a 0–100 value. As it rises you get camera sway + motion blur (tipsy), a drunk walk (drunk), and occasional stumbles (wasted). It decays on its own — roughly 8 minutes from fully wasted back to sober at default settings. Tune the thresholds and decay rate in config.lua → Config.Buzz.
Adding / moving bars
Use /bartender in-game (see above) — that's the intended way. Placements persist in the rr_bartender_locations table across restarts.
If you'd rather keep locations in the config file, that still works too:
- Stand exactly where you want the bartender to stand.
- Run
/barcoords— the coordinates print to console **and copy to your clipboard**. - Paste the
vec4(...)into acoords =entry underConfig.Barsinconfig.luaand set aname,model, and optionalblip.
Config-file bars show up alongside in-game placements, but they can't be edited from the /bartender manage menu.
Editing the drink menu
Config.Drinks controls everything shown in the order menu:
price— dollars chargedthirst— hydration restored (0–100)buzz— alcohol hit; negative sobers you upprop— glass/bottle held during the anim (auto-skipped if the model is invalid)time— drinking duration in ms (optional, default 4000)
Optional: qb-pedplacer integration (sold separately)
rr-bartender is fully standalone — everything above works on its own via the /bartender command. If you also own qb-pedplacer, it can turn any placed ped into a drink-serving bartender:
/pedplacer→ Place New Ped → pick any model → settings → weapon → 🍸 Bartender (Serves Drinks).- Aim, RMB to place. That ped now has the Order a drink target and is persisted in the pedplacer database like any other placed ped.
Move/delete it from the pedplacer Manage menu. The location is registered with this resource automatically so the server-side proximity check accepts orders there.
The integration is auto-detected in both directions — neither resource needs the other installed, and no config change is required to run them together.
Exports (used by qb-pedplacer, available to any resource)
- Client:
exports['rr-bartender']:AddBartenderTarget(ped)— attach the "Order a drink" interaction to any ped entity. - Client:
exports['rr-bartender']:RemoveBartenderTarget(ped). - Server:
exports['rr-bartender']:RegisterBarLocation(key, {x=,y=,z=})/RemoveBarLocation(key)— add/remove a coordinate the proximity check trusts.
Dependencies
Required: ox_lib, ox_target, oxmysql, and either Qbox (qbx_core) or QBCore (qb-core) — the framework is auto-detected at runtime, no config needed.
Optional (auto-detected, sold separately — everything degrades gracefully without them):
qb-pedplacer— place drink-serving bartenders with the ped placer.rr-speech— voiced bartender lines.rr-ai— AI-written bartender dialogue (seeConfig.AI).
Install
- Drop the folder in
resources/[custom]/rr-bartender. - Add
ensure rr-bartenderto your server config (or rely on the[custom]group ensure). - That's it — no SQL to import. The
rr_bartender_locationstable is created automatically on first start. Join as an admin and run/bartenderto place your first bartender.
