> For the complete documentation index, see [llms.txt](https://stg-store.gitbook.io/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stg-store.gitbook.io/documentation/scripts/vanaheim-fuel/configuration.md).

# Configuration

***

<mark style="color:$success;">Config.lua</mark>

```lua
Config = {}

Config.Language = 'en' -- en, de, fr
-- this languages comming very soon: es, pt, it, nl, pl, sv, ar, jp, zh, he, fi, no

-- false = use stg-fuel's built-in NUI notification
-- true  = other scripts like ox_lib
Config.CustomNotify = false

Config.Functions = {}

-- DO NOT MODIFY unless you know what you're doing, we are here for support <3 discord.gg/stg
Config.Functions.Notify = function(type, message, title)
    if Config.CustomNotify then
        if GetResourceState('ks-notify') == 'started' then
            exports['ks-notify']:SendNotification({
                type = type == 'inform' and 'info' or type,
                title = title or 'Vanaheim Fuel',
                text = message,
                duration = 5000,
            })
        else
            lib.notify({ type = type, description = message, title = title })
        end
    else
        TriggerEvent('stg-fuel:internal:notify', type, message, title)
    end
end


-- Each station is a key in this table. Add new stations by copying station_1 block.
Config.Stations = {
    ['station_1'] = {
        purchasable = true, -- if true, players can buy this station and become its owner
        label = Locales[Config.Language]['gas_station'], -- or set a custom name: label = 'My Gas Station'
        coords = vector3(265.65, -1261.65, 29.29),
        radius = 30.0, -- coverage radius (meters); all gas pumps inside this area will belong to this station
        carWash = {
            coords = vector3(283.7935, -1269.5209, 29.2555), -- marker position
            workers = {
                vector4(287.9035, -1268.4897, 28.4408, 93.0662),
                vector4(287.9611, -1270.6368, 28.4408, 93.6984),
            },
        },
        purchasePrice = 500000,
        maxStock = 5000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        -- NPC for purchasing the station
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(288.63, -1255.56, 29.43, 102.04),
        },
        -- Pump attendants (NPC positions)
        attendants = {
            vector4(274.04, -1258.91, 28.14, 272.12),
            vector4(255.87, -1258.86, 28.12, 96.37),
        },
        -- Electric charging pump positions (add as many as you want)
        electricPumps = {
            vector4(273.3984, -1237.5977, 28.3305, 359.1315),
            -- vector4(0.0, 0.0, 0.0, 0.0),
        },
        -- Mechanic NPC position
        mechanicNpc = vector4(275.9142, -1237.6418, 28.3406, 176.6533),
        -- Delivery driver NPC position
        driverNpc = vector4(293.9858, -1250.7382, 28.3315, 358.0730),
        -- Vehicle spawn point for deliveries
        deliverySpawn = vector4(291.6129, -1244.1595, 29.3547, 182.3531),
        -- Marker where trailer is dropped off (press E)
        deliveryDropoff = vector3(270.0, -1261.0, 29.14),
    },
    ['station_2'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(819.61, -1028.21, 25.40),
        radius = 30.0,
        carWash = {
            coords = vector3(827.7325, -1044.1313, 26.1617),
            workers = {
                vector4(824.9766, -1041.8877, 25.7828, 269.7139),
                vector4(824.9457, -1043.3430, 25.9967, 266.4572),
            },
        },
        purchasePrice = 500000,
        maxStock = 5000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(834.0428, -1036.8268, 27.1520, 93.2171),
        },
        attendants = {
            vector4(829.2341, -1028.3099, 25.6458, 273.1407),
            vector4(809.3630, -1028.7795, 25.2730, 92.3729),
        },
        electricPumps = {
            vector4(813.6946, -1043.4802, 25.7605, 123.4562),
        },
        mechanicNpc = vector4(817.5319, -1039.7849, 25.7508, 357.8086),
        driverNpc = vector4(832.7263, -1048.0641, 26.7707, 9.9996),
        deliverySpawn = vector4(832.4464, -1046.2260, 26.5007, 83.4905),
        deliveryDropoff = vector3(809.1900, -1042.4043, 25.5601),
    },
    ['station_3'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(1208.61, -1402.29, 34.22),
        radius = 30.0,
        carWash = {
            coords = vector3(1197.9011, -1407.6348, 34.2328),
            workers = {
                vector4(1195.2128, -1407.1464, 34.2188, 277.9581),
                vector4(1195.2036, -1408.5483, 34.2188, 268.1789),
            },
        },
        purchasePrice = 220000,
        maxStock = 2000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(1211.2681, -1389.8293, 35.3769, 185.8712),
        },
        attendants = {
            vector4(1210.4778, -1404.6101, 34.2241, 47.4788),
            vector4(1206.5349, -1400.3966, 34.2241, 225.2010),
        },
        electricPumps = {
            vector4(1195.1218, -1394.4731, 34.2182, 274.1792),
        },
        mechanicNpc = vector4(1195.4510, -1399.0907, 34.2215, 268.6951),
        driverNpc = vector4(1204.6643, -1386.3956, 34.2270, 97.6659),
        deliverySpawn = vector4(1199.0615, -1386.5546, 34.2270, 192.0339),
        deliveryDropoff = vector3(1199.0615, -1386.5546, 34.2270),
    },
    ['station_4'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(1180.96, -329.84, 68.32),
        radius = 30.0,
        carWash = {
            coords = vector3(1173.9470, -316.4207, 68.1779),
            workers = {
                vector4(1172.4785, -314.8293, 68.1856, 190.4159),
                vector4(1174.7479, -314.4514, 68.1811, 194.9926),
            },
        },
        purchasePrice = 330000,
        maxStock = 3000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(1168.3611, -324.2387, 69.2922, 281.6697),
        },
        attendants = {
            vector4(1179.6735, -323.1458, 68.1744, 194.3236),
            vector4(1182.2440, -337.4905, 68.1777, 9.3722),
        },
        electricPumps = {
            vector4(1169.0247, -316.3491, 68.1824, 277.6374),
        },
        mechanicNpc = vector4(1166.7198, -314.4412, 68.3302, 283.7745),
        driverNpc = vector4(1167.1837, -320.4160, 68.2878, 283.0392),
        deliverySpawn = vector4(1160.9120, -338.8349, 67.2555, 170.6236),
        deliveryDropoff = vector3(1160.9120, -338.8349, 67.2555),
    },
    ['station_5'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(620.80, 268.74, 102.09),
        radius = 70.0,
        carWash = {
            coords = vector3(633.7770, 255.1232, 102.1042),
            workers = {
                vector4(638.4553, 254.0320, 102.1522, 66.8403),
                vector4(637.1273, 251.5575, 102.1522, 62.1033),
            },
        },
        purchasePrice = 330000,
        maxStock = 3000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(645.9136, 267.6229, 103.2394, 62.6303),
        },
        attendants = {
            vector4(620.5372, 267.7213, 102.0894, 2.2547),
            vector4(620.5886, 270.0022, 102.0894, 173.0676),
        },
        electricPumps = {
            vector4(626.1169, 248.4836, 102.0433, 153.2195),
        },
        mechanicNpc = vector4(640.5432, 258.9329, 102.2989, 67.8888),
        driverNpc = vector4(650.9854, 274.1493, 102.2945, 336.4973),
        deliverySpawn = vector4(651.6096, 278.4818, 102.2951, 64.5610),
        deliveryDropoff = vector3(651.6096, 278.4818, 102.2951),
    },
    ['station_6'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(2581.18, 362.01, 107.47),
        radius = 60.0,
        carWash = {
            coords = vector3(2564.5676, 364.7367, 107.4628),
            workers = {
                vector4(2561.4399, 364.9058, 107.6204, 264.8286),
                vector4(2561.5994, 366.9024, 107.6203, 273.2683),
            },
        },
        purchasePrice = 280000,
        maxStock = 2500,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(2559.0667, 373.7335, 108.6211, 271.5872),
        },
        attendants = {
            vector4(2571.8435, 362.4484, 107.4576, 87.9217),
            vector4(2589.7019, 361.2946, 107.4687, 269.5959),
        },
        electricPumps = {
            vector4(2596.8381, 373.1447, 107.4093, 267.3643),
        },
        mechanicNpc = vector4(2559.8481, 368.8650, 107.6211, 263.2673),
        driverNpc = vector4(2557.0239, 348.1686, 107.6203, 175.6592),
        deliverySpawn = vector4(2550.7065, 342.5576, 107.4642, 272.6181),
        deliveryDropoff = vector3(2550.7065, 342.5576, 107.4642),
    },
    ['station_7'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(175.56, -1562.21, 28.26),
        radius = 30.0,
        carWash = {
            coords = vector3(179.2420, -1549.5345, 28.1618),
            workers = {
                vector4(175.8499, -1546.9646, 28.2618, 229.0949),
                vector4(176.9009, -1545.6901, 28.2618, 224.2207),
            },
        },
        purchasePrice = 220000,
        maxStock = 2000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(166.9105, -1553.3185, 29.2617, 226.2202),
        },
        attendants = {
            vector4(172.3817, -1558.7653, 28.2447, 41.9693),
            vector4(179.0158, -1565.7180, 28.2846, 227.3201),
        },
        electricPumps = {
            vector4(188.4871, -1555.5443, 28.2242, 312.4358),
        },
        mechanicNpc = vector4(170.9331, -1551.0958, 28.2618, 224.8119),
        driverNpc = vector4(158.7766, -1561.9434, 28.2617, 221.3382),
        deliverySpawn = vector4(160.1827, -1567.0487, 28.2560, 147.0365),
        deliveryDropoff = vector3(160.1827, -1567.0487, 28.2560),
    },
    ['station_8'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-319.43, -1471.82, 29.55),
        radius = 60.0,
        carWash = {
            coords = vector3(-337.9807, -1467.5448, 29.5685),
            workers = {
                vector4(-341.8156, -1468.8247, 29.6115, 279.2663),
                vector4(-341.9676, -1467.5126, 29.6115, 264.0625),
            },
        },
        purchasePrice = 330000,
        maxStock = 3000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-342.6121, -1483.1646, 30.7205, 271.6122),
        },
        attendants = {
            vector4(-320.1292, -1470.5692, 29.5482, 213.2525),
            vector4(-319.1768, -1472.6318, 29.5487, 32.8138),
        },
        electricPumps = {
            vector4(-334.4311, -1457.0291, 29.5301, 0.9785),
        },
        mechanicNpc = vector4(-342.2491, -1478.2355, 29.7510, 276.5838),
        driverNpc = vector4(-342.4472, -1489.6691, 29.7540, 275.1985),
        deliverySpawn = vector4(-343.2209, -1495.3821, 29.7572, 271.0543),
        deliveryDropoff = vector3(-343.2209, -1495.3821, 29.7572),
    },
    ['station_9'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(1785.8855, 3330.8767, 40.3779),
        radius = 30.0,
        carWash = {
            coords = vector3(1783.9617, 3320.5068, 40.4470),
            workers = {
                vector4(1781.3928, 3318.8977, 40.4351, 306.4853),
                vector4(1780.5510, 3320.3325, 40.3832, 305.7203),
            },
        },
        purchasePrice = 100000,
        maxStock = 1000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(1776.3038, 3327.4619, 41.4333, 305.6140),
        },
        attendants = {
            vector4(1784.3359, 3332.8293, 40.2054, 29.5237),
            vector4(1786.9633, 3328.3132, 40.3691, 210.9191),
        },
        electricPumps = {
            vector4(1773.3868, 3339.0500, 40.1844, 124.9397),
        },
        mechanicNpc = vector4(1777.0205, 3326.1753, 40.4333, 306.7796),
        driverNpc = vector4(1778.3075, 3320.6382, 40.4175, 212.5997),
        deliverySpawn = vector4(1786.0470, 3311.7788, 40.4544, 312.5657),
        deliveryDropoff = vector3(1786.0470, 3311.7788, 40.4544),
    },
    ['station_10'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(49.6327, 2780.1755, 56.8840),
        radius = 30.0,
        carWash = {
            coords = vector3(39.2104, 2797.8711, 56.8782),
            workers = {
                vector4(42.9104, 2796.5181, 56.8782, 60.8096),
                vector4(41.6932, 2795.1338, 56.8782, 57.2178),
            },
        },
        purchasePrice = 100000,
        maxStock = 1000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(46.4199, 2789.3506, 57.8783, 147.6337),
        },
        attendants = {
            vector4(45.9538, 2781.9404, 56.8840, 62.3338),
            vector4(53.7534, 2775.9426, 56.8841, 238.2623),
        },
        electricPumps = {
            vector4(33.9818, 2787.4546, 56.8782, 53.3966),
        },
        mechanicNpc = vector4(42.2071, 2791.1047, 56.8782, 147.5044),
        driverNpc = vector4(61.1137, 2785.6980, 56.8881, 231.0604),
        deliverySpawn = vector4(64.9966, 2783.1155, 56.8783, 140.7142),
        deliveryDropoff = vector3(64.9965, 2783.1155, 56.8783),
    },
    ['station_11'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(263.8483, 2607.4807, 43.9833),
        radius = 30.0,
        carWash = {
            coords = vector3(245.0054, 2601.0740, 44.1210),
            workers = {
                vector4(246.4017, 2597.0593, 44.1014, 13.6274),
                vector4(244.9192, 2596.8936, 44.1104, 3.4235),
            },
        },
        purchasePrice = 80000,
        maxStock = 800,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(265.8831, 2598.2632, 44.8398, 12.8130),
        },
        attendants = {
            vector4(267.3349, 2607.5195, 43.8531, 276.4278),
            vector4(261.1631, 2606.3718, 43.9344, 97.7494),
        },
        electricPumps = {
            vector4(249.3943, 2598.2759, 43.9838, 100.0825),
        },
        mechanicNpc = vector4(268.7310, 2598.7183, 44.0458, 10.1752),
        driverNpc = vector4(269.9234, 2597.6470, 43.7436, 283.4800),
        deliverySpawn = vector4(273.2763, 2610.9429, 43.7131, 7.8563),
        deliveryDropoff = vector3(273.1234, 2612.0508, 43.6969),
    },
    ['station_12'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(1039.1163, 2671.3120, 38.5462),
        radius = 30.0,
        carWash = {
            coords = vector3(1027.4596, 2663.2380, 38.5511),
            workers = {
                vector4(1030.2472, 2663.0305, 38.5511, 93.5309),
                vector4(1030.1506, 2661.4106, 38.5511, 89.7232),
            },
        },
        purchasePrice = 180000,
        maxStock = 1500,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(1039.3274, 2664.1426, 39.5511, 1.8098),
        },
        attendants = {
            vector4(1039.2565, 2667.5640, 38.5502, 356.9741),
            vector4(1038.8761, 2674.9363, 38.5501, 183.6372),
        },
        electricPumps = {
            vector4(1050.7917, 2668.1064, 38.5511, 180.2453),
        },
        mechanicNpc = vector4(1053.5092, 2664.3552, 38.5545, 7.0810),
        driverNpc = vector4(1025.0771, 2651.8232, 38.5511, 2.9431),
        deliverySpawn = vector4(1026.4940, 2658.3125, 38.5511, 354.6608),
        deliveryDropoff = vector3(1026.5056, 2658.4333, 38.5511),
    },
    ['station_13'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(1208.0370, 2660.4910, 36.8950),
        radius = 30.0,
        carWash = {
            coords = vector3(1212.3158, 2665.3542, 36.8028),
            workers = {
                vector4(1215.3037, 2665.5552, 36.8076, 90.9544),
                vector4(1215.6289, 2663.9270, 36.8100, 98.0067),
            },
        },
        purchasePrice = 130000,
        maxStock = 1200,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(1202.1819, 2654.1807, 37.8519, 318.0753),
        },
        attendants = {
            vector4(1210.6162, 2657.3301, 36.8177, 223.0542),
            vector4(1204.8606, 2663.2949, 36.8100, 43.3035),
        },
        electricPumps = {
            vector4(1203.4747, 2664.4856, 36.8100, 137.0632),
        },
        mechanicNpc = vector4(1199.4796, 2662.2756, 36.8222, 316.0658),
        driverNpc = vector4(1206.2428, 2646.5056, 36.8519, 225.4746),
        deliverySpawn = vector4(1209.7860, 2644.8030, 36.8262, 326.3607),
        deliveryDropoff = vector3(1209.7977, 2644.8213, 36.8263),
    },
    ['station_14'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(2679.9399, 3264.1030, 54.2355),
        radius = 30.0,
        carWash = {
            coords = vector3(2689.0303, 3284.3401, 54.2406),
            workers = {
                vector4(2686.1160, 3285.9937, 54.2406, 241.7374),
                vector4(2687.0767, 3287.5002, 54.2406, 240.1969),
            },
        },
        purchasePrice = 80000,
        maxStock = 800,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(2673.7251, 3267.0098, 55.2406, 240.3792),
        },
        attendants = {
            vector4(2682.4727, 3269.1851, 54.2406, 327.8294),
            vector4(2677.1006, 3259.6301, 54.2406, 151.8627),
        },
        electricPumps = {
            vector4(2674.8279, 3255.8081, 54.2406, 59.2398),
        },
        mechanicNpc = vector4(2671.8179, 3262.6731, 54.2406, 243.5388),
        driverNpc = vector4(2667.6321, 3260.1406, 54.2406, 155.9014),
        deliverySpawn = vector4(2663.1382, 3251.4924, 53.9777, 226.8120),
        deliveryDropoff = vector3(2663.1382, 3251.4924, 53.9783),
    },
    ['station_15'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(2005.0060, 3774.2029, 31.4019),
        radius = 30.0,
        carWash = {
            coords = vector3(1995.8767, 3774.9055, 31.1808),
            workers = {
                vector4(1993.1873, 3778.2949, 31.1808, 208.1711),
                vector4(1994.8921, 3779.0227, 31.1808, 217.1906),
            },
        },
        purchasePrice = 180000,
        maxStock = 1500,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(2001.6774, 3780.0913, 32.1808, 210.8029),
        },
        attendants = {
            vector4(1999.2560, 3770.7151, 31.1808, 120.7907),
            vector4(2012.1222, 3778.4663, 31.1808, 300.2617),
        },
        electricPumps = {
            vector4(2014.4788, 3779.8926, 31.1808, 206.2080),
        },
        mechanicNpc = vector4(1999.8309, 3759.6680, 31.1809, 305.2614),
        driverNpc = vector4(1990.3160, 3779.7104, 31.1808, 119.1882),
        deliverySpawn = vector4(1985.7825, 3775.7664, 31.1808, 190.3179),
        deliveryDropoff = vector3(1985.8120, 3775.5281, 31.1808),
    },
    ['station_16'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(1687.4352, 4930.6030, 41.0492),
        radius = 30.0,
        carWash = {
            coords = vector3(1699.6844, 4938.2524, 41.0781),
            workers = {
                vector4(1703.0588, 4937.0254, 41.0781, 56.5691),
                vector4(1701.9556, 4935.4839, 41.0781, 58.0607),
            },
        },
        purchasePrice = 80000,
        maxStock = 800,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(1693.9819, 4924.9141, 42.0781, 55.6226),
        },
        attendants = {
            vector4(1691.8496, 4929.9658, 41.0781, 60.0784),
            vector4(1682.8365, 4929.4165, 41.0711, 233.4387),
        },
        electricPumps = {
            vector4(1692.6479, 4917.7158, 41.0781, 143.7458),
        },
        mechanicNpc = vector4(1693.7917, 4921.1548, 41.2317, 137.8030),
        driverNpc = vector4(1697.0159, 4917.8413, 41.0782, 144.5593),
        deliverySpawn = vector4(1688.6359, 4918.5981, 41.0781, 58.2255),
        deliveryDropoff = vector3(1688.6124, 4918.6123, 41.0781),
    },
    ['station_17'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(1702.1807, 6417.6626, 31.6407),
        radius = 30.0,
        carWash = {
            coords = vector3(1714.5118, 6421.4707, 31.9130),
            workers = {
                vector4(1712.3337, 6423.1802, 31.7350, 243.0123),
                vector4(1713.2672, 6424.7275, 31.7486, 244.4451),
            },
        },
        purchasePrice = 130000,
        maxStock = 1200,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(1705.8499, 6425.3384, 32.7643, 152.6844),
        },
        attendants = {
            vector4(1695.8097, 6419.2979, 31.6360, 58.8226),
            vector4(1707.9938, 6413.4956, 31.7513, 238.7047),
        },
        electricPumps = {
            vector4(1684.2587, 6425.0967, 31.2628, 63.7474),
        },
        mechanicNpc = vector4(1695.2295, 6430.4814, 31.6756, 151.1017),
        driverNpc = vector4(1691.8138, 6434.4077, 31.7640, 68.7350),
        deliverySpawn = vector4(1687.6909, 6424.9297, 31.4350, 182.8629),
        deliveryDropoff = vector3(1687.6926, 6424.8999, 31.4352),
    },
    ['station_18'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(176.7807, 6605.7729, 30.8481),
        radius = 70.0,
        carWash = {
            coords = vector3(183.8112, 6631.0776, 30.5875),
            workers = {
                vector4(184.9328, 6634.5688, 30.5394, 188.1299),
                vector4(182.6056, 6634.4585, 30.5476, 179.7548),
            },
        },
        purchasePrice = 150000,
        maxStock = 1300,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(166.1914, 6631.9863, 31.5318, 142.4568),
        },
        attendants = {
            vector4(186.9755, 6604.2900, 30.8682, 101.0888),
            vector4(173.1285, 6601.8481, 30.8682, 279.0658),
        },
        electricPumps = {
            vector4(175.7667, 6628.3052, 30.6664, 312.2079),
        },
        mechanicNpc = vector4(171.0379, 6633.9375, 30.6153, 227.6689),
        driverNpc = vector4(193.4118, 6635.4316, 30.6301, 162.8461),
        deliverySpawn = vector4(193.9886, 6626.5327, 30.6088, 184.9934),
        deliveryDropoff = vector3(194.0014, 6626.3867, 30.6108),
    },
    ['station_19'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-94.2156, 6419.5000, 30.4848),
        radius = 30.0,
        carWash = {
            coords = vector3(-102.2714, 6404.0288, 30.4904),
            workers = {
                vector4(-98.1258, 6406.1899, 30.6403, 54.5452),
                vector4(-98.9934, 6405.2534, 30.6404, 43.1736),
            },
        },
        purchasePrice = 100000,
        maxStock = 1000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-92.9955, 6410.2827, 31.6405, 45.1201),
        },
        attendants = {
            vector4(-99.8599, 6414.0566, 30.4871, 143.0668),
            vector4(-88.9375, 6424.9165, 30.4886, 317.6190),
        },
        electricPumps = {
            vector4(-80.1214, 6421.0835, 30.4905, 321.5374),
        },
        mechanicNpc = vector4(-88.1830, 6416.0869, 30.6405, 45.9511),
        driverNpc = vector4(-83.3014, 6418.7637, 30.6405, 319.2722),
        deliverySpawn = vector4(-83.2177, 6425.1826, 30.4941, 36.3851),
        deliveryDropoff = vector3(-83.2648, 6425.2471, 30.4912),
    },
    ['station_20'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-2556.0737, 2333.9958, 32.2562),
        radius = 30.0,
        carWash = {
            coords = vector3(-2561.8298, 2320.9585, 32.0602),
            workers = {
                vector4(-2562.3638, 2317.8037, 32.2156, 3.5986),
                vector4(-2564.3335, 2317.7112, 32.2156, 8.3405),
            },
        },
        purchasePrice = 310000,
        maxStock = 2800,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-2544.2759, 2315.9685, 33.2161, 7.9417),
        },
        attendants = {
            vector4(-2554.8174, 2326.6621, 32.0780, 183.2790),
            vector4(-2555.5261, 2342.1101, 32.0780, 3.1119),
        },
        electricPumps = {
            vector4(-2537.8086, 2322.3201, 32.0599, 179.6278),
        },
        mechanicNpc = vector4(-2555.3020, 2315.4639, 32.2161, 3.4662),
        driverNpc = vector4(-2538.1995, 2316.3926, 32.2161, 5.3838),
        deliverySpawn = vector4(-2533.8330, 2326.2039, 32.0599, 266.5383),
        deliveryDropoff = vector3(-2533.7871, 2326.2019, 32.0599),
    },
    ['station_21'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-1802.3868, 800.6241, 137.5140),
        radius = 30.0,
        carWash = {
            coords = vector3(-1817.1245, 804.4518, 137.5644),
            workers = {
                vector4(-1818.6663, 802.8154, 137.4707, 312.1007),
                vector4(-1819.7679, 804.0261, 137.6109, 298.9125),
            },
        },
        purchasePrice = 280000,
        maxStock = 2500,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-1816.4061, 795.8925, 138.1124, 313.6489),
        },
        attendants = {
            vector4(-1809.8231, 801.2322, 137.5145, 42.3916),
            vector4(-1797.1398, 813.4316, 137.5134, 42.9534),
        },
        electricPumps = {
            vector4(-1817.8113, 799.4279, 137.1021, 139.7006),
        },
        mechanicNpc = vector4(-1816.8191, 791.8544, 137.1037, 221.2144),
        driverNpc = vector4(-1795.3098, 820.8068, 137.6555, 130.6706),
        deliverySpawn = vector4(-1801.9829, 820.6132, 137.9816, 76.8332),
        deliveryDropoff = vector3(-1802.0049, 820.6185, 137.9811),
    },
    ['station_22'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-1436.9653, -276.5673, 45.1771),
        radius = 30.0,
        carWash = {
            coords = vector3(-1422.6599, -281.6176, 45.2077),
            workers = {
                vector4(-1420.5337, -277.6388, 45.2646, 138.0017),
                vector4(-1419.4111, -278.8257, 45.2646, 122.4422),
            },
        },
        purchasePrice = 220000,
        maxStock = 2000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-1428.0599, -268.6146, 46.2179, 133.2949),
        },
        attendants = {
            vector4(-1431.2920, -276.6298, 45.3910, 38.9528),
            vector4(-1442.6628, -276.7624, 45.3975, 216.8360),
        },
        electricPumps = {
            vector4(-1437.8097, -260.7984, 45.2077, 312.7239),
        },
        mechanicNpc = vector4(-1433.7767, -262.3106, 45.2646, 136.7534),
        driverNpc = vector4(-1417.2666, -278.6026, 45.3208, 228.1060),
        deliverySpawn = vector4(-1417.8624, -283.1538, 45.2386, 130.8567),
        deliveryDropoff = vector3(-1418.0890, -283.3496, 45.2398),
    },
    ['station_23'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-2093.3582, -321.3019, 12.0272),
        radius = 30.0,
        carWash = {
            coords = vector3(-2078.1628, -330.4501, 12.1483),
            workers = {
                vector4(-2075.3872, -331.1042, 12.3160, 93.4029),
                vector4(-2075.3743, -332.9970, 12.3160, 80.3307),
            },
        },
        purchasePrice = 650000,
        maxStock = 6500,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-2073.1777, -326.8449, 13.3160, 81.5603),
        },
        attendants = {
            vector4(-2087.3625, -317.7574, 12.0220, 265.2859),
            vector4(-2104.7273, -315.5336, 12.0234, 83.5480),
        },
        electricPumps = {
            vector4(-2079.7786, -299.1160, 12.0845, 354.7247),
        },
        mechanicNpc = vector4(-2072.9148, -314.4618, 12.3160, 83.8784),
        driverNpc = vector4(-2070.7820, -312.4859, 12.3160, 358.2681),
        deliverySpawn = vector4(-2089.1160, -304.1432, 12.0280, 81.7179),
        deliveryDropoff = vector3(-2089.5535, -304.0796, 12.0281),
    },
    ['station_24'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-723.2966, -935.5647, 18.1832),
        radius = 30.0,
        carWash = {
            coords = vector3(-699.8329, -932.0247, 18.0139),
            workers = {
                vector4(-697.7775, -930.5771, 18.0139, 87.7176),
                vector4(-697.5675, -928.5792, 18.0139, 90.9425),
            },
        },
        purchasePrice = 330000,
        maxStock = 3000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-702.7858, -916.9489, 19.2141, 181.1842),
        },
        attendants = {
            vector4(-715.1206, -937.3669, 18.0347, 269.4272),
            vector4(-733.1287, -937.2518, 18.0347, 89.2119),
        },
        electricPumps = {
            vector4(-727.3071, -907.5296, 18.0139, 1.2186),
        },
        mechanicNpc = vector4(-721.0613, -914.9504, 18.0139, 90.3334),
        driverNpc = vector4(-697.1970, -920.3317, 18.0139, 90.4532),
        deliverySpawn = vector4(-707.6027, -922.0099, 18.0139, 93.0583),
        deliveryDropoff = vector3(-708.1525, -922.0392, 18.0139),
    },
    ['station_25'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-524.7360, -1209.2709, 17.1940),
        radius = 30.0,
        carWash = {
            coords = vector3(-519.2828, -1198.7473, 17.8830),
            workers = {
                vector4(-521.1587, -1195.8152, 17.9088, 203.5640),
                vector4(-519.2668, -1195.0168, 18.1364, 208.1333),
            },
        },
        purchasePrice = 420000,
        maxStock = 4000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-531.0601, -1220.8464, 18.4550, 334.5476),
        },
        attendants = {
            vector4(-527.2240, -1215.0875, 17.1848, 153.5875),
            vector4(-523.4030, -1207.4502, 17.1849, 340.3806),
        },
        electricPumps = {
            vector4(-510.7170, -1212.9541, 17.4867, 227.6294),
        },
        mechanicNpc = vector4(-510.5607, -1219.1368, 17.4427, 37.2742),
        driverNpc = vector4(-538.6953, -1217.0554, 17.4550, 337.6776),
        deliverySpawn = vector4(-542.0396, -1203.9469, 16.8767, 63.6149),
        deliveryDropoff = vector3(-542.8160, -1203.5616, 16.8589),
    },
    ['station_26'] = {
        purchasable = true,
        label = Locales[Config.Language]['gas_station'],
        coords = vector3(-68.8016, -1762.3586, 28.3876),
        radius = 30.0,
        carWash = {
            coords = vector3(-55.1212, -1766.9011, 27.9135),
            workers = {
                vector4(-49.0710, -1765.6522, 28.3207, 55.4379),
                vector4(-50.1970, -1767.0234, 28.2767, 38.0587),
            },
        },
        purchasePrice = 750000,
        maxStock = 5000,
        blip = { sprite = 361, color = 1, scale = 0.7 },
        purchaseNpc = {
            model = 's_m_y_shop_mask',
            coords = vector4(-48.5807, -1761.4036, 29.4396, 141.2718),
        },
        attendants = {
            vector4(-62.8943, -1766.4697, 28.0746, 252.7386),
            vector4(-80.7125, -1760.1396, 28.6480, 71.9264),
        },
        electricPumps = {
            vector4(-58.1527, -1747.0222, 28.3211, 234.0287),
        },
        mechanicNpc = vector4(-58.3661, -1753.0411, 28.4396, 143.1010),
        driverNpc = vector4(-48.0615, -1761.0966, 28.4396, 140.1791),
        deliverySpawn = vector4(-68.2427, -1749.4893, 28.4821, 51.5116),
        deliveryDropoff = vector3(-69.2753, -1748.6682, 28.4973),
    },
}

-- Helicopter fueling locations
Config.HelicopterFueling = {
    enabled = true,
    fuelType = 'premium',
    priceMultiplier = 2.5,
    locations = {
        vector4(-735.3836, -1456.6099, 3.9919, 322.7240),
    },
}

-- Boat fueling locations
Config.BoatFueling = {
    enabled = true,
    fuelType = 'diesel',
    priceMultiplier = 1.5,
    locations = {
        vector4(-846.0560, -1367.5775, 0.6052, 108.5345),
    },
}

-- Map blips for stations
Config.Blips = {
    enabled = true,
    sprite = 361,
    color = 1,
    scale = 0.7,

    shortRange = true, -- true = blip only visible when player is nearby, false = always visible on the map
    ownedSprite = 361, -- blip sprite used when the station is owned by a player
    ownedColor = 2, -- blip color used when the station is owned by a player
}

-- ============================================================
-- FUEL TYPES & PRICING
-- ============================================================

Config.FuelTypes = {
    ['diesel'] = {
        label = 'Diesel',          -- name shown on the UI card (auto uppercased)
        category = 'diesel',       -- wrong-fuel group; vehicles only accept fuels matching their category
        defaultPrice = 1.5,        -- $/L charged at unowned stations and starting price for owned ones
        minPrice = 0.5,            -- lowest $/L owner can set in the management UI
        maxPrice = 10.0,           -- highest $/L owner can set in the management UI
        depletionRate = 1.0,       -- consumption multiplier (lower = lasts longer)
        wholesalePrice = 0.8,      -- $/L the owner pays when restocking via delivery
        color = '#3ecc93',         -- UI accent color (card bg, border, barrel tint)
    },
    ['gasoline'] = {
        label = 'Gasoline',        -- name shown on the UI card (auto uppercased)
        category = 'gasoline',     -- wrong-fuel group; vehicles only accept fuels matching their category
        defaultPrice = 2.0,        -- $/L charged at unowned stations and starting price for owned ones
        minPrice = 0.5,            -- lowest $/L owner can set in the management UI
        maxPrice = 10.0,           -- highest $/L owner can set in the management UI
        depletionRate = 0.9,       -- consumption multiplier (lower = lasts longer)
        wholesalePrice = 1.2,      -- $/L the owner pays when restocking via delivery
        color = '#cc7c3e',         -- UI accent color (card bg, border, barrel tint)
    },
    ['premium'] = {
        label = 'Premium',         -- name shown on the UI card (auto uppercased)
        category = 'gasoline',     -- shares the gasoline category, so any gasoline car can use it
        defaultPrice = 3.0,        -- $/L charged at unowned stations and starting price for owned ones
        minPrice = 0.5,            -- lowest $/L owner can set in the management UI
        maxPrice = 15.0,           -- highest $/L owner can set in the management UI
        depletionRate = 0.8,       -- consumption multiplier (lower = lasts longer)
        wholesalePrice = 1.8,      -- $/L the owner pays when restocking via delivery
        color = '#3e69cc',         -- UI accent color (card bg, border, barrel tint)
    },
    ['electric'] = {
        label = 'Electric',        -- name shown on the UI card (auto uppercased)
        category = 'electric',     -- wrong-fuel group; only electric vehicles can use this
        defaultPrice = 4.5,        -- $/L charged at unowned stations and starting price for owned ones
        minPrice = 1.0,            -- lowest $/L owner can set in the management UI
        maxPrice = 20.0,           -- highest $/L owner can set in the management UI
        depletionRate = 0.6,       -- consumption multiplier (lower = lasts longer)
        wholesalePrice = 2.5,      -- $/L the owner pays when restocking via delivery
        color = '#36a69b',         -- UI accent color (card bg, border, barrel tint)
    },
}

-- ============================================================
-- BUSINESS & OWNERSHIP
-- ============================================================

Config.Business = {
    taxRate = 10,                  -- % tax deducted from every fuel sale at owned stations
    sellPercent = 60,              -- % of purchase price refunded when the owner sells any station
    salaryPayInterval = 60,        -- minutes (real time) between automatic salary payouts to members
    maxNameLength = 10,            -- max characters allowed for the station business name
    transferCooldown = 300,        -- seconds an owner must wait between station ownership transfers
    maxRanks = 10,                 -- max number of custom ranks a station can have
    maxStationsPerPlayer = 3,      -- max number of stations a single player can own at once
    maxTransactions = 20,          -- max transaction history entries kept per station (more = larger DB rows)
}
```

<mark style="color:$success;">config\_features.lua</mark>

```lua
-- ============================================================
-- PUMP SYSTEM
-- ============================================================

-- Pump unlocking
Config.PumpSystem = {
    defaultUnlocked = 1,    -- start with 1 pump unlocked
    pricePerPump = 50000,   -- cost to unlock additional pump
}

-- Nozzle fueling
Config.Nozzle = {
    fuelPerSecond = 2.0,                            -- liters poured per second when refueling at a pump
    maxDistance = 8.0,                              -- max distance (meters) between player and pump before fueling cancels
    animDict = 'timetable@gardener@filling_can',    -- animation dictionary played while holding the nozzle
    animName = 'gar_ig_5_filling_can',              -- animation name from the dict above
}

-- Pump breakdown (usage-based)
Config.PumpBreakdown = {
    enabled = true,
    checkAfterLiters = 100,         -- start checking for breakdown after this many liters
    breakdownChance = 0.03,         -- 3% chance per transaction after threshold
    guaranteedAt = 667,             -- guaranteed breakdown at this many liters (0 = disabled)
    repairCostPerPercent = 100,     -- cost per 1% damage (e.g. 50% damage = $5000)
    repairTimePerPercent = 2,       -- seconds per 1% damage during repair
    resetLitersOnRepair = true,     -- reset pump liters counter after repair
    slowdownEnabled = true,         -- slow down fueling speed based on pump damage
    slowdownMinMultiplier = 0.3,    -- min speed multiplier at 100% damage (0.3 = 30% of normal)
}

-- Pump prop models (any of these found inside station radius = usable pump)
Config.PumpModels = {
    `prop_gas_pump_1a`,
    `prop_gas_pump_1b`,
    `prop_gas_pump_1c`,
    `prop_gas_pump_1d`,
    `prop_gas_pump_old1`,
    `prop_gas_pump_old2`,
    `prop_gas_pump_old3`,
    `prop_vintage_pump`,
    `prop_gas_pump_1d_ns`,
}

-- Electric charging
Config.ElectricCharging = {
    enabled = true,                      -- master toggle for the electric charging system
    model = 'stg_prop_elec_pump',        -- prop spawned at each electricPumps coordinate
    chargePerSecond = 3.0,               -- liters charged per second while plugged in
    maxDistance = 5.0,                   -- max distance (meters) between player and charger before interaction cancels
}

-- ============================================================
-- ITEMS (Jerrycan & Siphon)
-- ============================================================

-- Jerrycan (always fills with the correct fuel type for the vehicle)
Config.Jerrycan = {
    itemName = 'jerrycan',          -- inventory item name for a full jerrycan
    emptyItemName = 'empty_jerrycan',-- inventory item name for an empty jerrycan
    model = 'w_am_jerrycan',        -- prop attached to the player while pouring
    fuelPerSecond = 1.5,            -- liters poured per second into the vehicle
    capacity = 20,                  -- max liters a full jerrycan holds
    price = 19000,                  -- $ cost to buy a full jerrycan from the station
    refundPercent = 50,             -- % of purchase price returned when refunding an empty jerrycan
    refillPrice = 5000,             -- $ cost to refill an empty jerrycan at a pump
}

-- Fuel Siphon (steal fuel from vehicles, then pour into another)
Config.Siphon = {
    emptyItem = 'fuel_siphon',           -- inventory item used to STEAL fuel from a vehicle
    fullItem = 'fuel_siphon_full',       -- inventory item created after stealing (used to POUR fuel into another vehicle)
    model = 'v_ind_cs_jerrycan03',       -- prop attached to the player during the action
    stealPerSecond = 0.8,                -- liters drained per second from the target vehicle
    fillPerSecond = 1.2,                 -- liters poured per second when emptying the siphon into a vehicle
    capacity = 20,                       -- max liters the siphon can hold
    animDict = 'weapons@misc@jerrycan@', -- animation dictionary used during the action
    animName = 'fire',                   -- animation name from the dict above
}

-- ============================================================
-- CAR WASH
-- ============================================================

Config.CarWash = {
    price = 500,                                      -- $ customers pay for one wash
    purchasePrice = 75000,                            -- $ price for the station owner to unlock the car wash
    baseDuration = 30,                                -- wash duration in seconds with 1 worker
    durationReduction = 0.6,                          -- multiplier per extra worker (2 workers = 30 * 0.6 = 18s)
    dirtRemovalPercent = 100,                         -- % of dirt removed when a wash completes (0-100)
    marker = {
        type = 27,                                    -- marker type id (27 = flat cylinder)
        color = { r = 62, g = 204, b = 147, a = 120 },-- marker color (RGBA, 0-255)
        size = vector3(2.0, 2.0, 0.5),                -- marker size (x, y, z)
        bobUpAndDown = false,                         -- if true, marker bobs vertically
        rotate = false,                               -- if true, marker rotates
    },
    workerAnimDict = 'timetable@floyd@clean_kitchen@base', -- animation dictionary played by worker NPCs
    workerAnimName = 'base',                          -- animation name from the dict above
    workerCleanBones = { 'boot', 'wheel_lf', 'wheel_rf', 'wheel_lr', 'wheel_rr', 'bumper_f', 'bumper_r' }, -- bone names workers walk to and clean
}

-- ============================================================
-- DELIVERY SYSTEM
-- ============================================================

Config.Delivery = {
    enabled = true,

    -- Depot locations where fuel is picked up
    depots = {
        ['depot_1'] = {
            label = 'Oil Refinery',
            coords = vector3(2678.69, 1676.58, 24.49),
            heading = 180.0,
            blipSprite = 477,
            blipColor = 47,
            -- Where the trailer spawns at depot (player backs into it)
            trailerSpawn = vector4(2680.50, 1662.00, 24.49, 0.0),
        },
    },

    -- Vehicle options (player picks one when starting delivery)
    vehicles = {
        ['small'] = {
            label = 'Fuel Van',
            model = 'packer',
            capacity = 5000,        -- max liters per trip
            costMultiplier = 1.0,   -- wholesale price * this
            rentalPrice = 2000,
        },
        ['medium'] = {
            label = 'Fuel Truck',
            model = 'hauler',
            capacity = 10000,
            costMultiplier = 0.85,  -- bulk discount
            rentalPrice = 5000,
        },
        ['large'] = {
            label = 'Fuel Tanker',
            model = 'hauler2',
            capacity = 20000,
            costMultiplier = 0.7,   -- big bulk discount
            rentalPrice = 10000,
        },
    },

    -- Trailer attached to delivery vehicle
    trailer = {
        model = 'tanker',
    },

    -- Spawn offset from station coords (where the truck appears)
    spawnOffset = vector3(0.0, 0.0, 0.0),

    -- Damage settings
    damageThreshold = 500.0,        -- vehicle health below this = fuel starts leaking
    maxFuelLossPercent = 30,        -- max % of fuel lost from damage (0-100)

    -- Timing
    loadingTime = 15,               -- seconds to load fuel at depot
    unloadingTime = 10,             -- seconds to unload fuel at station

    -- Blip settings
    blipRoute = true,               -- show GPS route to destination

    -- NPC Driver
    npcDriver = {
        enabled = true,
        costMultiplier = 1.3,       -- 30% extra cost for NPC delivery
        minDeliveryTime = 180,      -- 3 minutes
        maxDeliveryTime = 240,      -- 4 minutes
        model = 's_m_y_dockwork_01',
        idleScenario = 'WORLD_HUMAN_SMOKING',
    },
}

-- ============================================================
-- NPC STAFF (hired by station owners)
-- ============================================================

Config.NPC = {
    pumpAttendantCostPerDay = 500,    -- $ deducted from station balance per day for each pump attendant
    carWashWorkerCostPerDay = 750,    -- $ deducted from station balance per day for each car wash worker
    deliveryDriverCostPerDay = 1000,  -- $ deducted from station balance per day for the delivery driver
    mechanicCostPerDay = 1500,        -- $ deducted from station balance per day for the mechanic

    maxPumpAttendants = 6,            -- max number of pump attendants the owner can hire at one station
    maxCarWashWorkers = 2,            -- max number of car wash workers the owner can hire at one station
    maxDeliveryDrivers = 1,           -- max number of delivery drivers the owner can hire at one station
    maxMechanics = 1,                 -- max number of mechanics the owner can hire at one station

    -- A random model is picked from the list below when an NPC is hired, then saved to DB so it stays the same after restart
    pumpAttendantModels = {
        's_m_y_dockwork_01',
        's_m_y_garbage',
        's_m_y_construct_01',
        's_m_y_construct_02',
        's_m_m_janitor',
        'a_m_y_mexthug_01',
        's_m_y_waretech_01',
        'a_m_y_stwhi_02',
    },
    carWashWorkerModels = {
        's_m_y_dockwork_01',
        's_m_y_construct_01',
    },
    deliveryDriverModels = {
        's_m_y_dockwork_01',
        's_m_y_waretech_01',
    },
    mechanicModels = {
        's_m_y_xmech_01',
    },
}

-- Pump Attendant behavior (NPC that refuels for the player)
Config.PumpAttendant = {
    enabled = true,
    runDistance = 3.0,      -- within this distance, walk. Beyond this, run.
    idleAnim = {
        dict = 'WORLD_HUMAN_CLIPBOARD',
        name = 'base',
        scenario = true, -- use scenario instead of anim
    },
}

-- Mechanic NPC behavior (auto-repairs pumps)
Config.Mechanic = {
    enabled = true,
    model = 's_m_y_xmech_01',
    healthThreshold = 90,           -- NPC starts repairing when pump health drops below this %
    repairSpeedPerPercent = 1.5,    -- seconds per 1% damage to repair
    animDict = 'mini@repair',
    animName = 'fixing_a_player',
    idleScenario = 'WORLD_HUMAN_SMOKING',
}

-- ============================================================
-- WRONG FUEL SYSTEM
-- ============================================================

Config.WrongFuel = {
    enabled = true,             -- master toggle for the wrong-fuel damage system
    damagePerTick = 10.0,       -- engine HP removed each tick while wrong fuel is in the tank
    smokingThreshold = 400.0,   -- engine HP threshold below which the engine starts smoking visually
    stallChance = 0.05,         -- chance per tick (0-1) for the engine to randomly stall
    tickInterval = 1000,        -- how often (ms) the wrong-fuel damage loop runs
    minEngineHealth = 0.0,      -- engine HP floor (0 = engine can explode, 100 = dies but no explosion, 400 = stops at smoking)
}

-- ============================================================
-- POLICE ALERT (siphon theft)
-- ============================================================

Config.PoliceAlert = {
    enabled = true,
    useCustom = false,                  -- true = use your own custom functions instead of built-in
    policeJobs = { 'police', 'sheriff' },
    showBlip = true,
    blipDuration = 30,                  -- seconds before blip disappears
    blipSprite = 161,
    blipColor = 1,
    blipScale = 1.0,
    showMugshot = true,
    partialPlate = true,
    partialPlateChars = 4,              -- "AB12****"

    -- Custom dispatch integrations (only used when useCustom = true)
    customServer = function(thiefSource, plate, coords)
        if GetResourceState('ps-dispatch') == 'started' then
            exports['ps-dispatch']:FuelSiphon(thiefSource, coords, plate)
        end
    end,
    customClient = function(thiefSource, plate, coords)
        if GetResourceState('cd_dispatch') == 'started' then
            exports['cd_dispatch']:AlertClient('Fuel Theft', 'A vehicle is being siphoned. Plate: ' .. (plate or 'Unknown'))
        end
    end,
}

-- ============================================================
-- SPEECH BUBBLES
-- ============================================================

Config.SpeechBubble = {
    enabled = true,                 -- master toggle for the speech bubble system
    triggerDistance = 8.0,          -- distance (m) the player must be within for an NPC to start speaking
    viewDistance = 8.0,             -- max distance (m) from which a bubble is rendered on screen
    duration = 7000,                -- how long (ms) a bubble stays visible
    cooldown = 20000,               -- cooldown (ms) per NPC before they can speak again
    checkInterval = 5000,           -- how often (ms) to check for nearby NPCs
    greetDistance = 4.0,            -- first time entering this distance triggers an instant greet
    categories = {                  -- enable/disable speech bubbles per NPC type
        pump_hired = true,          -- pump attendant when hired by an owned station
        pump_idle = true,           -- pump attendant at an unowned station
        wash_hired = true,          -- car wash worker when hired
        wash_idle = true,           -- car wash worker at an unowned station
        driver_hired = true,        -- delivery driver when hired
        purchase_unowned = true,    -- purchase NPC at an unowned station
        purchase_owned = true,      -- purchase NPC at an owned station
        mechanic_hired = true,      -- mechanic when hired
        mechanic_idle = true,       -- mechanic at an unowned station
    },
}

-- ============================================================
-- DEFAULT RANKS (created on station purchase)
-- ============================================================

Config.DefaultRanks = {
    {
        name = 'Owner',          -- rank label shown in the management UI
        salary = 0,              -- $ paid per Config.Business.salaryPayInterval cycle from the station balance
        sortOrder = 1,           -- display order in the rank list (lower = higher in the list)
        isDefault = true,        -- new station purchase = buyer is auto-assigned this rank
        permissions = {
            manage = true,         -- open the station management UI
            hire = true,           -- hire/fire NPC staff (attendants, workers, drivers, mechanic)
            sell = true,           -- sell fuel from the pumps to customers
            refuel = true,         -- order fuel deliveries to restock the station
            set_prices = true,     -- change fuel prices in the management UI
            manage_members = true, -- add/remove members and assign their ranks
            withdraw_money = true, -- withdraw cash from the station balance
        },
    },
    {
        name = 'Manager',        -- rank label shown in the management UI
        salary = 1000,           -- $ paid per Config.Business.salaryPayInterval cycle from the station balance
        sortOrder = 2,           -- display order in the rank list (lower = higher in the list)
        isDefault = false,       -- not auto-assigned to anyone
        permissions = {
            manage = true,          -- open the station management UI
            hire = true,            -- hire/fire NPC staff
            sell = true,            -- sell fuel to customers
            refuel = true,          -- order fuel deliveries
            set_prices = true,      -- change fuel prices
            manage_members = false, -- cannot add/remove members
            withdraw_money = false, -- cannot touch the station cash
        },
    },
    {
        name = 'Employee',       -- rank label shown in the management UI
        salary = 500,            -- $ paid per Config.Business.salaryPayInterval cycle from the station balance
        sortOrder = 3,           -- display order in the rank list (lower = higher in the list)
        isDefault = true,        -- newly hired members default to this rank
        permissions = {
            manage = false,         -- cannot open the management UI
            hire = false,           -- cannot hire/fire staff
            sell = true,            -- can sell fuel to customers
            refuel = false,         -- cannot order deliveries
            set_prices = false,     -- cannot change fuel prices
            manage_members = false, -- cannot manage members
            withdraw_money = false, -- cannot withdraw cash
        },
    },
}

```

<mark style="color:$success;">config\_vehicles.lua</mark>

```lua
-- ============================================================
-- INITIAL FUEL (random level for newly seen vehicles)
-- ============================================================
--
-- Vehicle fuel state is stored on the entity via FiveM state bags, not in
-- the database. Benefits:
--   - Zero database queries during gameplay (huge performance win)
--   - Fuel stays the same as long as the entity exists (drive, exit, re-enter)
--   - Fully compatible with LegacyFuel exports, so most garage scripts work
--     out of the box for persistent owned-vehicle fuel
--
-- When a brand new vehicle is seen for the first time, it gets a random
-- starting fuel level between min and max below.
--
Config.InitialFuel = {
    min = 20.0,                  -- minimum % a freshly spawned vehicle starts with
    max = 80.0,                  -- maximum % a freshly spawned vehicle starts with
}

-- ============================================================
-- VEHICLE CATEGORIZATION
-- ============================================================

-- Use class-based auto detection? (true = GTA vehicle class, false = only manual lists)
Config.UseClassBasedDetection = true

-- Use manual vehicle lists? (true = check diesel/electric lists, false = only class-based)
Config.UseManualVehicleLists = true

-- GTA Vehicle Classes that are DIESEL
Config.DieselClasses = {
    [10] = true, -- Industrial
    [17] = true, -- Service
    [19] = true, -- Military
    [20] = true, -- Commercial
    [21] = true, -- Trains
}

-- Manual diesel vehicle list
Config.DieselVehicles = {
    'benson', 'benson2', 'biff', 'cerberus', 'hauler', 'hauler2',
    'mule', 'mule2', 'mule3', 'mule4', 'phantom', 'phantom2', 'phantom3',
    'pounder', 'pounder2', 'stockade', 'stockade3', 'terbyte',
    'bulldozer', 'dump', 'handler', 'mixer', 'mixer2', 'rubble', 'tiptruck', 'tiptruck2',
    'bus', 'coach', 'airbus', 'pbus', 'pbus2', 'rentalbus',
    'trash', 'trash2', 'towtruck', 'towtruck2', 'flatbed',
    'barracks', 'barracks2', 'barracks3', 'vetir',
    'linerunner', 'packer', 'phantom', 'hauler',
    'ripley', 'scrap', 'utillitruck', 'utillitruck2', 'utillitruck3',
}

-- Manual electric vehicle list
Config.ElectricVehicles = {
    'voltic', 'voltic2', 'caddy', 'caddy2', 'caddy3',
    'surge', 'iwagen', 'raiden', 'airtug', 'neon',
    'omnisegt', 'cyclone', 'cyclone2', 'tezeract', 'rcbandito',
    'imorgon', 'dilettante', 'dilettante2', 'khamelion',
}

-- Blacklisted vehicles (no fuel consumption)
Config.BlacklistedVehicles = {
    'bmx', 'cruiser', 'fixter', 'scorcher',
    'tribike', 'tribike2', 'tribike3',
}

-- ============================================================
-- TANK SIZES (liters)
-- ============================================================

-- Per GTA vehicle class
Config.TankSizePerClass = {
    [0]  = 45,  -- Compacts
    [1]  = 60,  -- Sedans
    [2]  = 75,  -- SUVs
    [3]  = 55,  -- Coupes
    [4]  = 70,  -- Muscle
    [5]  = 65,  -- Sports Classics
    [6]  = 60,  -- Sports
    [7]  = 70,  -- Super
    [8]  = 15,  -- Motorcycles
    [9]  = 80,  -- Off-road
    [10] = 150, -- Industrial
    [11] = 120, -- Utility
    [12] = 90,  -- Vans
    [13] = 0,   -- Cycles (no fuel)
    [14] = 180, -- Boats
    [15] = 300, -- Helicopters
    [16] = 500, -- Planes
    [17] = 80,  -- Service
    [18] = 90,  -- Emergency
    [19] = 120, -- Military
    [20] = 300, -- Commercial
    [21] = 400, -- Trains
    [22] = 50,  -- Open-wheel
}

-- Per-model overrides (takes priority over class)
Config.TankSizePerVehicle = {
    ['panto'] = 40,
    ['adder'] = 80,
}

-- ============================================================
-- FUEL CONSUMPTION (advanced - usually no need to change)
-- ============================================================

Config.FuelConsumption = {
    updateInterval = 1000, -- ms (1 second tick)
}

-- RPM-based fuel usage (RPM value = fuel consumed per tick before multipliers)
Config.FuelUsage = {
    [0.0] = 0.0,
    [0.1] = 0.0,
    [0.2] = 0.4,
    [0.3] = 0.6,
    [0.4] = 0.8,
    [0.5] = 1.2,
    [0.6] = 1.6,
    [0.7] = 2.0,
    [0.8] = 3.0,
    [0.9] = 4.0,
    [1.0] = 5.0,
}

-- Consumption multiplier per GTA vehicle class
Config.FuelConsumptionPerClass = {
    [0]  = 0.5, -- Compacts
    [1]  = 0.7, -- Sedans
    [2]  = 1.0, -- SUVs
    [3]  = 0.6, -- Coupes
    [4]  = 1.3, -- Muscle
    [5]  = 1.1, -- Sports Classics
    [6]  = 1.2, -- Sports
    [7]  = 1.4, -- Super
    [8]  = 0.3, -- Motorcycles
    [9]  = 1.2, -- Off-road
    [10] = 2.0, -- Industrial
    [11] = 1.6, -- Utility
    [12] = 1.5, -- Vans
    [13] = 0.0, -- Cycles
    [14] = 1.1, -- Boats
    [15] = 2.5, -- Helicopters
    [16] = 4.0, -- Planes
    [17] = 1.3, -- Service
    [18] = 1.4, -- Emergency
    [19] = 2.0, -- Military
    [20] = 2.2, -- Commercial
    [21] = 3.0, -- Trains
    [22] = 1.5, -- Open-wheel
}

```
