DUXPLIMA Documentation

Money and earning

Where the balance lives, earning while driving, multipliers and garage slots.

Two places the balance can live

Currency = "$",
StartingBalance = 0,
Leaderstats = {
    Enabled = true,
    FolderName = "leaderstats",
    StatName = "Cash",
    ValueClass = "IntValue",
    CreateMissing = true,
    ClampNonNegative = true,
},
ModeBalance lives in
Leaderstats.Enabled = falseThe system's own profile, saved to its DataStore
Leaderstats.Enabled = trueleaderstats.Cash, owned by your game

Leaderstats mode is what you want when the game already has money: a jobs system, a robbery system, a shop. Buying, selling, earning, refuelling, fines and admin edits all read and write that one stat, and the UI mirrors changes made by your other systems live.

Buying is broken while leaderstats mode is on

The purchase path checks affordability against the internal profile balance instead of going through the balance accessor. In leaderstats mode that internal number is never written, so it stays at zero and every priced vehicle is refused as unaffordable.

Everything else in the system reads the balance correctly. It is only the buy check.

Set Leaderstats.Enabled = false until this is fixed, or keep the whole catalog free and gate cars with Permissions instead of prices.

Two more places show the internal number rather than the live one: the balance sent when a dealership opens, and the balance shown on the admin panel's target card. Both read zero in leaderstats mode even though spending works.

Starting money

StartingBalance is granted once, on the first join, and only when the system owns the balance. In leaderstats mode the system never touches starting money, and never wipes it: that is your game's business.

StarterVehicleId is granted on the first join in either mode.

Earning while driving

Earn = {
    Enabled = true,
    MinSpeed = 30,
    RewardPerSecond = 5,
    SampleInterval = 1,
    MaxPerSecond = 50,
    RequireVehicleSeat = true,
    RoundReward = true,
},

Every second, each player is sampled. Above MinSpeed they earn RewardPerSecond, times their multipliers.

FieldDoes
MinSpeedStuds per second the player must be doing to earn
RewardPerSecondThe base payout per sample
SampleIntervalSeconds between samples
MaxPerSecondA ceiling on the base payout only
RequireVehicleSeattrue earns only while seated in a VehicleSeat
RoundRewardRound the multiplied total to a whole number
MaxPerSecond does not cap the final payout

It caps the base before multipliers. A base of 5 with Premium, two gamepasses and a group bonus can pay far more than MaxPerSecond.

It is an anti-exploit floor under one number, not a ceiling on the economy. Work out your worst case by hand: base times every multiplier a single player can hold at once.

The multipliers

Multipliers = {
    Enabled = true,
    Premium = { Enabled = true, Multiplier = 2 },
    Gamepasses = { },
    Groups = { },
    Teams = { },
},

The formula is:

base x Premium x (each owned gamepass) x (1 + sum of group and team bonuses)
SourceWritten asEffect
PremiumMultiplier = 2Doubles
Gamepasses[123456789] = 2Multiplies, and they compound
Groups[987654321] = 0.10Adds ten percent
Teams["Civilian"] = 0.05Adds five percent

Gamepasses multiply and stack, so two 2x passes give 4x. Group and team bonuses are added together first and applied once, so they behave much more gently. That difference is deliberate: sell the multiplicative ones, give away the additive ones.

Ownership is checked once per player per pass and cached for the session, and a pass bought mid-session is picked up immediately.

Passengers

Passengers = { Enabled = false, Percent = 0.5 },

Off by default. On, every other player seated in the same vehicle model earns that fraction of the driver's reward. The driver loses nothing: it is created money, not shared money.

When earning stops

SituationWhy
Below MinSpeedNothing to reward
Not in a VehicleSeatWith RequireVehicleSeat = true
Out of fuelOnly when Fuel.EmptyMode is "warn"
On a test driveTest drives never earn

The test drive rule matters: without it, an endless loan of the fastest car in the catalog would be a better income than owning anything.

Garage slots

Garage = {
    Enabled = true,
    BaseSlots = 5,
    SlotGamepasses = {},
},

A cap on how many vehicles a player may own at once. The counter is shown in the panel's top bar, and a purchase over the cap is refused with a message telling them to sell something or buy more slots.

SlotGamepasses = { { GamepassId = 111, Slots = 5 }, { GamepassId = 222, Slots = 10 } },

Each pass the player owns adds its slots. They stack.

Issued cars are free of the cap

Auto-granted duty vehicles are not written to the profile, so they never take a slot. A police officer with five slots still has five slots for their own cars.

Garage.Enabled = false removes the cap and hides the counter.

The currency symbol

Currency = "$",

Prepended to every amount the system prints. It is a string, so a coin emoji, a word or a Robux glyph all work.

It is cosmetic and never parsed, so changing it later is safe.