For the complete documentation index, see llms.txt. This page is also available as Markdown.

Pricing

Mod pricing in t1ger_tuning is built from several independent layers that stack together. Understanding each layer — and where it's calculated — makes it much easier to tune the economy to fit your server, whether you want mods to feel cheap and accessible or expensive and prestige-driven.

The Core Formula

Every mod variant's price is calculated in this order:

1. Base Price

Each mod type has a base price set in shared/modtypes.lua (modData.price). Some mods also define per-variant prices directly (modData.variants[index].price) — when a variant has its own explicit price, that's used exactly as-is, and none of the calculation below applies to it. This is useful for mods where certain options are genuinely worth more than a formula could capture (e.g. a rare paint style, a premium wheel design).

2. Escalation (only for mods without a variant-level price)

If a mod has escalation = true set in shared/modtypes.lua, each successive variant costs progressively more than the last, controlled by:

lua

Config.PriceEscalationPercent = 5 -- % increase per variant index

At 5%, variant 0 costs base price × 1.05, variant 1 costs base price × 1.10, variant 2 costs × 1.15, and so on. This makes "the highest tier is the most expensive" happen automatically without needing to hand-price every single option — useful for mods with a long list of similar variants (like most performance upgrades).

3. Vehicle Value Tiering

On top of the base/escalated price, a portion of the vehicle's own market value gets added — so modding an expensive supercar costs more than modding a beater, even for the exact same part:

lua

Config.TieredPricing = true -- master toggle for this whole layer

Config.PriceTiers = {
    { upperLimit = 10000,    multiplier = 0.05 },  -- cars up to $10k:   +5% of vehicle value
    { upperLimit = 50000,    multiplier = 0.03 },  -- cars up to $50k:   +3%
    { upperLimit = 100000,   multiplier = 0.02 },  -- cars up to $100k:  +2%
    { upperLimit = 500000,   multiplier = 0.01 },  -- cars up to $500k:  +1%
    { upperLimit = math.huge, multiplier = 0.005 }, -- everything above: +0.5%
}

The vehicle's price is matched against the first tier whose upperLimit it fits under, and that tier's multiplier is applied to the vehicle's value and added to the base price. If a vehicle's real market value can't be determined, Config.DefaultVehiclePrice is used instead — worth setting this to something reasonable for your server's average vehicle price if you use tiered pricing.

One important exception: if a mod's base price is exactly 0, tiered pricing is skipped entirely and the mod stays completely free — this is how you make specific mods (or specific "remove/stock" variants) genuinely free regardless of what car it's on.

The Two Extra Layers (Applied at Checkout, Not in the Base Formula)

These are separate from everything above — they're markups added on top, depending on how the player is buying:

Incentivized Pricing — a markup applied only when a player checks out directly through the mods menu themselves, without involving a tuner:

lua

This is a soft nudge, not a hard requirement — you can force real tuner interaction entirely instead by setting Config.ModsMenu.DisableCheckout = true, which removes direct checkout altogether and requires every customer to place a mod order.

Shop Markup — the tuner shop boss's own configurable markup percentage, applied when a mod order or customs checkout goes through their shop. This is set per-shop by the boss (up to Config.Shop.Markup.max), letting individual shops price themselves higher or lower than competitors — a genuine player-driven economy lever, not something you configure globally.

Worked Example

A tuner installs an engine upgrade (base price $3,000, no escalation) on a $30,000 car, with default tiered pricing:

  1. Base price: $3,000

  2. $30,000 falls into the "up to $50,000" tier → 3% multiplier

  3. Tier addition: $30,000 × 0.03 = $900

  4. Calculated price: $3,000 + $900 = $3,900

  5. If bought directly through the mods menu (no tuner): $3,900 × 1.25 = $4,875

  6. If bought through a tuner shop with a 10% shop markup instead: $3,900 × 1.10 = $4,290

Configuring for Your Server's Economy

  • Want mods to feel cheap and accessible? Lower or disable PriceEscalationPercent, disable TieredPricing entirely, and keep base prices in modtypes.lua low.

  • Want expensive cars to be a genuine status symbol to mod? Keep tiered pricing on and make sure Config.DefaultVehiclePrice and your vehicle price source are accurate — this is what makes supercars cost dramatically more to tune than a beater.

  • Want to push players toward roleplay with tuners instead of self-service? Raise IncentivizedPricing.percent, or go further and set DisableCheckout = true to remove self-service entirely.

  • Want certain mods to always be free (e.g. a starter/basic option)? Set that specific mod or variant's price to 0 in modtypes.lua — remember this also skips the vehicle-value tier addition automatically.

Reference

Config
Location
Purpose

Config.PriceEscalationPercent

config.lua

% cost increase per variant index, for mods with escalation = true

Config.DefaultVehiclePrice

config.lua

Fallback vehicle value when the real one can't be determined

Config.TieredPricing

config.lua

Master toggle for vehicle-value-based pricing

Config.PriceTiers

config.lua

The tier table itself — fully editable, more tiers can be added

Config.PartAcquisitionCost

config.lua

Whether the item's own value is factored into the part's acquisition cost

Config.Prices

config.lua

Base prices for paints and RGB custom colors specifically

modData.price

shared/modtypes.lua

Base price per mod type

modData.variants[i].price

shared/modtypes.lua

Explicit per-variant price override, skips escalation

modData.escalation

shared/modtypes.lua

Enables per-variant price escalation for that mod

Config.ModsMenu.IncentivizedPricing

config.lua

Self-checkout markup

Config.Shop.Markup

config.lua

Per-shop boss-configurable markup

Last updated