DashKart docs

Configuration

Every key in DashKart's config files, with defaults.

All files in config/ are open (not escrowed) and commented. Restart the resource after changes (restart dashkart; riders on duty are clocked out and their rental deposits refunded in full).

Files marked server only are never sent to players. Money values are whole numbers in your currency.


config/main.lua

Key Default Meaning
Config.Debug convar dashkart:debug, default false setup mode: verbose logs, zone drawing and the /dk_* admin commands. Turn on with setr dashkart:debug "true" in server.cfg. Keep it off on a live server.
Config.DebugTest.item nil (auto) item used by /dk_bridgetest (added and removed). Auto = water_bottle on QBCore/QBox-style inventories, water otherwise.
Config.DebugTest.cleanupSeconds 60 lifetime of the test box / scooter.
Config.Locale nil 'en', 'hi' or 'te' for chat messages and the tablet. nil follows setr ox:locale.
Config.Currency.symbol / position '₹' / 'prefix' currency display; 'suffix' puts the symbol after the number.
Config.Customers.npc true NPC customers (V1).
Config.Customers.players false reserved for player customers (V2). Leave false.
Config.Bridge.* 'auto' (notify: 'ox') force an adapter per category: framework (qbox, qb, esx, custom), inventory (ox, qs, codem, core, qb, native), target (ox, qb, textui), vehiclekeys (qbx, qb, wasabi, mrnewb, none), fuel (ox, legacy, cdn, ps, native), emote (auto, rpemotes, scully, native), notify (ox, framework).
Config.Accounts.payout 'bank' account for rider pay, and for store purchase, sale, deposit and withdraw.
Config.Accounts.deposit 'cash' account rental deposits are taken from first (falls back to bank).
Config.Accounts.fine 'bank' account fines are taken from (cancelled order, abandoned rental).
Config.Admin.command 'dashkart' /dashkart admin.
Config.Admin.ace 'dashkart.admin' ace that grants admin rights.
Config.Admin.groups admin, god, superadmin framework groups that count as admin (ESX groups, QBCore permissions, QBox checks them as aces).
Config.Security.rateLimit burst 6, perSecond 2 default per-player limit for every network call.
Config.Security.violationsBeforeFlag / violationWindow 10 / 10 s rate-limit violations in the window before an exploit flag.
Config.Security.kickAfterFlags 0 exploit flags per session before the player is dropped. 0 = log only.
Config.Security.maxStringLength 64 longest string a client may send.
Config.Database.flushInterval 15 seconds between batched writes (logs, stats, stock).
Config.Database.logRetentionDays 30 dk_logs rows older than this are deleted (once a day, in small batches). 0 keeps logs forever. Orders and the money ledger are never deleted.

config/stores.lua

Config.Stores is a list of stores. Coordinates only, no interior references (see docs/ASSETS.md).

Field Meaning
id unique key, also the database key. Never rename after the first start.
label display name.
ownable / price whether players can buy it and for how much (bank). false = always city-owned.
duty counter { coords, radius }: clock in/out, order queue, rentals, Store office.
pickup packing point { coords, radius } for stores without shelves. Big orders are packed here in rounds (orderBag.carry bags each).
vehicleSpawns list of vec4 rental spawns.
vehicleReturn rental return { coords, radius }.
zone box { coords, size, rotation }; leaving it starts the delivery.
demand.baseRate / demand.multiplier NPC orders per hour at a peak hour, and a per-store scale.
payrollPct % of what the customer paid that goes to the rider while the store is city-owned. A player owner sets their own.
shelves optional { { coords = vec4, categories = { ... }, label = '...' } }. A layout captured with /dk_shelf (in data/shelves.json) takes priority.
blip false hides the store blip.

Default stores: Strawberry (ownable, 750 000), Mirror Park (ownable, 900 000), Sandy Shores (city-owned).


config/catalog.lua

Key Meaning
Config.Pricing.minMult / maxMult owners may price items between 80 % and 150 % of the default price, unless an item sets its own min / max.
Config.Categories product categories with an icon and sort order. Shelf layouts use these names.
Config.Catalog products: item (internal name), label, category, price, stock (default stock per store; capacity = stock × Config.Ownership.capacityMult), weight (size), optional min / max price.

Product labels can be translated with locale keys item.<item> (e.g. "item.dk_milk": "दूध 500ml"). Products never enter player inventories in V1, so they need no item definitions. New products are added to every store on the next start; existing owner prices are kept. If you remove a product, also remove it from the baskets in config/npc.lua (the start-up check reports Basket "x" uses unknown item "y").


config/rider.lua

Key Default Meaning
Config.Rider.useFrameworkJob false true sets the framework job Config.Rider.job while on duty (the job must exist) and restores the old one after.
Config.Rider.menuKey 'F6' default tablet key (players can rebind).
Config.Rider.requireRental true orders need a DashKart rental; arrival and handover require it within rentalRadius (40 m).
Config.Rider.remoteDuty.clockIn / .clockOut false / false allow clocking in / out away from the duty point through the exports (phone apps, see Integration API). A remote clock out is refused while an order is active or a rental is out.
Config.Rider.cancelFine 100 fine (bank) for cancelling an accepted order.
rental.deposit 500 scooter deposit.
rental.van.enabled / deposit true / 1500 rental van, required for bulk orders.
rental.van.unlockDeliveries 25 completed deliveries (lifetime, all stores) a rider needs before renting the van. Until then the duty point shows “Van (unlocks after 25 deliveries)” and bulk orders are hidden from them. 0 = van from the first shift.
rental.returnRefundPct 100 % of the deposit refunded on return, before damage.
rental.damagePenaltyPerPct 5 deducted per 1 % body damage.
rental.abandonDistance / abandonSeconds / abandonPenalty 300 m / 180 s / 250 leaving the rental this far for this long forfeits the deposit plus the penalty.
rental.fuelLevel 100 fuel on spawn.
pack.secondsBase / secondsPerItem / secondsMax 3 / 0.5 / 10 packing time at the pickup point.
pick.secondsBase / secondsPerItem / secondsMax 1.25 / 0.4 / 4 time per shelf when shelf picking.
pick.markerDistance 15 shelf markers draw within this distance.
handover.radius 3 max distance to the door for the handover (server-checked).
handover.arriveRadius 25 distance at which the order switches to “arrived”.
orderBag.required true the packed order must be put into the delivery bag on the rental (target at the back of the scooter / van) and taken out again at the door before the handover. false = no stow step.
orderBag.seconds 2 stow / take-out animation length (the bag opens, the order goes in or out, the bag closes; see Config.Assets.vehicleProps.scooterBox.openable).
orderBag.radius { scooter = 3, van = 5 } max distance from the rider to the rental’s centre for stowing (server-checked).
orderBag.ratingPenalty 1 stars lost when the rider rides with the order in hand.
orderBag.minSpeed 4 m/s; slower than this in a vehicle does not count as riding.
orderBag.bagCapacity 6 big orders on the van: catalog weight units per bag (bags = basket weight / this, rounded up). Scooter orders are always one bag.
orderBag.maxBags 5 most bags per order (also the van’s cargo slots in Config.Assets.vanCargo).
orderBag.carry 2 bags the rider carries per trip, one per hand. Big orders are packed in rounds of this many bags: pack, load them into the van, come back for the next round; the van then delivers them to the customer the same way.
orderBag.extraMinutesPerBag 1 the delivery target (Config.Npc.targetMinutes) grows by this per bag beyond the first (rating, speed bonus, late penalty, tablet history).
uniform see file per-gender clothing, onApply / onRestore hooks, enabled. See docs/ASSETS.md.
Config.Tablet.enabled true false = F6 opens ox_lib menus instead of the tablet.
Config.Tablet.item 'dashkart_tablet' tablet item (docs/ITEMS.md).
Config.Tablet.requireItem true F6 needs the item.
Config.Tablet.giveOnClockIn true give a tablet to riders without one.

config/wholesale.lua

Key Default Meaning
coords / vanSpawn / blip docks warehouse counter, van spawn, blip.
costMult 0.6 wholesale cost = default catalog price × 0.6.
vanRun.enabled true owners can fetch stock themselves with a van (no fee).
vanRun.deposit 1500 van deposit, refunded on return minus damage.
vanRun.maxCrates × crateCapacity 8 × 40 units per van run.
vanRun.timeLimit 1800 s late, destroyed or abandoned vans lose the goods and the deposit.
delivery.enabled true owners can order delivery (tablet or warehouse).
delivery.feePct / minFee 12 % / 250 delivery fee on top of the goods.
delivery.delaySeconds 600 real-time delay until stock arrives (survives restarts).
autoRestock.enabled / threshold / checkInterval true / 25 % / 300 s city-owned stores refill items below the threshold.

config/assets.lua

Vehicles (scooter, bulk, restockVan) with vehicleTypes, vehicleStyle (colours, livery, plate prefix), props, animations, customer ped pool, blips. The scooter can be set from server.cfg with setr dashkart:scooter "model". Full details: docs/ASSETS.md.


config/npc.lua (server only)

Key Default Meaning
tickSeconds 15 demand check interval. Nothing runs while nobody is on duty.
offerTimeout 180 s an unaccepted order expires after this.
targetMinutes 10 the delivery promise; used for the speed bonus, late penalty and rating.
maxOpenOrdersPerStore 4 unaccepted orders on the board per store.
minDistance / maxDistance 350 / 2600 m delivery distance range from the store.
pedSpawnRadius 60 m the customer ped spawns when the rider is this close.
noAnswerWait 45 s wait before the rider can call / give up on a no-answer customer.
maxDeliveryMinutes 30 accepted orders not delivered in time are cancelled (counts as failed).
clock 'auto' hour source for the demand curve: 'auto' (in-game hour from GlobalState.currentTime, e.g. Renewed-Weathersync, else server time), 'real', or function() return hour end.
tips 20 % chance, 10-50, 5 stars small tips on great deliveries.
timeCurve 24 values demand multiplier per hour.
riderFactor perExtraRider 0.6, maxFactor 3 more riders on duty → more orders, capped.
idleFloorPerHour 20 minimum order pace while riders wait with an empty board.
maxIdleWait 30 s a free rider with an empty board gets an order within this time (caps still apply).
readyOrderDelay 5 s first order after clock-in or after finishing a delivery.
baskets 9 templates { id, weight, hours, hourBoost, items = { { item, qty = {min,max}, chance, core } } }. A template is skipped when a core item is out of stock.
events see file weights and params for none, big_tip, no_answer, wrong_gate, rude, bulk.
names list customer names on order cards.
dropoffs 72 points in 6 zones delivery doors (see docs/ASSETS.md).

Orders per hour per store = demand.baseRate × timeCurve[hour] × riderFactor × demand.multiplier.


config/economy.lua (server only)

Config.Economy

Key Default Meaning
deliveryFee.base / perKm / max 30 / 12 / 90 fee the customer pays the store on top of the basket.
payroll.minPct / maxPct / default 20 / 60 / 30 range owners can set for rider pay (% of what the customer paid).
payout.speedBonus 25 delivered within targetMinutes.
payout.latePenaltyPerMin / latePenaltyMax 5 / 40 per minute late, capped.
payout.streakBonus every 5 on time: 50
payout.minPayout 30 minimum pay for a successful delivery.
shortfall 'server' when a store cannot afford the rider: 'server' covers the difference, 'cap' pays only what the store has.
caps.maxRiderEarningsPerHour 6000 per rider, rolling hour (0 = off).
caps.maxNpcOrdersPerStorePerHour 30
caps.diminishing 85 % after 2 h, 65 % after 4 h, 40 % after 6 h pay multiplier by hours on duty today.
caps.dailyNpcBudget 0 server-wide NPC money per day; demand pauses when used up (0 = unlimited).
antiFarm.afkSeconds 600 no movement and no action → no new orders until the rider moves.
antiFarm.minDeliveryDistance 300 m
antiFarm.maxPlausibleSpeed 45 m/s faster deliveries are flagged and pay nothing.
antiFarm.fastDeliveryCooldown 120 s no offers after a flagged delivery.
antiFarm.heartbeatSeconds 30 server position sampling interval.

Config.Ownership

Key Default Meaning
maxStoresPerPlayer 1
sellBackPct 60 % of the price returned when selling to the city (plus the store balance).
actionRadius 25 m owner actions at the counter work within this distance.
maxStaff 8 hired riders per store.
staffPrioritySeconds 20 new orders are reserved for staff and owner this long.
capacityMult 3 max stock per item = catalog stock × 3.
maxDeposit 1000000 largest single deposit / withdrawal.
tablet.remote true owners with the tablet item manage the store from anywhere (reports, prices, payroll, staff, delivery restock).
tablet.remoteMoney false allow deposit / withdraw from the tablet too. Selling the store and van runs always need the owner in person.
tablet.chartDays 7 days in the revenue chart (max 14).

Config.AdminPanel

Key Default Meaning
maxBalanceAdjust 1000000 largest single store balance correction.
maxCompensation 5000 largest rider compensation when force-cancelling an order.

config/webhooks.lua (server only)

Key Meaning
username / avatar / color sender name, avatar URL, default embed colour.
channels.orders / payouts / stores / admin / exploits / economy webhook URL per channel. Empty = off.
colors.* embed colour per channel (decimal RGB).
orders.delivered / failed_no_answer / cancelled / expired which finished orders are posted (expired off by default: unaccepted NPC orders expire often).
mentions.exploits Discord role id to ping on exploit flags.
batchSeconds 5: embeds are batched (max 10 per message) and Discord rate limits are respected.

The admin panel (Economy tab) has a button to send a test message to every configured channel. The economy channel receives a daily summary (orders, money created, payouts, flags, top stores and riders).


config/promos.lua (server only)

Reserved for player customers (coming in V2). Not used in V1.