Jixryo Restaurants
Restaurants laid out in the world as stations, a kitchen cooked by hand on a griddle, a fryer, a fridge and a drinks fountain, a register with tickets on kitchen screens, menu boards, a Takeout app with deliveries, a drive-thru, supplies by Freight or courier, and a Restaurant app on the computers.
Version 0.8.1 Updated See it on its script page
On this page
Jixryo Restaurants turns any job into a working restaurant. City staff mark the restaurant's area and lay out its stations as props or points; its managers do the rest from inside the area. Customers order at the register, a kiosk, the drive-thru or the Takeout app on the phone and tablet, pay on their own screen, and the ticket shows on the kitchen screen. Cooks make each dish by hand at a griddle, a fryer, a fridge, a prep table and a drinks fountain that everyone near can watch, and every dish comes out stamped with its quality. Menu boards play designs on real screens, supplies arrive by Jixryo Freight or a courier, and managers run it all from the Restaurant app on Jixryo Computers. The server decides everything; the pages only show what the server sent.
What players get
- A restaurant is its stations. A clock-in, storage (a fridge, a freezer, dry storage and the trash, each an ox_inventory stash the restaurant's people open), registers, a kiosk, a kitchen screen, a packing pass, a pickup counter, menu boards, a drive-thru speaker and window, a delivery dock, and the kitchen itself: griddles, fryers, prep tables, drinks and dessert stations. Each is a prop (the resource's own models or the game's) or a point on something already in the map.
- The prompt is the resource's own. Look at a station within 2.6 m and E uses the marked line; the wheel moves between lines. A line you may not use shows a padlock and why. Nothing is handed to ox_target.
- Front of house. Clock in at the clock-in. At a register, ring up an order for someone within 4 m; they pay on their own screen in cash or by card with a tip (none, 10, 15 or 20 percent), and have 90 seconds before the order lapses. The ticket goes to the kitchen screen. Cooks pack it at the pass, all or none, and the customer collects it at the pickup counter. A kiosk takes orders without a cashier. Whoever rang the order up gets the tip and a 5 percent commission from the business.
- The kitchen, by hand. The griddle has three zones with knobs from 0 to 450 degrees; put a patty on a spot, flip it, drag it off the edge into your pockets, scrape the grease into the trough and spray degreaser once every zone is at or under 300 degrees. The fryer has two wells from 300 to 375 degrees: drop a basket, lift it, tip it out, filter the oil, drain a well into the pan, pour in a fresh jug of
fryer_oil, boil it out with water and scrub it with the brush. The fridge warms while its door is held open, spoils stock when it is warm or dirty, and is sprayed and wiped. The prep table's make page chops, slices and builds; the resource's own fountain is poured at in 3D, with the lever pushed, the stream in its colour and a puddle on the tray when a cup runs over, while any other fountain gets the pour page. Everyone near sees the knobs, patties, oil, baskets, doors, dirt layers, smoke, bubbles and steam. - Quality and skill. Every dish is stamped perfect, good, okay, raw or burnt. Eating a perfect dish gives 10 hunger and takes 5 stress, a good one 5 and 2. Cooking earns the Cooking skill of Jixryo Skills through Jixryo Core when it runs: 12 XP for a perfect dish, 8 good, 4 okay, 1 raw or burnt, 3 a chop, 4 a build, 2 a fill.
- Hygiene. Every station has a cleanliness that falls with use; bands at 70, 40, 15 and 0 change what comes out of it. The trash empties itself every 15 minutes.
- Takeout. The Takeout app on Jixryo Phone and Jixryo Tablet lists the restaurants that are open, takes a pickup or a delivery order, quotes the fee (4 dollars plus 2 per road kilometre, at most 30) to where you stand or to your waypoint, and is paid from your Checking account. Two orders open at once per customer. A driver on duty takes a packed delivery at the pickup counter, gets a blip with the route, carries the bag on foot, and hands it over with E within 3 m. Not handed over within 45 minutes, it is all refunded.
- The drive-thru. Stop in the speaker's lane and the staff on duty are told; a cashier rings the order up to the car from a register; at the window the pay screen comes up, you pay from the car, and E takes the packed order. A passenger gets nothing; on foot, the speaker says to drive up.
- Orders from the city, off by default: in quiet hours, a restaurant that is open and delivers gets orders phoned in from addresses its managers added, delivered to a customer who waits at the door.
- Menu boards. A design is 1 to 8 slides of 5 to 60 seconds each, with layouts, regions (the menu, the meals, the order numbers, promos, hours, a ticker), colours and pictures from allowed hosts. The resource's own rail plays three designs on its three screens; the single board one; a point board plays on its four corners; a kitchen screen shows the tickets.
- Supplies. Mutiny Road Food Distribution sells 14 cases (beef, chicken, potatoes, cheese, cups, oil and the rest) into the restaurant's fridge, freezer or dry storage, by Jixryo Freight to the restaurant's dock when it runs, else by courier in 10 minutes (5 express).
What staff get
- City staff (
group.godandgroup.admin,Config.staff) make restaurants with/restaurants: a job, a radius of 35 m around where they stand (10 to 120 m, 15 m high), up to 40 stations each. They lay out any restaurant, rename and remove it. - Managers are the job's
isbossgrades in qbx_core. They lay out their own restaurant inside its area, and run it from the Restaurant app on Jixryo Computers: the dashboard with the account balance, the menu (prices 1 to 500, up to 40 items, sold-out lines, availability), stock with pars and auto-order, the kitchen's health, waste and who made what, sales, settings (open or closed, hours, commission up to 20 percent, sold-out lines on the boards, phone orders and delivery and its radius), supplies, menu board designs and what each screen shows, and the city's delivery addresses. - The creator. A station is a prop or a point. Props follow your aim, solid, with their doors on them; the wheel turns them (Shift for 1 degree steps), Tab opens the gizmo (Tab moves or rotates, the right mouse button looks, Space drops it to the floor), E or Enter places, Esc or Backspace goes back. A point is a box: the wheel sets its width (Shift height, Ctrl depth), the arrows turn it, F pins the prompt spot, G sets it, H clears it; a point board takes its four corners with E at each. The pointer shows red where it cannot go and green inside the restaurant.
- Every change is audited through Jixryo Core:
restaurants.new,edit,remove,place,move,paid,design,designRemove,screen,menu,autoOrder,supplies,settings,phoneOrder,deliveryOut,delivered,deliveryBack,refunded,cityOrder,cityDelivered,cityAddressandcityAddressRemoved. - Version 0.8.1, from the CHANGELOG: a right click no longer ends a kitchen game, so the fridge's door can be held open with the right mouse button.
- Not working yet, marked so in
shared/kinds.lua: the oven, coffee, seating, sink, locker and computer kinds.
Install
What it replaces. The README names nothing it replaces.
Order. It depends on ox_lib, oxmysql, qbx_core, ox_inventory and Jixryo Core, and uses Jixryo Bank for money and cards, Jixryo Computers for the Restaurant app, Jixryo Freight for supplies to a dock, and Jixryo Phone and Jixryo Tablet for the Takeout app. Start it after them.
server.cfg ensure ox_lib ensure oxmysql ensure qbx_core ensure ox_inventory ensure jixryo_core ensure jixryo_bank ensure jixryo_computers ensure jixryo_trucking ensure jixryo_restaurantsJixryo Computers is optional: without it there is no Restaurant app and everything else works. Jixryo Freight is optional: without it, or without a dock, every supply order comes by courier. Jixryo Phone and Jixryo Tablet are optional: each that runs gets the Takeout app in its store; without either, a customer's order messages come on the HUD. Each of them started later or restarted gets its app again.
Jobs. A restaurant needs a qbx job.
burgershot,rexsdinerandhenhouseare already in qbx_core'sjobs.lua; the job'sisbossgrades are its managers.Money. Payments go into Jixryo Bank's business account for the restaurant's job. If the Bank is not started, or its account refuses, the payment is refused and nothing is charged. Cards need Jixryo Bank 2.1.0 or later; without it the card button says cards are not taken and cash still works.
Items. A new restaurant's menu is its job's template in
Config.menus(Burger Shot's is there, on thebzzz_fastfood_burgershot_*items); a job with no template starts with an empty menu. The kitchen's ingredients (ground_beef,potato,cheddar_block,chickenbreast_breaded,drink_cupand the rest), the dishes andfryer_oilare in the Jixryo ox_inventory fork (data/items/food_ingredients.lua,data/shops.luaandweb/images/fryer_oil.png); its Ingredients Shop sells the raw ingredients andfryer_oilat 15 dollars to the restaurant jobs. Upload the fork with this resource.Database. The tables make themselves on the first start, as six Jixryo Core migration steps:
jixryo_rest_restaurants,_stations,_menu,_orders,_kitchen,_designs,_screens,_settings,_logand_supplies.The Cooking skill is Jixryo Skills'
cooking, through Jixryo Core. Without it, cooking works the same with no XP and no perks.Props. The resource streams its own griddle, fryer, fridge, fountain, tables, kiosk and boards from
stream/; nothing else to upload.Restart the whole server the first time, so every resource sees the items and every game downloads the props.
How other scripts' calls behave
- It answers as itself only. Its one export lives under
jixryo_restaurants; nothing is provided under another name. - qbx_core. Jobs and their grades are read with
GetJobandGetJobs, the clock-in sets duty withSetJobDuty, andGetDutyCountJobcounts who is on. - ox_inventory. The storage stashes are registered through Jixryo Core as
jxrest_<restaurant>_fridge,_freezer,_dryand_trash, for the job's grades; anopenInventoryhook on^jxrest_lets only the restaurant's people open them, and the server opens them withforceOpenInventory. Dishes come out throughAddItem, ingredients go in throughRemoveItem, and eating is caught onox_inventory:usedItem. - Jixryo Bank. Cash goes in and out of the job's account with
AddGroupMoneyandRemoveGroupMoney, the dashboard readsGetGroupBalance, and a card payment runs on the Bank's terminal withChargeafterHasCardTerminalsays one is there. - Jixryo Computers. It adds the app
jixryo_restaurants("Restaurant",web/build/manage.html) for the jobs that have a restaurant, again when they change and when the computers restart. - Jixryo Phone and Jixryo Tablet. It adds the app
jixryo_takeout("Takeout",web/build/order.html, folded and open on the phone) to each that runs, pushes order changes into it withSendAppMessage, and notifies the customer through the phone'sNotifyas that app. - Jixryo Freight. A supply order going to a dock is posted with the Freight resource's
Postexport, as a restaurant job with its cases, and Freight reports back through this resource'sFreightEventexport. - ox_target. With the Jixryo ox_target fork's look mode on, stations are never given to ox_target; the prompt is the resource's own.
- Jixryo Core. It uses the database, inventory, permission, validation, rate limit, player, HUD, audit and skills modules.
- Global state. Every game reads
jxrest_<restaurant>(the queue: tickets and ready orders),jxrest_k<station>(a station's equipment),jxrest_f<restaurant>(the fridge),jxrest_b<restaurant>(the boards) andjxrest_m<restaurant>(the menu).
Its own API
Server export:
| Export | What it does |
|---|---|
FreightEvent(ref, event, data) | Jixryo Freight's word on a supply order: taken, released, atDock, box, done, courier or cancelled. Only jixryo_trucking may call it. |
Events:
| Event | Direction | What it carries |
|---|---|---|
jixryo_restaurants:client:world | to every game | the restaurants and their stations |
jixryo_restaurants:client:changed | to every game | one restaurant or station changed or removed |
jixryo_restaurants:client:creator | to one player | the creator opened or refreshed |
jixryo_restaurants:client:pay | to one player | an order to pay on your screen |
jixryo_restaurants:client:mine | to one player | your own orders changed |
jixryo_restaurants:client:orderState | to one player | an order moved (packed, collected, cancelled) |
jixryo_restaurants:client:drivethru | to one player | the card at the speaker or the window |
jixryo_restaurants:client:delivery | to one player | the delivery run you have out |
The pages' calls go through 56 server callbacks named jixryo_restaurants:server:<name> (the world, the creator, duty, storage, the register, paying, packing, pickup, the kiosk, cooking, boards, the app, supplies, the Takeout app, deliveries, the drive-thru and city orders); they are not an API, and the server checks every one.
Commands and keybinds
| Command or key | Who | What it does |
|---|---|---|
/restaurants | anyone may type it; the server decides | City staff: make a restaurant, lay out any. Managers: lay out their own inside its area. Everyone else is refused |
| Wheel, Shift, Tab, right mouse, Space, E or Enter, Esc or Backspace while placing a prop | city staff, managers | Turn it (Shift 1 degree steps), the gizmo (Tab moves or rotates, the right mouse looks, Space drops to the floor), place, go back |
| Wheel, Shift, Ctrl, arrows, F, G, H, Enter or E while placing a point | city staff, managers | Width (Shift height, Ctrl depth), turn, pin the prompt spot, set it, clear it, save |
| E at each corner, Backspace while placing a point board | city staff, managers | Takes the four corners; Backspace undoes one |
| E, wheel at a station | anyone the line allows | Uses the marked line; the wheel moves between lines |
| Griddle: mouse, 1, 2, 3, F, Q, wheel, S, E, Esc | the cook | Put a patty on the spot clicked, click again to flip, drag it off the edge into your pockets; 1, 2, 3 pick the tool; F flips, Q the next patty; the wheel over a knob turns it; S sprays degreaser; E empties the drawer; Esc steps away |
| Fryer: 1 to 6, mouse, D, Up, Down, R, Esc | the cook | Pick what to fry; click a well to drop or lift the basket; D tips it out; Up and Down set 5 degrees (300 to 375); R switches the well; Esc steps away |
| Fryer service: mouse, F, X, C, W, B, Esc | the cook | Click a door, a valve or the pan; F pumps the filter; X disposes of the pan; C pours fresh oil; W fills boil-out water; B the brush; Esc steps away |
| Fridge: right mouse, S, left mouse held, T, Esc | the cook | Holds the door under the mouse open; S sprays; the cloth wipes while held; T tosses spoiled stock; Esc steps away |
| Fountain: 1, 2, left mouse held, Enter, Esc | the cook | Size; a cup under the valve pours while held and serves when let go in the line; Enter serves it short; Esc puts the cup back |
| E near the customer | the driver | Hands the delivery over |
| E at the drive-thru window | the driver | Takes the packed order |
There are no keybinds to rebind: the resource registers none.
Configuration
config.lua:
| Key | Default | What it does |
|---|---|---|
staff | group.god, group.admin | City staff: make restaurants and lay out any |
restaurants | radius 35.0, minRadius 10, maxRadius 120, height 15, maxStations 40 | A restaurant's area and how many stations it holds |
creator | reach 12.0, gizmo true, rotateStep 5, zones 0.3 to 8 m wide and 0.2 to 4 m high (1.2 by 0.8 by 1.2 to start), anchorReach 3 | How far a station may be put from you, the gizmo, the steps, a point's sizes |
spawnDistance | 60.0 | Props spawn in a game inside this |
look | reach 2.6, markers 8, maxMarkers 12, margin 0.05, assist 4, rows 300 | The prompt: how close you stand, how many rings show, the aim's forgiveness, how often the lines refresh (ms) |
use | reach 4.0 | The server's own check of how close you are |
money | commission 0.05, tips 0, 0.10, 0.15, 0.20, payTimeout 90, maxQty 20, maxLines 30 | The cashier's cut, the tips offered, seconds to pay, an order's size |
register | reach 4.0 | Who the cashier may send an order to |
drivethru | payTimeout 240, alertEvery 60 | Seconds a car has to reach the window and pay; seconds before the same car tells the staff again |
app | phone true, tablet true, maxOpen 2, refresh 3 | The Takeout app on each device, orders open at once, seconds between the page's updates |
delivery | fee base 4, perKm 2, max 30, roadFactor 1.3, radius 3000, radiusLimits 500 to 8000, reach 3.0, within 45 minutes, bag p_ld_bs_bag_01 | The fee, the road's length over a straight line, a restaurant's delivery radius, the handover, the refund time, the bag |
cityOrders | on false, quietFor 600, every 600 to 1200, items 1 to 3, minDistance 400, maxAddresses 20, reach 5.0, fastest 30, 4 peds, 8 names | Orders from the city in quiet hours: when, how often, how big, how far, the least seconds a road kilometre takes |
screens | distance 15.0, boardDistance 30.0, max 6 | How near a kitchen screen or a board gets its browser, and how many at once |
manage | prices 1 to 500, maxItems 40, commission max 20, low 1/3, refresh 5 | The Restaurant app's limits and update rate |
supplies | wholesaler Mutiny Road Food Distribution, fee standard 180, express 320, courier 600, 300, maxCases 60, autoEvery 120, 14 cases | What the wholesaler sells, by the case, and how it arrives |
boards | hosts r2.fivemanage.com, i.imgur.com, media.discordapp.net, maxDesigns 20, hours 6:00 AM to 2:00 AM, a quad 0.3 to 8 m wide and 0.2 to 5 m high, 5 starting designs | Menu board pictures, designs and point boards |
categories | meals, burgers, chicken, sides, drinks, desserts | The menu's sections |
menus | burgershot, 16 items | A job's starting menu |
storage | fridge 60 slots, freezer 60, dry 80, trash 20 (emptied every 15 minutes) | The stashes |
cooking | ambient 75, the griddle (3 zones, 0 to 450, 350, 350 and 300 to start, coolToClean 300), the fryer (2 wells, 300 to 375 in steps of 5, boil 180, oilItem fryer_oil), the fridge (set 36, warm 41, openFor 8, spoiled 0.45), hygiene bands 70, 40, 15, 0, oil capBelow 30 and taintBelow 12, eating, XP, the drinks, the looks (reach 25, 12 steps, the effects), the cloth | The kitchen's maths and looks |
recipes | patties, fries, buckets, nuggets, strips, legs, rings, cut potato, lettuce, tomato and onion, cheese, the cheeseburger, the big burger, the salad, big and small drinks, the cone, the sundae | What each station makes, from what |
Security
- Every callback checks the caller. City staff by ACE or a boss grade of the job for the layout; for use, the restaurant's people from the station's grade, on duty when the station says, within reach of it. Values come from fixed lists, every call is rate limited, and every change is audited.
- Prices are the server's. An order's total comes from the server's menu, never the page. Only the customer pays, near the counter, once: a per-order lock stops a double charge. Cash is taken first and refunded if the account refuses. A card goes through the Bank's terminal; this resource never sees the PIN, only paid or not and the last four digits.
- Packing and pickup. The pass takes the dishes all or none, slot by slot with their stamps, and only the customer collects.
- Cooking. One callback, the server's clock, minimum seconds for every step, cleaning strokes rate limited to 0.2 s (a stroke too soon answers
counted = false, never an error), and a spill only from a drink inConfig.cooking.drinks. - Designs are rebuilt from the fields passed: colours as
#rrggbb, known layouts, regions and backgrounds, 1 to 8 slides of 5 to 60 seconds, pictures over https from the allowed hosts, and no characters that escape CSS. - The app checks the player on every call; the employee dashboard carries no money.
- Supplies are priced and paid on the server, and only
jixryo_truckingmay callFreightEvent. - Takeout. Totals are computed on the server and the page's
expectmust match; "here" is the server's position, a waypoint must be inside the radius, it is paid from Checking first, the delivery money is held on the order, one delivery out per driver and never their own, and the refund after 45 minutes runs even while the customer is offline. - The drive-thru checks from the server's entities that the driver sits in the driver's seat of a car inside the lane.
- City orders need both switches, addresses from the server's position at least 400 m from the restaurant, and a handover no sooner than 30 seconds per road kilometre.
- Nothing leaks. The register never sends names, stashes open only through the server's hook, and every query is parameterised.
Tests
Three suites in dev-tools/luarun/tests, sharing jixryo_restaurants.setup.lua (a real database with Jixryo Core's real modules, qbx_core's jobs, ox_inventory's stashes, Jixryo Bank, Jixryo Computers, Jixryo Phone, Jixryo Tablet and Jixryo Freight stood in). All three run on 2026-10-31.
| Suite | Result | What it covers |
|---|---|---|
jixryo_restaurants.lua | 62 passed, 0 failed | The tables; making restaurants; who may open the creator and place; prop and point placement and every refusal; limits; moving, renaming and removing; reload after a restart; clocking in and out; the storage hook; a station's grade and duty; the trash timer; ox_inventory restarting; menus; the register; ringing up; cash with tips and commission; refusals; declined, cancelled and lapsed orders; packing; pickup; the kitchen screen; the kiosk in cash and by card; card payments declined and timed out; removing a restaurant with an open order; the griddle, grease and carbon; the fryer and its service; the fridge; prep, drinks and dessert; the spill; equipment over a restart; eating and the skill; stroke pacing; the fridge door held; filtering; a cook leaving mid-recipe; a kitchen left for hours; menu board designs and their checks; screens; a point board; the app, its dashboard, menu, stock, pars, supplies by courier and by Freight, sales and settings. |
jixryo_restaurants.takeout.lua | 15 passed, 0 failed | The app's list; a pickup order; refusals; a delivery quote and the money held; the delivery run; given back, left and over a restart; the refund after its time; following an order; settings; the drive-thru; orders from the city. |
jixryo_restaurants.client.lua | 31 passed, 0 failed | A stand-in player's game against the real server: the equipment as published on the server's clock; the griddle, fryer, fridge and fountain played with the mouse; the make page; what everyone near sees (knobs, patties, oil, doors, dirt layers, effects); the tools in hand; the hotbar keys standing down; strokes at the server's pace; the cook hidden in their own view; any other fridge; an unused fryer; the fryer HUD while draining; the temperature limits; a point griddle; menu boards and a point board; the Restaurant app; the Takeout app and a delivery run; the drive-thru; a city order; the creator's pointer and props; the prompt. |
cd dev-tools/luarun
node run.mjs ../../jixryo_scripts/jixryo_restaurants tests/jixryo_restaurants.lua
node run.mjs ../../jixryo_scripts/jixryo_restaurants tests/jixryo_restaurants.takeout.lua
node run.mjs ../../jixryo_scripts/jixryo_restaurants tests/jixryo_restaurants.client.luaCheck it in game
- As city staff, stand in the middle of Burger Shot, type
/restaurants, press +, pick the jobburgershotand make it. Its storage and its menu come with it. - Place a clock-in point, a register, a kitchen screen, a packing pass and a pickup counter, then the kitchen: the resource's own griddle, fryer, fridge and drinks fountain, and a prep table.
- As a Burger Shot employee, look at the clock-in and press E. With a second player at the counter, ring up a Cheeseburger meal: they pay on their own screen, the business account gets it, and the ticket shows on the kitchen screen.
- Cook it from the restaurant's storage: the patty on the griddle, the fries in the fryer, a big drink at the fountain, and the burger built at the prep table after cutting what it needs. Each comes out stamped.
- Pack it at the pass; the customer takes it at the pickup counter.
- Put the three-screen rail on the wall over the counter: the menu, the meals and the order numbers play on its three screens.
- With Jixryo Computers, open the Restaurant app on a manager's computer and change a price: the register and the boards show it at once.
If a prompt sits off a station, a cooking camera sits wrong, or an effect looks too big or small, the values are in shared/kinds.lua, client/rigs.lua and Config.cooking.looks.fx.