Skip to content

Configuration

Every block of Cuxial Supply's shared/config.lua and the editable data files.

General settings live in shared/config.lua. Lines, products, markets, supermarkets, vans and daily tasks are in data/. Restart the resource after editing a file.

Most of the world data can also be edited in game with /supplyadmin. What you save there is stored in the database and wins over the files: lines, products, wholesale markets, shops, supermarkets, vans, carry positions, and the npc position, market, orders, reward and trade settings. To go back to the file values, restore the entry from the editor.

Coordinates, the NPC position, the lines, the wholesale jobs and the item names that come in the files are examples. Change them to fit your server.

General ​

OptionTypeDefaultWhat it does
debugbooleanfalsePrints debug traces in the console. Can also be turned on with setr cuxial_supply_debug 1. The fast command only works with debug on.
ui.accentstringconfigurableAccent colour of the interface, as a hex code.
ui.currency.symbolstring'$'Currency symbol shown in the interface.
ui.currency.localestring'en-US'Number format of the amounts ('en-US', 'es-ES'...).
logs.convarstring'cuxial_supply_webhook'Name of the convar that holds the Discord webhook. With the convar empty, nothing is sent.
admin.auditDaysnumber60Days the audit rows are kept.
admin.permissionstring'admin'Framework permission of the supply staff. See Commands.
accountstring'cash'Account that receives the run payments and from which the van deposit is taken ('cash', 'bank').
jobstring | table'all'Who can do the supply job. 'all' for everyone, a job name, or a list of jobs.

NPC and interaction ​

Block npc.

OptionTypeDefaultWhat it does
coordsvector4examplePosition and heading of the job NPC.
vanSpawnsvector4[]exampleCommon van spawns next to the NPC. A line without its own spawn uses the first free one.
modelstring'a_m_m_farmer_01'Ped model.
distancenumber2.0Metres from which the interaction option is available.
menuDistancenumber6.0The server refuses to open the panel farther than this.
spawnDistancenumber60.0The NPC only exists on a client inside this radius.
bliptablesee fileenabled, sprite, color, scale of the job blip.

Block target.

OptionTypeDefaultWhat it does
distancenumber2.0Metres of the interaction options.
showDistancenumber40.0Distance at which the floating markers over work points are drawn.
iconstablesee fileFont Awesome icon of each interaction option.
markertablesee fileFloating marker: type, scale, height, color ({ r, g, b, a }), bob, rotate.

Work actions ​

Block work. Each action of a line has a maximum distance checked on the server and a progress bar.

OptionTypeDefaultWhat it does
distance.<action>number2.0 to 5.5Metres to the work point for catch, milk, slaughter, pack, bottle, plant, water, harvest, nest, pickup.
ms.<action>number2500 to 7000Duration of the progress bar of each action.
slackMsnumber500Tolerance on the minimum time of each action.
animstablesee fileAnimation (dict, clip, flag) or scenario of each action. drop is the animation of putting something down.
propstablesee fileProps during the bar: in the hand (model, bone, pos, rot), on the ground in front (ground) or on the table in front (front, z).
fx.watertablesee fileWater particles while watering.

Lines in the world ​

OptionTypeDefaultWhat it does
carrytablesee fileCarrying in the hands: animation flag, distance at which teammates' loads are drawn (others), blocked controls (disable) and animation and position for box, crate, sack and hen.
animals.catchDistancenumber5.5Metres between the player and the hen to catch it. Hens are caught with a dive.
animals.corralMarginnumber3.0Metres outside the pen that still count.
animals.fleeDistance / fleeMs / restMsnumber3.0 / 2200 / 2500Hens run away when approached, for fleeMs, then rest.
animals.spawnDistancenumber90.0Radius in which the animals are created.
animals.cowScenariostring'WORLD_COW_GRAZING'Scenario of the cows.
pickup.stacktablesee filePile of crates drawn at the import warehouse.
stations.vanDistancenumber90.0Maximum distance between the van and the processing table.
stations.propstable{ bottle = 'prop_table_03' }Table created per station type. Without an entry the map already has one.
plots.growMsnumber90000Growing time after watering. A line can have its own growMs.
plots.soil / sprout / cropstablesee fileProps of the soil, the sprout and each mature crop.
neststablesee fileNest prop, spawn distance and marker.

Van ​

Block van. The models, deposits and slots of each van are in data/vehicles.lua.

OptionTypeDefaultWhat it does
rearDistancenumber2.5Metres to the rear door to load and unload.
minHealthnumber400.0Minimum engine and body health to get the deposit back.
platestring'SUPL'Plate prefix.
spawnFreeRadiusnumber6.0Metres that must be free of vehicles around the spawn.
spawnTimeoutMsnumber5000Time the server waits for the van to appear before cancelling the start.
fuelnumber100.0Fuel on spawn.
keysbooleantrueGives the keys through cuxial_garages when that resource is running.
bone / anchor / propDistancesee fileWhere the crates are attached and from how far they are drawn.

Block blips: stage, van, central, plant, warehouse and deliver, each with sprite, color and scale.

Crew and run ​

OptionTypeDefaultWhat it does
crew.maxPlayersnumber4Maximum crew size.
crew.inviteDistancenumber8.0Metres between the player who invites and the invited one.
crew.inviteSecondsnumber60Seconds until an invitation expires.
crew.reconnectSecondsnumber180Seconds a seat is kept for a member who disconnects during a run.
crew.splitRewardsbooleantrueLets the crew owner share the money by percentage.
run.cooldownHoursnumber0Hours a player must wait between runs. 0 = no wait.
run.exclusiveRegionsbooleantruetrue = only one crew per line at a time.

Delivery ​

Block deliver.

OptionTypeDefaultWhat it does
radiusnumber3.0Metres to the market manager to sign the delivery note.
palletDistancenumber3.0Metres between the player and the pallet when unloading.
palletModelstring | false'prop_pallet_02a'Pallet prop. false if the map already has one.
stacktablesee fileHow the crates pile up on the pallet.
dockRing / ringColor8.0 / see fileSize and colour of the dock ring.
showDistancenumber80.0Distance at which the dock, pallet and pile are drawn.
demand.high / demand.lownumber0.10 / -0.10Thresholds of the demand indicator in the destination selector: above high is high demand, below low is saturated.

Delivery guide ​

Block guide. The "Next step" line on the HUD and the markers that go with it.

OptionTypeDefaultWhat it does
enabledbooleantrueShows the next step on the HUD.
routebooleantrueGPS route back to the van while carrying something.
showDistancenumber250.0Distance at which the dock ring is visible while delivering.
tickMsnumber500How often the guide is updated.
markertablesee fileMarker over the van's rear door and over the shelf slot to restock: type, scale, color, bob, rotate, distance (metres to draw it), height (over the van) and slotHeight (over the slot).

Payout ​

Block reward. The money of a run is the value of the load, not a fixed amount.

OptionTypeDefaultWhat it does
modestring'split''split': the value × teamMultiplier is divided among the crew. 'team': each member gets the value × teamMultiplier. 'flat': each member gets the full value. A solo player always gets the full value.
teamMultipliernumber2.0Multiplier applied when the crew has two or more members. From 1 to 3 in the editor.
requireScorebooleantruetrue = members who did no task are not paid and do not count for the team.
levelBonusnumber0.2Extra fraction of the value per level of the crew owner above 1. From 0 to 0.2 in the editor.
itemstable{}Items given on payment. Each entry: { item = 'name', count = 1, chance = 50 }.

Wholesale markets ​

Block market.

OptionTypeDefaultWhat it does
tickMinutesnumber10Minutes between market updates.
simulatebooleantrueSimulated consumption of stock on each update.
curvenumber1.6Shape of the price curve: how fast the price drops as stock fills up.
resaleMarkupnumber1.35Margin of the market when it sells.
trendTicksnumber3Updates used to show the price trend.
initialFillnumber0.5Stock of a new market, as a fraction of its cap.
historyHours / historyPointsnumber48 / 36Length of the price history.
ledgerDaysnumber30Days the ledger of movements is kept.
terminalDistancenumber3.0Metres to the terminal.
jittertable{ min = 0.8, max = 1.2 }Random variation of the consumption.
npcDistance / npcScenario60.0 / 'WORLD_HUMAN_CLIPBOARD'Spawn distance and scenario of the market manager.

Block orders: automatic orders with a bonus.

OptionTypeDefaultWhat it does
thresholdnumber0.35A product below this fill can get an order.
targetFillnumber0.75Fill the order aims to reach.
chancenumber0.35Chance of an order per update.
maxOpennumber3Open orders per market.
min / maxnumber10 / 60Crates per order.
bonustable{ min = 0.15, max = 0.40 }Extra pay of the crates that fill the order.
minutesnumber90Lifetime of an order.
staffMinutestable{ min = 10, max = 240 }Lifetime range of orders created by staff.

Sales and wholesalers ​

Block trade.

OptionTypeDefaultWhat it does
wholesaleMarkupnumber1.15Margin over the market's buy price for wholesale jobs at a market terminal.
centralMarkupnumber1.35Margin for everyone else at a market terminal.
retailMarkupnumber1.60Margin of shops without their own margin.
maxCratesnumber50Crates per purchase at a market.
wholesaletableexampleJobs that buy at the wholesale rate: { job = 'name', grade = 0 } per job. They also see the wholesale point of the supermarket.
categoriestable{}Extra product categories: { id, label, icon }.
shopDistance / shopModel / shopBlipsee fileDistance, ped and blip of a new shop.
newProduct / newImporttablesee fileDefaults of a product and of an import line created in the editor.
limitstable{ open = 6, quote = 20, buy = 6 }Rate limits per player.
blockedItemstablesee fileItems no product can give. A trailing * matches a prefix.

Supermarket ​

Block store. Each supermarket is defined in data/stores.lua; this block holds the rules shared by all of them.

OptionTypeDefaultWhat it does
job / societystring'supermarket'Job and business account of a supermarket created in the editor. The included one sets its own in data/stores.lua.
gradestable{ restock = 0, cashier = 1, manager = 2, boss = 3 }Minimum grade for each role. A boss grade of the framework counts as manager and boss.
dutybooleantruetrue = restocking and charging require being on duty.
slotCratesnumber6Crates per stockroom pallet slot.
shelfCapacitynumber12Default units of a shelf slot.
maxTakenumber5Units per take from a shelf.
maxBasketnumber60Units per basket.
distancetablesee fileMetres checked on the server for slots, registers, customers, self-checkouts, basket racks and fridges.
restockMsnumber1500Minimum time between two restocks.
zoneMarginnumber6.0Margin of the store area when it is calculated from the slots.
leavetable{ alarm = true, restock = true, checkMs = 2000 }Leaving with an unpaid basket: alarm to the staff, products back on the shelf, check interval.
chargeSecondsnumber60Seconds a cashier's charge stays valid.
unitMarkupnumber1.6Default price of a unit: base price of the crate × unitMarkup / units per crate.
demandtable{ min = 0.75, max = 1.35, curve = 1.0, retailCap = 0.9 }What the store pays per delivered crate: base price × a multiplier between min (full store) and max (empty store), never above retailCap × the default shelf price of the crate. A product's buy price in the store wins over this.
recentnumber10Recent sales shown in the management panel.
streamDistancenumber80.0Distance at which slot changes reach a client.
limitstablesee fileRate limits per action.
boxMsnumber1200Progress bar when taking a box from the stockroom.
closeMargin / exitWarnnumber2.0 / 3.0Margin before a till closes when walking away, and metres before the exit at which the unpaid-basket warning appears.
alarmtable{ seconds = 60, blip = ... }Duration and blip of the theft alarm.
animstablesee fileAnimations when taking a box, restocking and taking a product.

Tills ​

Block store.till. Tills with a screen on the terminal glass.

OptionTypeDefaultWhat it does
enabledbooleantruefalse = simple till points with an on-screen panel instead of the terminal screens.
stafftable{ grade = 'cashier', zone = true }Who counts as a cashier on duty: minimum role, and being inside the store.
selfWhenStaffedbooleanfalsetrue = customers can pay by themselves even with a cashier in the store.
distancetable{ operator = 2.0, customer = 2.5, margin = 1.5 }Metres to the cashier's and the customer's spot.
scanMsnumber250Minimum time between two scanned products.
callSecondsnumber20How often the staff is warned of a waiting customer.
commissionnumber0.0Fraction of the sale the store pays to the cashier.
renderDistance / maxDuis / ttlMs14.0 / 4 / 15000Distance and number of screens rendered at once.
camera / paidSeconds / animsee fileCamera in front of the screen, seconds the receipt stays, gestures.
adjusttable{}Fine position of each screen glass, as printed by /supplytill.

Wholesale point ​

Block store.wholesale.

OptionTypeDefaultWhat it does
enabledbooleantruefalse = no wholesale sales.
factornumber0.85Crate price = shelf price of the unit × units per crate × factor.
maxCratesnumber20Crates per purchase.
distancenumber3.0Metres to the stockroom manager.
modelstring's_m_m_dockwork_01'Default ped of the manager.
pointstableexamplePosition of the manager per store. Can be moved per store in the editor.

Basket ​

Block store.basket.

OptionTypeDefaultWhat it does
requiredbooleantrueA basket from the rack is needed to take from the shelves (only in stores with racks).
keepAfterPaybooleanfalseKeep the basket after paying.
modelstablesee fileBasket models in order of preference: the first one that exists in the game is used.
showtablesee fileProducts drawn inside the basket.
others / ticknumber30.0 / 500Distance at which other players' baskets are drawn, and update interval.
stand / standstablesee filePile of baskets on each rack, and rack positions per store.
droptable{ vehicle = true, dead = true }The basket is dropped when getting into a vehicle or dying; its products go back to the shelf.

Slots, fridges and props ​

OptionTypeDefaultWhat it does
slotCategoriestablesee fileProduct categories each slot type (and each shelf section) accepts. Without an entry, any.
interacttablesee fileReach of the shelf and stockroom options, how many nearby slots get one, and the label (image, price).
fridgetablesee fileAnimated fridge doors: walk-in distance, how long a door stays busy, fine placement of the player, hand positions, doors enabled or disabled per fridge.
zonestablesee fileProp loading by area: when a player gets close to the store, all its props are created in batches, up to max per store. enabled = false loads them by distance.
propstablesee fileProduct models per product, pallets and loads of the stockroom, collision, distances and limits, rotation per model (yaw) and full/empty freezer models.

Editor ​

Block editor: movement and rotation steps of the placement ghost (normal and with Shift), pen radius limits, key repeat, ghost opacity, fallback models and the controls to add (keys.insert, default Insert) and remove (keys.delete, default Delete) points.

Profile and panel ​

OptionTypeDefaultWhat it does
outfit.modestring'none'Clothes set of data/outfits.lua put on during the run. 'none' keeps the player's clothes.
leaderboard.size / cacheSecondsnumber10 / 60Rows of the ranking and cache time.
history.sizenumber10Runs shown in the personal history.
profile.flushMsnumber30000How often XP and daily progress are saved.
tips.secondsnumber12Seconds a first-time tip stays on screen.
finish.secondsnumber15Seconds the end-of-run summary stays on screen.

Commands and keys ​

OptionTypeDefaultWhat it does
commands.<id>.namestring | falsesee CommandsName of the command. false disables it.
commands.<id>.restrictedstring'group.admin' on list, close, fast, adminACE group allowed to use the command.
keystablesee CommandsDefault keys. Each player can rebind them in the game settings.

Data files ​

FileWhat you edit there
data/regions.luaProduction lines: type, minimum level, XP, van spawn, tasks and amounts, animals, plots and crops, stations, nests, warehouse, products and yield.
data/products.luaCategories and products: prices, cap, consumption, crate prop and how it is carried, inventory item, units per crate, origin.
data/stores.luaSupermarkets: job, business account, price factors, dock, pallet, store area, prop zones, stockroom slots, shelves, tills, prices, limits and payment methods.
data/centrals.luaWholesale markets: terminal, dock, pallet, area, price factors, accepted products. All come with enabled = false.
data/vehicles.luaVans per level: model, minimum level, deposit, crate and hen slots.
data/daily.luaDaily tasks: runs, money, team, crates (crates unloaded on a pallet) and hens (hens loaded into the van).
data/levels.luaXP needed for each level.
data/guide.luaCards of the guide tab.
data/outfits.luaWork clothes per mode and sex.
data/seed/Shelf slots, fridges and tills of the included supermarket. They are copied into the database when the file changes. Do not delete this folder.

Products ​

Each entry of list in data/products.lua:

FieldWhat it does
idStable key stored in the database. Do not reuse or rename it.
label / category / imageLocale key with the name, category id and picture shown in the interface.
unit'crate' or 'sack'.
basePrice / minPrice / maxPriceReference price of a crate and the range a market pays.
capReference stock per market (× the market's capFactor).
consume.perHourSimulated consumption.
item / unitsInventory item and units of it per crate. Without item the product is not sold.
origin'production' (production lines), 'import' (import lines) or 'auto' (restocked by the market updates).
crateProp of the crate and how it is carried (box, crate, sack).

Supermarket ​

Each entry of data/stores.lua:

FieldWhat it does
idStable key. Do not reuse it.
labelLocale key or text. The included store is supply_store_paleto, "Supermarket · Paleto Bay".
job / societyFramework job of the staff and business account of cuxial_banking. Both 'supermarket' in the included store.
priceFactor / capFactorMultiplier of what it pays per crate, and of the reference stock of each product.
dock / palletWhere the van parks and where the crates are left and the delivery note is signed.
zone / zonesStore area (leaving it with the basket counts as leaving without paying) and the prop loading areas.
backroom / shelves / registers / selfcheckoutStockroom slots, shelf slots and till points. The included store takes them from data/seed/.
acceptsProducts it accepts. Without it, every product with an item.
buyFixed price per crate paid to suppliers for a product.
prices / limitsShelf prices set by the boss, and per-product limits set by staff (minPrice, maxPrice, maxPerSale).
payPayment methods: 'cash', 'bank', 'card'.
blipMap blip.

Common changes ​

Pay the runs into the bank

shared/config.lua
lua
account = 'bank',

Restrict the supply job to a framework job

shared/config.lua
lua
job = { 'supplier' },

Let a restaurant buy wholesale

shared/config.lua
lua
trade = {
    -- keep the rest of the block
    wholesale = { { job = 'restaurant', grade = 0 } },
},

Allow self-checkout while a cashier is working

shared/config.lua
lua
till = {
    -- keep the rest of the block
    selfWhenStaffed = true,
},

Restock and charge without going on duty

shared/config.lua
lua
store = {
    -- keep the rest of the block
    duty = false,
},

© Cuxial