es_extended

Created Diff never expires
ESX = {}
ESX = {}
ESX.PlayerData = {}
ESX.PlayerData = {}
ESX.PlayerLoaded = false
ESX.PlayerLoaded = false
ESX.CurrentRequestId = 0
ESX.CurrentRequestId = 0
ESX.ServerCallbacks = {}
ESX.ServerCallbacks = {}
ESX.TimeoutCallbacks = {}
ESX.TimeoutCallbacks = {}


ESX.UI = {}
ESX.UI = {}
ESX.UI.HUD = {}
ESX.UI.HUD = {}
ESX.UI.HUD.RegisteredElements = {}
ESX.UI.HUD.RegisteredElements = {}
ESX.UI.Menu = {}
ESX.UI.Menu = {}
ESX.UI.Menu.RegisteredTypes = {}
ESX.UI.Menu.RegisteredTypes = {}
ESX.UI.Menu.Opened = {}
ESX.UI.Menu.Opened = {}


ESX.Game = {}
ESX.Game = {}
ESX.Game.Utils = {}
ESX.Game.Utils = {}


ESX.Scaleform = {}
ESX.Scaleform = {}
ESX.Scaleform.Utils = {}
ESX.Scaleform.Utils = {}


ESX.Streaming = {}
ESX.Streaming = {}


ESX.SetTimeout = function(msec, cb)
ESX.SetTimeout = function(msec, cb)
table.insert(ESX.TimeoutCallbacks, {
table.insert(ESX.TimeoutCallbacks, {
time = GetGameTimer() + msec,
time = GetGameTimer() + msec,
cb = cb
cb = cb
})
})
return #ESX.TimeoutCallbacks
return #ESX.TimeoutCallbacks
end
end


ESX.ClearTimeout = function(i)
ESX.ClearTimeout = function(i)
ESX.TimeoutCallbacks[i] = nil
ESX.TimeoutCallbacks[i] = nil
end
end


ESX.IsPlayerLoaded = function()
ESX.IsPlayerLoaded = function()
return ESX.PlayerLoaded
return ESX.PlayerLoaded
end
end


ESX.GetPlayerData = function()
ESX.GetPlayerData = function()
return ESX.PlayerData
return ESX.PlayerData
end
end


ESX.SetPlayerData = function(key, val)
ESX.SetPlayerData = function(key, val)
ESX.PlayerData[key] = val
ESX.PlayerData[key] = val
end
end


ESX.ShowNotification = function(msg)
ESX.ShowNotification = function(msg)
SetNotificationTextEntry('STRING')
exports['mythic_notify']:SendAlert('inform', msg, 10000)
AddTextComponentSubstringPlayerName(msg)
-- SetNotificationTextEntry('STRING')
DrawNotification(false, true)
-- AddTextComponentSubstringPlayerName(msg)
-- DrawNotification(false, true)
end
end


ESX.ShowAdvancedNotification = function(title, subject, msg, icon, iconType)
ESX.ShowAdvancedNotification = function(title, subject, msg, icon, iconType)
SetNotificationTextEntry('STRING')
exports['mythic_notify']:SendAlert('inform', msg, 10000)
AddTextComponentSubstringPlayerName(msg)
-- SetNotificationTextEntry('STRING')
SetNotificationMessage(icon, icon, false, iconType, title, subject)
-- AddTextComponentSubstringPlayerName(msg)
DrawNotification(false, false)
-- SetNotificationMessage(icon, icon, false, iconType, title, subject)
-- DrawNotification(false, false)
end
end


ESX.ShowHelpNotification = function(msg)
ESX.ShowHelpNotification = function(msg)
--if not IsHelpMessageBeingDisplayed() then
--if not IsHelpMessageBeingDisplayed() then
BeginTextCommandDisplayHelp('STRING')
BeginTextCommandDisplayHelp('STRING')
AddTextComponentSubstringPlayerName(msg)
AddTextComponentSubstringPlayerName(msg)
EndTextCommandDisplayHelp(0, false, true, -1)
EndTextCommandDisplayHelp(0, false, true, -1)
--end
--end
end
end


ESX.TriggerServerCallback = function(name, cb, ...)
ESX.TriggerServerCallback = function(name, cb, ...)
ESX.ServerCallbacks[ESX.CurrentRequestId] = cb
ESX.ServerCallbacks[ESX.CurrentRequestId] = cb


TriggerServerEvent('esx:triggerServerCallback', name, ESX.CurrentRequestId, ...)
TriggerServerEvent('esx:triggerServerCallback', name, ESX.CurrentRequestId, ...)


if ESX.CurrentRequestId < 65535 then
if ESX.CurrentRequestId < 65535 then
ESX.CurrentRequestId = ESX.CurrentRequestId + 1
ESX.CurrentRequestId = ESX.CurrentRequestId + 1
else
else
ESX.CurrentRequestId = 0
ESX.CurrentRequestId = 0
end
end
end
end


ESX.UI.HUD.SetDisplay = function(opacity)
ESX.UI.HUD.SetDisplay = function(opacity)
SendNUIMessage({
SendNUIMessage({
action = 'setHUDDisplay',
action = 'setHUDDisplay',
opacity = opacity
opacity = opacity
})
})
end
end


ESX.UI.HUD.RegisterElement = function(name, index, priority, html, data)
ESX.UI.HUD.RegisterElement = function(name, index, priority, html, data)
local found = false
local found = false


for i=1, #ESX.UI.HUD.RegisteredElements, 1 do
for i=1, #ESX.UI.HUD.RegisteredElements, 1 do
if ESX.UI.HUD.RegisteredElements[i] == name then
if ESX.UI.HUD.RegisteredElements[i] == name then
found = true
found = true
break
break
end
end
end
end


if found then
if found then
return
return
end
end


table.insert(ESX.UI.HUD.RegisteredElements, name)
table.insert(ESX.UI.HUD.RegisteredElements, name)


SendNUIMessage({
SendNUIMessage({
action = 'insertHUDElement',
action = 'insertHUDElement',
name = name,
name = name,
index = index,
index = index,
priority = priority,
priority = priority,
html = html,
html = html,
data = data
data = data
})
})


ESX.UI.HUD.UpdateElement(name, data)
ESX.UI.HUD.UpdateElement(name, data)
end
end


ESX.UI.HUD.RemoveElement = function(name)
ESX.UI.HUD.RemoveElement = function(name)
for i=1, #ESX.UI.HUD.RegisteredElements, 1 do
for i=1, #ESX.UI.HUD.RegisteredElements, 1 do
if ESX.UI.HUD.RegisteredElements[i] == name then
if ESX.UI.HUD.RegisteredElements[i] == name then
table.remove(ESX.UI.HUD.RegisteredElements, i)
table.remove(ESX.UI.HUD.RegisteredElements, i)
break
break
end
end
end
end


SendNUIMessage({
SendNUIMessage({
action = 'deleteHUDElement',
action = 'deleteHUDElement',
name = name
name = name
})
})
end
end


ESX.UI.HUD.UpdateElement = function(name, data)
ESX.UI.HUD.UpdateElement = function(name, data)
SendNUIMessage({
SendNUIMessage({
action = 'updateHUDElement',
action = 'updateHUDElement',
name = name,
name = name,
data = data
data = data
})
})
end
end


ESX.UI.Menu.RegisterType = function(type, open, close)
ESX.UI.Menu.RegisterType = function(type, open, close)
ESX.UI.Menu.RegisteredTypes[type] = {
ESX.UI.Menu.RegisteredTypes[type] = {
open = open,
open = open,
close = close
close = close
}
}
end
end


ESX.UI.Menu.Open = function(type, namespace, name, data, submit, cancel, change, close)
ESX.UI.Menu.Open = function(type, namespace, name, data, submit, cancel, change, close)
local menu = {}
local menu = {}


menu.type = type
menu.type = type
menu.namespace = namespace
menu.namespace = namespace
menu.name = name
menu.name = name
menu.data = data
menu.data = data
menu.submit = submit
menu.submit = submit
menu.cancel = cancel
menu.cancel = cancel
menu.change = change
menu.change = change


menu.close = function()
menu.close = function()


ESX.UI.Menu.RegisteredTypes[type].close(namespace, name)
ESX.UI.Menu.RegisteredTypes[type].close(namespace, name)


for i=1, #ESX.UI.Menu.Opened, 1 do
for i=1, #ESX.UI.Menu.Opened, 1 do
if ESX.UI.Menu.Opened[i] ~= nil then
if ESX.UI.Menu.Opened[i] ~= nil then
if ESX.UI.Menu.Opened[i].type == type and ESX.UI.Menu.Opened[i].namespace == namespace and ESX.UI.Menu.Opened[i].name == name then
if ESX.UI.Menu.Opened[i].type == type and ESX.UI.Menu.Opened[i].namespace == namespace and ESX.UI.Menu.Opened[i].name == name then
ESX.UI.Menu.Opened[i] = nil
ESX.UI.Menu.Opened[i] = nil
end
end
end
end
end
end


if close ~= nil then
if close ~= nil then
close()
close()
end
end


end
end


menu.update = function(query, newData)
menu.update = function(query, newData)


for i=1, #menu.data.elements, 1 do
for i=1, #menu.data.elements, 1 do
local match = true
local match = true


for k,v in pairs(query) do
for k,v in pairs(query) do
if menu.data.elements[i][k] ~= v then
if menu.data.elements[i][k] ~= v then
match = false
match = false
end
end
end
end


if match then
if match then
for k,v in pairs(newData) do
for k,v in pairs(newData) do
menu.data.elements[i][k] = v
menu.data.elements[i][k] = v
end
end
end
end
end
end


end
end


menu.refresh = function()
menu.refresh = function()
ESX.UI.Menu.RegisteredTypes[type].open(namespace, name, menu.data)
ESX.UI.Menu.RegisteredTypes[type].open(namespace, name, menu.data)
end
end


menu.setElement = function(i, key, val)
menu.setElement = function(i, key, val)
menu.data.elements[i][key] = val
menu.data.elements[i][key] = val
end
end


menu.setTitle = function(val)
menu.setTitle = function(val)
menu.data.title = val
menu.data.title = val
end
end


menu.removeElement = function(query)
menu.removeElement = function(query)
for i=1, #menu.data.elements, 1 do
for i=1, #menu.data.elements, 1 do
for k,v in pairs(query) do
for k,v in pairs(query) do
if menu.data.elements[i] then
if menu.data.elements[i] then
if menu.data.elements[i][k] == v then
if menu.data.elements[i][k] == v then
table.remove(menu.data.elements, i)
table.remove(menu.data.elements, i)
break
break
end
end
end
end


end
end
end
end
end
end


table.insert(ESX.UI.Menu.Opened, menu)
table.insert(ESX.UI.Menu.Opened, menu)
ESX.UI.Menu.RegisteredTypes[type].open(namespace, name, data)
ESX.UI.Menu.RegisteredTypes[type].open(namespace, name, data)


return menu
return menu
end
end


ESX.UI.Menu.Close = function(type, namespace, name)
ESX.UI.Menu.Close = function(type, namespace, name)
for i=1, #ESX.UI.Menu.Opened, 1 do
for i=1, #ESX.UI.Menu.Opened, 1 do
if ESX.UI.Menu.Opened[i] ~= nil then
if ESX.UI.Menu.Opened[i] ~= nil then
if ESX.UI.Menu.Opened[i].type == type and ESX.UI.Menu.Opened[i].namespace == namespace and ESX.UI.Menu.Opened[i].name == name then
if ESX.UI.Menu.Opened[i].type == type and ESX.UI.Menu.Opened[i].namespace == namespace and ESX.UI.Menu.Opened[i].name == name then
ESX.UI.Menu.Opened[i].close()
ESX.UI.Menu.Opened[i].close()
ESX.UI.Menu.Opened[i] = nil
ESX.UI.Menu.Opened[i] = nil
end
end
end
end
end
end
end
end


ESX.UI.Menu.CloseAll = function()
ESX.UI.Menu.CloseAll = function()
for i=1, #ESX.UI.Menu.Opened, 1 do
for i=1, #ESX.UI.Menu.Opened, 1 do
if ESX.UI.Menu.Opened[i] ~= nil then
if ESX.UI.Menu.Opened[i] ~= nil then
ESX.UI.Menu.Opened[i].close()
ESX.UI.Menu.Opened[i].close()
ESX.UI.Menu.Opened[i] = nil
ESX.UI.Menu.Opened[i] = nil
end
end
end
end
end
end


ESX.UI.Menu.GetOpened = function(type, namespace, name)
ESX.UI.Menu.GetOpened = function(type, namespace, name)
for i=1, #ESX.UI.Menu.Opened, 1 do
for i=1, #ESX.UI.Menu.Opened, 1 do
if ESX.UI.Menu.Opened[i] ~= nil then
if ESX.UI.Menu.Opened[i] ~= nil then
if ESX.UI.Menu.Opened[i].type == type and ESX.UI.Menu.Opened[i].namespace == namespace and ESX.UI.Menu.Opened[i].name == name then
if ESX.UI.Menu.Opened[i].type == type and ESX.UI.Menu.Opened[i].namespace == namespace and ESX.UI.Menu.Opened[i].name == name then
return ESX.UI.Menu.Opened[i]
return ESX.UI.Menu.Opened[i]
end
end
end
end
end
end
end
end


ESX.UI.Menu.GetOpenedMenus = function()
ESX.UI.Menu.GetOpenedMenus = function()
return ESX.UI.Menu.Opened
return ESX.UI.Menu.Opened
end
end


ESX.UI.Menu.IsOpen = function(type, namespace, name)
ESX.UI.Menu.IsOpen = function(type, namespace, name)
return ESX.UI.Menu.GetOpened(type, namespace, name) ~= nil
return ESX.UI.Menu.GetOpened(type, namespace, name) ~= nil
end
end


ESX.UI.ShowInventoryItemNotification = function(add, item, count)
ESX.UI.ShowInventoryItemNotification = function(add, item, count)
SendNUIMessage({
SendNUIMessage({
action = 'inventoryNotification',
action = 'inventoryNotification',
add = add,
add = add,
item = item,
item = item,
count = count
count = count
})
})
end
end


ESX.Game.GetPedMugshot = function(ped)
ESX.Game.GetPedMugshot = function(ped)
local mugshot = RegisterPedheadshot(ped)
local mugshot = RegisterPedheadshot(ped)


while not IsPedheadshotReady(mugshot) do
while not IsPedheadshotReady(mugshot) do
Citizen.Wait(0)
Citizen.Wait(0)
end
end


return mugshot, GetPedheadshotTxdString(mugshot)
return mugshot, GetPedheadshotTxdString(mugshot)
end
end


ESX.Game.Teleport = function(entity, coords, cb)
ESX.Game.Teleport = function(entity, coords, cb)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)


while not HasCollisionLoadedAroundEntity(entity) do
while not HasCollisionLoadedAroundEntity(entity) do
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
Citizen.Wait(0)
Citizen.Wait(0)
end
end


SetEntityCoords(entity, coords.x, coords.y, coords.z)
SetEntityCoords(entity, coords.x, coords.y, coords.z)


if cb ~= nil then
if cb ~= nil then
cb()
cb()
end
end
end
end


ESX.Game.SpawnObject = function(model, coords, cb)
ESX.Game.SpawnObject = function(model, coords, cb)
local model = (type(model) == 'number' and model or GetHashKey(model))
local model = (type(model) == 'number' and model or GetHashKey(model))


Citizen.CreateThread(function()
Citizen.CreateThread(function()
ESX.Streaming.RequestModel(model)
ESX.Streaming.RequestModel(model)


local obj = CreateObject(model, coords.x, coords.y, coords.z, true, false, true)
local obj = CreateObject(model, coords.x, coords.y, coords.z, true, false, true)


if cb ~= nil then
if cb ~= nil then
cb(obj)
cb(obj)
end
end
end)
end)
end
end


ESX.Game.SpawnLocalObject = function(model, coords, cb)
ESX.Game.SpawnLocalObject = function(model, coords, cb)
local model = (type(model) == 'number' and model or GetHashKey(model))
local model = (type(model) == 'number' and model or GetHashKey(model))


Citizen.CreateThread(function()
Citizen.CreateThread(function()
ESX.Streaming.RequestModel(model)
ESX.Streaming.RequestModel(model)


local obj = CreateObject(model, coords.x, coords.y, coords.z, false, false, true)
local obj = CreateObject(model, coords.x, coords.y, coords.z, false, false, true)


if cb ~= nil then
if cb ~= nil then
cb(obj)
cb(obj)
end
end
end)
end)
end
end


ESX.Game.DeleteVehicle = function(vehicle)
ESX.Game.DeleteVehicle = function(vehicle)
SetEntityAsMissionEntity(vehicle, false, true)
SetEntityAsMissionEntity(vehicle, false, true)
DeleteVehicle(vehicle)
DeleteVehicle(vehicle)
end
end


ESX.Game.DeleteObject = function(object)
ESX.Game.DeleteObject = function(object)
SetEntityAsMissionEntity(object, false, true)
SetEntityAsMissionEntity(object, false, true)
DeleteObject(object)
DeleteObject(object)
end
end


ESX.Game.SpawnVehicle = function(modelName, coords, heading, cb)
ESX.Game.SpawnVehicle = function(modelName, coords, heading, cb)
local model = (type(modelName) == 'number' and modelName or GetHashKey(modelName))
local model = (type(modelName) == 'number' and modelName or GetHashKey(modelName))


Citizen.CreateThread(function()
Citizen.CreateThread(function()
ESX.Streaming.RequestModel(model)
ESX.Streaming.RequestModel(model)


local vehicle = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false)
local vehicle = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false)
local id = NetworkGetNetworkIdFromEntity(vehicle)
local id = NetworkGetNetworkIdFromEntity(vehicle)


SetNetworkIdCanMigrate(id, true)
SetNetworkIdCanMigrate(id, true)
SetEntityAsMissionEntity(vehicle, true, false)
SetEntityAsMissionEntity(vehicle, true, false)
SetVehicleHasBeenOwnedByPlayer(vehicle, true)
SetVehicleHasBeenOwnedByPlayer(vehicle, true)
SetVehicleNeedsToBeHotwired(vehicle, false)
SetVehicleNeedsToBeHotwired(vehicle, false)
SetModelAsNoLongerNeeded(model)
SetModelAsNoLongerNeeded(model)


RequestCollisionAtCoord(coords.x, coords.y, coords.z)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)


while not HasCollisionLoadedAroundEntity(vehicle) do
while not HasCollisionLoadedAroundEntity(vehicle) do
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
Citizen.Wait(0)
Citizen.Wait(0)
end
end


SetVehRadioStation(vehicle, 'OFF')
SetVehRadioStation(vehicle, 'OFF')


if cb ~= nil then
if cb ~= nil then
cb(vehicle)
cb(vehicle)
end
end
end)
end)
end
end


ESX.Game.SpawnLocalVehicle = function(modelName, coords, heading, cb)
ESX.Game.SpawnLocalVehicle = function(modelName, coords, heading, cb)
local model = (type(modelName) == 'number' and modelName or GetHashKey(modelName))
local model = (type(modelName) == 'number' and modelName or GetHashKey(modelName))


Citizen.CreateThread(function()
Citizen.CreateThread(function()
ESX.Streaming.RequestModel(model)
ESX.Streaming.RequestModel(model)


local vehicle = CreateVehicle(model, coords.x, coords.y, coords.z, heading, false, false)
local vehicle = CreateVehicle(model, coords.x, coords.y, coords.z, heading, false, false)


SetEntityAsMissionEntity(vehicle, true, false)
SetEntityAsMissionEntity(vehicle, true, false)
SetVehicleHasBeenOwnedByPlayer(vehicle, true)
SetVehicleHasBeenOwnedByPlayer(vehicle, true)
SetVehicleNeedsToBeHotwired(vehicle, false)
SetVehicleNeedsToBeHotwired(vehicle, false)
SetModelAsNoLongerNeeded(model)
SetModelAsNoLongerNeeded(model)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)


while not HasCollisionLoadedAroundEntity(vehicle) do
while not HasCollisionLoadedAroundEntity(vehicle) do
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
Citizen.Wait(0)
Citizen.Wait(0)
end
end


SetVehRadioStation(vehicle, 'OFF')
SetVehRadioStation(vehicle, 'OFF')


if cb ~= nil then
if cb ~= nil then
cb(vehicle)
cb(vehicle)
end
end
end)
end)
end
end


ESX.Game.IsVehicleEmpty = function(vehicle)
ESX.Game.IsVehicleEmpty = function(vehicle)
local passengers = GetVehicleNumberOfPassengers(vehicle)
local passengers = GetVehicleNumberOfPassengers(vehicle)
local driverSeatFree = IsVehicleSeatFree(vehicle, -1)
local driverSeatFree = IsVehicleSeatFree(vehicle, -1)


return passengers == 0 and driverSeatFree
return passengers == 0 and driverSeatFree
end
end


ESX.Game.GetObjects = function()
ESX.Game.GetObjects = function()
local objects = {}
local objects = {}


for object in EnumerateObjects() do
for object in EnumerateObjects() do
table.insert(objects, object)
table.insert(objects, object)
end
end


return objects
return objects
end
end


ESX.Game.GetClosestObject = function(filter, coords)
ESX.Game.GetClosestObject = function(filter, coords)
local objects = ESX.Game.GetObjects()
local objects = ESX.Game.GetObjects()
local closestDistance = -1
local closestDistance = -1
local closestObject = -1
local closestObject = -1
local filter = filter
local filter = filter
local coords = coords
local coords = coords


if type(filter) == 'string' then
if type(filter) == 'string' then
if filter ~= '' then
if filter ~= '' then
filter = {filter}
filter = {filter}
end
end
end
end


if coords == nil then
if coords == nil then
local playerPed = PlayerPedId()
local playerPed = PlayerPedId()
coords = GetEntityCoords(playerPed)
coords = GetEntityCoords(playerPed)
end
end


for i=1, #objects, 1 do
for i=1, #objects, 1 do
local foundObject = false
local foundObject = false


if filter == nil or (type(filter) == 'table' and #filter == 0) then
if filter == nil or (type(filter) == 'table' and #filter == 0) then
foundObject = true
foundObject = true
else
else
local objectModel = GetEntityModel(objects[i])
local objectModel = GetEntityModel(objects[i])


for j=1, #filter, 1 do
for j=1, #filter, 1 do
if objectModel == GetHashKey(filter[j]) then
if objectModel == GetHashKey(filter[j]) then
foundObject = true
foundObject = true
end
end
end
end
end
end


if foundObject then
if foundObject then
local objectCoords = GetEntityCoords(objects[i])
local objectCoords = GetEntityCoords(objects[i])
local distance = GetDistanceBetweenCoords(objectCoords, coords.x, coords.y, coords.z, true)
local distance = GetDistanceBetweenCoords(objectCoords, coords.x, coords.y, coords.z, true)


if closestDistance == -1 or closestDistance > distance then
if closestDistance == -1 or closestDistance > distance then
closestObject = objects[i]
closestObject = objects[i]
closestDistance = distance
closestDistance = distance
end
end
end
end
end
end


return closestObject, closestDistance
return closestObject, closestDistance
end
end


ESX.Game.GetPlayers = function()
ESX.Game.GetPlayers = function()
local players = {}
local players = {}


for _,player in ipairs(GetActivePlayers()) do
for _,player in ipairs(GetActivePlayers()) do
local ped = GetPlayerPed(player)
local ped = GetPlayerPed(player)


if DoesEntityExist(ped) then
if DoesEntityExist(ped) then
table.insert(players, player)
table.insert(players, player)
end
end
end
end


return players
return players
end
end


ESX.Game.GetClosestPlayer = function(coords)
ESX.Game.GetClosestPlayer = function(coords)
local players = ESX.Game.GetPlayers()
local players = ESX.Game.GetPlayers()
local closestDistance = -1
local closestDistance = -1
local closestPlayer = -1
local closestPlayer = -1
local coords = coords
local coords = coords
local usePlayerPed = false
local usePlayerPed = false
local playerPed = PlayerPedId()
local playerPed = PlayerPedId()
local playerId = PlayerId()
local playerId = PlayerId()


if coords == nil then
if coords == nil then
usePlayerPed = true
usePlayerPed = true
coords = GetEntityCoords(playerPed)
coords = GetEntityCoords(playerPed)
end
end


for i=1, #players, 1 do
for i=1, #players, 1 do
local target = GetPlayerPed(players[i])
local target = GetPlayerPed(players[i])


if not usePlayerPed or (usePlayerPed and players[i] ~= playerId) then
if not usePlayerPed or (usePlayerPed and players[i] ~= playerId) then
local targetCoords = GetEntityCoords(target)
local targetCoords = GetEntityCoords(target)
local distance = GetDistanceBetweenCoords(targetCoords, coords.x, coords.y, coords.z, true)
local distance = GetDistanceBetweenCoords(targetCoords, coords.x, coords.y, coords.z, true)


if closestDistance == -1 or closestDistance > distance then
if closestDistance == -1 or closestDistance > distance then
closestPlayer = players[i]
closestPlayer = players[i]
closestDistance = distance
closestDistance = distance
end
end
end
end
end
end


return closestPlayer, closestDistance
return closestPlayer, closestDistance
end
end


ESX.Game.GetPlayersInArea = function(coords, area)
ESX.Game.GetPlayersInArea = function(coords, area)
local players = ESX.Game.GetPlayers()
local players = ESX.Game.GetPlayers()
local playersInArea = {}
local playersInArea = {}


for i=1, #players, 1 do
for i=1, #players, 1 do
local target = GetPlayerPed(players[i])
local target = GetPlayerPed(players[i])
local targetCoords = GetEntityCoords(target)
local targetCoords = GetEntityCoords(target)
local distance = GetDistanceBetweenCoords(targetCoords, coords.x, coords.y, coords.z, true)
local distance = GetDistanceBetweenCoords(targetCoords, coords.x, coords.y, coords.z, true)


if distance <= area then
if distance <= area then
table.insert(playersInArea, players[i])
table.insert(playersInArea, players[i])
end
end
end
end


return playersInArea
return playersInArea
end
end


ESX.Game.GetVehicles = function()
ESX.Game.GetVehicles = function()
local vehicles = {}
local vehicles = {}


for vehicle in EnumerateVehicles() do
for vehicle in EnumerateVehicles() do
table.insert(vehicles, vehicle)
table.insert(vehicles, vehicle)
end
end


return vehicles
return vehicles
end
end


ESX.Game.GetClosestVehicle = function(coords)
ESX.Game.GetClosestVehicle = function(coords)
local vehicles = ESX.Game.GetVehicles()
local vehicles = ESX.Game.GetVehicles()
local closestDistance = -1
local closestDistance = -1
local closestVehicle = -1
local closestVehicle = -1
local coords = coords
local coords = coords


if coords == nil then
if coords == nil then
local playerPed = PlayerPedId()
local playerPed = PlayerPedId()
coords = GetEntityCoords(playerPed)
coords = GetEntityCoords(playerPed)
end
end


for i=1, #vehicles, 1 do
for i=1, #vehicles, 1 do
local vehicleCoords = GetEntityCoords(vehicles[i])
local vehicleCoords = GetEntityCoords(vehicles[i])
local distance = GetDistanceBetweenCoords(vehicleCoords, coords.x, coords.y, coords.z, true)
local distance = GetDistanceBetweenCoords(vehicleCoords, coords.x, coords.y, coords.z, true)


if closestDistance == -1 or closestDistance > distance then
if closestDistance == -1 or closestDistance > distance then
closestVehicle = vehicles[i]
closestVehicle = vehicles[i]
closestDistance = distance
closestDistance = distance
end
end
end
end


return closestVehicle, closestDistance
return closestVehicle, closestDistance
end
end


ESX.Game.GetVehiclesInArea = function(coords, area)
ESX.Game.GetVehiclesInArea = function(coords, area)
local vehicles = ESX.Game.GetVehicles()
local vehicles = ESX.Game.GetVehicles()
local vehiclesInArea = {}
local vehiclesInArea = {}


for i=1, #vehicles, 1 do
for i=1, #vehicles, 1 do
local vehicleCoords = GetEntityCoords(vehicles[i])
local vehicleCoords = GetEntityCoords(vehicles[i])
local distance = GetDistanceBetweenCoords(vehicleCoords, coords.x, coords.y, coords.z, true)
local distance = GetDistanceBetweenCoords(vehicleCoords, coords.x, coords.y, coords.z, true)


if distance <= area then
if distance <= area then
table.insert(vehiclesInArea, vehicles[i])
table.insert(vehiclesInArea, vehicles[i])
end
end
end
end


return vehiclesInArea
return vehiclesInArea
end
end


ESX.Game.GetVehicleInDirection = function()
ESX.Game.GetVehicleInDirection = function()
local playerPed = PlayerPedId()
local playerPed = PlayerPedId()
local playerCoords = GetEntityCoords(playerPed)
local playerCoords = GetEntityCoords(playerPed)
local inDirection = GetOffsetFromEntityInWorldCoords(playerPed, 0.0, 5.0, 0.0)
local inDirection = GetOffsetFromEntityInWorldCoords(playerPed, 0.0, 5.0, 0.0)
local rayHandle = StartShapeTestRay(playerCoords, inDirection, 10, playerPed, 0)
local rayHandle = StartShapeTestRay(playerCoords, inDirection, 10, playerPed, 0)
local numRayHandle, hit, endCoords, surfaceNormal, entityHit = GetShapeTestResult(rayHandle)
local numRayHandle, hit, endCoords, surfaceNormal, entityHit = GetShapeTestResult(rayHandle)


if hit == 1 and GetEntityType(entityHit) == 2 then
if hit == 1 and GetEntityType(entityHit) == 2 then
return entityHit
return entityHit
end
end


return nil
return nil
end
end


ESX.Game.IsSpawnPointClear = function(coords, radius)
ESX.Game.IsSpawnPointClear = function(coords, radius)
local vehicles = ESX.Game.GetVehiclesInArea(coords, radius)
local vehicles = ESX.Game.GetVehiclesInArea(coords, radius)


return #vehicles == 0
return #vehicles == 0
end
end


ESX.Game.GetPeds = function(ignoreList)
ESX.Game.GetPeds = function(ignoreList)
local ignoreList = ignoreList or {}
local ignoreList = ignoreList or {}
local peds = {}
local peds = {}


for ped in EnumeratePeds() do
for ped in EnumeratePeds() do
local found = false
local found = false


for j=1, #ignoreList, 1 do
for j=1, #ignoreList, 1 do
if ignoreList[j] == ped then
if ignoreList[j] == ped then
found = true
found = true
end
end
end
end


if not found then
if not found then
table.insert(peds, ped)
table.insert(peds, ped)
end
end
end
end


return peds
return peds
end
end


ESX.Game.GetClosestPed = function(coords, ignoreList)
ESX.Game.GetClosestPed = function(coords, ignoreList)
local ignoreList = ignoreList or {}
local ignoreList = ignoreList or {}
local peds = ESX.Game.GetPeds(ignoreList)
local peds = ESX.Game.GetPeds(ignoreList)
local closestDistance = -1
local closestDistance = -1
local closestPed = -1
local closestPed = -1


for i=1, #peds, 1 do
for i=1, #peds, 1 do
local pedCoords = GetEntityCoords(peds[i])
local pedCoords = GetEntityCoords(peds[i])
local distance = GetDistanceBetweenCoords(pedCoords, coords.x, coords.y, coords.z, true)
local distance = GetDistanceBetweenCoords(pedCoords, coords.x, coords.y, coords.z, true)


if closestDistance == -1 or closestDistance > distance then
if closestDistance == -1 or closestDistance > distance then
closestPed = peds[i]
closestPed = peds[i]
closestDistance = distance
closestDistance = distance
end
end
end
end


return closestPed, closestDistance
return closestPed, closestDistance
end
end


ESX.Game.GetVehicleProperties = function(vehicle)
ESX.Game.GetVehicleProperties = function(vehicle)
local color1, color2 = GetVehicleColours(vehicle)
local color1, color2 = GetVehicleColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
local extras = {}
local extras = {}


for id=0, 12 do
for id=0, 12 do
if DoesExtraExist(vehicle, id) then
if DoesExtraExist(vehicle, id) then
local state = IsVehicleExtraTurnedOn(vehicle, id) == 1
local state = IsVehicleExtraTurnedOn(vehicle, id) == 1
extras[tostring(id)] = state
extras[tostring(id)] = state
end
end
end
end


return {
return {
model = GetEntityModel(vehicle),
model = GetEntityModel(vehicle),


plate = ESX.Math.Trim(GetVehicleNumberPlateText(vehicle)),
plate = ESX.Math.Trim(GetVehicleNumberPlateText(vehicle)),
plateIndex = GetVehicleNumberPlateTextIndex(vehicle),
plateIndex = GetVehicleNumberPlateTextIndex(vehicle),


bodyHealth = ESX.Math.Round(GetVehicleBodyHealth(vehicle), 1),
bodyHealth = ESX.Math.Round(GetVehicleBodyHealth(vehicle), 1),
engineHealth = ESX.Math.Round(GetVehicleEngineHealth(vehicle), 1),
engineHealth = ESX.Math.Round(GetVehicleEngineHealth(vehicle), 1),


fuelLevel = ESX.Math.Round(GetVehicleFuelLevel(vehicle), 1),
fuelLevel = ESX.Math.Round(GetVehicleFuelLevel(vehicle), 1),
dirtLevel = ESX.Math.Round(GetVehicleDirtLevel(vehicle), 1),
dirtLevel = ESX.Math.Round(GetVehicleDirtLevel(vehicle), 1),
color1 = color1,
color1 = color1,
color2 = color2,
color2 = color2,


pearlescentColor = pearlescentColor,
pearlescentColor = pearlescentColor,
wheelColor = wheelColor,
wheelColor = wheelColor,


wheels = GetVehicleWheelType(vehicle),
wheels = GetVehicleWheelType(vehicle),
windowTint = GetVehicleWindowTint(vehicle),
windowTint = GetVehicleWindowTint(vehicle),


neonEnabled = {
neonEnabled = {
IsVehicleNeonLightEnabled(vehicle, 0),
IsVehicleNeonLightEnabled(vehicle, 0),
IsVehicleNeonLightEnabled(vehicle, 1),
IsVehicleNeonLightEnabled(vehicle, 1),
IsVehicleNeonLightEnabled(vehicle, 2),
IsVehicleNeonLightEnabled(vehicle, 2),
IsVehicleNeonLightEnabled(vehicle, 3)
IsVehicleNeonLightEnabled(vehicle, 3)
},
},


extras = extras,
extras = extras,


neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)),
neonColor = table.pack(GetVehicleNeonLightsColour(vehicle)),
tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)),
tyreSmokeColor = table.pack(GetVehicleTyreSmokeColor(vehicle)),


modSpoilers = GetVehicleMod(vehicle, 0),
modSpoilers = GetVehicleMod(vehicle, 0),
modFrontBumper = GetVehicleMod(vehicle, 1),
modFrontBumper = GetVehicleMod(vehicle, 1),
modRearBumper = GetVehicleMod(vehicle, 2),
modRearBumper = GetVehicleMod(vehicle, 2),
modSideSkirt = GetVehicleMod(vehicle, 3),
modSideSkirt = GetVehicleMod(vehicle, 3),
modExhaust = GetVehicleMod(vehicle, 4),
modExhaust = GetVehicleMod(vehicle, 4),
modFrame = GetVehicleMod(vehicle, 5),
modFrame = GetVehicleMod(vehicle, 5),
modGrille = GetVehicleMod(vehicle, 6),
modGrille = GetVehicleMod(vehicle, 6),
modHood = GetVehicleMod(vehicle, 7),
modHood = GetVehicleMod(vehicle, 7),
modFender = GetVehicleMod(vehicle, 8),
modFender = GetVehicleMod(vehicle, 8),
modRightFender = GetVehicleMod(vehicle, 9),
modRightFender = GetVehicleMod(vehicle, 9),
modRoof = GetVehicleMod(vehicle, 10),
modRoof = GetVehicleMod(vehicle, 10),


modEngine = GetVehicleMod(vehicle, 11),
modEngine = GetVehicleMod(vehicle, 11),
modBrakes = GetVehicleMod(vehicle, 12),
modBrakes = GetVehicleMod(vehicle, 12),
modTransmission = GetVehicleMod(vehicle, 13),
modTransmission = GetVehicleMod(vehicle, 13),
modHorns = GetVehicleMod(vehicle, 14),
modHorns = GetVehicleMod(vehicle, 14),
modSuspension = GetVehicleMod(vehicle, 15),
modSuspension = GetVehicleMod(vehicle, 15),
modArmor = GetVehicleMod(vehicle, 16),
modArmor = GetVehicleMod(vehicle, 16),


modTurbo = IsToggleModOn(vehicle, 18),
modTurbo = IsToggleModOn(vehicle, 18),
modSmokeEnabled = IsToggleModOn(vehicle, 20),
modSmokeEnabled = IsToggleModOn(vehicle, 20),
modXenon = IsToggleModOn(vehicle, 22),
modXenon = IsToggleModOn(vehicle, 22),


modFrontWheels = GetVehicleMod(vehicle, 23),
modFrontWheels = GetVehicleMod(vehicle, 23),
modBackWheels = GetVehicleMod(vehicle, 24),
modBackWheels = GetVehicleMod(vehicle, 24),


modPlateHolder = GetVehicleMod(vehicle, 25),
modPlateHolder = GetVehicleMod(vehicle, 25),
modVanityPlate = GetVehicleMod(vehicle, 26),
modVanityPlate = GetVehicleMod(vehicle, 26),
modTrimA = GetVehicleMod(vehicle, 27),
modTrimA = GetVehicleMod(vehicle, 27),
modOrnaments = GetVehicleMod(vehicle, 28),
modOrnaments = GetVehicleMod(vehicle, 28),
modDashboard = GetVehicleMod(vehicle, 29),
modDashboard = GetVehicleMod(vehicle, 29),
modDial = GetVehicleMod(vehicle, 30),
modDial = GetVehicleMod(vehicle, 30),
modDoorSpeaker = GetVehicleMod(vehicle, 31),
modDoorSpeaker = GetVehicleMod(vehicle, 31),
modSeats = GetVehicleMod(vehicle, 32),
modSeats = GetVehicleMod(vehicle, 32),
modSteeringWheel = GetVehicleMod(vehicle, 33),
modSteeringWheel = GetVehicleMod(vehicle, 33),
modShifterLeavers = GetVehicleMod(vehicle, 34),
modShifterLeavers = GetVehicleMod(vehicle, 34),
modAPlate = GetVehicleMod(vehicle, 35),
modAPlate = GetVehicleMod(vehicle, 35),
modSpeakers = GetVehicleMod(vehicle, 36),
modSpeakers = GetVehicleMod(vehicle, 36),
modTrunk = GetVehicleMod(vehicle, 37),
modTrunk = GetVehicleMod(vehicle, 37),
modHydrolic = GetVehicleMod(vehicle, 38),
modHydrolic = GetVehicleMod(vehicle, 38),
modEngineBlock = GetVehicleMod(vehicle, 39),
modEngineBlock = GetVehicleMod(vehicle, 39),
modAirFilter = GetVehicleMod(vehicle, 40),
modAirFilter = GetVehicleMod(vehicle, 40),
modStruts = GetVehicleMod(vehicle, 41),
modStruts = GetVehicleMod(vehicle, 41),
modArchCover = GetVehicleMod(vehicle, 42),
modArchCover = GetVehicleMod(vehicle, 42),
modAerials = GetVehicleMod(vehicle, 43),
modAerials = GetVehicleMod(vehicle, 43),
modTrimB = GetVehicleMod(vehicle, 44),
modTrimB = GetVehicleMod(vehicle, 44),
modTank = GetVehicleMod(vehicle, 45),
modTank = GetVehicleMod(vehicle, 45),
modWindows = GetVehicleMod(vehicle, 46),
modWindows = GetVehicleMod(vehicle, 46),
modLivery = GetVehicleLivery(vehicle)
modLivery = GetVehicleLivery(vehicle)
}
}
end
end


ESX.Game.SetVehicleProperties = function(vehicle, props)
ESX.Game.SetVehicleProperties = function(vehicle, props)
SetVehicleModKit(vehicle, 0)
SetVehicleModKit(vehicle, 0)


if props.plate ~= nil then
if props.plate ~= nil then
SetVehicleNumberPlateText(vehicle, props.plate)
SetVehicleNumberPlateText(vehicle, props.plate)
end
end


if props.plateIndex ~= nil then
if props.plateIndex ~= nil then
SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex)
SetVehicleNumberPlateTextIndex(vehicle, props.plateIndex)
end
end


if props.bodyHealth ~= nil then
if props.bodyHealth ~= nil then
SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0)
SetVehicleBodyHealth(vehicle, props.bodyHealth + 0.0)
end
end


if props.engineHealth ~= nil then
if props.engineHealth ~= nil then
SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0)
SetVehicleEngineHealth(vehicle, props.engineHealth + 0.0)
end
end


if props.fuelLevel ~= nil then
if props.fuelLevel ~= nil then
SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0)
SetVehicleFuelLevel(vehicle, props.fuelLevel + 0.0)
end
end


if props.dirtLevel ~= nil then
if props.dirtLevel ~= nil then
SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0)
SetVehicleDirtLevel(vehicle, props.dirtLevel + 0.0)
end
end


if props.color1 ~= nil then
if props.color1 ~= nil then
local color1, color2 = GetVehicleColours(vehicle)
local color1, color2 = GetVehicleColours(vehicle)
SetVehicleColours(vehicle, props.color1, color2)
SetVehicleColours(vehicle, props.color1, color2)
end
end


if props.color2 ~= nil then
if props.color2 ~= nil then
local color1, color2 = GetVehicleColours(vehicle)
local color1, color2 = GetVehicleColours(vehicle)
SetVehicleColours(vehicle, color1, props.color2)
SetVehicleColours(vehicle, color1, props.color2)
end
end


if props.pearlescentColor ~= nil then
if props.pearlescentColor ~= nil then
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor)
SetVehicleExtraColours(vehicle, props.pearlescentColor, wheelColor)
end
end


if props.wheelColor ~= nil then
if props.wheelColor ~= nil then
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
local pearlescentColor, wheelColor = GetVehicleExtraColours(vehicle)
SetVehicleExtraColours(vehicle, pearlescentColor, props.wheelColor)
SetVehicleExtraColours(vehicle, pearlescentColor, props.wheelColor)
end
end


if props.wheels ~= nil then
if props.wheels ~= nil then
SetVehicleWheelType(vehicle, props.wheels)
SetVehicleWheelType(vehicle, props.wheels)
end
end


if props.windowTint ~= nil then
if props.windowTint ~= nil then
SetVehicleWindowTint(vehicle, props.windowTint)
SetVehicleWindowTint(vehicle, props.windowTint)
end
end


if props.neonEnabled ~= nil then
if props.neonEnabled ~= nil then
SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1])
SetVehicleNeonLightEnabled(vehicle, 0, props.neonEnabled[1])
SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2])
SetVehicleNeonLightEnabled(vehicle, 1, props.neonEnabled[2])
SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3])
SetVehicleNeonLightEnabled(vehicle, 2, props.neonEnabled[3])
SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4])
SetVehicleNeonLightEnabled(vehicle, 3, props.neonEnabled[4])
end
end


if props.extras ~= nil then
if props.extras ~= nil then
for id,enabled in pairs(props.extras) do
for id,enabled in pairs(props.extras) do
if enabled then
if enabled then
SetVehicleExtra(vehicle, tonumber(id), 0)
SetVehicleExtra(vehicle, tonumber(id), 0)
else
else
SetVehicleExtra(vehicle, tonumber(id), 1)
SetVehicleExtra(vehicle, tonumber(id), 1)
end
end
end
end
end
end


if props.neonColor ~= nil then
if props.neonColor ~= nil then
SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3])
SetVehicleNeonLightsColour(vehicle, props.neonColor[1], props.neonColor[2], props.neonColor[3])
end
end


if props.modSmokeEnabled ~= nil then
if props.modSmokeEnabled ~= nil then
ToggleVehicleMod(vehicle, 20, true)
ToggleVehicleMod(vehicle, 20, true)
end
end


if props.tyreSmokeColor ~= nil then
if props.tyreSmokeColor ~= nil then
SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3])
SetVehicleTyreSmokeColor(vehicle, props.tyreSmokeColor[1], props.tyreSmokeColor[2], props.tyreSmokeColor[3])
end
end


if props.modSpoilers ~= nil then
if props.modSpoilers ~= nil then
SetVehicleMod(vehicle, 0, props.modSpoilers, false)
SetVehicleMod(vehicle, 0, props.modSpoilers, false)
end
end


if props.modFrontBumper ~= nil then
if props.modFrontBumper ~= nil then
SetVehicleMod(vehicle, 1, props.modFrontBumper, false)
SetVehicleMod(vehicle, 1, props.modFrontBumper, false)
end
end


if props.modRearBumper ~= nil then
if props.modRearBumper ~= nil then
SetVehicleMod(vehicle, 2, props.modRearBumper, false)
SetVehicleMod(vehicle, 2, props.modRearBumper, false)
end
end


if props.modSideSkirt ~= nil then
if props.modSideSkirt ~= nil then
SetVehicleMod(vehicle, 3, props.modSideSkirt, false)
SetVehicleMod(vehicle, 3, props.modSideSkirt, false)
end
end


if props.modExhaust ~= nil then
if props.modExhaust ~= nil then
SetVehicleMod(vehicle, 4, props.modExhaust, false)
SetVehicleMod(vehicle, 4, props.modExhaust, false)
end
end


if props.modFrame ~= nil then
if props.modFrame ~= nil then
SetVehicleMod(vehicle, 5, props.modFrame, false)
SetVehicleMod(vehicle, 5, props.modFrame, false)
end
end


if props.modGrille ~= nil then
if props.modGrille ~= nil then
SetVehicleMod(vehicle, 6, props.modGrille, false)
SetVehicleMod(vehicle, 6, props.modGrille, false)
end
end


if props.modHood ~= nil then
if props.modHood ~= nil then
SetVehicleMod(vehicle, 7, props.modHood, false)
SetVehicleMod(vehicle, 7, props.modHood, false)
end
end


if props.modFender ~= nil then
if props.modFender ~= nil then
SetVehicleMod(vehicle, 8, props.modFender, false)
SetVehicleMod(vehicle, 8, props.modFender, false)
end
end


if props.modRightFender ~= nil then
if props.modRightFender ~= nil then
SetVehicleMod(vehicle, 9, props.modRightFender, false)
SetVehicleMod(vehicle, 9, props.modRightFender, false)
end
end


if props.modRoof ~= nil then
if props.modRoof ~= nil then
SetVehicleMod(vehicle, 10, props.modRoof, false)
SetVehicleMod(vehicle, 10, props.modRoof, false)
end
end


if props.modEngine ~= nil then
if props.modEngine ~= nil then
SetVehicleMod(vehicle, 11, props.modEngine, false)
SetVehicleMod(vehicle, 11, props.modEngine, false)
end
end


if props.modBrakes ~= nil then
if props.modBrakes ~= nil then
SetVehicleMod(vehicle, 12, props.modBrakes, false)
SetVehicleMod(vehicle, 12, props.modBrakes, false)
end
end


if props.modTransmission ~= nil then
if props.modTransmission ~= nil then
SetVehicleMod(vehicle, 13, props.modTransmission, false)
SetVehicleMod(vehicle, 13, props.modTransmission, false)
end
end


if props.modHorns ~= nil then
if props.modHorns ~= nil then
SetVehicleMod(vehicle, 14, props.modHorns, false)
SetVehicleMod(vehicle, 14, props.modHorns, false)
end
end


if props.modSuspension ~= nil then
if props.modSuspension ~= nil then
SetVehicleMod(vehicle, 15, props.modSuspension, false)
SetVehicleMod(vehicle, 15, props.modSuspension, false)
end
end


if props.modArmor ~= nil then
if props.modArmor ~= nil then
SetVehicleMod(vehicle, 16, props.modArmor, false)
SetVehicleMod(vehicle, 16, props.modArmor, false)
end
end


if props.modTurbo ~= nil then
if props.modTurbo ~= nil then
ToggleVehicleMod(vehicle, 18, props.modTurbo)
ToggleVehicleMod(vehicle, 18, props.modTurbo)
end
end


if props.modXenon ~= nil then
if props.modXenon ~= nil then
ToggleVehicleMod(vehicle, 22, props.modXenon)
ToggleVehicleMod(vehicle, 22, props.modXenon)
end
end


if props.modFrontWheels ~= nil then
if props.modFrontWheels ~= nil then
SetVehicleMod(vehicle, 23, props.modFrontWheels, false)
SetVehicleMod(vehicle, 23, props.modFrontWheels, false)
end
end


if props.modBackWheels ~= nil then
if props.modBackWheels ~= nil then
SetVehicleMod(vehicle, 24, props.modBackWheels, false)
SetVehicleMod(vehicle, 24, props.modBackWheels, false)
end
end


if props.modPlateHolder ~= nil then
if props.modPlateHolder ~= nil then
SetVehicleMod(vehicle, 25, props.modPlateHolder, false)
SetVehicleMod(vehicle, 25, props.modPlateHolder, false)
end
end


if props.modVanityPlate ~= nil then
if props.modVanityPlate ~= nil then
SetVehicleMod(vehicle, 26, props.modVanityPlate, false)
SetVehicleMod(vehicle, 26, props.modVanityPlate, false)
end
end


if props.modTrimA ~= nil then
if props.modTrimA ~= nil then
SetVehicleMod(vehicle, 27, props.modTrimA, false)
SetVehicleMod(vehicle, 27, props.modTrimA, false)
end
end


if props.modOrnaments ~= nil then
if props.modOrnaments ~= nil then
SetVehicleMod(vehicle, 28, props.modOrnaments, false)
SetVehicleMod(vehicle, 28, props.modOrnaments, false)
end
end


if props.modDashboard ~= nil then
if props.modDashboard ~= nil then
SetVehicleMod(vehicle, 29, props.modDashboard, false)
SetVehicleMod(vehicle, 29, props.modDashboard, false)
end
end


if props.modDial ~= nil then
if props.modDial ~= nil then
SetVehicleMod(vehicle, 30, props.modDial, false)
SetVehicleMod(vehicle, 30, props.modDial, false)
end
end


if props.modDoorSpeaker ~= nil then
if props.modDoorSpeaker ~= nil then
SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false)
SetVehicleMod(vehicle, 31, props.modDoorSpeaker, false)
end
end


if props.modSeats ~= nil then
if props.modSeats ~= nil then
SetVehicleMod(vehicle, 32, props.modSeats, false)
SetVehicleMod(vehicle, 32, props.modSeats, false)
end
end


if props.modSteeringWheel ~= nil then
if props.modSteeringWheel ~= nil then
SetVehicleMod(vehicle, 33, props.modSteeringWheel, false)
SetVehicleMod(vehicle, 33, props.modSteeringWheel, false)
end
end


if props.modShifterLeavers ~= nil then
if props.modShifterLeavers ~= nil then
SetVehicleMod(vehicle, 34, props.modShifterLeavers, false)
SetVehicleMod(vehicle, 34, props.modShifterLeavers, false)
end
end


if props.modAPlate ~= nil then
if props.modAPlate ~= nil then
SetVehicleMod(vehicle, 35, props.modAPlate, false)
SetVehicleMod(vehicle, 35, props.modAPlate, false)
end
end


if props.modSpeakers ~= nil then
if props.modSpeakers ~= nil then
SetVehicleMod(vehicle, 36, props.modSpeakers, false)
SetVehicleMod(vehicle, 36, props.modSpeakers, false)
end
end


if props.modTrunk ~= nil then
if props.modTrunk ~= nil then
SetVehicleMod(vehicle, 37, props.modTrunk, false)
SetVehicleMod(vehicle, 37, props.modTrunk, false)
end
end


if props.modHydrolic ~= nil then
if props.modHydrolic ~= nil then
SetVehicleMod(vehicle, 38, props.modHydrolic, false)
SetVehicleMod(vehicle, 38, props.modHydrolic, false)
end
end


if props.modEngineBlock ~= nil then
if props.modEngineBlock ~= nil then
SetVehicleMod(vehicle, 39, props.modEngineBlock, false)
SetVehicleMod(vehicle, 39, props.modEngineBlock, false)
end
end


if props.modAirFilter ~= nil then
if props.modAirFilter ~= nil then
SetVehicleMod(vehicle, 40, props.modAirFilter, false)
SetVehicleMod(vehicle, 40, props.modAirFilter, false)
end
end


if props.modStruts ~= nil then
if props.modStruts ~= nil then
SetVehicleMod(vehicle, 41, props.modStruts, false)
SetVehicleMod(vehicle, 41, props.modStruts, false)
end
end


if props.modArchCover ~= nil then
if props.modArchCover ~= nil then
SetVehicleMod(vehicle, 42, props.modArchCover, false)
SetVehicleMod(vehicle, 42, props.modArchCover, false)
end
end


if props.modAerials ~= nil then
if props.modAerials ~= nil then
SetVehicleMod(vehicle, 43, props.modAerials, false)
SetVehicleMod(vehicle, 43, props.modAerials, false)
end
end


if props.modTrimB ~= nil then
if props.modTrimB ~= nil then
SetVehicleMod(vehicle, 44, props.modTrimB, false)
SetVehicleMod(vehicle, 44, props.modTrimB, false)
end
end


if props.modTank ~= nil then
if props.modTank ~= nil then
SetVehicleMod(vehicle, 45, props.modTank, false)
SetVehicleMod(vehicle, 45, props.modTank, false)
end
end


if props.modWindows ~= nil then
if props.modWindows ~= nil th
SetVehicleMod(vehicle, 46, props.modWindows, false)
end

if props.modLivery ~= nil then
SetVehicleMod(vehicle, 48, props.modLive