> For the complete documentation index, see [llms.txt](https://docs.hejdrex.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.hejdrex.dev/scripts/racing/config-preview.md).

# Config Preview

This is 1:1 config.lua file from my Racing script.

```lua
Config = {}

Config.Framework = 'esx' -- esx / qbcore
Config.Locale = 'en' -- en (English) / cs (Czech) / de (German) / fr (French) / pt (Portuguese)

Config.NPC = { -- Race Manager
    Model = 'a_m_m_skater_01',
    Coords = vector4(831.8022, -2934.8008, 5.9023, 93.6319),
    Freeze = true, -- Most likely ignore this
    Invincible = true, -- Most likely ignore this
    Scenario = 'WORLD_HUMAN_STAND_IMPATIENT', -- Most likely ignore this
}

Config.Blip = { -- Race Manager Blip (translation is in the locales)
    Enabled = true,
    Sprite = 309,
    Color = 5,
    Scale = 1.0,
}

Config.Prize = {
    Min = 1000,
    Max = 100000,
    Currency = 'money', -- QBCore servers use 'cash', i would recommend to check this.
}

Config.NpcRace = { -- Challenge NPCs
    Drivers = { 'a_m_y_motox_01', 'a_m_y_motox_02', 'a_m_y_hipster_01', 'g_m_y_lost_01', 's_m_y_xmech_01' }, -- Most likely ignore this
    Difficulties = {
        {
            id = 'easy',
            Prize = 750,
            Opponents = 2,
            EloMultiplier = 0.5,
            Speed = 55.0,
            SpeedStep = 1.0,
            DrivingStyle = 1074528293,
            EnginePower = 15.0,
            TorqueMult = 1.0,
            PerformanceMods = false,
            DriverAbility = 0.35,
            DriverAggressiveness = 0.15,
            RacingModifier = 0.25,
            Vehicles = { 'blista', 'futo', 'penumbra', 'prairie', 'sultan' },
        },
        {
            id = 'medium',
            Prize = 1500,
            Opponents = 3,
            EloMultiplier = 1.0,
            Speed = 75.0,
            SpeedStep = 1.5,
            DrivingStyle = 1074528293,
            EnginePower = 40.0,
            TorqueMult = 1.4,
            PerformanceMods = true,
            DriverAbility = 0.7,
            DriverAggressiveness = 0.45,
            RacingModifier = 0.6,
            Vehicles = { 'sultan', 'elegy', 'buffalo', 'kuruma', 'tailgater', 'schafter2' },
        },
        {
            id = 'hard',
            Prize = 3500,
            Opponents = 5,
            EloMultiplier = 1.5,
            Speed = 95.0,
            SpeedStep = 2.0,
            DrivingStyle = 1074528293,
            EnginePower = 70.0,
            TorqueMult = 1.8,
            PerformanceMods = true,
            DriverAbility = 1.0,
            DriverAggressiveness = 0.75,
            RacingModifier = 0.95,
            Vehicles = { 'comet2', 'jester', 'banshee', 'elegy2', 'sultanrs', 'italigtb' },
        },
    },
}

Config.Race = { -- Player Racing
    MinPlayers = 1, -- Recommend having this at min. 2
    MaxPlayers = 6, -- If you want more than 6, you need to configure more starting grid locations
    InviteRadius = 25.0,
    CountdownSeconds = 15, -- The massage, that you need to get in a vehicle
    CheckpointType = 47, -- Most likely ignore this
    CheckpointRadius = 6.0, -- Most likely ignore this
    CheckpointColor = { r = 255, g = 165, b = 0, a = 180 },
    FinishColor = { r = 0, g = 255, b = 0, a = 180 },
    VehicleBlipSprite = 1,
    BlipRoute = true,
    FinishTimeout = 120000,
}

Config.Elo = {
    Enabled = true,
    Rewards = { 750, 500, 200 },
    Penalty = 100,
    StartingElo = 0,
    MinElo = 0,
    TopCount = 10,
    MinPlayers = 2,
    RewardNpcRaces = true,
    Decay = {
        Enabled = true,
        Amount = 500,
        IntervalDays = 7,
    },
}

Config.Ghosting = {
    Enabled = true,
    ThroughPlayers = true,
    ThroughNpcs = true,
    Alpha = 140, -- Most likely ignore this
}

Config.Drift = {
    Enabled = true,
    OnlyDuringRace = true,
    MinSpeed = 8.0,
    MinAngle = 12.0,
    MaxAngle = 90.0,
    ScoreRate = 1.0,
    HideDelay = 2000,
    PositionX = 0.5,
    PositionY = 0.75,
    Scale = 0.6,
    Color = { r = 255, g = 200, b = 0, a = 255 },
}

Config.StarterNpc = { -- Starts the race
    Enabled = true,
    Model   = 's_f_y_hooker_01',
    Weapon  = 'WEAPON_FLAREGUN', -- Recommend checking 'WEAPON_FLAREGUN' in your anticheat weapons blacklist.
}

Config.ReturnTeleporter = { -- The red marker to teleport back to the start (created mainly for free roam servers)
    Duration = 180000,
    MarkerType = 1,
    MarkerScale = vector3(6.0, 6.0, 2.0),
    MarkerColor = { r = 255, g = 0, b = 0, a = 160 },
    InteractDistance = 4.5,
    ProgressDuration = 20000,
}

Config.Tracks = { -- Your tracks workspace :)
    {
        id = 'track_cargo_rushdown', -- Needs to be unique
        name = 'Cargo Rushdown',
        laps = 3,
        image = 'https://i.postimg.cc/t438FSqD/Screenshot-2026-08-23-002954.png', -- I finded this web to free host starting tracks images, recommend changing to your image host :)
        startingGrid = {
            vector4(863.5828, -2953.9607, 5.9008, 269.6331),
            vector4(863.3235, -2959.2803, 5.9008, 271.0817),
            vector4(853.0786, -2953.8145, 5.9008, 269.5409),
            vector4(852.8013, -2959.2881, 5.9008, 267.9501),
            vector4(841.7006, -2953.8474, 5.9008, 268.7983),
            vector4(841.2025, -2959.1909, 5.9009, 267.1563),
            -- Add more, if you set MaxPlayers to 7+
        },
        checkpoints = {
            vector3(928.2495, -2956.2664, 4.8948),
            vector3(1058.9052, -2956.2332, 4.9008),
            vector3(1076.8522, -2994.6355, 4.9077),
            vector3(1007.1735, -3007.5850, 4.8949),
            vector3(978.1561, -3055.0613, 4.8943),
            vector3(911.2863, -3061.6689, 4.8946),
            vector3(831.3340, -2977.5833, 4.9039),
        },
        returnTeleporter = {
            Enabled = false,
            Coords = vector4(835.0000, -2975.0000, 5.9000, 90.0000),
            Destination = vector4(824.9084, -2924.3464, 5.8886, 178.0627),
        },
        starterNpc = { -- Most likely ignore this
            Coords = vector4(883.1819, -2956.2380, 5.9008, 90.1544),
            LeaveCoords = vector4(883.6805, -2944.1663, 5.9008, 2.8789),
        },
    },
    {
        id = 'track_road_dash',
        name = 'Road Dash',
        laps = 1,
        image = 'https://i.postimg.cc/bvCP2CLh/Screenshot-2026-08-23-003148.png',
        startingGrid = {
            vector4(744.9908, -2946.3477, 5.8007, 359.2458),
            vector4(739.6381, -2946.8035, 5.8007, 359.7496),
            vector4(744.9948, -2959.8899, 5.8007, 358.9389),
            vector4(739.6840, -2960.6279, 5.8007, 355.1833),
            vector4(744.8772, -2975.9695, 5.8007, 2.5870),
            vector4(739.7493, -2977.0813, 5.8007, 356.3293),
        },
        checkpoints = {
            vector3(740.9642, -2865.2598, 5.0736),
            vector3(739.3652, -2737.8645, 5.6578),
            vector3(736.9147, -2594.4973, 17.6389),
            vector3(755.4126, -2436.7021, 18.9768),
            vector3(774.3051, -2220.4419, 28.3260),
            vector3(790.4853, -2036.8969, 28.3106),
        },
        returnTeleporter = {
            Enabled = true,
            Coords = vector4(817.5645, -1953.8114, 29.1622, 304.3372),
            Destination = vector4(824.9084, -2924.3464, 5.8886, 178.0627),
        },
        starterNpc = {
            Coords = vector4(742.0407, -2944.2402, 5.8007, 176.1210),
            LeaveCoords = vector4(749.8585, -2944.1550, 6.0603, 273.6662),
        },
    },
    {
        id = 'track_city_tour',
        name = 'City Tour',
        laps = 1,
        image = 'https://i.postimg.cc/tgM0g1R8/Screenshot-2026-08-23-003310.png',
        startingGrid = {
            vector4(747.2187, -2995.9146, 5.8006, 26.0162),
            vector4(751.7759, -2993.5332, 5.8006, 36.8912),
            vector4(755.3767, -3005.2375, 5.8006, 42.5360),
            vector4(759.7523, -3002.7388, 5.8006, 42.9381),
            vector4(764.3525, -3014.5293, 5.8005, 41.5181),
            vector4(768.3616, -3011.8589, 5.8013, 35.9678),
        },
        checkpoints = {
            vector3(741.6680, -2905.6792, 4.9115),
            vector3(740.6537, -2826.9937, 5.2369),
            vector3(682.6589, -2773.1707, 5.0109),
            vector3(618.5767, -2634.2686, 5.1031),
            vector3(496.0288, -2511.1689, 5.4502),
            vector3(487.5459, -2418.1804, 12.6833),
            vector3(444.3635, -2491.1560, 13.3878),
            vector3(336.1201, -2469.0583, 4.8775),
            vector3(358.5884, -2275.9111, 9.1819),
            vector3(466.5565, -2088.3701, 22.0726),
            vector3(413.0479, -1972.9503, 22.4790),
            vector3(258.3363, -1830.0818, 25.7379),
            vector3(90.2439, -1689.5399, 28.1009),
            vector3(10.9030, -1579.0546, 28.2674),
            vector3(128.2605, -1436.5948, 28.2741),
            vector3(208.9611, -1329.4188, 28.3316),
            vector3(216.8967, -1123.7760, 28.3107),
            vector3(264.5508, -939.8210, 28.3280),
            vector3(245.9271, -838.4447, 28.8427),
            vector3(198.7634, -763.6975, 31.7531),
            vector3(270.2399, -578.7779, 42.2377),
            vector3(311.3151, -416.1208, 43.9937),
            vector3(233.6166, -353.6465, 43.3752),
            vector3(103.1094, -303.3767, 45.0060),
            vector3(-37.6853, -250.0662, 45.0803),
            vector3(-125.2848, -214.0753, 43.7533),
            vector3(-163.8148, -179.1815, 42.6134),
            vector3(-182.4240, -151.8439, 42.6106),
            vector3(-185.2402, -96.6872, 51.5086),
            vector3(-238.0696, -42.1759, 48.5231),
            vector3(-221.0869, 82.0856, 67.1583),
            vector3(-280.8578, 129.1574, 67.5376),
            vector3(-450.5513, 131.7324, 63.4799),
            vector3(-541.0959, 152.5188, 63.0181),
            vector3(-538.2768, 239.3028, 81.9741),
            vector3(-529.2295, 342.6795, 81.9542),
            vector3(-542.1845, 453.0394, 100.1203),
            vector3(-542.9080, 529.9899, 107.9392),
            vector3(-499.9040, 602.1194, 124.3914),
            vector3(-528.9044, 674.2242, 142.5248),
            vector3(-488.2246, 724.1576, 158.2712),
            vector3(-480.5476, 811.2003, 182.4508),
            vector3(-567.5355, 847.4854, 201.0238),
            vector3(-681.3840, 928.1179, 231.7964),
            vector3(-717.1751, 1038.9111, 242.8498),
            vector3(-728.3022, 1154.6342, 261.9852),
            vector3(-665.4978, 1217.5200, 268.5634),
            vector3(-659.1121, 1330.7449, 286.0431),
            vector3(-514.9217, 1323.4789, 300.6234),
            vector3(-467.2021, 1357.0392, 301.7798),
            vector3(-460.1886, 1287.5563, 312.4749),
            vector3(-498.1583, 1197.6969, 323.2474),
            vector3(-409.3933, 1182.7528, 324.5652),
        },
        returnTeleporter = {
            Enabled = true,
            Coords = vector4(-400.8182, 1229.8528, 325.6415, 56.3320),
            Destination = vector4(824.9084, -2924.3464, 5.8886, 178.0627),
        },
        starterNpc = {
            Coords = vector4(744.8691, -2987.7964, 5.8006, 211.2798),
            LeaveCoords = vector4(753.2363, -2985.1421, 6.0743, 299.6058),
        },
    },
    -- Add more tracks here...
}

```
