⚙️Configuration

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

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
        }
    }
}

Last updated