Configuration
All core settings are located in shared/sh_config.lua
.
Config = {}
-- Debug Mode
Config.Debug = true
-- Framework Configuration
Config.Framework = 'auto' -- 'esx', 'qb', 'qbox' or 'auto'
Config.Inventory = 'auto' -- 'ox_inventory', 'qb-inventory', 'qs-inventory' or 'auto'
Config.Target = 'auto' -- 'ox_target', 'qb-target', 'qtarget', or 'auto'
-- Job Settings
Config.JobName = 'towtruck' -- Job Name
Config.RequireJob = true -- 'true' to require job, 'false' to allow doing job without being in the job
Config.PaymentAccount = 'bank' -- For QBCore use 'cash', 'bank' And For ESX use 'money' or 'bank'
-- Boss Ped Configuration
Config.BossPed = {
model = 'a_m_m_hillbilly_02',
coords = vector4(408.91, -1623.28, 28.29, 231.5),
scenario = 'WORLD_HUMAN_CLIPBOARD',
blip = {
sprite = 68,
color = 5,
scale = 0.8,
name = "Tow Truck Company"
}
}
-- Blip Settings
Config.BlipSettings = {
brokenVehicle = {
sprite = 68,
color = 1,
scale = 0.6
}
}
-- XP System Configuration
Config.XPSystem = {
enabled = true,
maxLevel = 50,
baseXP = 100, -- XP needed for level 1->2
xpMultiplier = 1.5, -- Multiplier for each level
-- XP Rewards
rewards = {
hookVehicle = 15,
deliverVehicle = 25,
completeRoute = 100,
inspectVehicle = 5,
emergencyUnhook = -10, -- Penalty
perfectDelivery = 50, -- Bonus for quick delivery
bonusTime = 30 -- Bonus for delivering within time limit
},
-- Level Benefits
levelBenefits = {
[5] = { payBonus = 0.1, unlockMessage = "10% pay bonus unlocked!" },
[10] = { payBonus = 0.2, unlockMessage = "20% pay bonus unlocked!" },
[15] = { payBonus = 0.3, hookSpeed = 0.8, unlockMessage = "30% pay bonus + faster hooking!" },
[20] = { payBonus = 0.4, hookSpeed = 0.7, unlockMessage = "40% pay bonus + even faster hooking!" },
[25] = { payBonus = 0.5, hookSpeed = 0.6, emergencyBonus = true, unlockMessage = "50% pay bonus + emergency call access!" },
[30] = { payBonus = 0.6, hookSpeed = 0.5, emergencyBonus = true, unlockMessage = "60% pay bonus unlocked!" },
[40] = { payBonus = 0.8, hookSpeed = 0.4, emergencyBonus = true, unlockMessage = "80% pay bonus unlocked!" },
[50] = { payBonus = 1.0, hookSpeed = 0.3, emergencyBonus = true, unlockMessage = "Master Tow Operator! 100% pay bonus!" }
}
}
-- Achievements System
Config.Achievements = {
{
id = "first_delivery",
name = "First Delivery",
description = "Complete your first vehicle delivery",
condition = function(stats)
return (stats.total_vehicles_delivered or 0) >= 1
end,
reward = { xp = 50, money = 500 }
},
{
id = "rookie_driver",
name = "Rookie Driver",
description = "Deliver 10 vehicles",
condition = function(stats)
return (stats.total_vehicles_delivered or 0) >= 10
end,
reward = { xp = 100, money = 1000 }
},
{
id = "experienced_operator",
name = "Experienced Operator",
description = "Deliver 50 vehicles",
condition = function(stats)
return (stats.total_vehicles_delivered or 0) >= 50
end,
reward = { xp = 250, money = 2500 }
},
{
id = "veteran_driver",
name = "Veteran Driver",
description = "Deliver 100 vehicles",
condition = function(stats)
return (stats.total_vehicles_delivered or 0) >= 100
end,
reward = { xp = 400, money = 4000 }
},
{
id = "route_master",
name = "Route Master",
description = "Complete 25 routes",
condition = function(stats)
return (stats.total_routes_completed or 0) >= 25
end,
reward = { xp = 300, money = 3000 }
},
{
id = "route_expert",
name = "Route Expert",
description = "Complete 50 routes",
condition = function(stats)
return (stats.total_routes_completed or 0) >= 50
end,
reward = { xp = 500, money = 5000 }
},
{
id = "big_earner",
name = "Big Earner",
description = "Earn $100,000 total",
condition = function(stats)
return (stats.total_earnings or 0) >= 100000
end,
reward = { xp = 500, money = 5000 }
},
{
id = "millionaire",
name = "Millionaire",
description = "Earn $1,000,000 total",
condition = function(stats)
return (stats.total_earnings or 0) >= 1000000
end,
reward = { xp = 1000, money = 25000 }
},
{
id = "level_master",
name = "Level Master",
description = "Reach level 25",
condition = function(stats)
return (stats.level or 1) >= 25
end,
reward = { xp = 1000, money = 10000 }
},
{
id = "max_level",
name = "Max Level",
description = "Reach the maximum level (50)",
condition = function(stats)
return (stats.level or 1) >= 50
end,
reward = { xp = 2500, money = 50000 }
},
{
id = "dedicated_worker",
name = "Dedicated Worker",
description = "Work for 100 hours total",
condition = function(stats)
return (stats.playtime_minutes or 0) >= 6000 -- 100 hours in minutes
end,
reward = { xp = 750, money = 15000 }
},
{
id = "workaholic",
name = "Workaholic",
description = "Work for 500 hours total",
condition = function(stats)
return (stats.playtime_minutes or 0) >= 30000
end,
reward = { xp = 2000, money = 50000 }
}
}
-- Vehicle Spawn Points
Config.VehicleSpawns = {
{
coords = vector4(411.2, -1631.5, 29.3, 230.0),
model = 'flatbed'
}
}
-- Route Configuration
Config.Routes = {
{
id = 1,
name = "Downtown Route",
startArea = vector3(200.0, -800.0, 31.0),
radius = 800,
difficulty = 1,
vehicleCount = { min = 2, max = 4 },
payMultiplier = 1.0,
timeLimit = 30, -- minutes
description = "Easy city route for beginners"
},
{
id = 2,
name = "Highway Route",
startArea = vector3(-1200.0, -1500.0, 5.0),
radius = 1200,
difficulty = 2,
vehicleCount = { min = 3, max = 5 },
payMultiplier = 1.3,
timeLimit = 45,
description = "Medium difficulty highway patrol"
},
{
id = 3,
name = "Sandy Shores Route",
startArea = vector3(1850.0, 3700.0, 33.0),
radius = 1000,
difficulty = 3,
vehicleCount = { min = 4, max = 6 },
payMultiplier = 1.6,
timeLimit = 60,
description = "Hard desert route with long distances"
},
{
id = 4,
name = "Paleto Bay Route",
startArea = vector3(-450.0, 6020.0, 31.0),
radius = 900,
difficulty = 2,
vehicleCount = { min = 2, max = 4 },
payMultiplier = 1.4,
timeLimit = 40,
description = "Scenic mountain route"
},
{
id = 5,
name = "Industrial Route",
startArea = vector3(1000.0, -3000.0, 5.0),
radius = 1100,
difficulty = 3,
vehicleCount = { min = 5, max = 7 },
payMultiplier = 1.8,
timeLimit = 75,
description = "Challenging industrial area"
}
}
-- Depot Locations with Peds
Config.Depots = {
{
id = 1,
name = "Central Depot",
coords = vector3(398.9, -1619.1, 29.3),
heading = 50.0,
ped = {
model = 'a_m_y_mexthug_01',
coords = vector4(398.9, -1619.1, 29.3, 50.0),
scenario = 'WORLD_HUMAN_CLIPBOARD'
},
blip = {
sprite = 50,
color = 2,
scale = 0.7,
name = "Vehicle Depot"
}
},
{
id = 2,
name = "Sandy Shores Depot",
coords = vector3(1728.2, 3711.1, 34.2),
heading = 20.0,
ped = {
model = 'a_m_y_mexthug_01',
coords = vector4(1728.2, 3711.1, 34.2, 20.0),
scenario = 'WORLD_HUMAN_CLIPBOARD'
},
blip = {
sprite = 50,
color = 2,
scale = 0.7,
name = "Vehicle Depot"
}
},
{
id = 3,
name = "Paleto Depot",
coords = vector3(-475.0, 6030.0, 31.3),
heading = 135.0,
ped = {
model = 'a_m_y_mexthug_01',
coords = vector4(-475.0, 6030.0, 31.3, 135.0),
scenario = 'WORLD_HUMAN_CLIPBOARD'
},
blip = {
sprite = 50,
color = 2,
scale = 0.7,
name = "Vehicle Depot"
}
}
}
-- Tow Truck Settings with proper offsets
Config.TowTrucks = {
['flatbed'] = {
name = 'Flatbed Truck',
hookOffset = vector3(0.0, -1.8, 0.8),
capacity = 1
}
}
-- Broken Vehicle Models by Difficulty
Config.BrokenVehicles = {
[1] = { -- Easy - Small cars
'blista', 'brioso', 'dilettante', 'issi2', 'panto', 'prairie',
'rhapsody', 'weevil', 'club', 'kanjo'
},
[2] = { -- Medium - Regular cars
'cogcabrio', 'exemplar', 'f620', 'felon', 'jackal', 'oracle',
'oracle2', 'sentinel', 'zion', 'zion2', 'asterope', 'fugitive'
},
[3] = { -- Hard - Large vehicles
'buffalo', 'vigero', 'buccaneer', 'voodoo2', 'primo', 'regina',
'bison', 'bobcatxl', 'rumpo', 'speedo', 'youga'
}
}
-- Payment Configuration
Config.Payments = {
base = 400,
distance_multiplier = 1.2,
route_completion_bonus = 750,
difficulty_multiplier = {
[1] = 1.0,
[2] = 1.5,
[3] = 2.2
},
vehicle_class_bonus = {
[0] = 50, -- Compacts
[1] = 75, -- Sedans
[2] = 100, -- SUVs
[8] = 80, -- Motorcycles
[9] = 120, -- Off-road
[10] = 150, -- Industrial
[11] = 90, -- Utility
[12] = 110 -- Vans
}
}
-- Items Required
Config.RequiredItems = {
['tow_chain'] = 1,
['tow_strap'] = 1,
['work_gloves'] = 1
}
-- Hook/Unhook Settings
Config.HookSettings = {
hookTime = 8000,
unhookTime = 6000,
range = 15.0,
emergencyUnhookTime = 3000,
maxHookDistance = 8.0,
minHookDistance = 2.0
}
-- Notification Settings
Config.Notifications = {
position = 'top-right',
duration = 5000
}
-- Animation Settings
Config.Animations = {
hook = {
dict = 'mini@repair',
anim = 'fixing_a_ped'
},
unhook = {
dict = 'mini@repair',
anim = 'fixing_a_ped'
},
inspect = {
dict = 'amb@medic@standing@kneel@base',
anim = 'base'
},
delivery = {
dict = 'amb@world_human_clipboard@male@idle_a',
anim = 'idle_a'
}
}
Framework & Inventory
Config.Framework = 'auto' -- 'esx', 'qb', or 'auto'
Config.Inventory = 'auto' -- 'ox_inventory', 'qb-inventory', or 'auto'
Config.Target = 'auto' -- 'ox_target', 'qb-target', 'qtarget', or 'auto'
XP & Leveling System
XP scaling:
XP needed per level increases exponentially
Base: 100 XP | Multiplier: 1.5x
Level Benefits
Level
Pay Bonus
Hook Speed
Unlocks
5
10%
-
Bonus pay
15
30%
Faster
Speed bonus
25+
50%-100%
Fastest
Emergency unhook bonus
Last updated