# Configuration

Below is a trimmed excerpt showing the most important switches. Everything is pure Lua – restart the resource after editing.

```lua
Config = {}

-- Framework: nil (Auto-Detect)
Config.Framework = nil

-- Ox Target integration
Config.UseOxTarget = false                 -- true = use ox_target
Config.OxTargetOptions = {
    label = "Open Driving School",         -- text that appears in the target menu
    icon  = "fa-solid fa-id-card"          -- Font-Awesome
}

-- Payment method: "cash" or "bank"
Config.PayMethod = "cash"

-- Language
Config.Language = "en"

-- Set this to "kmh" or "mph"
Config.SpeedUnit = "kmh"

-- Currency symbol
Config.Currency = "$"

-- Type of interaction: "npc" or "marker"
Config.InteractionType = "npc"

--IF InteractionType = "npc"
-- NPC coordinates (if InteractionType = "npc")
Config.NPCCoords = vector4(-815.2911, -1346.8226, 5.1503, 47.5831)
-- NPC model (if InteractionType = "npc")
Config.NPCModel = "s_m_m_autoshop_01"

--IF InteractionType = "marker"
-- Marker type (if InteractionType = "marker")
Config.MarkerType = 21
-- Marker scale (if InteractionType = "marker")
Config.MarkerScale = vector3(0.7, 0.7, 0.7)
-- Marker color (if InteractionType = "marker")
Config.MarkerColor = { r = 255, g = 255, b = 0, a = 120 }
-- Marker coordinates (if InteractionType = "marker")
Config.InteractionCoords = vector3(-815.2911, -1346.8226, 5.1503)

-- Blip sprite
Config.BlipSprite = 545

-- Blip scale
Config.BlipScale = 0.8

-- Blip color
Config.BlipColor = 1

-- Blip text
Config.BlipText = "Driving School"

-- If true, use the custom notify/helpnotify below; if false, use fallback
Config.UseCustomNotify = false
Config.UseCustomHelpNotify = false

-- Custom notification functions
Config.Functions = {
    ["notify"] = function(msg, time)
        TriggerEvent("delta_hud:notification", "info", "DMV School", msg, time or 5000)
    end,
    ["helpnotify"] = function(key, text)
        TriggerEvent("revolution_helpnotify:showHelpNotify", text, key)
    end
}

-- Key system integration 
Config.GiveKey = {
    enabled = false,-- true = use custom key export below, false = default QBCore/ESX keys
    give    = function(plate, veh, model, netId, serverId)
        exports['wasabi_carlock']:GiveKey(serverId or GetPlayerServerId(PlayerId()), plate)
    end,
    remove  = function(plate, veh, model, netId, serverId)
        exports['wasabi_carlock']:RemoveKey(serverId or GetPlayerServerId(PlayerId()), plate)
    end
}

-- Route marker colors used during practice driving
Config.RouteMarkerColors = {
    Id1 = { r = 255, g = 255, b = 0, a = 100 },
    Id21 = { r = 255, g = 255, b = 255, a = 200 },
    Id5 = { r = 255, g = 255, b = 255, a = 200 }
}

local carRoute = {
    { coords = vector3(-805.1625, -1331.2758, 4.8258), speedLimit = 25 },
    { coords = vector3(-807.8290, -1311.9283, 4.8230), speedLimit = 25, final = true }
}

local truckRoute = {
    { coords = vector3(-805.1625, -1331.2758, 4.8258), speedLimit = 25 },
    { coords = vector3(-753.3152, -1290.2875, 4.8235), speedLimit = 25 },
    { coords = vector3(-704.2641, -1246.3434, 10.1242), speedLimit = 25 },
    { coords = vector3(-654.3494, -1293.9508, 10.4942), speedLimit = 35 },
    { coords = vector3(-592.5378, -1258.3832, 11.5435), speedLimit = 35 },
    { coords = vector3(-529.6826, -1175.3148, 19.1452), speedLimit = 35 },
    { coords = vector3(-473.9439, -1427.7395, 29.0207), speedLimit = 35 },
    { coords = vector3(-454.8260, -1467.2142, 30.1022), speedLimit = 75 },
    { coords = vector3(-464.0928, -1593.4034, 38.9587), speedLimit = 75 },
    { coords = vector3(-650.3748, -1696.4479, 37.2538), speedLimit = 75 },
    { coords = vector3(-735.8404, -1703.8905, 29.3075), speedLimit = 35 },
    { coords = vector3(-745.8806, -1656.8245, 27.2391), speedLimit = 35 },
    { coords = vector3(-727.4493, -1620.4431, 24.3133), speedLimit = 35 },
    { coords = vector3(-695.7495, -1630.0758, 23.6309), speedLimit = 35 },
    { coords = vector3(-425.2680, -1771.3599, 20.4687), speedLimit = 35 },
    { coords = vector3(-387.6115, -1714.4600, 18.6903), speedLimit = 35 },
    { coords = vector3(-270.3758, -1455.6715, 31.1479), speedLimit = 35 },
    { coords = vector3(-302.2608, -1424.7765, 31.1609), speedLimit = 35 },
    { coords = vector3(-520.7571, -1128.5156, 20.8062), speedLimit = 35 },
    { coords = vector3(-539.3765, -981.8963, 23.1953), speedLimit = 35 },
    { coords = vector3(-558.0745, -956.0988, 23.2729), speedLimit = 35 },
    { coords = vector3(-689.0939, -954.3663, 19.9840), speedLimit = 35 },
    { coords = vector3(-734.1160, -920.9439, 19.0200), speedLimit = 35 },
    { coords = vector3(-757.0452, -935.7710, 17.9009), speedLimit = 35 },
    { coords = vector3(-807.6506, -1002.3959, 13.1449), speedLimit = 35 },
    { coords = vector3(-819.9031, -1039.3041, 12.9973), speedLimit = 35 },
    { coords = vector3(-705.6591, -1222.7397, 10.4253), speedLimit = 35 },
    { coords = vector3(-807.8290, -1311.9283, 4.8230), speedLimit = 25, final = true }
}

local planeRoute = {
    { coords = vector3(-1379.6989, -3117.6172, 13.9388), speedLimit = 500 },
    { coords = vector3(-466.7873, -3647.8665, 199.9647), speedLimit = 500 },
    { coords = vector3(222.9041, -4033.1672, 357.7177), speedLimit = 500 },
    { coords = vector3(232.1871, -3049.4521, 262.6099), speedLimit = 500 },
    { coords = vector3(-182.8373, -2485.5215, 248.9158), speedLimit = 500 },
    { coords = vector3(-410.3821, -2134.1125, 125.7245), speedLimit = 500 },
    { coords = vector3(-1177.0938, -1302.8524, 369.269), speedLimit = 500 },
    { coords = vector3(-2506.0322, -744.7793, 315.8680), speedLimit = 500 },
    { coords = vector3(-3415.7039, -1947.4146, 218.4052), speedLimit = 500 },
    { coords = vector3(-1319.9586, -3153.3284, 16.2614), speedLimit = 500 },
    { coords = vector3(-1039.4146, -3314.5630, 13.9409), speedLimit = 500, final = true }
}

local bikeRoute = {
    { coords = vector3(-805.1625, -1331.2758, 4.8258), speedLimit = 25 },
    { coords = vector3(-753.3152, -1290.2875, 4.8235), speedLimit = 25 },
    { coords = vector3(-704.2641, -1246.3434, 10.1242), speedLimit = 25 },
    { coords = vector3(-654.3494, -1293.9508, 10.4942), speedLimit = 35 },
    { coords = vector3(-592.5378, -1258.3832, 11.5435), speedLimit = 35 },
    { coords = vector3(-529.6826, -1175.3148, 19.1452), speedLimit = 35 },
    { coords = vector3(-473.9439, -1427.7395, 29.0207), speedLimit = 35 },
    { coords = vector3(-454.8260, -1467.2142, 30.1022), speedLimit = 75 },
    { coords = vector3(-464.0928, -1593.4034, 38.9587), speedLimit = 75 },
    { coords = vector3(-650.3748, -1696.4479, 37.2538), speedLimit = 75 },
    { coords = vector3(-735.8404, -1703.8905, 29.3075), speedLimit = 35 },
    { coords = vector3(-745.8806, -1656.8245, 27.2391), speedLimit = 35 },
    { coords = vector3(-727.4493, -1620.4431, 24.3133), speedLimit = 35 },
    { coords = vector3(-695.7495, -1630.0758, 23.6309), speedLimit = 35 },
    { coords = vector3(-425.2680, -1771.3599, 20.4687), speedLimit = 35 },
    { coords = vector3(-387.6115, -1714.4600, 18.6903), speedLimit = 35 },
    { coords = vector3(-270.3758, -1455.6715, 31.1479), speedLimit = 35 },
    { coords = vector3(-302.2608, -1424.7765, 31.1609), speedLimit = 35 },
    { coords = vector3(-520.7571, -1128.5156, 20.8062), speedLimit = 35 },
    { coords = vector3(-539.3765, -981.8963, 23.1953), speedLimit = 35 },
    { coords = vector3(-558.0745, -956.0988, 23.2729), speedLimit = 35 },
    { coords = vector3(-689.0939, -954.3663, 19.9840), speedLimit = 35 },
    { coords = vector3(-734.1160, -920.9439, 19.0200), speedLimit = 35 },
    { coords = vector3(-757.0452, -935.7710, 17.9009), speedLimit = 35 },
    { coords = vector3(-807.6506, -1002.3959, 13.1449), speedLimit = 35 },
    { coords = vector3(-819.9031, -1039.3041, 12.9973), speedLimit = 35 },
    { coords = vector3(-705.6591, -1222.7397, 10.4253), speedLimit = 35 },
    { coords = vector3(-807.8290, -1311.9283, 4.8230), speedLimit = 25, final = true }
}


-- Code Studio Ultimate License System integration
Config.CodeStudio = {
    enabled = false,             -- true = use Code Studio license system
    addItem = false,              -- give physical license item when issuing
    expireDays = false,          -- false = no expiration; or a number (e.g. 365)
    map = {                      -- map DMV categories to Code Studio license item names
        car   = "driver_license",
        truck = "truck_license",
        plane = "pilot_license",
        bike  = "bike_license"
    }
}
-- Code Studio Ultimate License System integration


-- Coordinates where the player will be brought back after the practical exam
Config.BringBackCoords = vector4(-818.2892, -1344.3584, 4.2503, 230.0350)

Config.ExamSettings = {
    ["car"] = {
        enabled = true,  
        questionCount = 10,
        maxMistakes = 10,
        price = 2,
        practiceVehicle = "blista",
        practiceSpawn = vector4(-809.0808, -1319.2531, 4.8230, 170.5505),
        practiceRoute = carRoute,
        maxPracticeErrors = 5,
        plateText = "RISKCAR",
        timeValue = "Time: ~5 minutes",
        RewardQB = {
            type = "license", -- or "item"
            name = "B", --add your license
            count = 1
        },
        RewardESX = {
            type = "license", -- or "item"
            name = "drive", --add your license
            count = 1
        }
    },
    ["truck"] = {
        enabled = true,
        questionCount = 10,
        maxMistakes = 5,
        price = 5000,
        practiceVehicle = "pounder2",
        practiceSpawn = vector4(-851.7142, -1259.0942, 5.1066, 230.0637),
        practiceRoute = truckRoute,
        maxPracticeErrors = 3,
        plateText = "RISKTRK",
        timeValue = "Time: ~5 minutes",
        RewardQB = {
            type = "license", -- or "item"
            name = "C", --add your license
            count = 1
        },
        RewardESX = {
            type = "license", -- or "item" 
            name = "drive_truck", --add your license
            count = 1
        }
    },
    ["plane"] = {
        enabled = true,  
        questionCount = 10,
        maxMistakes = 9,
        price = 150000,
        practiceVehicle = "cuban800",
        practiceSpawn = vector4(-1645.4982, -3149.7231, 14.6267, 330.4557),
        practiceRoute = planeRoute,
        maxPracticeErrors = 2,
        plateText = "RISKPLN",
        timeValue = "Time: ~10 minutes",
        RewardQB = {
            type = "license", -- or "item"
            name = "plane", --add your license
            count = 1
        },
        RewardESX = {
            type = "license", -- or "item"
            name = "drive_pilot", --add your license
            count = 1
        }
    },
    ["bike"] = {
        enabled = true,
        questionCount = 10,
        maxMistakes = 5,
        price = 2000,
        practiceVehicle = "double",
        practiceSpawn = vector4(-833.7974, -1322.0947, 5.0004, 200.9209),
        practiceRoute = bikeRoute,
        maxPracticeErrors = 5,
        plateText = "RISKBIKE",
        timeValue = "Time: ~3 minutes",
        RewardQB = {
            type = "license", -- or "item"
            name = "A", --add your license
            count = 1
        },
        RewardESX = {
            type = "license", -- or "item"
            name = "drive_bike", --add your license
            count = 1
        }
    }
}

```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://risk-scripts.gitbook.io/risk-scripts/scripts/driving-school/configuration.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
