fivez_darts
Configuration
Modes, economy, wagers, sync and board geometry.
it's all in config.lua, a returned table (ox style). the bits you'll touch:
boards & props
boardModel = 'prop_dart_bd_cab_01',
dartModels = { 'prop_dart_1', 'prop_dart_2' },
locations = {}, -- optional seed: { coords = vec4(x, y, z, heading), label = '...' }
blip = { sprite = 459, color = 47, scale = 0.75, shortRange = true },use /dartcreate to place boards at runtime instead of editing locations.
modes
modes = {
arcade = { players = 1, dartsTotal = 9, visitDarts = 9, clearPerVisit = false, wager = false },
['301'] = { players = 2, start = 301, doubleOut = true, visitDarts = 3, clearPerVisit = true, wager = true, maxVisits = 30 },
['501'] = { players = 2, start = 501, doubleOut = true, visitDarts = 3, clearPerVisit = true, wager = true, maxVisits = 40 },
cricket = { players = 2, visitDarts = 3, clearPerVisit = true, wager = true, maxVisits = 25 },
},
modeOrder = { '501', '301', 'cricket', 'arcade' },players is 1 (arcade solo) or 2 (1v1). visitDarts is darts per visit, clearPerVisit wipes the
stuck darts at the end of a visit (the 1v1 default).
economy & wagers
wager = { item = 'scrap', min = 0, max = 200, presets = { 0, 10, 25, 50 } },
rakePct = 0.0, -- house cut on the 1v1 pot
-- arcade (solo): payout = min(payoutCap, floor(score * payoutScrapPerPoint)), xp = floor(score * xpPerPoint)
entryCost = 8,
payoutScrapPerPoint = 0.03,
payoutCap = 150,
xpPerPoint = 0.04,the currency item is scrap by default. change wager.item if your server runs on something else.
tournaments
tournament = {
sizes = { 4, 8, 16 },
modes = { '501', '301', 'cricket' },
entryMin = 0, entryMax = 500,
rakePct = 0.0,
top3 = { 0.5, 0.3, 0.2 }, -- used if the admin picks a top-3 split
noShowMs = 60000, -- forfeit if a player doesn't show at the board
summonRadius = 30.0,
},match & performance
syncRadius = 30.0, -- players inside this see the board / darts / scoreboard
throwCdMs = 350, -- min time between throws (anti-spam)
turnTimeoutMs = 35000, -- idle active player gets their visit skipped
joinDistance = 3.0, -- how close you have to be to join a match
elo = { start = 1000, k = 24 },geometry, camera & feel
the board geometry, the cam, sway and the stuck-dart pose are all calibrated visually with
/dartstune and saved to board.json, so you don't normally hand-edit these.
board = { centerOffset = vec3(0.0, -0.69, 0.0), radius = 0.26 },
cam = { back = -0.8, side = 0.0, up = 0.5, fov = 36.0 },
sway = { amp = 0.07, accel = 0.0015, damp = 0.9, spring = 0.022 },
spread = 0.0, -- leave at 0, difficulty is the visible sway, not a hidden roll
rings = { bull = 0.037, ring25 = 0.094, tripleIn = 0.58, tripleOut = 0.63, doubleIn = 0.95, doubleOut = 1.0 },keep spread at 0. the difficulty is the reticle sway you can see. a hidden spread would break
the "what you see is what you score" thing.
locale & debug
locale = 'bs', -- fallback if the ox:locale convar isn't set
debug = true, -- set false for production, it strips the calibration / debug commands