Dispensary — GreenLeaf Wellness
A licensed medical cannabis dispensary with a storefront NUI styled as a full desktop browser window — med-card gating, live shelf stock, a staffed job with payroll, wholesale supply runs, and a business till.
Licensed medical cannabis dispensary at the Smoke on the Water storefront (Vespucci Beach boardwalk). The storefront NUI renders as a full desktop browser window with the dispensary's website (greenleafwellness.com/shop) inside — traffic lights, address bar and all.
Flow (same as real life)
- Visit Los Santos City Hall front desk → buy the **Medical Marijuana
Card** ($100 + city tax). This sets
metadata.licences.weedvia rr-cityhall (license keyfauna_permit). - Walk to the GreenLeaf counter (green chevron = licensed, amber = browse only) → press [E].
- Browse the site, fill the cart, Place Order. No card → checkout is blocked with a "visit City Hall" notice (browsing still allowed).
- Payment: bank first, cash fallback. 10% cannabis excise tax forwards to the city treasury (rr-citybank) when running.
Server-side hardening
- Cart is re-priced from
Config.Catalogon the server; client totals ignored. - License re-checked server-side at checkout.
CanCarryItemverified per line before charging; per-source checkout lock.- Every sale logged to
rr_dispensary_sales(auto-created).
Items (ox_inventory)
disp_ogkush, disp_bluedream, disp_gelato, disp_purplehaze, disp_joint, disp_gummies, disp_brownie, disp_vape, disp_shatter, disp_cbd_oil, disp_case — appended to ox_inventory/data/items.lua (marked RE-APPLY block). Stress/hunger applied natively by ox_inventory. Product icons: rr-dispensary/html/images/*.svg (storefront) + ox_inventory/web/images/disp_*.png (inventory — RE-APPLY on update).
Dispensary job & supply chain
Job dispensary (qbx_core shared/jobs.lua, RE-APPLY): Budtender → Senior Budtender → Assistant Manager → Manager → Owner (boss). Payroll is automatic via gas-timeclock once clocked in.
- Shelf stock IS the back-room stash (
dispensary_storage, job-locked). Checkout removes sold product from it; the storefront shows live stock badges ("12 in stock" / "Only 4 left" / "Out of stock"). - Staff room (
Config.StaffRoom, ox_target): Clock In/Out · Back-Room Storage · Unpack Cases · Business Till. - Licensed distributor (
Config.Facility— Pacific Growers Collective, Grapeseed): on-duty staff order wholesaledisp_cases (10 units, 40% of retail, paid from the till), optionally grab a delivery van, haul cases back (6kg each — you'll want the van), and unpack at the staff room. - Till (
rr_dispensary_business): customer sale revenue (pre-tax) accrues here and funds wholesale orders. Anyone can deposit; only the Owner withdraws. Wholesale orders logged torr_dispensary_orders. - Auto-restock fallback (
Config.AutoRestock, default ON): tops every product up to 15 units hourly so the shop works with no staff hired. Turn off once the job is staffed.
Commands
/dispensary— open the store (must be within 15m of the counter)/dispcoords— print + copy avec4to relocateConfig.Location/Config.StaffRoom/dispsupplycoords— print + copy avec4to relocateConfig.Facility
Notes
[custom]is auto-ensured; no server.cfg change needed.- The browser-window look is an intentional user-requested exception to the CEO dashboard standard — do not "fix" it to the CEO shell.
