1
0
Fork 0
forked from Simnation/Main
This commit is contained in:
EVO 2025-06-23 11:41:43 +02:00
commit 5c1b74ac6e
186 changed files with 6936 additions and 6433 deletions

View file

@ -1,159 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<AudioWaveContainer>
<Version value="1" />
<ChunkIndices value="True" />
<MultiChannelEncrypt value="True" />
<WholeFileEncrypt value="True" />
<Streams>
<Item>
<Name>shoot01</Name>
<FileName>shoot01.wav</FileName>
<Chunks>
<Item>
<Type>peak</Type>
</Item>
<Item>
<Type>data</Type>
</Item>
<Item>
<Type>format</Type>
<Codec>PCM</Codec>
<Samples value="13467" />
<SampleRate value="32001" />
<Headroom value="-200" />
<PlayBegin value="0" />
<PlayEnd value="0" />
<LoopBegin value="0" />
<LoopEnd value="0" />
<LoopPoint value="-1" />
<Peak unk="0" />
</Item>
</Chunks>
</Item>
<Item>
<Name>shoot02</Name>
<FileName>shoot02.wav</FileName>
<Chunks>
<Item>
<Type>peak</Type>
</Item>
<Item>
<Type>data</Type>
</Item>
<Item>
<Type>format</Type>
<Codec>PCM</Codec>
<Samples value="12238" />
<SampleRate value="32001" />
<Headroom value="-198" />
<PlayBegin value="0" />
<PlayEnd value="0" />
<LoopBegin value="0" />
<LoopEnd value="0" />
<LoopPoint value="-1" />
<Peak unk="0" />
</Item>
</Chunks>
</Item>
<Item>
<Name>shoot03</Name>
<FileName>shoot03.wav</FileName>
<Chunks>
<Item>
<Type>peak</Type>
</Item>
<Item>
<Type>data</Type>
</Item>
<Item>
<Type>format</Type>
<Codec>PCM</Codec>
<Samples value="13425" />
<SampleRate value="32000" />
<Headroom value="-200" />
<PlayBegin value="0" />
<PlayEnd value="0" />
<LoopBegin value="0" />
<LoopEnd value="0" />
<LoopPoint value="-1" />
<Peak unk="0" />
</Item>
</Chunks>
</Item>
<Item>
<Name>shoot04</Name>
<FileName>shoot04.wav</FileName>
<Chunks>
<Item>
<Type>peak</Type>
</Item>
<Item>
<Type>data</Type>
</Item>
<Item>
<Type>format</Type>
<Codec>PCM</Codec>
<Samples value="14191" />
<SampleRate value="32000" />
<Headroom value="-200" />
<PlayBegin value="0" />
<PlayEnd value="0" />
<LoopBegin value="0" />
<LoopEnd value="0" />
<LoopPoint value="-1" />
<Peak unk="0" />
</Item>
</Chunks>
</Item>
<Item>
<Name>shoot05</Name>
<FileName>shoot05.wav</FileName>
<Chunks>
<Item>
<Type>peak</Type>
</Item>
<Item>
<Type>data</Type>
</Item>
<Item>
<Type>format</Type>
<Codec>PCM</Codec>
<Samples value="14457" />
<SampleRate value="32000" />
<Headroom value="-200" />
<PlayBegin value="0" />
<PlayEnd value="0" />
<LoopBegin value="0" />
<LoopEnd value="0" />
<LoopPoint value="-1" />
<Peak unk="0" />
</Item>
</Chunks>
</Item>
<Item>
<Name>shoot06</Name>
<FileName>shoot06.wav</FileName>
<Chunks>
<Item>
<Type>peak</Type>
</Item>
<Item>
<Type>data</Type>
</Item>
<Item>
<Type>format</Type>
<Codec>PCM</Codec>
<Samples value="11436" />
<SampleRate value="32001" />
<Headroom value="-64" />
<PlayBegin value="0" />
<PlayEnd value="0" />
<LoopBegin value="0" />
<LoopEnd value="0" />
<LoopPoint value="-1" />
<Peak unk="0" />
</Item>
</Chunks>
</Item>
</Streams>
</AudioWaveContainer>

View file

@ -1,201 +0,0 @@
ESX = nil
QBCore = nil
if (GetResourceState('es_extended') == 'started') then
ESX = exports['es_extended']:getSharedObject()
elseif (GetResourceState('qb-core') == 'started') then
QBCore = exports['qb-core']:GetCoreObject()
end
Functions = {}
Functions.Notify = function(message)
if ESX then
ESX.ShowNotification(message, 'info', 5000)
elseif QBCore then
QBCore.Functions.Notify(message, 'primary', 5000)
end
end
Functions.CanVehicleHaveDartSystem = function(vehicle)
local vehicleModel = GetEntityModel(vehicle)
if not Config.allowedVehicles[vehicleModel] then
return false
end
return true
end
Functions.CanVehicleShootDart = function(vehicle)
return true
end
Functions.CanPlayerShootDart = function()
-- For example: Add a job check if you wish
return true
end
-- Called every frame when the vehicle is in 'sight' of the tracker system
Functions.OnVehicleHit = function(targetVehicle, hitCoords)
end
Functions.CanOpenOverlay = function()
local playerPed = PlayerPedId()
local vehicle = GetVehiclePedIsIn(playerPed, false)
if (vehicle == 0) then
return false
end
-- Check if the ped is the driver
local driverPed = GetPedInVehicleSeat(vehicle, -1)
if (driverPed ~= playerPed) then
return false
end
if IsPedDeadOrDying(playerPed, true) then
return false
end
return true
end
Functions.HasJob = function()
if not Config.allowedJobs then
return true
end
local playerJob = 'unemployed'
if ESX then
playerJob = ESX.GetPlayerData()?.job?.name or 'unemployed'
elseif QBCore then
playerJob = QBCore.Functions.GetPlayerData()?.job?.name or 'unemployed'
end
return (Config.allowedJobs[playerJob] ~= nil)
end
Functions.ShouldDisplayBlips = function()
return true
end
Functions.RemoveDartMinigame = function()
local areaSize = 40
local speedMultiplier = 1.5
for i = 1, 5 do
local success = lib.skillCheck({ areaSize = areaSize, speedMultiplier = speedMultiplier }, { 'E' })
if not success then
return false
end
areaSize -= 2
speedMultiplier += 0.05
Wait(300)
end
return true
end
Functions.CanInteract = function(entity)
local playerPed = PlayerPedId()
if IsPedDeadOrDying(playerPed, true) then
return false
end
if IsPedInAnyVehicle(playerPed, false) then
return false
end
return true
end
Functions.CreateRemoveTarget = function(canInteract, onSelect)
if (GetResourceState('ox_target') == 'started') then
exports.ox_target:addGlobalVehicle({ {
icon = 'fa-solid fa-xmark',
label = Config.Locales['remove_target'],
canInteract = function(entity)
return canInteract(entity)
end,
onSelect = function(data)
onSelect(data.entity)
end,
distance = Config.interactDistance,
} })
return
end
if (GetResourceState('qb-target') == 'started') then
exports['qb-target']:AddGlobalVehicle({
options = {
{
icon = 'fa-solid fa-xmark',
label = Config.Locales['remove_target'],
action = function(entity)
onSelect(entity)
end,
canInteract = function(entity)
return canInteract(entity)
end,
},
},
distance = Config.interactDistance,
})
return
end
print('[ERROR] No target interaction defined. Please implement your own target interaction.')
end
Functions.InstallingTrackerSystem = function(entity)
-- Called while installing the tracker system.
-- For example: Add an animation or progress bar
-- Return 'false' to cancel the installation
return true
end
Functions.CreateInstallTarget = function(canInteract, onSelect)
if (GetResourceState('ox_target') == 'started') then
exports.ox_target:addGlobalVehicle({ {
icon = 'fa-solid fa-location-crosshairs',
label = Config.Locales['install_target'],
distance = Config.interactDistance,
items = Config.itemName,
canInteract = function(entity)
return canInteract(entity)
end,
onSelect = function(data)
onSelect(data.entity)
end,
} })
return
end
if (GetResourceState('qb-target') == 'started') then
exports['qb-target']:AddGlobalVehicle({
options = {
{
icon = 'fa-solid fa-location-crosshairs',
label = Config.Locales['install_target'],
item = Config.itemName,
action = function(entity)
onSelect(entity)
end,
canInteract = function(entity)
return canInteract(entity)
end,
},
},
distance = Config.interactDistance,
})
return
end
print('[ERROR] No target interaction defined. Please implement your own target interaction.')
end

View file

@ -1,84 +0,0 @@
---@diagnostic disable: undefined-field
ESX = nil
QBCore = nil
if (GetResourceState('es_extended') == 'started') then
ESX = exports['es_extended']:getSharedObject()
elseif (GetResourceState('qb-core') == 'started') then
QBCore = exports['qb-core']:GetCoreObject()
end
Functions = {}
Functions.HasItem = function(playerId, itemName)
if ESX then
local xPlayer = ESX.GetPlayerFromId(playerId)
return xPlayer.getInventoryItem(itemName).count > 0
elseif QBCore then
local Player = QBCore.Functions.GetPlayer(playerId)
return Player.Functions.GetItemByName(itemName).amount > 0
end
end
Functions.RemoveItem = function(playerId, itemName, amount)
if ESX then
local xPlayer = ESX.GetPlayerFromId(playerId)
xPlayer.removeInventoryItem(itemName, amount)
elseif QBCore then
local Player = QBCore.Functions.GetPlayer(playerId)
Player.Functions.RemoveItem(itemName, amount)
end
end
Functions.GetPolicePlayers = function()
if not Config.allowedJobs then
return { -1 }
end
local jobs = {}
for jobName, _ in pairs(Config.allowedJobs) do
jobs[#jobs + 1] = jobName
end
local playerIds = {}
if ESX then
local result = ESX.GetExtendedPlayers('job', jobs)
for key, xPlayers in pairs(result) do
for i = 1, #xPlayers do
playerIds[#playerIds + 1] = xPlayers[i].source
end
end
elseif QBCore then
for jobName, _ in pairs(Config.allowedJobs) do
local players = QBCore.Functions.GetPlayersOnDuty(jobName)
for i = 1, #players do
playerIds[#playerIds + 1] = players[i]
end
end
end
return playerIds
end
--[[
-- If you are using an older version of ESX, and the blips are not showing up, you can use this function instead of the one above.
Functions.GetPolicePlayers = function()
local jobs = {}
for jobName, _ in pairs(Config.allowedJobs) do
jobs[#jobs + 1] = jobName
end
local playerIds = {}
for i = 1, #jobs do
local jobName = jobs[i]
local result = ESX.GetExtendedPlayers('job', jobName)
for key, xPlayer in pairs(result) do
playerIds[#playerIds + 1] = xPlayer.source
end
end
return playerIds
end
]]

View file

@ -1,96 +0,0 @@
Config = {
debug = false,
dartModel = `trackerdart`,
fireCooldown = 3000, -- Time in milliseconds between each dart shot
singeDart = true, -- If enabled, only one dart can be deployed at a time. As a result, this will also create a blip route to the target.
destroyOldDart = true, -- If enabled, the old dart will be destroyed when a new one is deployed. (Must have singleDart on true)
shootKey = 22, -- Key used to shoot the dart (Default 22 / Spacebar)
disabledControls = { -- Controls that are disabled when the overlay is open
22, 76
},
overlayKey = 58, -- Key used to open the overlay (Default 58 / G)
toggleOverlay = true, -- If set to true, the overlay will be toggled on/off when the key is pressed instead of holding it down
overlayPosition = {
vertical = '2.5%',
horizontal = '50%',
},
allowedJobs = { -- Jobs that are allowed to install and/or use the tracker system. Set to nil to disable job restrictions.
['police'] = 0,
['sheriff'] = 0
},
installWithTarget = false, -- If set to true, it requires the player to install the tracker system using a target system and an item before it can be used
itemName = 'trackersystem', -- The name of the item used to install the tracker system (If you don't want to use an item, set this to nil)
removeItem = true, -- If set to true, the item will be removed from the player's inventory when the tracker system is installed
onlyAllowedVehicles = true, -- If set to true, only vehicles that are in the allowedVehicles list can have the tracker system installed
dartsPerVehicle = 5, -- The amount of darts a vehicle can 'carry'
selfDestructTime = 900, -- Time in seconds before a tracker dart self destructs (Default: 900 sec / 15 minutes)
interactDistance = 3.0, -- The distance for the target interactions
blipUpdateInterval = 2000, -- The interval in milliseconds to update the blips from server to clients
vehicleBlip = {
sprite = 225,
scale = 0.8,
color = 1,
shortRange = false,
label = 'Tracker Dart',
},
shootPtfx = {
dict = 'core',
name = 'bul_glass_shotgun',
rot = vector3(-90.0, 0.0, 0.0),
scale = 1.5,
},
explodePtfx = {
dict = 'core',
name = 'ent_brk_sparking_wires',
rot = vector3(0.0, 0.0, 0.0),
scale = 1.5,
},
removeAnim = {
dict = 'mp_arresting',
anim = 'a_uncuff',
flag = 51,
},
allowedVehicles = {
[`police`] = 5, -- Override the default amount of darts a vehicle model can carry
[`polgauntlet`] = 5,
[`police2`] = 5,
[`police3`] = 5,
[`police4`] = 5,
[`police5`] = 5,
[`policet`] = 5,
[`sheriff`] = 5,
[`sheriff2`] = 5,
[`fbi`] = 5,
[`fbi2`] = 5,
},
}
Config.Locales = {
['target_missed'] = 'You missed the target',
['install_system'] = 'You need to install the tracker system first',
['no_darts_left'] = 'You do not have any darts left',
['target_has_dart'] = 'There is already a dart on the target',
['dart_attached'] = 'You have attached a dart to the target',
['already_installed'] = 'This vehicle already has a tracker system installed',
['dart_system_installed'] = 'You have installed the tracker system on this vehicle',
['not_allowed_vehicle'] = 'You cannot install the tracker system on this vehicle',
['remove_target'] = 'Remove tracker dart',
['failed_remove_dart'] = 'Failed to remove tracker dart',
['removed_dart'] = 'You have removed the tracker dart',
['only_one_dart'] = 'You can only deploy one dart at a time',
['old_dart_destroyed'] = 'The old dart has been destroyed',
['no_item'] = 'You do not have the item',
['install_target'] = 'Install tracker system',
}

View file

@ -1,109 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Dat54>
<Version value="7314721" />
<ContainerPaths>
<Item>audiodirectory\custom_sounds</Item>
</ContainerPaths>
<Items>
<!-- SimpleSounds -->
<Item type="SimpleSound">
<Name>dartshoot_01_sp</Name>
<Header>
<Flags value="0x00008004" />
<Volume value="200" />
<Category>scripted</Category>
</Header>
<ContainerName>audiodirectory/custom_sounds</ContainerName>
<FileName>shoot01</FileName>
<WaveSlotNum value="0" />
</Item>
<Item type="SimpleSound">
<Name>dartshoot_02_sp</Name>
<Header>
<Flags value="0x00008004" />
<Volume value="200" />
<Category>scripted</Category>
</Header>
<ContainerName>audiodirectory/custom_sounds</ContainerName>
<FileName>shoot02</FileName>
<WaveSlotNum value="0" />
</Item>
<Item type="SimpleSound">
<Name>dartshoot_03_sp</Name>
<Header>
<Flags value="0x00008004" />
<Volume value="200" />
<Category>scripted</Category>
</Header>
<ContainerName>audiodirectory/custom_sounds</ContainerName>
<FileName>shoot03</FileName>
<WaveSlotNum value="0" />
</Item>
<Item type="SimpleSound">
<Name>dartshoot_04_sp</Name>
<Header>
<Flags value="0x00008004" />
<Volume value="200" />
<Category>scripted</Category>
</Header>
<ContainerName>audiodirectory/custom_sounds</ContainerName>
<FileName>shoot04</FileName>
<WaveSlotNum value="0" />
</Item>
<Item type="SimpleSound">
<Name>dartshoot_05_sp</Name>
<Header>
<Flags value="0x00008004" />
<Volume value="200" />
<Category>scripted</Category>
</Header>
<ContainerName>audiodirectory/custom_sounds</ContainerName>
<FileName>shoot05</FileName>
<WaveSlotNum value="0" />
</Item>
<Item type="SimpleSound">
<Name>dartshoot_06_sp</Name>
<Header>
<Flags value="0x00008004" />
<Volume value="200" />
<Category>scripted</Category>
</Header>
<ContainerName>audiodirectory/custom_sounds</ContainerName>
<FileName>shoot06</FileName>
<WaveSlotNum value="0" />
</Item>
<!-- SoundSets -->
<Item type="SoundSet">
<Name>trackerdart_soundset</Name>
<Header>
<Flags value="0xAAAAAAAA" />
</Header>
<SoundSets>
<Item>
<ScriptName>dartshoot01</ScriptName>
<ChildSound>dartshoot_01_sp</ChildSound>
</Item>
<Item>
<ScriptName>dartshoot02</ScriptName>
<ChildSound>dartshoot_02_sp</ChildSound>
</Item>
<Item>
<ScriptName>dartshoot03</ScriptName>
<ChildSound>dartshoot_03_sp</ChildSound>
</Item>
<Item>
<ScriptName>dartshoot04</ScriptName>
<ChildSound>dartshoot_04_sp</ChildSound>
</Item>
<Item>
<ScriptName>dartshoot05</ScriptName>
<ChildSound>dartshoot_05_sp</ChildSound>
</Item>
<Item>
<ScriptName>dartshoot06</ScriptName>
<ChildSound>dartshoot_06_sp</ChildSound>
</Item>
</SoundSets>
</Item>
</Items>
</Dat54>

View file

@ -1,47 +0,0 @@
fx_version 'cerulean'
games { 'gta5' }
author 'Gamzky'
description 'Police Tracker Dart System'
version '1.0.5'
ui_page 'ui/index.html'
lua54 'yes'
shared_scripts {
'@ox_lib/init.lua',
'config.lua',
}
client_scripts {
'bridge/cl_bridge.lua',
'client/cl_functions.lua',
'client/cl_main.lua',
}
server_scripts {
'bridge/sv_bridge.lua',
'server/sv_main.lua',
}
escrow_ignore {
'audiodirectory/*',
'bridge/*.lua',
'data/*',
'stream/*',
'config.lua',
}
files {
'ui/index.html',
'data/audioexample_sounds.dat54.rel',
'audiodirectory/custom_sounds.awc',
'stream/trackerdart.ytyp',
}
data_file 'AUDIO_WAVEPACK' 'audiodirectory'
data_file 'AUDIO_SOUNDDATA' 'data/audioexample_sounds.dat'
data_file 'DLC_ITYP_REQUEST' 'stream/trackerdart.ytyp'
dependency '/assetpacks'

View file

@ -1,121 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Tracker Dart</title>
<style>
body {
margin: 0;
padding: 0;
background: transparent;
font-family: 'Orbitron', sans-serif;
overflow: hidden;
}
.hud-container {
position: fixed;
bottom: 20px;
left: 50%;
transform: translateX(-50%);
background: linear-gradient(135deg, #111, #333);
border: 2px solid #333;
border-radius: 12px;
padding: 15px 30px;
display: flex;
flex-direction: column;
align-items: center;
color: white;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.5);
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
}
.target-status {
font-size: 24px;
font-weight: bold;
margin-bottom: 10px;
transition: color 0.3s, text-shadow 0.3s;
}
.target-status.active {
color: #00ff00;
text-shadow: 0 0 10px #00ff00, 0 0 20px #00ff00;
}
.target-status.inactive {
color: #ff0000;
text-shadow: 0 0 10px #ff0000, 0 0 20px #ff0000;
}
.darts-left {
font-size: 18px;
font-weight: 600;
}
</style>
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;700&display=swap" rel="stylesheet" />
</head>
<body>
<div class="hud-container">
<div id="targetStatus" class="target-status inactive">TARGET</div>
<div id="dartsLeft" class="darts-left">Darts Left: 5</div>
</div>
<script>
window.addEventListener('message', (event) => {
const action = event.data.action;
switch (action) {
case 'setOverlayStatus':
toggleOverlay(event.data.active, event.data.options);
break;
case 'setTargetStatus':
updateTargetStatus(event.data.active);
break;
case 'setDartsLeft':
updateDartsLeft(event.data.count);
break;
default:
console.log(`Unknown action: ${action}`);
break;
}
});
const toggleOverlay = (open, options = {}) => {
const overlay = document.querySelector('.hud-container');
if (open) {
overlay.style.opacity = 1;
overlay.style.pointerEvents = 'auto';
overlay.style.bottom = options?.vertical ?? '20px';
overlay.style.left = options?.horizontal ?? '50%';
} else {
overlay.style.opacity = 0;
overlay.style.pointerEvents = 'none';
}
};
let dartsLeft = 0;
let hasTarget = false;
const targetStatusElement = document.getElementById('targetStatus');
const dartsLeftElement = document.getElementById('dartsLeft');
const updateTargetStatus = (active) => {
hasTarget = active;
if (hasTarget) {
targetStatusElement.textContent = 'TARGET';
targetStatusElement.className = 'target-status active';
} else {
targetStatusElement.textContent = 'TARGET';
targetStatusElement.className = 'target-status inactive';
}
};
const updateDartsLeft = (count) => {
dartsLeft = count;
dartsLeftElement.textContent = `Darts Left: ${dartsLeft}`;
};
</script>
</body>
</html>

View file

@ -1 +0,0 @@
Please follow the instructions: https://docs.brutalscripts.com

View file

@ -1,384 +0,0 @@
ESX = Core
QBCore = Core
-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(title, text, time, type)
if Config.BrutalNotify then
exports['brutal_notify']:SendAlert(title, text, time, type)
else
-- Put here your own notify and set the Config.BrutalNotify to false
SetNotificationTextEntry("STRING")
AddTextComponentString(text)
DrawNotification(0,1)
-- Default ESX Notify:
--TriggerEvent('esx:showNotification', text)
-- Default QB Notify:
--TriggerEvent('QBCore:Notify', text, 'info', 5000)
-- OKOK Notify:
-- exports['okokNotify']:Alert(title, text, time, type, false)
end
end
function TextUIFunction(type, text)
if Config.TextUI ~= false then
if type == 'open' then
if Config.TextUI:lower() == 'ox_lib' then
lib.showTextUI(text)
elseif Config.TextUI:lower() == 'okoktextui' then
exports['okokTextUI']:Open(text, 'darkblue', 'right')
elseif Config.TextUI:lower() == 'esxtextui' then
ESX.TextUI(text)
elseif Config.TextUI:lower() == 'qbdrawtext' then
exports['qb-core']:DrawText(text,'left')
elseif Config.TextUI:lower() == 'brutal_textui' then
exports['brutal_textui']:Open(text, "blue")
end
elseif type == 'hide' then
if Config.TextUI:lower() == 'ox_lib' then
lib.hideTextUI()
elseif Config.TextUI:lower() == 'okoktextui' then
exports['okokTextUI']:Close()
elseif Config.TextUI:lower() == 'esxtextui' then
ESX.HideUI()
elseif Config.TextUI:lower() == 'qbdrawtext' then
exports['qb-core']:HideText()
elseif Config.TextUI:lower() == 'brutal_textui' then
exports['brutal_textui']:Close()
end
end
end
end
function InventoryOpenFunction(type, data)
if type == 'society' then
local job = data
local label = job:sub(1, 1):upper() .. job:sub(2):lower().." Stash"
if Config.Inventory:lower() == 'ox_inventory' then
exports.ox_inventory:openInventory('stash', {id = "stash_"..job})
elseif Config.Inventory:lower() == 'qb_inventory' then
if GetResourceState('qb-inventory') == "started" then
TriggerServerEvent("qb-inventory:server:OpenInventory", "stash_"..job, {label = label, maxweight = 100000, slots = 100})
else
TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100})
TriggerEvent("inventory:client:SetCurrentStash", "stash_"..job)
end
elseif Config.Inventory:lower() == 'quasar_inventory' then
TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100})
TriggerEvent("inventory:client:SetCurrentStash", "stash_"..job)
elseif Config.Inventory:lower() == 'chezza_inventory' then
TriggerEvent("inventory:openInventory", {type = "stash", id = "stash_"..job, title = label, weight = 100000, delay = 100, save = true})
elseif Config.Inventory:lower() == 'core_inventory' then
TriggerServerEvent("core_inventory:server:openInventory", "stash_"..job, "big_storage")
elseif Config.Inventory:lower() == 'codem_inventory' then
TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100})
elseif Config.Inventory:lower() == 'origen_inventory' then
exports.origen_inventory:openInventory("stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100})
elseif Config.Inventory:lower() == 'ps-inventory' then
if GetResourceState('ps-inventory') == "started" then
TriggerServerEvent("ps-inventory:server:OpenInventory", "stash_"..job, {label = label, maxweight = 100000, slots = 100})
TriggerEvent("ps-inventory:client:SetCurrentStash", "stash_"..job)
else
TriggerServerEvent("inventory:server:OpenInventory", "stash", "stash_"..job, {label = label, maxweight = 100000, slots = 100})
TriggerEvent("inventory:client:SetCurrentStash", "stash_"..job)
end
end
elseif type == 'search_player' then
local target = data
if Config.Inventory:lower() == 'ox_inventory' then
exports.ox_inventory:openInventory('player', target)
elseif Config.Inventory:lower() == 'qb_inventory' then
if GetResourceState('qb-inventory') == "started" then
TriggerServerEvent("qb-inventory:server:OpenPlayerInventory", target)
else
TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", target)
end
elseif Config.Inventory:lower() == 'quasar_inventory' then
TriggerServerEvent("inventory:server:OpenInventory", "otherplayer", target)
elseif Config.Inventory:lower() == 'chezza_inventory' then
TriggerEvent("inventory:openPlayerInventory", target, true)
elseif Config.Inventory:lower() == 'core_inventory' then
TriggerServerEvent('core_inventory:server:openInventory', target, 'otherplayer', nil, nil, false)
elseif Config.Inventory:lower() == 'codem_inventory' then
TriggerServerEvent('codem-inventory:server:robplayer', target)
elseif Config.Inventory:lower() == 'origen_inventory' then
exports.origen_inventory:openInventory('player', target)
elseif Config.Inventory:lower() == 'ps-inventory' then
if GetResourceState('ps-inventory') == "started" then
TriggerServerEvent('ps-inventory:server:OpenInventory', 'otherplayer', target)
else
TriggerServerEvent('inventory:server:OpenInventory', 'otherplayer', target)
end
end
elseif type == 'search_vehicle_trunk' then
local vehicle = data
local plate = GetVehicleNumberPlateText(vehicle)
if Config.Inventory:lower() == 'ox_inventory' then
exports.ox_inventory:openInventory('trunk', {id='trunk'..plate, netid = NetworkGetNetworkIdFromEntity(vehicle)})
elseif Config.Inventory:lower() == 'qb_inventory' then
if GetResourceState('qb-inventory') == "started" then
TriggerServerEvent("qb-inventory:server:OpenInventory", nil, 'trunk-'..plate)
else
TriggerServerEvent("inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50})
end
elseif Config.Inventory:lower() == 'quasar_inventory' then
TriggerServerEvent("inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50})
elseif Config.Inventory:lower() == 'chezza_inventory' then
TriggerEvent('inventory:openInventory', {type = "trunk", id = plate, title = "Vehicle Trunk", weight = false, delay = 300, save = true})
elseif Config.Inventory:lower() == 'core_inventory' then
-- no data
elseif Config.Inventory:lower() == 'codem_inventory' then
TriggerEvent('codem-inventory:openInventory', 'trunk', plate)
elseif Config.Inventory:lower() == 'origen_inventory' then
exports.origen_inventory:openInventory('trunk', plate, {maxweight = 1000000, slots = 50})
elseif Config.Inventory:lower() == 'ps-inventory' then
if GetResourceState('ps-inventory') == "started" then
TriggerServerEvent("ps-inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50})
else
TriggerServerEvent("inventory:server:OpenInventory", "trunk", plate, {maxweight = 1000000, slots = 50})
end
end
elseif type == 'search_vehicle_glovebox' then
local vehicle = data
local plate = GetVehicleNumberPlateText(vehicle)
if Config.Inventory:lower() == 'ox_inventory' then
exports.ox_inventory:openInventory('glovebox', {id='glovebox'..plate, netid = NetworkGetNetworkIdFromEntity(vehicle)})
elseif Config.Inventory:lower() == 'qb_inventory' then
if GetResourceState('qb-inventory') == "started" then
TriggerServerEvent("qb-inventory:server:OpenInventory", nil, 'glovebox-'..plate)
else
TriggerServerEvent("inventory:server:OpenInventory", "glovebox", plate)
end
elseif Config.Inventory:lower() == 'quasar_inventory' then
TriggerServerEvent("inventory:server:OpenInventory", "glovebox", plate)
elseif Config.Inventory:lower() == 'chezza_inventory' then
TriggerEvent('inventory:openInventory', {type = "glovebox", id = plate, title = "Vehicle Glove Box", weight = false, delay = 300, save = true})
elseif Config.Inventory:lower() == 'core_inventory' then
-- no data
elseif Config.Inventory:lower() == 'codem_inventory' then
TriggerEvent('codem-inventory:openInventory', 'glovebox', plate)
elseif Config.Inventory:lower() == 'origen_inventory' then
exports.origen_inventory:openInventory('glovebox', plate, {maxweight = 1000000, slots = 50})
elseif Config.Inventory:lower() == 'ps-inventory' then
if GetResourceState('ps-inventory') == "started" then
TriggerServerEvent("ps-inventory:server:OpenInventory", "glovebox", plate)
else
TriggerServerEvent("inventory:server:OpenInventory", "glovebox", plate)
end
end
end
end
function ProgressBarFunction(time, text)
if Config.ProgressBar:lower() == 'progressbars' then --LINK: https://github.com/EthanPeacock/progressBars/releases/tag/1.0
exports['progressBars']:startUI(time, text)
elseif Config.ProgressBar:lower() == 'mythic_progbar' then -- LINK: https://github.com/HarryElSuzio/mythic_progbar
TriggerEvent("mythic_progbar:client:progress", {name = "policejobduty", duration = time, label = text, useWhileDead = false, canCancel = false})
elseif Config.ProgressBar:lower() == 'pogressbar' then -- LINK: https://github.com/SWRP-PUBLIC/pogressBar
exports['pogressBar']:drawBar(time, text)
end
end
function BossMenuFunction(job)
if Config['Core']:upper() == 'ESX' then
TriggerEvent('esx_society:openBossMenu', job, function(data) end, { wash = false })
elseif Config['Core']:upper() == 'QBCORE' then
TriggerEvent('qb-bossmenu:client:OpenMenu')
end
end
function PlayerReviveFunction()
if Config['Core']:upper() == 'ESX' then
TriggerEvent('esx_ambulancejob:revive')
elseif Config['Core']:upper() == 'QBCORE' then
TriggerEvent('hospital:client:Revive')
end
end
function ImpoundDeleteVehicle(vehicle)
local plate = GetVehicleNumberPlateText(vehicle)
DeleteEntity(vehicle)
end
function HandCuffedEvent(cuffed)
if cuffed then
--exports['qs-smartphone']:canUsePhone(false)
--exports["lb-phone"]:ToggleDisabled(true)
else
--exports['qs-smartphone']:canUsePhone(true)
--exports["lb-phone"]:ToggleDisabled(false)
end
end
function CustomMDT()
-- You can open another MDT here
end
function BulletProofVest()
local playerPed = PlayerPedId()
AddArmourToPed(playerPed, 100)
SetPedArmour(playerPed, 100)
SetPedComponentVariation(playerPed, 9, 27, 9, 2)
end
function OpenCloakroomMenuEvent()
TriggerEvent('qb-clothing:client:openOutfitMenu')
end
function CitizenWear()
if Config['Core']:upper() == 'ESX' then
Core.TriggerServerCallback('esx_skin:getPlayerSkin', function(skin)
TriggerEvent('skinchanger:loadSkin', skin)
end)
elseif Config['Core']:upper() == 'QBCORE' then
TriggerServerEvent('qb-clothes:loadPlayerSkin')
end
end
function setUniform(uniformTable)
if Config['Core']:upper() == 'ESX' then
TriggerEvent('skinchanger:getSkin', function(skin)
local uniform
if skin.sex == 0 then
uniform = uniformTable.male
else
uniform = uniformTable.female
end
local table = {}
for k,v in pairs(uniform) do
if k == 't-shirt' then
table.tshirt_1 = uniform['t-shirt'].item
table.tshirt_2 = uniform['t-shirt'].texture
elseif k == 'torso2' then
table.torso_1 = uniform['torso2'].item
table.torso_2 = uniform['torso2'].texture
elseif k == 'decals' then
table.decals_1 = uniform['decals'].item
table.decals_2 = uniform['decals'].texture
elseif k == 'arms' then
table.arms = uniform['arms'].item
elseif k == 'pants' then
table.pants_1 = uniform['pants'].item
table.pants_2 = uniform['pants'].texture
elseif k == 'shoes' then
table.shoes_1 = uniform['shoes'].item
table.shoes_2 = uniform['shoes'].texture
elseif k == 'hat' then
table.helmet_1 = uniform['hat'].item
table.helmet_2 = uniform['hat'].texture
elseif k == 'accessory' then
table.chain_1 = uniform['accessory'].item
table.chain_2 = uniform['accessory'].texture
elseif k == 'ear' then
table.ears_1 = uniform['ear'].item
table.ears_2 = uniform['ear'].texture
elseif k == 'mask' then
table.mask_1 = uniform['mask'].item
table.mask_2 = uniform['mask'].texture
end
end
TriggerEvent('skinchanger:loadClothes', skin, table)
end)
elseif Config['Core']:upper() == 'QBCORE' then
local table = {}
local gender = QBCore.Functions.GetPlayerData().charinfo.gender
if gender == 0 then
table.outfitData = uniformTable.male
else
table.outfitData = uniformTable.female
end
TriggerEvent('qb-clothing:client:loadOutfit', table)
end
end
function LockPick(vehicle)
if Config['Core']:upper() == 'ESX' then
local playerPed = PlayerPedId()
TaskStartScenarioInPlace(playerPed, 'WORLD_HUMAN_WELDING', 0, true)
Wait(1000*10)
ClearPedTasksImmediately(playerPed)
NetworkRegisterEntityAsNetworked(vehicle)
NetworkRequestControlOfEntity(vehicle)
SetEntityAsMissionEntity(vehicle)
SetVehicleDoorsLocked(vehicle, 1)
SetVehicleDoorsLockedForAllPlayers(vehicle, false)
elseif Config['Core']:upper() == 'QBCORE' then
TriggerEvent('lockpicks:UseLockpick')
end
end
function DisableMinimap()
DisplayRadar(false)
end
function EnableMinimap()
DisplayRadar(true)
end
function OpenMenuUtil()
InMenu = true
SetNuiFocus(true, true)
Citizen.CreateThread(function()
while InMenu do
N_0xf4f2c0d4ee209e20() -- it's disable the AFK camera zoom
Citizen.Wait(15000)
end
end)
DisplayRadar(false)
end
function CloseMenuUtil()
Citizen.CreateThread(function()
Citizen.Wait(1000)
InMenu = false
end)
SetNuiFocus(false, false)
DisplayRadar(true)
end
function GeneratePolicePlace()
return string.sub(PlayerData.job.label, 1, 4)..''..math.random(0001, 9999)
end
function IsTargetDead(playerPed)
local dead = false
if IsEntityPlayingAnim(playerPed, 'dead', 'dead_a', 3) or IsEntityPlayingAnim(playerPed, 'combat@damage@writhe', 'writhe_loop', 3) then
dead = true
end
return dead
end
-----------------------| UTILS TRIGGERS |-----------------------
RegisterNetEvent('brutal_policejob:client:utils:CreateVehicle')
AddEventHandler('brutal_policejob:client:utils:CreateVehicle', function(Vehicle)
SetVehicleFuelLevel(Vehicle, 100.0)
DecorSetFloat(Vehicle, "_FUEL_LEVEL", GetVehicleFuelLevel(Vehicle))
if Config['Core']:upper() == 'QBCORE' then
TriggerEvent("vehiclekeys:client:SetOwner", GetVehicleNumberPlateText(Vehicle))
end
end)
RegisterNetEvent('brutal_policejob:client:utils:DeleteVehicle')
AddEventHandler('brutal_policejob:client:utils:DeleteVehicle', function(Vehicle)
end)

View file

@ -1,587 +0,0 @@
----------------------------------------------------------------------------------------------
-----------------------------------| BRUTAL POLICE JOB :) |-----------------------------------
----------------------------------------------------------------------------------------------
--[[
Hi, thank you for buying our script, We are very grateful!
For help join our Discord server: https://discord.gg/85u2u5c8q9
More informations about the script: https://docs.brutalscripts.com
--]]
Config = {
Core = 'QBCORE', -- 'ESX' / 'QBCORE' | Other core setting on the 'core' folder.
Inventory = 'qs-inventory', -- 'ox_inventory' / 'qb_inventory' / 'quasar_inventory' / 'chezza_inventory' / 'codem_inventory' / 'core_inventory' / 'origen_inventory' / 'ps-inventory' // Custom can be add in the cl_utils.lua!!!
Billing = 'brutal_billing', -- 'brutal_billing' / 'esx_billing' / 'okokBilling' / 'jaksam_billing' / 'codem_billing' / 'quasar_billing' | false = immediate deduction from the player's bank account
TextUI = 'ox_lib', -- false / 'brutal_textui' / 'ox_lib' / 'okokTextUI' / 'ESXTextUI' / 'QBDrawText' // Custom can be add in the cl_utils.lua!!!
Target = 'qb-target', -- 'oxtarget' / 'qb-target' // if the TextUI is set to false target will step its place. | The Target cannot be false.
ProgressBar = 'pogressBar', -- 'progressBars' / 'pogressBar' / 'mythic_progbar' // Custom can be add in the cl_utils.lua!!!
Metric = 'kmh', -- 'kmh' / 'mph'
BrutalNotify = true, -- Buy here: (4€+VAT) https://store.brutalscripts.com | Or set up your own notify >> cl_utils.lua
SteamName = false, -- true = Steam name | false = character name
DateFormat = '%d/%m/%Y', -- Date format
CustomOutfitMenu = false, -- If it's true, it will open a custom outfit menu, what you can edit in the cl_utils.lua line 103.
ClosestDistanceIssue = false, -- DO NOT EDIT IT.
DutyOffOnDeath = true, -- If you are on duty and die, you will be taken off duty. (does nothing if DutySystem = false)
DutySystem = true, -- Do you want to use the Duty System? true / false
PoliceStations = {
['Police Department'] = {
Job = 'police',
MenuColors = {'rgb(15, 100, 210)', 'rgb(9, 43, 88)'},
Blip = {use = false, color = 38, sprite = 60, size = 1.0},
Marker = {use = false, marker = 20, rgb = {15, 100, 210}, bobUpAndDown = true, rotate = false},
Duty = vector3(450.7325, -972.9617, 30.6547),
DutyBlips = {
use = true,
updatetime = 5000,
},
NoteDeleteRank = 2,
GiveLicenseRank = 2,
CitizenCallDeleteRank = 2,
Licenses = {},
Cloakrooms = {
vector3(472.7700, -1013.5255, 32.9868),
vector3(478.0511, -1011.7962, 32.9868),
},
BossMenu = {
grades = {7},
coords = {
vector3(430.7693, -989.8458, 35.8398),
}
}
},
['Marshals'] = {
Job = 'marshal',
MenuColors = {'rgb(235, 164, 52)', 'rgb(181, 116, 13)'},
Blip = {use = true, color = 22, sprite = 60, size = 1.0},
Marker = {use = true, marker = 20, rgb = {15, 100, 210}, bobUpAndDown = true, rotate = false},
Duty = vector3(-446.5832, 6012.8979, 32.2887),
DutyBlips = {
use = true,
updatetime = 5000,
},
NoteDeleteRank = 2,
GiveLicenseRank = 2,
CitizenCallDeleteRank = 2,
Licenses = {},
Cloakrooms = {
vector3(-440.2871, 6010.4814, 36.9957),
},
Armorys = {
vector3(-449.4388, 6015.1021, 36.9956),
},
BossMenu = {
grades = {3},
coords = {
vector3(-432.8335, 6005.9185, 36.9957),
}
}
}
},
Commands = {
-- For cops
Duty = {
Use = true,
Command = 'pduty',
Suggestion = 'Entering/Exiting duty'
},
JobMenu = {
Command = 'jobmenu',
Control = '', -- Controls list: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
Suggestion = 'Open Job Menu'
},
MDT = {
Use = true, -- if false here you can add your custom MDT >> cl_utils
Command = 'mdt',
Control = '', -- Controls list: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
Suggestion = 'Open MDT Menu'
},
VehiclePanel = {
Use = true,
Command = 'vehiclepanel',
Control = '', -- Controls list: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
Suggestion = 'Vehicle Panel Position edit'
},
PlateReader = {
Use = true, -- If true, VehiclePanel also needs to be set to true.
WhitelistedVehicles = {'police', 'police2', 'police3', 'police4', 'fbi', 'fbi2', 'sheriff', 'sheriff2'}, -- false = not in use
Command = 'platereader',
Control = '', -- Controls list: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
Suggestion = 'Plate Reader Menu'
},
AreaLock = {
Use = true,
DeleteNPC = false,
Command = 'arealock',
Control = '', -- Controls list: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
Suggestion = 'Area Lock Menu'
},
CameraRepair = {
Command = 'camera_repair',
Suggestion = 'Repair the Camera'
},
Drag = {
Command = 'drag',
Suggestion = 'Drag Animation'
},
RemoveObjects = {
Command = 'removeobjects',
Suggestion = 'Remove Objects',
Objects = {
-- prop = objects props/models, icon = objects icons in the jobmenu. (for example use icons from here: https://fontawesome.com/search?m=free&o=r), freeze = freeze the objects position: true / false
[1] = {prop = 'prop_roadcone02a', icon = 'fa-solid fa-play fa-rotate-270', freeze = false},
[2] = {prop = 'prop_barrier_work06a', icon = 'fa-solid fa-road-barrier', freeze = false},
[3] = {prop = 'p_ld_stinger_s', icon = 'fa-solid fa-road-spikes', freeze = false},
[4] = {prop = 'prop_gazebo_03', icon = 'fa-solid fa-tent', freeze = false},
[5] = {prop = 'prop_worklight_03b', icon = 'fa-solid fa-lightbulb', freeze = false},
-- You can't add more or use less!!!
}
},
RobPlayer = {
Use = true,
HandUpAnimation = {use = true, animDictionary = 'missminuteman_1ig_2', animName = 'handsup_base'}, -- If you use a different hands up animation on your server change these | Anim Dict, Anim Name
CanRobDeadPlayer = true, -- You can rob dead players? true / false
Command = 'rob',
Suggestion = 'Rob Player'
},
-- For Civils
CitizenCall = {
Use = true,
Command = 'citizencall',
Control = '', -- Controls list: https://docs.fivem.net/docs/game-references/input-mapper-parameter-ids/keyboard/
Suggestion = 'Citizen Call Menu',
Cooldown = 0, -- in minutes while a player can not send a citizencall again
},
},
HandCuff = {
Freeze = false, -- Do you want to freeze the player while he is cuffed? true / false
CuffObject = true, -- Do you want to use Cuff Object on the player's hand? true / false
FastCuff = {Command = 'cuff', Control = '', Suggestion = 'To cuff a player faster'},
-- More controls: https://docs.fivem.net/docs/game-references/controls/
DisableControls = {24,257,25,263,32,34,31,30,45,22,44,37,23,288,289,170,167,73,199,59,71,72,36,47,264,257,140,141,142,143,75}, -- Disabled controls while the player is cuffed.
HandcuffItem = 'handcuff', -- Usable item, what everyone can use to cuff someone.
RemoveHandcuffItem = false, -- Wether the script should remove the cuff item after the player used it once or not
HandcuffKeyItem = 'handcuff_key', -- Usable item, what everyone can use to open the handcuff.
RemoveHandcuffKeyItem = false, -- Wether the script should remove the key item after the player used it once or not
DragBlacklistedVehicles = {'bf400', 'sanchez'},
VehicleEnterType = 'walk', -- walk / teleport | the way how people will get in the vehicle when you put them into one with the jobmenu
},
BulletProofs = {
Use = false, -- true = false
Items = {
-- Job = who can use, onlyjob = Only the job members can use? true / fase, item = ITEM
{job = 'police', onlyjob = true, item = 'police_bulletproof'},
{job = 'sheriff', onlyjob = true, item = 'sheriff_bulletproof'},
}
},
SpeedCameras = {
Use = false, -- Do you want to use Speedcameras? true / false
Blips = {sprite = 184, color = 82, size = 0.5}, -- Speedcameras Blips
OtherWhitelistedJobs = {'ambulance', 'sheriff', ''}, -- Other Whitelisted jobs
Flash = true, -- Do you want a flash effect for Speedcameras? true / false
FlashSound = true, -- Do you want a flash sound for Speedcameras? true / false
Positions = {
-- Coords, job = which job will get the money from the speedcameras, limit = speed limit, price = price (Proportional fine value), radius = radius, blip = true / false
{coords = vector3(2076.3738, 2718.7109, 47.6280), job = 'police', limit = 50, price = 1000, radius = 5.0, blip = true},
{coords = vector3(1320.0201, 610.4359, 80.1452), job = 'police', limit = 130, price = 3000, radius = 15.0, blip = true},
{coords = vector3(-2686.5913, 2442.6104, 16.6781), job = 'police', limit = 130, price = 3000, radius = 15.0, blip = true},
{coords = vector3(-1057.4922, -607.0911, 17.9110), job = 'police', limit = 110, price = 2000, radius = 25.0, blip = true},
{coords = vector3(229.3872, -662.6493, 38.2247), job = 'police', limit = 50, price = 1000, radius = 15.0, blip = true},
{coords = vector3(120.5341, -1378.1332, 28.8197), job = 'police', limit = 50, price = 1000, radius = 25.0, blip = true},
}
},
CityAlarms = { -- When shooting or car jacking happens the script can place a blip for some time or send a citizencall to the mdt
Shooting = {
Use = true,
SendCitizenCall = false,
Blips = {sprite = 110, sprite2 = 229, size = 0.70, color = 1, label = 'Shooting'},
RemoveTime = 15, -- in second | Remove the blip after this time
JobWhitelist = {"fbi"}, -- if someone from these jobs shoot it wont be triggered
ZoneWhitelists = { -- in this zone it wont be triggered
{size = 30.0, coords = vector3(133.8319, -481.2803, 43.1305)},
},
WeaponWhitelist = { -- these weapons wont trigger the script
'WEAPON_GRENADE',
'WEAPON_BZGAS',
'WEAPON_MOLOTOV',
'WEAPON_STICKYBOMB',
'WEAPON_PROXMINE',
'WEAPON_SNOWBALL',
'WEAPON_PIPEBOMB',
'WEAPON_BALL',
'WEAPON_SMOKEGRENADE',
'WEAPON_FLARE',
'WEAPON_PETROLCAN',
'WEAPON_FIREEXTINGUISHER',
'WEAPON_HAZARDCAN',
'WEAPON_RAYCARBINE',
'WEAPON_STUNGUN'
}
},
CarJack = {
Use = true,
Blips = {sprite = 326, size = 0.70, color = 43, label = 'Car Jacking'},
RemoveTime = 15, -- in second | Remove the blip after this time
SendCitizenCall = true,
UseShockingCarAlarm = true,
ZoneWhitelists = {
{size = 30.0, coords = vector3(133.8319, -481.2803, 43.1305)},
},
},
},
Prison = {
Use = true, -- Do you want to use the Prison? true / false
SaveInventory = true, -- true / false | If set to true, the player's inventory is saved to the database when jailed. (Cannot be true if ClearInventory is also true.)
ClearInventory = false, -- true / false | If set to true, the player's inventory is cleared when jailed. (Cannot be true if SaveInventory is also true.)
SaveFrequency = 5,
Blip = {use = true, label = 'Prison', color = 3, sprite = 188, size = 1.25},
Marker = {use = true, marker = 20, rgb = {15, 100, 210}, bobUpAndDown = true, rotate = false},
Coords = vector3(1765.2253, 2560.2373, 45.5651),
SendPlayerToJail = vector3(1840.3468, 2579.6252, 46.0143),
FinishCoords = vector4(1847.0192, 2585.8787, 45.6726, 267.4373),
Hospital = {
Blip = {label = 'Prison Hospital', coords = vector3(1767.7861, 2570.3118, 45.7299), color = 2, sprite = 61, size = 0.8},
ReviveTime = 15, -- in sec
ClearInventory = true, -- true / false
Beds = {
{coords = vector3(1772.00, 2597.9272, 45.6585), heading = 90.0},
{coords = vector3(1772.00, 2594.9656, 45.6586), heading = 90.0},
{coords = vector3(1772.00, 2591.8428, 45.6586), heading = 90.0},
},
},
Escape = {
CanEscape = true, -- Do you want to let the players to escape from the Prison? true / false
EscapeDistance = 500.0, -- Escape Distance
EscapeByTunnel = {
Use = true, -- If it's true, you have to have this required mlo: https://ed-johnsonscripts.tebex.io/package/5303552
Price = 5000, -- Price to can use
TimeToEscape = 30000, -- Escaping time
Model = 's_m_y_prismuscl_01',
Coords = vector4(1628.2682, 2584.9957, 44.5652, 1.0618),
DoorCoords = vector4(1628.185, 2584.76, 45.5583, 1.0618),
WalkCoords = vector4(1626.5833, 2585.4402, 45.5648, 2.9932),
DoorObject = -904036698,
},
},
Shop = {
Blip = {label = 'Prison Shop', color = 69, sprite = 59, size = 0.8},
Coords = vector3(1770.1625, 2551.2397, 45.5650),
Items = {
-- In ESX
{item = 'burger', label = 'Burger', price = 1},
{item = 'water', label = 'Water', price = 1},
-- In QB
--{item = 'sandwich', label = 'Sandwich', price = 1},
--{item = 'water_bottle', label = 'Water', price = 1},
}
},
Jobs = {
Use = true,
Blip = {label = 'Prison Job', color = 17, sprite = 66, size = 0.7},
StartJob = vector3(1616.6893, 2576.9800, 45.8556),
Works = {
-- Welding
{
Time = 10, -- Time in sec
Money = {min = 100, max = 200}, -- Mimimum, Maximum random money amount
Blip = {label = 'Work Possition', color = 26, sprite = 354, size = 0.8},
Animation = 'WORLD_HUMAN_WELDING',
RemoveProp = 'prop_weld_torch',
Positions = {
{Coords = vector3(1624.7623, 2575.7261, 45.5649), Heading = 270.0},
{Coords = vector3(1610.1010, 2568.1750, 45.5649), Heading = 45.0},
},
},
-- Hammering
{
Time = 10,
Money = {min = 100, max = 200},
Blip = {label = 'Work Possition', color = 26, sprite = 402, size = 1.0},
Animation = 'WORLD_HUMAN_HAMMERING',
RemoveProp = 'prop_tool_hammer',
Positions = {
{Coords = vector3(1630.2081, 2527.3784, 45.5649), Heading = 235.0},
{Coords = vector3(1624.8821, 2513.2861, 45.5648), Heading = 100.0},
},
},
-- Planting
{
Time = 10,
Money = {min = 100, max = 200},
Blip = {label = 'Work Possition', color = 2, sprite = 1, size = 0.75},
Animation = 'WORLD_HUMAN_GARDENER_PLANT',
RemoveProp = 'prop_cs_trowel',
Positions = {
{Coords = vector3(1771.3270, 2546.0410, 45.5871), Heading = 275.0},
{Coords = vector3(1757.6355, 2550.0220, 45.5651), Heading = 130.0},
{Coords = vector3(1700.1659, 2536.5183, 45.5595), Heading = 150.0},
},
},
-- Cleaning
{
Time = 10,
Money = {min = 100, max = 200},
Blip = {label = 'Work Possition', color = 5, sprite = 1, size = 0.75},
Animation = 'WORLD_HUMAN_MAID_CLEAN',
RemoveProp = 'prop_rag_01',
Positions = {
{Coords = vector3(1781.9982, 2558.9646, 45.6732), Heading = 0.0},
{Coords = vector3(1784.3669, 2563.7920, 45.6731), Heading = 0.0},
{Coords = vector3(1784.2422, 2552.7314, 45.6731), Heading = 0.0},
},
},
-- You can add more...
},
},
PrisonGuards = {
{Model = 'mp_m_securoguard_01', Coords = vector4(1759.9581, 2413.7534, 45.3684, 28.3456), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1820.5490, 2477.2603, 45.3775, 58.4353), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1659.2534, 2398.5969, 45.4038, 1.3208), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1544.2542, 2470.9983, 45.3487, 291.0606), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1538.5869, 2585.3689, 45.3398, 276.2064), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1572.9132, 2678.1006, 45.3943, 241.9367), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1650.8765, 2754.4700, 45.4991, 204.2366), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1772.0437, 2758.9846, 45.5022, 158.1188), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1844.9613, 2699.1370, 45.5318, 91.8540), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1819.9763, 2621.6011, 45.5227, 84.6645), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1796.1647, 2620.0349, 45.5651, 357.4224), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1797.2832, 2590.6509, 45.6206, 190.7684), Distance = 10.0},
{Model = 'mp_m_securoguard_01', Coords = vector4(1822.2632, 2608.7876, 45.5931, 92.6341), Distance = 20.0},
},
},
SecurityCameras = {
hack = {
enable = true, -- Camera Hacking | true = false
time = 30, -- Hacking time
removeItem = false, -- Remove the item? | true = false
item = 'cam_hacking', -- Camera Hacking item
distance = 15.0 -- The player should be at this distance from camera object
},
cameras = {
[1] = {label = "Prison CAM#1", coords = vector3(1768.84, 2530.96, 50.06), r = {x = -15.0, y = 0.0, z = 42.78}, img = 'https://i.ibb.co/L1V2ypj/image.png'},
[2] = {label = "Prison CAM#2", coords = vector3(1616.35, 2522.01, 50.12), r = {x = -15.0, y = 0.0, z = 300.78}, img = 'https://i.ibb.co/ggPmDzF/image.png'},
[3] = {label = "Prison CAM#3", coords = vector3(1694.99, 2529.18, 59.00), r = {x = -15.0, y = 0.0, z = 300.78}, img = 'https://i.ibb.co/ZfQ8Rbk/image.png'},
[4] = {label = "Pacific Bank CAM#1", coords = vector3(235.35, 227.76, 113.83), r = {x = -35.0, y = 0.0, z = 220.05}, img = 'https://i.ibb.co/RzW3BG6/image.png'},
[5] = {label = "Pacific Bank CAM#2", coords = vector3(232.64, 221.82, 108.47), r = {x = -25.0, y = 0.0, z = -140.91}, img = 'https://i.ibb.co/YZZ5BXG/image.png'},
[6] = {label = "Pacific Bank CAM#3", coords = vector3(251.83, 225.38, 104.50), r = {x = -35.0, y = 0.0, z = -74.87}, img = 'https://i.ibb.co/bW8qhqx/image.png'},
[7] = {label = "Jewelery CAM#1", coords = vector3(-620.28, -224.15, 40.32), r = {x = -25.0, y = 0.0, z = 165.78}, img = 'https://i.ibb.co/WgSKLwZ/image.png'},
[8] = {label = "Jewelery CAM#2", coords = vector3(-627.47, -239.98, 40.30), r = {x = -25.0, y = 0.0, z = -10.78}, img = 'https://i.ibb.co/dtZzrWp/image.png'},
[9] = {label = "Paleto Bank #1", coords = vector3(-115.40, 6472.91, 33.00), r = {x = -25.0, y = 0.0, z = 200.1595}, img = 'https://i.ibb.co/8ryd2wF/image.png'},
[10] = {label = "Paleto Bank #2", coords = vector3(-108.02, 6462.61, 33.40), r = {x = -25.0, y = 0.0, z = 360.00}, img = 'https://i.ibb.co/SRtZtBx/image.png'},
[11] = {label = "Paleto Bank #3", coords = vector3(-104.62, 6479.42, 33.38), r = {x = -25.0, y = 0.0, z = 182.00}, img = 'https://i.ibb.co/J2XSjT4/image.png'},
[12] = {label = "Paleto Bank #4", coords = vector3(-107.89, 6468.54, 33.90), r = {x = -25.0, y = 0.0, z = 216.00}, img = 'https://i.ibb.co/1QvW9GD/image.png'},
[13] = {label = "Fleeca Bank #1", coords = vector3(146.52, -1038.20, 30.72), r = {x = -25.0, y = 0.0, z = 250.1595}, img = 'https://i.ibb.co/Z2M2x5N/image.png'},
[14] = {label = "Fleeca Bank #1", coords = vector3(150.01, -1051.31, 31.10), r = {x = -25.0, y = 0.0, z = 25.1595}, img = 'https://i.ibb.co/0nDx3P5/image.png'},
[15] = {label = "Fleeca Bank #2", coords = vector3(1179.08, 2705.60, 39.40), r = {x = -25.0, y = 0.0, z = 90.1595}, img = 'https://i.ibb.co/Z2M2x5N/image.png'},
[16] = {label = "Fleeca Bank #2", coords = vector3(1171.28, 2716.70, 39.82), r = {x = -25.0, y = 0.0, z = 225.1595}, img = 'https://i.ibb.co/0nDx3P5/image.png'},
[17] = {label = "Fleeca Bank #3", coords = vector3(-1216.80, -331.46, 39.0), r = {x = -25.0, y = 0.0, z = 290.1595}, img = 'https://i.ibb.co/Z2M2x5N/image.png'},
[18] = {label = "Fleeca Bank #3", coords = vector3(-1204.83, -337.83, 39.51), r = {x = -25.0, y = 0.0, z = 80.1595}, img = 'https://i.ibb.co/0nDx3P5/image.png'},
[19] = {label = "Fleeca Bank #4", coords = vector3(-2963.95, 478.96, 17.06), r = {x = -25.0, y = 0.0, z = 350.1595}, img = 'https://i.ibb.co/Z2M2x5N/image.png'},
[20] = {label = "Fleeca Bank #4", coords = vector3(-2952.67, 486.13, 17.47), r = {x = -25.0, y = 0.0, z = 140.1595}, img = 'https://i.ibb.co/0nDx3P5/image.png'},
[21] = {label = "Fleeca Bank #5", coords = vector3(310.85, -276.56, 55.47), r = {x = -25.0, y = 0.0, z = 250.1595}, img = 'https://i.ibb.co/Z2M2x5N/image.png'},
[22] = {label = "Fleeca Bank #5", coords = vector3(314.34, -289.67, 56.23), r = {x = -25.0, y = 0.0, z = 25.1595}, img = 'https://i.ibb.co/0nDx3P5/image.png'},
[23] = {label = "Fleeca Bank #6", coords = vector3(-354.35, -47.43, 50.69), r = {x = -25.0, y = 0.0, z = 250.1595}, img = 'https://i.ibb.co/Z2M2x5N/image.png'},
[24] = {label = "Fleeca Bank #6", coords = vector3(-350.62, -60.48, 50.76), r = {x = -25.0, y = 0.0, z = 25.1595}, img = 'https://i.ibb.co/0nDx3P5/image.png'},
},
},
-----------------------------------------------------------
-----------------------| TRANSLATE |-----------------------
-----------------------------------------------------------
MoneyForm = '$', -- Money form
-- All Licences Label
Licences = {
['weapon'] = 'Weapon Licence',
['dmv'] = 'DMV Licence',
['drive'] = 'Drive Licence',
['driver'] = 'Drive Licence',
['bike'] = 'Bike Licence',
['hunting'] = 'Hunting Licence',
['business'] = 'Business Licence',
},
Locales = {
CameraLabel = 'Left ~INPUT_CELLPHONE_LEFT~ Right ~INPUT_CELLPHONE_RIGHT~\nUp ~INPUT_CELLPHONE_UP~ Down ~INPUT_CELLPHONE_DOWN~\n~r~Cancel ~INPUT_CELLPHONE_CANCEL~',
ObjectLabel = 'Rotate Object ~INPUT_CELLPHONE_LEFT~ & ~INPUT_CELLPHONE_RIGHT~\n~b~Place Object~w~ ~INPUT_FRONTEND_RDOWN~',
Male = 'Male',
Female = 'Female',
SpeedCameraFine = 'Speed Camera - Speed:',
SpeedCameraBlipLabel = 'Speed Camera',
None = 'None',
Jail = 'Jail',
Reason = 'Reason',
Time = 'Time',
VehicleJacking = 'Vehicle Jacking',
Shooting = 'Shooting',
-- Job Menu Locales
CitizenInteractions = 'Citizen Interactions',
Search = 'Search',
Cuff = 'Cuff',
Uncuff = 'Uncuff',
Drag = 'Drag',
InOutOfVehicle = 'In/out of vehicle',
VehicleInteractions = 'Vehicle Interactions',
Lockpick = 'Lockpick',
WheelClamp = 'Wheel clamp',
Impound = 'Impound',
VehicleSearch = 'Search',
Objects = 'Objects',
Cone = 'Cone',
Barrier = 'Barrier',
Spikestrips = 'Spikestrips',
Tent = 'Tent',
Light = 'Light',
MDT = 'MDT',
Colleague = 'Colleague',
},
Texts = {
[1] = {'[E] - To open the dress menu', 38, 'Open the dress menu', 'fa-solid fa-person-half-dress'},
[2] = {'[E] - To open the armory menu', 38, 'Open the armory menu', 'fa-solid fa-shield-halved'},
[3] = {'[E] - To open the garage menu', 38, 'Open the garage menu', 'fa-solid fa-warehouse'},
[4] = {'[E] - To deposit the vehicle', 38, 'Deposit the vehicle', 'fa-solid fa-car'},
[5] = {'[E] - To Duty ON', '[E] - To Duty OFF', 38, 'To Duty', 'fa-solid fa-newspaper'},
[6] = {'[E] - Search Vehicle Trunk', 38},
[7] = {'[E] - Search Vehicle Glovebox', 38},
[8] = {'[E] - To remove Object', 38, 'Remove Object', 'fa-solid fa-trash'},
[9] = {'[E] - To start job', 38, 'Start job', 'fa-solid fa-play'},
[10] = {'[E] - To finish job', 38, 'Finish job', 'fa-solid fa-stop'},
[11] = {'[E] - To start working', 38, 'Start working', 'fa-solid fa-hammer'},
[12] = {'[E] - To escape By Tunnel', 38, 'Escape By Tunnel', 'fa-solid fa-archway'},
[13] = {'[E] - To open shop', 38, 'Open shop', 'fa-solid fa-shop'},
[14] = {'[E] - To send Player To Jail', 38, 'Send Player To Jail', 'fa-solid fa-handcuffs'},
[15] = {'[E] - To open the boss menu', 38, 'Open the boss menu', 'fa-solid fa-users-gear'},
},
-- Notify function EDITABLE >> cl_utils.lua
Notify = {
[1] = {"POLICE JOB", "No vehicle available for your rank.", 5000, "error"},
[2] = {"POLICE JOB", "You can't deposit this Vehicle.", 5000, "error"},
[3] = {"POLICE JOB", "Duty status: <b>ON", 5000, "info"},
[4] = {"POLICE JOB", "Duty status: <b>OFF", 5000, "info"},
[5] = {"POLICE JOB", "Something is in the way!", 5000, "error"},
[6] = {"POLICE JOB", "There isn't free seat in the Vehicle!", 5000, "error"},
[7] = {"POLICE JOB", "You got:", 5000, "info"},
[8] = {"POLICE JOB", "<br>You spent:<b>", 5000, "info"},
[9] = {"POLICE JOB", "You can't use it.", 5000, "error"},
[10] = {"POLICE JOB", "You don't have enough money!", 5000, "error"},
[11] = {"POLICE JOB", "<b>You have started Work!</b> Go to the Point, marked on the map! You will receive Money when you finish the Job.", 10000, "info"},
[12] = {"POLICE JOB", "Go to the Next Point, marked on the map!", 5000, "info"},
[13] = {"POLICE JOB", "The Prison Guard bringed you back!", 5000, "info"},
[14] = {"POLICE JOB", "You do not have enough cash:", 5000, "error"},
[15] = {"POLICE JOB", "The door is opening, escape!", 5000, "success"},
[16] = {"POLICE JOB", "Please DO NOT SPAM!", 8000, "error"},
[17] = {"POLICE JOB", "You aren't near to a Camera Object!", 5000, "error"},
[18] = {"POLICE JOB", "Hack FAILED!", 5000, "error"},
[19] = {"POLICE JOB", "Hack SUCCESS! The camera has been deactivated.", 5000, "success"},
[20] = {"POLICE JOB", "You have successfully repaired the Camera!", 6000, "success"},
[21] = {"POLICE JOB", "You have successfully submitted!", 6000, "success"},
[22] = {"POLICE JOB", "You have successfully created a fine!", 6000, "success"},
[23] = {"POLICE JOB", "There are no players near you!", 6000, "error"},
[24] = {"POLICE JOB", "Jail time is over!", 6000, "success"},
[25] = {"POLICE JOB", "You have successfully escaped!", 6000, "success"},
[26] = {"POLICE JOB", "You can't escape!", 6000, "error"},
[27] = {"POLICE JOB", "Citizen Call <br>Street: ", 6000, "info"},
[28] = {"POLICE JOB", "No one nearby to drag!", 6000, "error"},
[29] = {"POLICE JOB", "Someone is in the Vehicle!", 6000, "error"},
[30] = {"POLICE JOB", "You have to put a Wheel Clamp to the Wheel first.", 6000, "error"},
[31] = {"POLICE JOB", "You paid a police fine:", 5000, "info"},
[32] = {"POLICE JOB", "The player isn't available!", 5000, "info"},
[33] = {"POLICE JOB", "The player have to put up their hands!", 5000, "error"},
[34] = {"POLICE JOB", "You have to wait to send again.", 5000, "error"},
[35] = {"POLICE JOB", "You have to duty in!", 5000, "error"},
},
Progressbar = {
DutyOFF = 'Duty OFF...',
DutyON = 'Duty ON...',
Working = 'Working...',
WheelClampPlacing = 'Placing Wheel Clamp...',
Impound = 'Impound...',
Rob = 'Player Robbing...'
},
Webhooks = {
Use = true, -- Use webhooks? true / false
Locale = {
['ItemBought'] = 'Item Bought',
['CitizenCallOpen'] = 'Citizen Call - Open',
['CitizenCallClose'] = 'Citizen Call - Close',
['CitizenCallDelete'] = 'Citizen Call - Delete',
['FineCreated'] = 'Fine Created',
['Jail'] = 'Jail',
['Unjail'] = 'Unjail',
['PlayerName'] = 'Player Name',
['Identifier'] = 'Identifier',
['Items'] = 'Items',
['Text'] = 'Text',
['Callid'] = 'Call ID',
['Coords'] = 'Coords',
['Assistant'] = 'Assistant',
['CloseReason'] = 'Close Reason',
['Receiver'] = 'Receiver',
['Amount'] = 'Amount',
['Job'] = 'Job',
['Reason'] = 'Reason',
['Time'] = 'Time ⏲️'
},
-- To change a webhook color you need to set the decimal value of a color, you can use this website to do that - https://www.mathsisfun.com/hexadecimal-decimal-colors.html
Colors = {
['FineCreated'] = 3145631,
['CitizenCallOpen'] = 3145631,
['CitizenCallClose'] = 3145631,
['ItemBought'] = 3145631,
['Jail'] = 3145631,
['Unjail'] = 3145631,
}
}
} --

View file

@ -1,73 +0,0 @@
Core = nil
if Config['Core']:upper() == 'ESX' then
local _esx_ = 'new' -- 'new' / 'old'
if _esx_ then
Core = exports['es_extended']:getSharedObject()
else
while Core == nil do
TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
Citizen.Wait(0)
end
end
LoadedEvent = 'esx:playerLoaded'
onPlayerDeath = 'esx:onPlayerDeath'
JobUpdateEvent = 'esx:setJob'
TSCB = Core.TriggerServerCallback
function GetPlayerJobDatas()
return Core.GetPlayerData().job
end
function GetClosestPlayerFunction()
if not Config.ClosestDistanceIssue then
return Core.Game.GetClosestPlayer()
else
local pedCoords = GetEntityCoords(PlayerPedId())
local closestPlayer, _, targetCoords = lib.getClosestPlayer(pedCoords, 100.0)
local distance = 100.0
if closestPlayer ~= nil then
distance = #(pedCoords - targetCoords)
end
return closestPlayer, distance
end
end
function GetClosestVehicleFunction(coords, modelFilter)
if not Config.ClosestDistanceIssue then
return Core.Game.GetClosestVehicle(coords, modelFilter)
else
local pedCoords = GetEntityCoords(PlayerPedId())
local closestVehicle, targetCoords = lib.getClosestVehicle(pedCoords, 100.0, false)
local distance = 100.0
if closestVehicle ~= nil then
distance = #(pedCoords - targetCoords)
end
return closestVehicle, distance
end
end
elseif Config['Core']:upper() == 'QBCORE' then
Core = exports['qb-core']:GetCoreObject()
LoadedEvent = 'QBCore:Client:OnPlayerLoaded'
JobUpdateEvent = 'QBCore:Client:OnJobUpdate'
TSCB = Core.Functions.TriggerCallback
function GetPlayerJobDatas()
return Core.Functions.GetPlayerData().job
end
function GetClosestPlayerFunction()
return Core.Functions.GetClosestPlayer()
end
function GetClosestVehicleFunction(coords, modelFilter)
return Core.Functions.GetClosestVehicle(coords, modelFilter)
end
end

View file

@ -1,317 +0,0 @@
Core = nil
if Config['Core']:upper() == 'ESX' then
local _esx_ = 'new' -- 'new' / 'old'
if _esx_ == 'new' then
Core = exports['es_extended']:getSharedObject()
else
Core = nil
TriggerEvent('esx:getSharedObject', function(obj) Core = obj end)
while Core == nil do
Citizen.Wait(0)
end
end
RESCB = Core.RegisterServerCallback
GETPFI = Core.GetPlayerFromId
RUI = Core.RegisterUsableItem
UsersDataTable = 'users'
UserIdentifierValue = 'identifier'
VehiclesDataTable = 'owned_vehicles'
function GetIdentifier(source)
local xPlayer = GETPFI(source)
while xPlayer == nil do
Citizen.Wait(1000)
xPlayer = GETPFI(source)
end
return xPlayer.identifier
end
function GetPlayersFunction()
return Core.GetPlayers()
end
function GetPlayerJobFunction(source)
if source ~= nil then
local xPlayer = GETPFI(source)
PlayerJob = xPlayer.job.name
return PlayerJob
else
return ""
end
end
function GetPlayerByIdentifier(identifier)
return Core.GetPlayerFromIdentifier(identifier)
end
function GetAccountMoney(source,account)
local xPlayer = GETPFI(source)
if account == 'bank' then
return xPlayer.getAccount(account).money
elseif account == 'money' then
return xPlayer.getMoney()
end
end
function AddMoneyFunction(source, account, amount)
local xPlayer = GETPFI(source)
if account == 'bank' then
xPlayer.addAccountMoney('bank', amount)
elseif account == 'money' then
xPlayer.addMoney(amount)
end
end
function RemoveAccountMoney(source, account, amount)
local xPlayer = GETPFI(source)
if account == 'bank' then
xPlayer.removeAccountMoney('bank', amount)
elseif account == 'money' then
xPlayer.removeMoney(amount)
end
end
function GetItemCount(source, item)
local xPlayer = GETPFI(source)
if xPlayer.getInventoryItem(item) ~= nil then
if _esx_ == 'new' then
return xPlayer.getInventoryItem(item).count
else
if string.sub(item, 0, 6):lower() == 'weapon' then
local loadoutNum, weapon = xPlayer.getWeapon(item:upper())
if weapon then
return true
else
return false
end
else
return xPlayer.getInventoryItem(item).count
end
end
else
print("^1PROBLEM!^3 The ^7items ^3are not created. Create them from our documentation. https://docs.brutalscripts.com/site/scripts/police-job/installation-guide")
end
end
function RemoveItem(source, item, amount)
local xPlayer = GETPFI(source)
if _esx_ == 'new' then
xPlayer.removeInventoryItem(item, amount)
else
if string.sub(item, 0, 6):lower() == 'weapon' then
xPlayer.removeWeapon(item)
else
xPlayer.removeInventoryItem(item, amount)
end
end
end
function AddItem(source, item, count)
local xPlayer = GETPFI(source)
if _esx_ == 'new' then
xPlayer.addInventoryItem(item, count)
else
if string.sub(item, 0, 6):lower() == 'weapon' then
xPlayer.addWeapon(item, 90)
else
xPlayer.addInventoryItem(item, count)
end
end
end
function GetPlayerNameFunction(source)
local name
if Config.SteamName then
name = GetPlayerName(source)
else
local xPlayer = GETPFI(source)
name = xPlayer.getName() or 'No Data'
end
return name
end
function GetPlayerSex(source)
local xPlayer = GETPFI(source)
return xPlayer.get("sex")
end
function ClearInventory(source)
local xPlayer = GETPFI(source)
local src = source
if InventorySaves[src] == nil then
InventorySaves[src] = {}
end
for i=1, #xPlayer.inventory, 1 do
if xPlayer.inventory[i] ~= nil and xPlayer.inventory[i].name ~= nil then
local amount = 0
if xPlayer.inventory[i].count ~= nil then
amount = xPlayer.inventory[i].count
elseif xPlayer.inventory[i].amount ~= nil then
amount = xPlayer.inventory[i].amount
end
table.insert(InventorySaves[src], {item = xPlayer.inventory[i].name, amount = amount})
xPlayer.setInventoryItem(xPlayer.inventory[i].name, 0)
end
end
end
elseif Config['Core']:upper() == 'QBCORE' then
Core = exports['qb-core']:GetCoreObject()
RESCB = Core.Functions.CreateCallback
GETPFI = Core.Functions.GetPlayer
RUI = Core.Functions.CreateUseableItem
UsersDataTable = 'players'
UserIdentifierValue = 'citizenid'
VehiclesDataTable = 'player_vehicles'
function GetIdentifier(source)
local xPlayer = GETPFI(source)
while xPlayer == nil do
Citizen.Wait(1000)
xPlayer = GETPFI(source)
end
return xPlayer.PlayerData.citizenid
end
function GetPlayerByIdentifier(identifier)
return Core.Functions.GetPlayerByCitizenId(identifier)
end
function GetPlayersFunction()
return Core.Functions.GetPlayers()
end
function GetPlayerJobFunction(source)
local xPlayer = GETPFI(source)
PlayerJob = xPlayer.PlayerData.job.name
return PlayerJob
end
function GetAccountMoney(source, account)
local xPlayer = GETPFI(source)
if account == 'bank' then
return xPlayer.PlayerData.money.bank
elseif account == 'money' then
return xPlayer.PlayerData.money.cash
end
end
function AddMoneyFunction(source, account, amount)
local xPlayer = GETPFI(source)
if account == 'bank' then
xPlayer.Functions.AddMoney('bank', amount)
elseif account == 'money' then
xPlayer.Functions.AddMoney('cash', amount)
end
end
function GetItemCount(source, item)
local xPlayer = GETPFI(source)
local items = xPlayer.Functions.GetItemByName(item)
local item_count = 0
if items ~= nil then
item_count = items.amount
else
item_count = 0
end
return item_count
end
function RemoveAccountMoney(source, account, amount)
local xPlayer = GETPFI(source)
if account == 'bank' then
xPlayer.Functions.RemoveMoney('bank', amount)
elseif account == 'money' then
xPlayer.Functions.RemoveMoney('cash', amount)
end
end
function RemoveItem(source, item, amount)
local xPlayer = GETPFI(source)
xPlayer.Functions.RemoveItem(item, amount)
end
function AddItem(source, item, count, info)
local xPlayer = GETPFI(source)
info = info or nil
xPlayer.Functions.AddItem(item, count, nil, info)
end
function GetPlayerNameFunction(source)
local name
if Config.SteamName then
name = GetPlayerName(source)
else
local xPlayer = GETPFI(source)
name = xPlayer.PlayerData.charinfo.firstname..' '..xPlayer.PlayerData.charinfo.lastname
end
return name
end
function GetPlayerSex(source)
local xPlayer = GETPFI(source)
local sex = xPlayer.PlayerData.charinfo.gender
if sex == 0 then
sex = 'm'
else
sex = 'f'
end
return sex
end
function SetHandCuffMetadata(source, isHandcuffed)
local xPlayer = GETPFI(source)
xPlayer.Functions.SetMetaData('ishandcuffed', isHandcuffed)
end
function GetPlayerDeathMetaData(source)
local xPlayer = GETPFI(source)
return xPlayer.PlayerData.metadata['isdead']
end
function ClearInventory(source)
local xPlayer = GETPFI(source)
local src = source
if InventorySaves[src] == nil then
InventorySaves[src] = {}
end
local playerItems = xPlayer.PlayerData.items
for _, item in pairs(playerItems) do
if item ~= nil and item.name ~= nil then
local amount = 0
if item.amount ~= nil then
amount = item.amount
elseif item.count ~= nil then
amount = item.count
end
local info = nil
if item.info ~= nil then
info = item.info
elseif item.metadata ~= nil then
info = item.metadata
end
table.insert(InventorySaves[src], {item = item.name, amount = amount, info = info})
xPlayer.Functions.RemoveItem(item.name, amount)
end
end
end
end

View file

@ -1,77 +0,0 @@
fx_version 'cerulean'
games { 'gta5' }
lua54 'yes'
author 'Keres & Dév'
description 'Brutal Police Job - store.brutalscripts.com'
version '1.5.6'
data_file 'DLC_ITYP_REQUEST' 'stream/clamp.ytyp'
client_scripts {
'config.lua',
'core/client-core.lua',
'cl_utils.lua',
'client/*.lua'
}
server_scripts {
'@mysql-async/lib/MySQL.lua',
'config.lua',
'core/server-core.lua',
'sv_utils.lua',
'server/*.lua'
}
shared_script {
'@ox_lib/init.lua'
}
export 'getAvailableCopsCount'
export 'IsHandcuffed'
ui_page "html/index.html"
files {
"html/index.html",
"html/style.css",
"html/script.js",
"html/assets/*.png",
}
provides { 'esx_policejob', 'qb-policejob' }
dependencies {
'/server:5181', -- ⚠PLEASE READ⚠; Requires at least SERVER build 5181
'/gameBuild:2189', -- ⚠PLEASE READ⚠; Requires at least GAME build 2189.
}
escrow_ignore {
'config.lua',
'sv_utils.lua',
'cl_utils.lua',
'core/client-core.lua',
'core/server-core.lua',
}
--[[
-- locked
escrow_ignore {
'config.lua',
'sv_utils.lua',
'cl_utils.lua',
'core/client-core.lua',
'core/server-core.lua',
}
-- open
escrow_ignore {
'config.lua',
'sv_utils.lua',
'cl_utils.lua',
'core/client-core.lua',
'core/server-core.lua',
'client/client.lua',
'server/server.lua',
}
--]]
dependency '/assetpacks'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 880 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

View file

@ -1,456 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.css"></link>
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js" integrity="sha256-VazP97ZCwtekAsvgPBSUwPFKdrwD3unUfSGVYrahUqU=" crossorigin="anonymous"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-KK94CHFLLe+nY2dmCWGMq91rCGa5gtU4mk92HdvYe+M/SXH301p5ILy+dN9+nJOZ" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/quill@2.0.0-rc.2/dist/quill.js"></script>
<link href="https://cdn.jsdelivr.net/npm/quill@2.0.0-rc.2/dist/quill.snow.css" rel="stylesheet">
<title>Brutal Police Job</title>
</head>
<body style="background: none;">
<div class="police_menu" id="police_menu">
<div class="circle_container">
</div>
<div class="circles_label"></div>
</div>
<div class="interactions" id="interactions">
<div class="label mx-auto d-block mt-3">
<h2>Interactions</h2>
<div class="background_effect"></div>
</div>
<div class="int_con mt-3">
<div class="row row-cols-1">
<div class="int_con_sec">
</div>
</div>
</div>
</div>
<div class="shop">
<button class="details_btn px-3 m-3 float-end" id="shop_back" onclick="CloseShop(), CreateArmoryMenu()">back <i class="fa-solid fa-chevron-right"></i></button>
<h2 class="mt-3">SHOP</h2>
<div class="shop_elements_container row row-cols-3">
</div>
<div class="checkout_container">
<hr>
<h3>TOTAL: 0<money>$</money></h3>
<button class="buy_btn" onclick="BuyInShop()">BUY</button>
</div>
<div class="slider_btn" id="shop_slider" onclick="ChangeSliderbtn(id)">
<div class="slider" id="slider_shop"></div>
<div class="row button_container">
<div class="col"><i class="fa-solid fa-wallet"></i></div>
<div class="col"><i class="fa-solid fa-building-columns"></i></div>
</div>
</div>
</div>
<div class="MDT" id="MDT">
<img class="LSDP_logo_img" src="assets/LSPD.png"></img>
<div class="control_btn_container">
<div class="row row-cols-1">
<div class="col">
<button class="control_btn mt-2 mx-auto d-block" id="home" onclick="SwitchPage(id)">
<i class="fa-solid fa-house"></i>
<div class="background_effect"></div>
</button>
<hr class="mt-3 mb-0">
</div>
<div class="col">
<button class="control_btn mt-3 mx-auto d-block" id="search" onclick="SwitchPage(id)">
<i class="fa-solid fa-magnifying-glass"></i>
<div class="background_effect"></div>
</button>
</div>
<div class="col">
<button class="control_btn mt-3 mx-auto d-block" id="camera" onclick="SwitchPage(id)">
<i class="fa-solid fa-video"></i>
<div class="background_effect"></div>
</button>
</div>
<div class="col">
<button class="control_btn mt-3 mx-auto d-block" id="sos_alert" onclick="SwitchPage(id)">
<i class="fa-solid fa-bell"></i>
<div class="background_effect"></div>
</button>
</div>
<div class="col">
<button class="control_btn mt-3 mx-auto d-block" id="incidents" onclick="SwitchPage(id)">
<i class="fa-solid fa-newspaper"></i>
<div class="background_effect"></div>
</button>
</div>
</div>
</div>
<div style="margin-left: 100px; padding: 10px;">
<div class="page_data_container">
<div class="home_label mt-3">
<div class="row">
<div class="col ms-3 mt-1" id="job_name"></div>
<div class="col-2 mt-1" id="home_date">date 213 23</div>
<div class="col me-3 mt-1 text-end" id="street"></div>
</div>
</div>
<div class="row mt-3 mx-2">
<div class="col">
<div class="home_stat_con mx-auto d-block">
<div class="label">Cops</div>
<div class="main" id="available_cops">0</div>
</div>
</div>
<div class="col">
<div class="home_stat_con mx-auto d-block">
<div class="label">Rank</div>
<div class="main small" id="player_rang"></div>
</div>
</div>
<div class="col">
<div class="home_stat_con mx-auto d-block">
<div class="label">Salary</div>
<div class="main" id="salary">100$</div>
</div>
</div>
</div>
<div class="welcome_text mt-3">Welcome,<br> <span class="hand_written">Name</span></div>
</div>
</div>
</div>
<div class="cam_menu">
<div class="cam_online px-3"><i class="fa-solid fa-circle fa-fade my-2"></i> online</div>
<div class="cam_label px-3">Cam name</div>
</div>
<div class="vehicle_menu">
<div class="vehicle_control" id="vehicle_control">
<div class="row mx-1">
<div class="col p-0">
<div class="vehicle_btn mx-auto d-block" id="plate">
<i class="fa-solid fa-mattress-pillow"></i>
<h4>PLT</h4>
</div>
</div>
<div class="col p-0">
<div class="vehicle_btn mx-auto d-block" id="siren">
<i class="fa-solid fa-volume-high"></i>
<h4>SRN</h4>
</div>
</div>
<div class="col p-0">
<div class="vehicle_btn mx-auto d-block" id="horn">
<i class="fa-solid fa-bullhorn"></i>
<h4>HORN</h4>
</div>
</div>
<div class="col p-0">
<div class="vehicle_btn mx-auto d-block" id="light">
<i class="fa-solid fa-lightbulb"></i>
<h4>LGHT</h4>
</div>
</div>
</div>
</div>
<div class="plate_reader" id="plate_reader">
<div class="indicator" id="top"></div>
<div class="indicator" id="bottom"></div>
<h4>FRONT</h4>
<div class="row mx-1 mb-2">
<div class="col">
<div class="veh_speed mx-auto d-block" id="front_speed">0</div>
</div>
<div class="col">
<div class="veh_plate mx-auto d-block" id="front_plate">None</div>
</div>
</div>
<h4>REAR</h4>
<div class="row mx-1">
<div class="col">
<div class="veh_speed mx-auto d-block" id="rear_speed">0</div>
</div>
<div class="col">
<div class="veh_plate mx-auto d-block" id="rear_plate">None</div>
</div>
</div>
</div>
</div>
<div class="speeding_notify" id="speeding_notify">
<div class="title">SPEEDING</div>
<div class="main_text"><span class="your_speed"></span><span class="speed_limit"></span></div>
<div class="fine"></div>
</div>
<div class="jail_hud">
<h3>Remained time: <span class="minutes"></span></h3>
</div>
<div class="basic_container" id="create_citizen_call">
<div class="label">Citizen Call
<div class="background_effect"></div>
</div>
<div class="input-group mt-3 px-3 h-50">
<textarea class="form-control" id="in_citizen_call_reason" placeholder="Type your problem..." oninput="RefreshCreateCallBTN()"></textarea>
</div>
<button class="submenu_btn px-3 mt-3 mx-auto d-block" id="create_call_btn" disabled onclick="CreateCall()">Create</button>
</div>
<div class="basic_container" id="area_lock">
<div class="label">Lock Area
<div class="background_effect"></div>
</div>
<div class="input-group input-group-lg mt-3 px-3">
<input type="text" id="area_lock_label" class="form-control text-center" placeholder="Label..." oninput="RefreshCreateLockBTN()" style="background-color: rgb(61, 61, 61);">
</div>
<div class="item_con mt-3 mx-auto d-block">
<h4>Minutes</h4>
<input type="range" class="range mx-auto d-block" value="1" min="1" max="30" id="min_area_lock" oninput="SyncDataMin(id)">
<h6 class="range_number" id="range_min_number">1min</h6>
</div>
<div class="item_con mt-3 mx-auto d-block">
<h4>Range</h4>
<input type="range" class="range mx-auto d-block" value="20" min="20" max="150" id="range_area_lock" oninput="SyncDataRange(id)">
<h6 class="range_number" id="range_number">20m</h6>
</div>
<div class="item_con mt-3 mx-auto d-block">
<h4>Blip</h4>
<div class="row">
<div class="col"><button class="blip_btn active_btn mx-auto d-block" id="456" onclick="ChangeBlipBTN(id)"><img src="assets/blip_1.png"></button></div>
<div class="col"><button class="blip_btn mx-auto d-block" id="163" onclick="ChangeBlipBTN(id)"><img src="assets/blip_2.png"></button></div>
<div class="col"><button class="blip_btn mx-auto d-block" id="364" onclick="ChangeBlipBTN(id)"><img src="assets/blip_3.png"></button></div>
</div>
</div>
<button class="submenu_btn px-3 mt-3 mx-auto d-block" id="create_lock_btn" disabled onclick="CreateLock()">Create</button>
</div>
<div class="vehicle_livery" id="vehicle_livery">
<div class="val_con mx-auto d-block px-3" id="livery"></div>
<h5>You can change the livery with the ⬅️ and ➡️</h5>
</div>
<div class="delete_object px-3 py-2" id="delete_object">
<h5>Deleting objects</h5>
<div class="background_effect"></div>
</div>
<div class="modal fade" id="details_modal">
<div class="modal-dialog modal-dialog-centered modal-lg">
<div class="modal-content pb-2" style="background: var(--secondary_color); border-radius: 13px; color: var(--text_color);">
<div class="modal-body">
<div class="row">
<div class="col"><button class="details_btn float-start px-3" data-bs-dismiss="modal"><i class="fa-solid fa-chevron-left"></i> Back</button></div>
<div class="col"><h2 class="modal-title me-3 text-end" id="title_text">Person details</h2></div>
</div>
<div class="datas_container">
</div>
<div class="mt-2">
<div class="notes_label">
<div class="row">
<div class="col">
<h3 class="mt-1"><b>Notes</b></h3>
</div>
<div class="col">
<button class="details_btn px-3 me-2 float-end" id="none" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#note_modal">New note</button>
</div>
</div>
</div>
<div class="notes_container mt-3">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="jail_reason_modal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-md" style="width: 400px;">
<div class="modal-content pb-2" style="background: var(--secondary_color); border-radius: 13px; color: var(--text_color);">
<div class="modal-body">
<div class="modal_header">
<button class="details_btn m-1 float-start px-3" id="jail_back_btn" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#details_modal"><i class="fa-solid fa-chevron-left"></i> Back</button>
<h2 class="modal-title float-end me-3 text-center" id="title_text">Jail</h2>
<div class="background_effect"></div>
</div>
<div class="input-group input-group-lg mt-3">
<input type="text" id="in_jail_time" class="form-control mx-3" placeholder="Time..." oninput="RefreshJailBTN()" onkeypress="return isNumber(event)" style="background-color: rgb(72, 72, 72);">
</div>
<div class="input-group mt-3">
<textarea class="form-control mx-3" id="in_jail_reason" placeholder="Reason..." oninput="RefreshJailBTN()"></textarea>
</div>
<button class="submenu_btn px-3 mt-3 mx-auto d-block" id="jail_btn" disabled data-bs-dismiss="modal" onclick="SendJail()">Jail</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="fine_modal">
<div class="modal-dialog modal-dialog-centered modal-md" style="width: 400px;">
<div class="modal-content pb-2" style="background: var(--secondary_color); border-radius: 13px; color: var(--text_color);">
<div class="modal-body">
<div class="modal_header mx-auto d-block">
<button class="details_btn m-1 float-start px-3" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#details_modal"><i class="fa-solid fa-chevron-left"></i> Back</button>
<h2 class="modal-title float-end me-3 text-center" id="title_text">Create fine</h2>
<div class="background_effect"></div>
</div>
<div class="input-group input-group-lg mt-3">
<input type="text" id="in_fine_name" placeholder="Label..." class="form-control mx-3" oninput="RefreshFineBTN()" style="background-color: rgb(72, 72, 72);">
</div>
<div class="input-group input-group-lg mt-3">
<input type="text" id="in_fine_amount" placeholder="Amount..." class="form-control mx-3" oninput="RefreshFineBTN()" onkeypress="return isNumber(event)" style="background-color: rgb(72, 72, 72);">
</div>
<button class="submenu_btn px-3 mt-3 mx-auto d-block" id="fine_btn" disabled data-bs-dismiss="modal" onclick="SendFine()">Create</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="player_fines_modal">
<div class="modal-dialog modal-dialog-centered modal-md">
<div class="modal-content pb-2" style="background: var(--secondary_color); border-radius: 13px; color: var(--text_color);">
<div class="modal-body">
<div class="modal_header mx-auto d-block">
<button class="details_btn m-1 float-start px-3" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#details_modal"><i class="fa-solid fa-chevron-left"></i> Back</button>
<h2 class="modal-title float-end me-3 text-center" id="title_text">Fines</h2>
<div class="background_effect"></div>
</div>
<div class="fine_title_container mt-3">
<div class="row">
<div class="col d-flex align-items-center justify-content-center">
<h2 class="my-1" id="fines_all">All: -</h2>
</div>
<div class="col d-flex align-items-center justify-content-center">
<h2 class="my-1" id="fines_count">Count: -</h2>
</div>
</div>
</div>
<div class="fines_container">
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="player_incidents_modal">
<div class="modal-dialog modal-dialog-centered modal-md">
<div class="modal-content pb-2" style="background: var(--secondary_color); border-radius: 13px; color: var(--text_color);">
<div class="modal-body">
<div class="modal_header mx-auto d-block">
<button class="details_btn m-1 float-start px-3" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#details_modal"><i class="fa-solid fa-chevron-left"></i> Back</button>
<h2 class="modal-title float-end me-3 text-center" id="title_text">Incidents</h2>
<div class="background_effect"></div>
</div>
<div class="incidents_container mt-3">
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="call_modal">
<div class="modal-dialog modal-dialog-centered modal-md">
<div class="modal-content pb-2" style="background: var(--secondary_color); border-radius: 13px; color: var(--text_color);">
<div class="modal-body">
<div class="modal_header mx-auto d-block">
<div class="background_effect"></div>
<div class="row">
<div class="col"><button class="details_btn m-1 float-start px-3" data-bs-dismiss="modal"><i class="fa-solid fa-chevron-left"></i> Back</button></div>
<div class="col-5"><h2 class="modal-title mx-auto d-block text-center" id="title_text">Citizen call</h2></div>
<div class="col"><button class="details_btn px-3 m-1 float-end" onclick="SendPinOnMap()"><i class="fa-solid fa-location-dot"></i> Pin</button></div>
</div>
</div>
<div class="call_actions_container">
<div class="item_con mt-3 mx-auto d-block">
<button class="submenu_btn px-3 my-3 mx-auto d-block" onclick="SendPinOnMap()">Pin on map</button>
</div>
<div class="input-group mt-3 call_reason_con">
<textarea class="form-control" id="in_call_reason" oninput="RefreshCloseCallBTN()" placeholder="Reason to close"></textarea>
</div>
<button class="submenu_btn px-3 my-3 mx-auto d-block" id="close_call" onclick="CloseCall()" disabled>Close</button>
</div>
<h3 class="text-white text-center mt-3" id="involved">Policemans involved</h3>
<div class="involved_container mx-auto d-block">
</div>
</div>
</div>
</div>
</div>
<div class="modal fade" id="note_modal">
<div class="modal-dialog modal-dialog-centered modal-md" style="width: 400px;">
<div class="modal-content pb-2" style="background: var(--secondary_color); border-radius: 13px; color: var(--text_color);">
<div class="modal-body">
<div class="modal_header mx-auto d-block">
<button class="details_btn m-1 float-start px-3" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#details_modal"><i class="fa-solid fa-chevron-left"></i> Back</button>
<h2 class="modal-title float-end me-3 text-center" id="title_text">Create note</h2>
<div class="background_effect"></div>
</div>
<div class="input-group mt-3">
<textarea class="form-control mx-3" id="in_note" placeholder="Write something..." oninput="RefreshNoteBTN()"></textarea>
</div>
<button class="submenu_btn px-3 mt-3 mx-auto d-block" id="note_btn" disabled data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#details_modal" onclick="CreateNote()">Create</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="add_img_modal">
<div class="modal-dialog modal-dialog-centered modal-md" style="width: 400px;">
<div class="modal-content pb-2" style="background: var(--secondary_color); border-radius: 13px; color: var(--text_color);">
<div class="modal-body">
<div class="modal_header mx-auto d-block">
<button class="details_btn m-1 float-start px-3" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#details_modal"><i class="fa-solid fa-chevron-left"></i> Back</button>
<h2 class="modal-title float-end me-3 text-center" id="title_text">Edit IMG</h2>
<div class="background_effect"></div>
</div>
<div class="input-group mt-3">
<textarea class="form-control" placeholder="Add the URL.." id="in_add_img"></textarea>
</div>
<button class="submenu_btn px-3 mt-3 mx-auto d-block" id="note_btn" data-bs-dismiss="modal" data-bs-toggle="modal" data-bs-target="#details_modal" onclick="AddIMG()">Add</button>
</div>
</div>
</div>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-3-typeahead/4.0.2/bootstrap3-typeahead.min.js">
</script>
<script src="script.js"></script>
</html>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,61 +0,0 @@
local YourWebhook = 'WEBHOOK-HERE' -- help: https://docs.brutalscripts.com/site/others/discord-webhook
function GetWebhook()
return YourWebhook
end
-- Buy here: (4€+VAT) https://store.brutalscripts.com
function notification(source, title, text, time, type)
if Config.BrutalNotify then
TriggerClientEvent('brutal_notify:SendAlert', source, title, text, time, type)
else
TriggerClientEvent('brutal_policejob:client:DefaultNotify', text)
end
end
function ClearPlayerInventory(source)
if Config.Inventory:lower() == 'ox_inventory' then
exports.ox_inventory:ClearInventory(source)
elseif Config.Inventory:lower() == 'quasar_inventory' then
local saveItems = {
'id_card', -- Add here the items that you do NOT want to be deleted
'phone',
}
exports['qs-inventory']:ClearInventory(source, saveItems)
local weapons = exports['qs-inventory']:GetWeaponList()
for k,v in pairs(weapons) do
RemoveItem(source, v.name, 1)
end
elseif Config.Inventory:lower() == 'chezza_inventory' then
local ESX = Core
local xPlayer = ESX.GetPlayerFromId(source)
exports.inventory:clearInventory(xPlayer, true)
elseif Config.Inventory:lower() == 'codem_inventory' then
exports['codem-inventory']:ClearInventory(source)
elseif Config.Inventory:lower() == 'qb_inventory' then
exports['qb-inventory']:ClearInventory(source)
elseif Config.Inventory:lower() == 'origen_inventory' then
exports.origen_inventory:ClearInventory(source)
elseif Config.Inventory:lower() == 'ps-inventory' then
exports['ps-inventory']:ClearInventory(source)
elseif Config['Core']:upper() == 'ESX' then
local ESX = Core
local xPlayer = ESX.GetPlayerFromId(source)
for i=1, #xPlayer.inventory, 1 do
if xPlayer.inventory[i].count > 0 then
xPlayer.setInventoryItem(xPlayer.inventory[i].name, 0)
end
end
end
end
function SocietyAddMoney(job, price)
if Config['Core']:upper() == 'ESX' then
local society = exports['esx_society']:GetSociety(job)
TriggerEvent('esx_addonaccount:getSharedAccount', society.account, function(account)
account.addMoney(price)
end)
else
exports['qb-management']:AddMoney(job, price)
end
end

View file

@ -1,42 +0,0 @@
{
"Lua.diagnostics.globals": [
"openCatalogue",
"lib",
"cache",
"testVehicle",
"locale",
"buyVehicle",
"createBlip",
"loadModel",
"createSphereZoneTarget",
"createEntityTarget",
"managementMenu",
"notify",
"hideTextUI",
"spawnVehicle",
"qbx",
"createShowroomVehicle",
"getPlayerJob",
"QBX",
"isPlayerJobBoss",
"openMenu",
"generatePlate",
"getPlayersFromCoords",
"openDashboard",
"MySQL",
"addAccountMoney",
"removeAccountMoney",
"getAccountMoney",
"createLog",
"addVehicleToGarage",
"vehicle",
"description",
"removeVehicleKeys",
"createDealerships",
"spawnObj",
"currentImportData"
],
"Lua.diagnostics.disable": [
"param-type-mismatch"
]
}

View file

@ -1,201 +0,0 @@
---@param coords vector
---@param sprite integer
---@param display integer
---@param scale number
---@param color integer
---@param label string
---@return integer
createBlip = function(coords, sprite, display, scale, color, label)
local blip = AddBlipForCoord(coords.x, coords.y, coords.z)
SetBlipSprite(blip, sprite)
SetBlipDisplay(blip, display)
SetBlipAsShortRange(blip, true)
SetBlipScale(blip, scale)
SetBlipColour(blip, color)
BeginTextCommandSetBlipName("STRING")
AddTextComponentSubstringPlayerName(label)
EndTextCommandSetBlipName(blip)
return blip
end
---@param model string
loadModel = function(model)
local time = 1000
if not HasModelLoaded(model) then
while not HasModelLoaded(model) do
if time > 0 then time = time - 1 RequestModel(model) else time = 1000 break end Wait(10)
end
end
end
---@param coords vector
---@param radius number
---@param options table
---@param distance number
---@param name string
---@return unknown
createSphereZoneTarget = function(coords, radius, options, distance, name)
if Config.target == 'ox_target' then
return exports.ox_target:addSphereZone({ debug = Config.debug, coords = coords, radius = radius, options = options })
elseif Config.target == 'interact' then
return exports.interact:AddInteraction({ coords = vec3(coords.x, coords.y, coords.z), distance = 1.0, interactDst = 1.0, id = name, name = name, options = options })
else
-- Here we use Box Zone cause qb-target Sphere Zone does not exists and the Circle Zone is the big shit ever made
return exports[Config.target]:AddBoxZone(name, coords, radius, radius, { debugPoly = Config.debug, name = name, minZ = coords.z-radius, maxZ = coords.z+radius }, { options = options, distance = distance })
end
end
---@param entity integer
---@param options table
---@param distance number
---@param name string
---@return unknown
createEntityTarget = function(entity, options, distance, name)
if Config.target == 'ox_target' then
return exports.ox_target:addLocalEntity(entity, options)
elseif Config.target == 'interact' then
return exports.interact:AddLocalEntityInteraction({ entity = entity, name = name, id = name, distance = 1.0, interactDst = 1.0, options = options })
else
return exports[Config.target]:AddTargetEntity(entity, { name = name, options = options, distance = distance })
end
end
managementMenu = function()
if Config.framework == 'qb' then
TriggerEvent('qb-bossmenu:client:OpenMenu')
elseif Config.framework == 'qbx' then
exports.qbx_management:OpenBossMenu('job')
elseif Config.framework == 'esx' then
TriggerEvent('esx_society:openBossMenu', getPlayerJob(), false, {wash = false})
end
end
---@param message string
---@param type string
notify = function(message, type)
lib.notify({ description = message, type = type })
end
hideTextUI = function()
exports.mt_lib:hideTextUI()
end
---@param model any
---@param coords vector
---@param plate string | nil
---@return any
spawnVehicle = function(model, coords, plate)
coords = vec4(coords.x, coords.y, coords.z, coords.w or GetEntityHeading(cache.ped))
model = type(model) == 'string' and joaat(model) or model
if not IsModelInCdimage(model) then return end
loadModel(model)
local veh = CreateVehicle(model, coords.x, coords.y, coords.z, coords.w, true, false)
local netid = NetworkGetNetworkIdFromEntity(veh)
SetVehicleHasBeenOwnedByPlayer(veh, true)
SetNetworkIdCanMigrate(netid, true)
SetVehicleNeedsToBeHotwired(veh, false)
SetVehRadioStation(veh, 'OFF')
SetVehicleFuelLevel(veh, 100.0)
SetVehicleNumberPlateText(veh, plate or 'PDM')
SetModelAsNoLongerNeeded(model)
local plate = Config.framework == 'qbx' and qbx.getVehiclePlate(veh) or GetVehicleNumberPlateText(veh)
if Config.keys == 'qs-vehiclekeys' then
exports['qs-vehiclekeys']:GiveKeys(plate, GetDisplayNameFromVehicleModel(GetEntityModel(veh)), true)
elseif Config.keys == 'mk_vehiclekeys' then
exports[Config.keys]:AddKey(veh)
elseif Config.keys == 'Renewed-Vehiclekeys' then
exports['Renewed-Vehiclekeys']:addKey(plate)
elseif Config.keys == 'MrNewbVehicleKeys' then
exports.MrNewbVehicleKeys:GiveKeys(veh)
else
TriggerEvent("vehiclekeys:client:SetOwner", plate)
end
return veh
end
---@param model string
---@param coords vector
---@param color integer
---@return integer
createShowroomVehicle = function(model, coords, color)
loadModel(model)
Wait(100)
local veh = CreateVehicle(model, coords.x, coords.y, coords.z, coords.w, false, false)
Wait(500)
SetModelAsNoLongerNeeded(model)
SetEntityInvincible(veh, true)
SetVehicleDirtLevel(veh, 0.0)
SetVehicleDoorsLocked(veh, 3)
SetVehicleNumberPlateText(veh, 'PDM')
SetVehicleColours(veh, color, color)
SetVehicleExtraColours(veh, color, 0)
return veh
end
getPlayerJob = function()
if Config.framework == 'qb' then
local PlayerData = Config.core.Functions.GetPlayerData()
return PlayerData.job.name
elseif Config.framework == 'qbx' then
return QBX.PlayerData.job.name
elseif Config.framework == 'esx' then
return lib.callback.await('mt_dealerships:server:getPlayerJobESX', false)
end
end
isPlayerJobBoss = function()
if Config.framework == 'qb' then
local PlayerData = Config.core.Functions.GetPlayerData()
return PlayerData.job.isboss
elseif Config.framework == 'qbx' then
return QBX.PlayerData.job.isboss
elseif Config.framework == 'esx' then
return lib.callback.await('mt_dealerships:server:getPlayerJobIsBossESX', false)
end
end
---@param menu table
openMenu = function(menu)
lib.registerContext(menu)
lib.showContext(menu.id)
end
---@return string
generatePlate = function()
local plate = ""
local chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
for i = 1, 8 do
local randIndex = math.random(1, #chars)
plate = plate..chars:sub(randIndex, randIndex)
end
return plate
end
---@param coords vector
---@param distance number
---@return table
getPlayersFromCoords = function(coords, distance)
coords = type(coords) == 'table' and vec3(coords.x, coords.y, coords.z) or coords or GetEntityCoords(cache.ped)
local players = lib.getNearbyPlayers(coords, distance or 5, true)
for i = 1, #players do players[i] = players[i].id end
return players
end
---@param veh integer
removeVehicleKeys = function(veh)
if Config.keys == 'Renewed-Vehiclekeys' then
local plate = Config.framework == 'qbx' and qbx.getVehiclePlate(veh) or GetVehicleNumberPlateText(veh)
exports['Renewed-Vehiclekeys']:removeKey(plate)
end
end
---@param modelHash string
---@param coords vector
spawnObj = function(modelHash, coords)
loadModel(modelHash)
Wait(100)
local obj = CreateObject(modelHash, coords.x, coords.y, coords.z, false, false, false)
Wait(100)
SetEntityHeading(obj, coords.w)
PlaceObjectOnGroundProperly(obj)
end

View file

@ -1,29 +0,0 @@
Config = Config or {}
-- For more info check: https://mt-scripts-documentations.gitbook.io/mt-script-documentation/
Config.debug = false -- if true it'll print some debug on F8/console and active all zones debug
Config.framework = 'qbx' -- qb, qbx, esx (need to change the export on the Config.core)
Config.core = exports['qb-core']:GetCoreObject() -- Your core export (for qb is exports['qb-core']:GetCoreObject()) (for esx is exports.es_extended:getSharedObject()) (for qbx you can just delete this line and add '@qbx_core/modules/playerdata.lua', to the fxmanifest.lua client_scripts)
Config.target = 'ox_target' -- ox_target, qb-target, interact, ...
Config.banking = 'Renewed-Banking' -- qb-banking, Renewed-Banking, (can change at server/functions.lua) ...
Config.keys = 'qbx_vehiclekeys' -- qb-vehiclekeys, qbx_vehiclekeys, mk_vehiclekeys, qs-vehiclekeys
Config.locale = 'en'
Config.useTabletAnimation = true
Config.mInsurance = {
enable = true, -- Enable use m-Insurance?
inventory = "qb", -- "qb" or "ox" | If you use esx leave this "ox"
}
Config.webhooks = {
vehicleImported = '',
vehicleBought = '',
adminCommand = ''
}
Config.commands = {
addStock = { command = 'addstock', restricted = 'group.admin' },
removeStock = { command = 'removestock', restricted = 'group.admin' },
}

View file

@ -1,636 +0,0 @@
Config.vehicles = Config.vehicles or {}
local vehicles = { -- Vehicle list, credits to qb-core!
{
model = 'asbo', -- This has to match the spawn code of the vehicle
name = 'Asbo', -- This is the display of the vehicle
brand = 'Maxwell', -- This is the vehicle's brand
price = 4000, -- The price that the vehicle sells for
category = 'compacts', -- Category of the vehilce, stick with GetVehicleClass() options https://docs.fivem.net/natives/?_0x29439776AAA00A62
shop = { 'cardealer', 'fmpdm', 'laryscars' }, -- Can be a single shop or multiple shops. For multiple shops for example {'shopname1','shopname2','shopname3'}
class = 'C', -- This is the vehicle class, can be D, C, B, A, S or X (optional)
seats = 2, -- Number of seats (optional)
weight = 50, -- Vehicle trunk weight or total weight includin glove box (optional)
},
{ model = 'blista', name = 'Blista', brand = 'Dinka', price = 13000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 2, weight = 50 },
{ model = 'brioso', name = 'Brioso R/A', brand = 'Grotti', price = 20000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 2, weight = 50 },
{ model = 'club', name = 'Club', brand = 'BF', price = 8000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 2, weight = 50 },
{ model = 'dilettante', name = 'Dilettante', brand = 'Karin', price = 9000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'D', seats = 2, weight = 50 },
{ model = 'dilettante2', name = 'Dilettante Patrol', brand = 'Karin', price = 12000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'D', seats = 2, weight = 50 },
{ model = 'kanjo', name = 'Blista Kanjo', brand = 'Dinka', price = 12000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 2, weight = 50 },
{ model = 'issi2', name = 'Issi', brand = 'Weeny', price = 7000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 2, weight = 50 },
{ model = 'issi3', name = 'Issi Classic', brand = 'Weeny', price = 5000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 2, weight = 50 },
{ model = 'panto', name = 'Panto', brand = 'Benefactor', price = 3200, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 2, weight = 50 },
{ model = 'prairie', name = 'Prairie', brand = 'Bollokan', price = 30000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 2, weight = 50 },
{ model = 'rhapsody', name = 'Rhapsody', brand = 'Declasse', price = 10000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'D', seats = 2, weight = 50 },
{ model = 'brioso2', name = 'Brioso 300', brand = 'Grotti', price = 12000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 2, weight = 50 },
{ model = 'weevil', name = 'Weevil', brand = 'BF', price = 9000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 2, weight = 50 },
{ model = 'issi7', name = 'Issi Sport', brand = 'Weeny', price = 100000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'S', seats = 2, weight = 50 },
{ model = 'blista2', name = 'Blista Compact', brand = 'Dinka', price = 18950, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 2, weight = 50 },
{ model = 'blista3', name = 'Blista Go Go Monkey', brand = 'Dinka', price = 15000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 2, weight = 50 },
{ model = 'brioso3', name = 'Brioso 300 Widebody', brand = 'Grotti', price = 125000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 2, weight = 50 },
{ model = 'boor', name = 'Boor', brand = 'Karin', price = 23000, category = 'compacts', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 2, weight = 50 },
-- Sedans (1)
{ model = 'asea', name = 'Asea', brand = 'Declasse', price = 2500, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'asterope', name = 'Asterope', brand = 'Karin', price = 11000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'cog55', name = 'Cognoscenti 55', brand = 'Enus', price = 22000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'cognoscenti', name = 'Cognoscenti', brand = 'Enus', price = 22500, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'emperor', name = 'Emperor', brand = 'Albany', price = 4250, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'fugitive', name = 'Fugitive', brand = 'Cheval', price = 20000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'glendale', name = 'Glendale', brand = 'Benefactor', price = 3400, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'glendale2', name = 'Glendale Custom', brand = 'Benefactor', price = 12000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'ingot', name = 'Ingot', brand = 'Vulcar', price = 4999, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'D', seats = 4, weight = 50 },
{ model = 'intruder', name = 'Intruder', brand = 'Karin', price = 11250, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'premier', name = 'Premier', brand = 'Declasse', price = 12000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'primo', name = 'Primo', brand = 'Albany', price = 5000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'D', seats = 4, weight = 50 },
{ model = 'primo2', name = 'Primo Custom', brand = 'Albany', price = 14500, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'regina', name = 'Regina', brand = 'Dundreary', price = 7000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'D', seats = 4, weight = 50 },
{ model = 'stafford', name = 'Stafford', brand = 'Enus', price = 30000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'stanier', name = 'Stanier', brand = 'Vapid', price = 19000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'stratum', name = 'Stratum', brand = 'Zirconium', price = 15000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'D', seats = 4, weight = 50 },
{ model = 'stretch', name = 'Stretch', brand = 'Dundreary', price = 19000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'superd', name = 'Super Diamond', brand = 'Enus', price = 17000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'surge', name = 'Surge', brand = 'Cheval', price = 20000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'tailgater', name = 'Tailgater', brand = 'Obey', price = 22000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'warrener', name = 'Warrener', brand = 'Vulcar', price = 4000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'D', seats = 4, weight = 50 },
{ model = 'washington', name = 'Washington', brand = 'Albany', price = 7000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'tailgater2', name = 'Tailgater S', brand = 'Obey', price = 51000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'cinquemila', name = 'Lampadati', brand = 'Cinquemila', price = 125000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 4, weight = 50 },
{ model = 'iwagen', name = 'Obey', brand = 'I-Wagen', price = 225000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 4, weight = 50 },
{ model = 'astron', name = 'Astron', brand = 'Pfister', price = 150000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 4, weight = 50 },
{ model = 'baller7', name = 'Baller ST', brand = 'Gallivanter', price = 145000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'comet7', name = 'Comet', brand = 'S2 Cabrio', price = 25000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 2, weight = 50 },
{ model = 'deity', name = 'Deity', brand = 'Enus', price = 505000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 4, weight = 50 },
{ model = 'jubilee', name = 'Jubilee', brand = 'Enus', price = 485000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 4, weight = 50 },
{ model = 'oracle', name = 'Oracle', brand = 'Übermacht', price = 22000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'C', seats = 4, weight = 50 },
{ model = 'schafter2', name = 'Schafter', brand = 'Benefactor', price = 16000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 4, weight = 50 },
{ model = 'warrener2', name = 'Warrener HKR', brand = 'Vulcar', price = 30000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'B', seats = 2, weight = 50 },
{ model = 'rhinehart', name = 'Rhinehart', brand = 'Übermacht', price = 105000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 4, weight = 50 },
{ model = 'eudora', name = 'Eudora', brand = 'Willard', price = 17000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 4, weight = 50 },
{ model = 'asterope2', name = 'Asterope GZ', brand = 'Karin', price = 459000, category = 'sedans', shop = { 'cardealer', 'fmpdm', 'laryscars' }, class = 'A', seats = 4, weight = 50 },
-- SUV (2)
{ model = 'baller', name = 'Baller', brand = 'Gallivanter', price = 22000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'baller2', name = 'Baller II', brand = 'Gallivanter', price = 15000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'baller3', name = 'Baller LE', brand = 'Gallivanter', price = 15000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'baller4', name = 'Baller LE LWB', brand = 'Gallivanter', price = 29000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'baller5', name = 'Baller LE (Armored)', brand = 'Gallivanter', price = 78000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'baller6', name = 'Baller LE LWB (Armored)', brand = 'Gallivanter', price = 82000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bjxl', name = 'BeeJay XL', brand = 'Karin', price = 19000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cavalcade', name = 'Cavalcade', brand = 'Albany', price = 14000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cavalcade2', name = 'Cavalcade II', brand = 'Albany', price = 16500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'contender', name = 'Contender', brand = 'Vapid', price = 35000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dubsta', name = 'Dubsta', brand = 'Benefactor', price = 19000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dubsta2', name = 'Dubsta Luxury', brand = 'Benefactor', price = 19500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'fq2', name = 'FQ2', brand = 'Fathom', price = 18500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'granger', name = 'Granger', brand = 'Declasse', price = 22000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gresley', name = 'Gresley', brand = 'Bravado', price = 25000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'habanero', name = 'Habanero', brand = 'Emperor', price = 20000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'huntley', name = 'Huntley S', brand = 'Enus', price = 24500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'landstalker', name = 'Landstalker', brand = 'Dundreary', price = 12000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'landstalker2', name = 'Landstalker XL', brand = 'Dundreary', price = 26000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'novak', name = 'Novak', brand = 'Lampadati', price = 70000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'patriot', name = 'Patriot', brand = 'Mammoth', price = 21000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'patriot2', name = 'Patriot Stretch', brand = 'Mammoth', price = 21000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'radi', name = 'Radius', brand = 'Vapid', price = 18000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rebla', name = 'Rebla GTS', brand = 'Übermacht', price = 21000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rocoto', name = 'Rocoto', brand = 'Obey', price = 13000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'seminole', name = 'Seminole', brand = 'Canis', price = 20000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'seminole2', name = 'Seminole Frontier', brand = 'Canis', price = 13000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'serrano', name = 'Serrano', brand = 'Benefactor', price = 48000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'toros', name = 'Toros', brand = 'Pegassi', price = 65000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'xls', name = 'XLS', brand = 'Benefactor', price = 17000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'granger2', name = 'Granger 3600LX', brand = 'Declasse', price = 221000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'patriot3', name = 'Patriot Military', brand = 'Mil-Spec', price = 270000, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'aleutian', name = 'Aleutian', brand = 'Vapid', price = 183500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'baller8', name = 'Baller ST-D', brand = 'Gallivanter', price = 171500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cavalcade3', name = 'Cavalcade XL', brand = 'Albany', price = 166500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dorado', name = 'Dorado', brand = 'Bravado', price = 137500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vivanite', name = 'Vivanite', brand = 'Karin', price = 160500, category = 'suvs', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Coupes (3)
{ model = 'cogcabrio', name = 'Cognoscenti Cabrio', brand = 'Enus', price = 30000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'exemplar', name = 'Exemplar', brand = 'Dewbauchee', price = 40000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'f620', name = 'F620', brand = 'Ocelot', price = 32500, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'felon', name = 'Felon', brand = 'Lampadati', price = 31000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'felon2', name = 'Felon GT', brand = 'Lampadati', price = 37000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'jackal', name = 'Jackal', brand = 'Ocelot', price = 19000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'oracle2', name = 'Oracle XS', brand = 'Übermacht', price = 28000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sentinel', name = 'Sentinel', brand = 'Übermacht', price = 30000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sentinel2', name = 'Sentinel XS', brand = 'Übermacht', price = 33000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'windsor', name = 'Windsor', brand = 'Enus', price = 27000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'windsor2', name = 'Windsor Drop', brand = 'Enus', price = 34000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zion', name = 'Zion', brand = 'Übermacht', price = 22000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zion2', name = 'Zion Cabrio', brand = 'Übermacht', price = 28000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'previon', name = 'Previon', brand = 'Karin', price = 149000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'champion', name = 'Champion', brand = 'Dewbauchee', price = 205000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'futo', name = 'Futo', brand = 'Karin', price = 17500, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sentinel3', name = 'Sentinel Classic', brand = 'Übermacht', price = 70000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'kanjosj', name = 'Kanjo SJ', brand = 'Dinka', price = 143000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'postlude', name = 'Postlude', brand = 'Dinka', price = 90000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tahoma', name = 'Tahoma Coupe', brand = 'Declasse', price = 12000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'broadway', name = 'Broadway', brand = 'Classique', price = 20000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'fr36', name = 'FR36', brand = 'Fathom', price = 161000, category = 'coupes', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Muscle (4)
{ model = 'blade', name = 'Blade', brand = 'Vapid', price = 23500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'buccaneer', name = 'Buccaneer', brand = 'Albany', price = 22500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'buccaneer2', name = 'Buccaneer Rider', brand = 'Albany', price = 24500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'chino', name = 'Chino', brand = 'Vapid', price = 5000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'chino2', name = 'Chino Luxe', brand = 'Vapid', price = 8000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'clique', name = 'Clique', brand = 'Vapid', price = 20000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'coquette3', name = 'Coquette BlackFin', brand = 'Invetero', price = 180000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'deviant', name = 'Deviant', brand = 'Schyster', price = 70000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dominator', name = 'Dominator', brand = 'Vapid', price = 62500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dominator2', name = 'Pißwasser Dominator', brand = 'Vapid', price = 50000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dominator3', name = 'Dominator GTX', brand = 'Vapid', price = 70000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dominator4', name = 'Dominator Arena', brand = 'Vapid', price = 200000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dominator7', name = 'Dominator ASP', brand = 'Vapid', price = 110000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dominator8', name = 'Dominator GTT', brand = 'Vapid', price = 80000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dukes', name = 'Dukes', brand = 'Imponte', price = 23500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dukes2', name = 'Duke O\'Death', brand = 'Imponte', price = 60000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dukes3', name = 'Beater Dukes', brand = 'Imponte', price = 45000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'faction', name = 'Faction', brand = 'Willard', price = 17000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'faction2', name = 'Faction Rider', brand = 'Willard', price = 19000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'faction3', name = 'Faction Custom Donk', brand = 'Willard', price = 35000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ellie', name = 'Ellie', brand = 'Vapid', price = 42250, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gauntlet', name = 'Gauntlet', brand = 'Bravado', price = 28500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gauntlet2', name = 'Redwood Gauntlet', brand = 'Bravado', price = 70000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gauntlet3', name = 'Classic Gauntlet', brand = 'Bravado', price = 75000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gauntlet4', name = 'Gauntlet Hellfire', brand = 'Bravado', price = 80000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gauntlet5', name = 'Gauntlet Classic Custom', brand = 'Bravado', price = 120000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hermes', name = 'Hermes', brand = 'Albany', price = 535000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hotknife', name = 'Hotknife', brand = 'Vapid', price = 90000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hustler', name = 'Hustler', brand = 'Vapid', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'impaler', name = 'Impaler', brand = 'Vapid', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'impaler2', name = 'Impaler Arena', brand = 'Vapid', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'impaler3', name = 'Impaler Future Shock', brand = 'Vapid', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'impaler4', name = 'Impaler Nightmare', brand = 'Vapid', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'imperator', name = 'Imperator Arena', brand = 'Vapid', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'imperator2', name = 'imperator Future Shock', brand = 'Vapid', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'imperator3', name = 'Imperator Nightmare', brand = 'Vapid', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'lurcher', name = 'Lurcher', brand = 'Bravado', price = 21000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'nightshade', name = 'Nightshade', brand = 'Imponte', price = 70000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'phoenix', name = 'Phoenix', brand = 'Imponte', price = 65000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'picador', name = 'Picador', brand = 'Cheval', price = 20000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ratloader2', name = 'Ratloader', brand = 'Ratloader2', price = 20000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ruiner', name = 'Ruiner', brand = 'Imponte', price = 29000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ruiner2', name = 'Ruiner 2000', brand = 'Imponte', price = 50000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sabregt', name = 'Sabre GT Turbo', brand = 'Declasse', price = 23000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sabregt2', name = 'Sabre GT Turbo Custom', brand = 'Declasse', price = 26500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'slamvan', name = 'Slam Van', brand = 'Vapid', price = 30000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'slamvan2', name = 'Lost Slam Van', brand = 'Vapid', price = 90000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'slamvan3', name = 'Slam Van Custom', brand = 'Vapid', price = 17000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'stalion', name = 'Stallion', brand = 'Declasse', price = 33000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'stalion2', name = 'Stallion Burgershot', brand = 'Declasse', price = 40000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tampa', name = 'Tampa', brand = 'Declasse', price = 24500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tulip', name = 'Tulip', brand = 'Declasse', price = 80000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vamos', name = 'Vamos', brand = 'Declasse', price = 30000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vigero', name = 'Vigero', brand = 'Declasse', price = 39500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'virgo', name = 'Virgo', brand = 'Albany', price = 22000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'virgo2', name = 'Virgo Custom Classic', brand = 'Dundreary', price = 21000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'virgo3', name = 'Virgo Classic', brand = 'Dundreary', price = 21000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'voodoo', name = 'Voodoo', brand = 'Declasse', price = 13000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'yosemite', name = 'Yosemite', brand = 'Declasse', price = 19500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'yosemite2', name = 'Yosemite Drift', brand = 'Declasse', price = 55000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'buffalo4', name = 'Buffalo STX', brand = 'Bravado', price = 345000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'manana', name = 'Manana', brand = 'Albany', price = 12800, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'manana2', name = 'Manana Custom', brand = 'Albany', price = 24000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tampa2', name = 'Drift Tampa', brand = 'Declasse', price = 80000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ruiner4', name = 'Ruiner ZZ-8', brand = 'Imponte', price = 85000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vigero2', name = 'Vigero ZX', brand = 'Declasse', price = 105000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'weevil2', name = 'Weevil Custom', brand = 'BF', price = 95000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'buffalo5', name = 'Buffalo EVX', brand = 'Bravado', price = 214000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tulip2', name = 'Tulip M-100', brand = 'Declasse', price = 80000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'clique2', name = 'Clique Wagon', brand = 'Vapid', price = 102500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'brigham', name = 'Brigham', brand = 'Albany', price = 149900, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'greenwood', name = 'Greenwood', brand = 'Bravado', price = 105000, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dominator9', name = 'Dominator GT', brand = 'Vapid', price = 219500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'impaler6', name = 'Impaler LX', brand = 'Declasse', price = 146500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vigero3', name = 'Vigero ZX Convertible', brand = 'Declasse', price = 229500, category = 'muscle', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Sports Classic (5)
{ model = 'ardent', name = 'Ardent', brand = 'Ocelot', price = 30000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'btype', name = 'Roosevelt', brand = 'Albany', price = 75000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'btype2', name = 'Franken Stange', brand = 'Albany', price = 87000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'btype3', name = 'Roosevelt Valor', brand = 'Albany', price = 63000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'casco', name = 'Casco', brand = 'Lampadati', price = 100000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'deluxo', name = 'Deluxo', brand = 'Imponte', price = 55000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dynasty', name = 'Dynasty', brand = 'Weeny', price = 25000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'fagaloa', name = 'Fagaloa', brand = 'Vulcar', price = 13000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'feltzer3', name = 'Stirling GT', brand = 'Benefactor', price = 115000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gt500', name = 'GT500', brand = 'Grotti', price = 130000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'infernus2', name = 'Infernus Classic', brand = 'Pegassi', price = 245000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'jb700', name = 'JB 700', brand = 'Dewbauchee', price = 240000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'jb7002', name = 'JB 700W', brand = 'Dewbauchee', price = 40000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mamba', name = 'Mamba', brand = 'Declasse', price = 140000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'michelli', name = 'Michelli GT', brand = 'Lampadati', price = 30000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'monroe', name = 'Monroe', brand = 'Pegassi', price = 115000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'nebula', name = 'Nebula', brand = 'Vulcar', price = 22000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'peyote', name = 'Peyote', brand = 'Vapid', price = 23500, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'peyote3', name = 'Peyote Custom', brand = 'Vapid', price = 48000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pigalle', name = 'Pigalle', brand = 'Lampadati', price = 92000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rapidgt3', name = 'Rapid GT Classic', brand = 'Dewbauchee', price = 90000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'retinue', name = 'Retinue', brand = 'Vapid', price = 32000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'retinue2', name = 'Retinue MKII', brand = 'Vapid', price = 38000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'savestra', name = 'Savestra', brand = 'Annis', price = 67000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'stinger', name = 'Stinger', brand = 'Grotti', price = 39500, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'stingergt', name = 'Stinger GT', brand = 'Grotti', price = 70000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'stromberg', name = 'Stromberg', brand = 'Ocelot', price = 80000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'swinger', name = 'Swinger', brand = 'Ocelot', price = 221000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'torero', name = 'Torero', brand = 'Pegassi', price = 84000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tornado', name = 'Tornado', brand = 'Declasse', price = 21000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tornado2', name = 'Tornado Convertible', brand = 'Declasse', price = 22000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tornado5', name = 'Tornado Custom', brand = 'Declasse', price = 22000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'turismo2', name = 'Turismo Classic', brand = 'Grotti', price = 170000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'viseris', name = 'Viseris', brand = 'Lampadati', price = 210000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'z190', name = '190Z', brand = 'Karin', price = 78000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ztype', name = 'Z-Type', brand = 'Truffade', price = 270000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zion3', name = 'Zion Classic', brand = 'Übermacht', price = 45000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cheburek', name = 'Cheburek', brand = 'Rune', price = 7000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'toreador', name = 'Toreador', brand = 'Pegassi', price = 50000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'peyote2', name = 'Peyote Gasser', brand = 'Vapid', price = 40000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'coquette2', name = 'Coquette Classic', brand = 'Invetero', price = 165000, category = 'classics', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Sports (6)
{ model = 'alpha', name = 'Alpha', brand = 'Albany', price = 53000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'banshee', name = 'Banshee', brand = 'Bravado', price = 56000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bestiagts', name = 'Bestia GTS', brand = 'Grotti', price = 37000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'buffalo', name = 'Buffalo', brand = 'Bravado', price = 18750, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'buffalo2', name = 'Buffalo S', brand = 'Bravado', price = 24500, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'carbonizzare', name = 'Carbonizzare', brand = 'Grotti', price = 155000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'comet2', name = 'Comet', brand = 'Pfister', price = 130000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'comet3', name = 'Comet Retro Custom', brand = 'Pfister', price = 175000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'comet4', name = 'Comet Safari', brand = 'Pfister', price = 110000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'comet5', name = 'Comet SR', brand = 'Pfister', price = 155000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'coquette', name = 'Coquette', brand = 'Invetero', price = 145000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'coquette4', name = 'Coquette D10', brand = 'Invetero', price = 220000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'drafter', name = '8F Drafter', brand = 'Obey', price = 80000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'elegy', name = 'Elegy Retro Custom', brand = 'Annis', price = 145000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'elegy2', name = 'Elegy RH8', brand = 'Annis', price = 150000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'feltzer2', name = 'Feltzer', brand = 'Benefactor', price = 97000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'flashgt', name = 'Flash GT', brand = 'Vapid', price = 48000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'furoregt', name = 'Furore GT', brand = 'Lampadati', price = 78000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gb200', name = 'GB 200', brand = 'Vapid', price = 140000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'komoda', name = 'Komoda', brand = 'Lampadati', price = 55000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'imorgon', name = 'Imorgon', brand = 'Överflöd', price = 120000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'italigto', name = 'Itali GTO', brand = 'Progen', price = 260000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'jugular', name = 'Jugular', brand = 'Ocelot', price = 80000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'jester', name = 'Jester', brand = 'Dinka', price = 132250, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'jester2', name = 'Jester Racecar', brand = 'Dinka', price = 210000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'jester3', name = 'Jester Classic', brand = 'Dinka', price = 85000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'khamelion', name = 'Khamelion', brand = 'Hijak', price = 90000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'kuruma', name = 'Kuruma', brand = 'Karin', price = 72000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'kuruma2', name = 'kuruma2', brand = 'Karin2', price = 72000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'locust', name = 'Locust', brand = 'Ocelot', price = 200000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'lynx', name = 'Lynx', brand = 'Ocelot', price = 150000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'massacro', name = 'Massacro', brand = 'Dewbauchee', price = 110000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'massacro2', name = 'Massacro Racecar', brand = 'Dewbauchee', price = 80000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'neo', name = 'Neo', brand = 'Vysser', price = 230000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'neon', name = 'Neon', brand = 'Pfister', price = 220000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ninef', name = '9F', brand = 'Obey', price = 95000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ninef2', name = '9F Cabrio', brand = 'Obey', price = 105000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'omnis', name = 'Omnis', brand = 'Wow', price = 90000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'paragon', name = 'Paragon', brand = 'Enus', price = 60000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pariah', name = 'Pariah', brand = 'Ocelot', price = 90000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'penumbra', name = 'Penumbra', brand = 'Maibatsu', price = 22000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'penumbra2', name = 'Penumbra FF', brand = 'Maibatsu', price = 30000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rapidgt', name = 'Rapid GT', brand = 'Dewbauchee', price = 86000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rapidgt2', name = 'Rapid GT Convertible', brand = 'Dewbauchee', price = 92000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'raptor', name = 'Raptor', brand = 'BF', price = 90000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'revolter', name = 'Revolter', brand = 'Übermacht', price = 95000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ruston', name = 'Ruston', brand = 'Hijak', price = 130000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'schafter3', name = 'Schafter V12', brand = 'Benefactor', price = 35000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'schafter4', name = 'Schafter LWB', brand = 'Benefactor', price = 21000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'schlagen', name = 'Schlagen GT', brand = 'Benefactor', price = 160000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'schwarzer', name = 'Schwartzer', brand = 'Benefactor', price = 47000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'seven70', name = 'Seven-70', brand = 'Dewbauchee', price = 140000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'specter', name = 'Specter', brand = 'Dewbauchee', price = 160000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'streiter', name = 'Streiter', brand = 'Benefactor', price = 40000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sugoi', name = 'Sugoi', brand = 'Dinka', price = 85000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sultan', name = 'Sultan', brand = 'Karin', price = 50000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sultan2', name = 'Sultan Custom', brand = 'Karin', price = 55000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'surano', name = 'Surano', brand = 'Benefactor', price = 80000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tropos', name = 'Tropos Rallye', brand = 'Lampadati', price = 65000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'verlierer2', name = 'Verlierer', brand = 'Bravado', price = 90500, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vstr', name = 'V-STR', brand = 'Albany', price = 80000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'italirsx', name = 'Itali RSX', brand = 'Progen', price = 260000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zr350', name = 'ZR350', brand = 'Annis', price = 38000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'calico', name = 'Calico GTF', brand = 'Karin', price = 39000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'futo2', name = 'Futo GTX', brand = 'Karin', price = 39000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'euros', name = 'Euros', brand = 'Annis', price = 80000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'jester4', name = 'Jester RR', brand = 'Dinka', price = 240000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'remus', name = 'Remus', brand = 'Annis', price = 48000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'comet6', name = 'Comet S2', brand = 'Pfister', price = 230000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'growler', name = 'Growler', brand = 'Pfister', price = 205000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vectre', name = 'Vectre', brand = 'Emperor', price = 80000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cypher', name = 'Cypher', brand = 'Übermacht', price = 155000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sultan3', name = 'Sultan Classic Custom', brand = 'Karin', price = 56000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rt3000', name = 'RT3000', brand = 'Dinka', price = 65000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sultanrs', name = 'Sultan RS', brand = 'Karin', price = 76500, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'visione', name = 'Visione', brand = 'Grotti', price = 750000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cheetah2', name = 'Cheetah Classic', brand = 'Grotti', price = 195000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'stingertt', name = 'Itali GTO Stinger TT', brand = 'Maibatsu', price = 238000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'omnisegt', name = 'Omnis e-GT', brand = 'Obey', price = 185000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sentinel4', name = 'Sentinel Classic Widebody', brand = 'Übermacht', price = 140000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sm722', name = 'SM722', brand = 'Benefactor', price = 125000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tenf', name = '10F', brand = 'Obey', price = 185000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tenf2', name = '10F Widebody', brand = 'Obey', price = 215000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'everon2', name = 'Everon Hotring', brand = 'Karin', price = 80000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'issi8', name = 'Issi Rally', brand = 'Weeny', price = 10000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'corsita', name = 'Corsita', brand = 'Lampadati', price = 90000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gauntlet6', name = 'Hotring Hellfire', brand = 'Bravado', price = 181000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'coureur', name = 'La Coureuse', brand = 'Penaud', price = 199000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'r300', name = '300R', brand = 'Annis', price = 56000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'panthere', name = 'Panthere', brand = 'Toundra', price = 55000, category = 'sports', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Super (7)
{ model = 'adder', name = 'Adder', brand = 'Truffade', price = 280000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'autarch', name = 'Autarch', brand = 'Överflöd', price = 224000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'banshee2', name = 'Banshee 900R', brand = 'Bravado', price = 120000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bullet', name = 'Bullet', brand = 'Vapid', price = 120000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cheetah', name = 'Cheetah', brand = 'Grotti', price = 214000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cyclone', name = 'Cyclone', brand = 'Coil', price = 300000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'entity2', name = 'Entity XXR', brand = 'Överflöd', price = 164000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'entityxf', name = 'Entity XF', brand = 'Överflöd', price = 180000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'emerus', name = 'Emerus', brand = 'Progen', price = 220000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'fmj', name = 'FMJ', brand = 'Vapid', price = 125000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'furia', name = 'Furia', brand = 'Grotti', price = 230000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gp1', name = 'GP1', brand = 'Progen', price = 110000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'infernus', name = 'Infernus', brand = 'Pegassi', price = 235000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'italigtb', name = 'Itali GTB', brand = 'Progen', price = 170000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'italigtb2', name = 'Itali GTB Custom', brand = 'Progen', price = 250000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'krieger', name = 'Krieger', brand = 'Benefactor', price = 222000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'le7b', name = 'RE-7B', brand = 'Annis', price = 260000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'nero', name = 'Nero', brand = 'Truffade', price = 200000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'nero2', name = 'Nero Custom', brand = 'Truffade', price = 260000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'osiris', name = 'Osiris', brand = 'Pegassi', price = 220000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'penetrator', name = 'Penetrator', brand = 'Ocelot', price = 130000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pfister811', name = '811', brand = 'Pfister', price = 220000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'prototipo', name = 'X80 Proto', brand = 'Grotti', price = 235000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'reaper', name = 'Reaper', brand = 'Pegassi', price = 100000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 's80', name = 'S80RR', brand = 'Annis', price = 205000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sc1', name = 'SC1', brand = 'Übermacht', price = 90000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sheava', name = 'ETR1', brand = 'Emperor', price = 220000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 't20', name = 'T20', brand = 'Progen', price = 1650000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'taipan', name = 'Taipan', brand = 'Cheval', price = 1850000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tempesta', name = 'Tempesta', brand = 'Pegassi', price = 120000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tezeract', name = 'Tezeract', brand = 'Pegassi', price = 220000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'thrax', name = 'Thrax', brand = 'Truffade', price = 180000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tigon', name = 'Tigon', brand = 'Lampadati', price = 240000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'turismor', name = 'Turismo R', brand = 'Grotti', price = 140000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tyrant', name = 'Tyrant', brand = 'Överflöd', price = 2100000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tyrus', name = 'Tyrus', brand = 'Progen', price = 230000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vacca', name = 'Vacca', brand = 'Pegassi', price = 105000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vagner', name = 'Vagner', brand = 'Dewbauchee', price = 1660000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'voltic', name = 'Voltic', brand = 'Coil', price = 120000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'voltic2', name = 'Rocket Voltic', brand = 'Coil', price = 9830400, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'xa21', name = 'XA-21', brand = 'Ocelot', price = 180000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zentorno', name = 'Zentorno', brand = 'Pegassi', price = 340000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zorrusso', name = 'Zorrusso', brand = 'Pegassi', price = 277000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ignus', name = 'Ignus', brand = 'Pegassi', price = 1120000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zeno', name = 'Zeno', brand = 'Överflöd', price = 1350000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'deveste', name = 'Deveste', brand = 'Principe', price = 234000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'lm87', name = 'LM87', brand = 'Benefactor', price = 155000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'torero2', name = 'Torero XO', brand = 'Pegassi', price = 245000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'entity3', name = 'Entity MT', brand = 'Overflod', price = 200000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'virtue', name = 'Virtue', brand = 'Ocelot', price = 72000, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'turismo3', name = 'Turismo Omaggio', brand = 'Grotti', price = 284500, category = 'super', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Motorcycles (8)
{ model = 'akuma', name = 'Akuma', brand = 'Dinka', price = 55000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'avarus', name = 'Avarus', brand = 'LCC', price = 20000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bagger', name = 'Bagger', brand = 'WMC', price = 13500, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bati', name = 'Bati 801', brand = 'Pegassi', price = 24000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bati2', name = 'Bati 801RR', brand = 'Pegassi', price = 19000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bf400', name = 'BF400', brand = 'Nagasaki', price = 22000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'carbonrs', name = 'Carbon RS', brand = 'Nagasaki', price = 22000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'chimera', name = 'Chimera', brand = 'Nagasaki', price = 21000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cliffhanger', name = 'Cliffhanger', brand = 'Western', price = 28500, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'daemon', name = 'Daemon', brand = 'WMC', price = 14000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'daemon2', name = 'Daemon Custom', brand = 'Western', price = 23000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'defiler', name = 'Defiler', brand = 'Shitzu', price = 30000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'deathbike', name = 'Deathbike Apocalypse', brand = 'Deathbike', price = 30000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'deathbike2', name = 'Deathbike Future Shock', brand = 'Deathbike', price = 30000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'deathbike3', name = 'Deathbike Nightmare', brand = 'Deathbike', price = 30000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'diablous', name = 'Diablous', brand = 'Principe', price = 30000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'diablous2', name = 'Diablous Custom', brand = 'Principe', price = 38000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'double', name = 'Double-T', brand = 'Dinka', price = 28000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'enduro', name = 'Enduro', brand = 'Dinka', price = 5500, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'esskey', name = 'Esskey', brand = 'Pegassi', price = 12000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'faggio', name = 'Faggio Sport', brand = 'Pegassi', price = 2000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'faggio2', name = 'Faggio', brand = 'Pegassi', price = 1900, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'faggio3', name = 'Faggio Mod', brand = 'Pegassi', price = 2500, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'fcr', name = 'FCR 1000', brand = 'Pegassi', price = 5000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'fcr2', name = 'FCR 1000 Custom', brand = 'Pegassi', price = 19000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gargoyle', name = 'Gargoyle', brand = 'Western', price = 32000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hakuchou', name = 'Hakuchou', brand = 'Shitzu', price = 17000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hakuchou2', name = 'Hakuchou Drag', brand = 'Shitzu', price = 45000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hexer', name = 'Hexer', brand = 'LCC', price = 16000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'innovation', name = 'Innovation', brand = 'LLC', price = 33500, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'lectro', name = 'Lectro', brand = 'Principe', price = 28000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'manchez', name = 'Manchez', brand = 'Maibatsu', price = 8300, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'nemesis', name = 'Nemesis', brand = 'Principe', price = 20000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'nightblade', name = 'Nightblade', brand = 'WMC', price = 23000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'oppressor', name = 'Oppressor', brand = 'Pegassi', price = 9999999, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pcj', name = 'PCJ-600', brand = 'Shitzu', price = 15000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ratbike', name = 'Rat Bike', brand = 'Western', price = 3000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ruffian', name = 'Ruffian', brand = 'Pegassi', price = 25000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sanchez', name = 'Sanchez Livery', brand = 'Maibatsu', price = 5300, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sanchez2', name = 'Sanchez', brand = 'Maibatsu', price = 5300, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sanctus', name = 'Sanctus', brand = 'LCC', price = 35000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'shotaro', name = 'Shotaro', brand = 'Nagasaki', price = 320000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sovereign', name = 'Sovereign', brand = 'WMC', price = 8000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'stryder', name = 'Stryder', brand = 'Nagasaki', price = 50000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'thrust', name = 'Thrust', brand = 'Dinka', price = 22000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vader', name = 'Vader', brand = 'Shitzu', price = 7200, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vindicator', name = 'Vindicator', brand = 'Dinka', price = 19000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vortex', name = 'Vortex', brand = 'Pegassi', price = 31000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'wolfsbane', name = 'Wolfsbane', brand = 'Western', price = 14000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zombiea', name = 'Zombie Bobber', brand = 'Western', price = 28000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'zombieb', name = 'Zombie Chopper', brand = 'Western', price = 27000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'manchez2', name = 'Manchez Scout', brand = 'Maibatsu', price = 14000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'shinobi', name = 'Shinobi', brand = 'Nagasaki', price = 25000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'reever', name = 'Reever', brand = 'Western', price = 25000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'manchez3', name = 'Manchez Scout Classic', brand = 'Maibatsu', price = 15000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'powersurge', name = 'Powersurge', brand = 'Western', price = 7000, category = 'motorcycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Off-Road (9)
{ model = 'bfinjection', name = 'Bf Injection', brand = 'Annis', price = 9000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bifta', name = 'Bifta', brand = 'Annis', price = 15500, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'blazer', name = 'Blazer', brand = 'Annis', price = 7500, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'blazer2', name = 'Blazer Lifeguard', brand = 'Nagasaki', price = 7000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'blazer3', name = 'Blazer Hot Rod', brand = 'Nagasaki', price = 7000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'blazer4', name = 'Blazer Sport', brand = 'Annis', price = 9250, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'blazer5', name = 'Blazer Aqua', brand = 'Nagasaki', price = 40000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'brawler', name = 'Brawler', brand = 'Annis', price = 40000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'caracara', name = 'Caracara', brand = 'Vapid', price = 60000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'caracara2', name = 'Caracara 4x4', brand = 'Vapid', price = 80000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dubsta3', name = 'Dubsta 6x6', brand = 'Annis', price = 34000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dune', name = 'Dune Buggy', brand = 'Annis', price = 14000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'everon', name = 'Everon', brand = 'Karin', price = 60000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'freecrawler', name = 'Freecrawler', brand = 'Canis', price = 24000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hellion', name = 'Hellion', brand = 'Annis', price = 38000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'kalahari', name = 'Kalahari', brand = 'Canis', price = 14000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'kamacho', name = 'Kamacho', brand = 'Canis', price = 50000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mesa3', name = 'Mesa Merryweather', brand = 'Canis', price = 400000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'outlaw', name = 'Outlaw', brand = 'Nagasaki', price = 15000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rancherxl', name = 'Rancher XL', brand = 'Declasse', price = 24000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rebel2', name = 'Rebel', brand = 'Vapid', price = 20000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'riata', name = 'Riata', brand = 'Vapid', price = 380000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sandking', name = 'Sandking XL', brand = 'Vapid', price = 25000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sandking2', name = 'Sandking SWB', brand = 'Vapid', price = 38000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'trophytruck', name = 'Trophy Truck', brand = 'Vapid', price = 60000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'trophytruck2', name = 'Desert Raid', brand = 'Vapid', price = 80000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'vagrant', name = 'Vagrant', brand = 'Maxwell', price = 50000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'verus', name = 'Verus', brand = 'Dinka', price = 20000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'winky', name = 'Winky', brand = 'Vapid', price = 10000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'yosemite3', name = 'Yosemite Rancher', brand = 'Declasse', price = 425000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mesa', name = 'Mesa', brand = 'Canis', price = 12000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ratel', name = 'Ratel', brand = 'Vapid', price = 199000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'l35', name = 'Walton L35', brand = 'Declasse', price = 167000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'monstrociti', name = 'MonstroCiti', brand = 'Maibatsu', price = 48000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'draugur', name = 'Draugur', brand = 'Declasse', price = 99000, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'terminus', name = 'Terminus', brand = 'Canis', price = 187750, category = 'offroad', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Industrial (10)
{ model = 'guardian', name = 'Guardian', brand = 'Vapid', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mixer2', name = 'Mixer II', brand = 'HVY', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tiptruck2', name = 'Tipper II', brand = 'Brute', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tiptruck', name = 'Tipper', brand = 'Brute', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rubble', name = 'Rubble', brand = 'Jobuilt', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mixer', name = 'Mixer', brand = 'HVY', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'flatbed', name = 'Flatbed Truck', brand = 'MTL', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'dump', name = 'Dump Truck', brand = 'HVY', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bulldozer', name = 'Dozer', brand = 'HVY', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'handler', name = 'Dock Handler', brand = 'HVY', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cutter', name = 'Cutter', brand = 'HVY', price = 30000, category = 'industrial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Utility (11)
{ model = 'slamtruck', name = 'Slam Truck', brand = 'Vapid', price = 100000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'caddy3', name = 'Caddy (Bunker)', brand = 'Nagasaki', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'caddy2', name = 'Caddy (Civilian)', brand = 'Nagasaki', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'caddy3', name = 'Caddy (Golf)', brand = 'Nagasaki', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'utillitruck', name = 'Utility Truck (Cherry Picker)', brand = 'Brute', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'utillitruck2', name = 'Utility Truck (Van)', brand = 'Brute', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'utillitruck3', name = 'Utility Truck (Contender)', brand = 'Vapid', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tractor', name = 'Tractor', brand = 'Stanley', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tractor2', name = 'Fieldmaster', brand = 'Stanley', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tractor3', name = 'Fieldmaster', brand = 'Stanley', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'towtruck', name = 'Tow Truck (Large)', brand = 'Vapid', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'towtruck2', name = 'Tow Truck (Small)', brand = 'Vapid', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'scrap', name = 'Scrap Truck', brand = 'Vapid', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'sadler', name = 'Sadler', brand = 'Vapid', price = 20000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'ripley', name = 'Ripley', brand = 'HVY', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mower', name = 'Lawn Mower', brand = 'Jacksheepe', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'forklift', name = 'Forklift', brand = 'HVY', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'docktug', name = 'Docktug', brand = 'HVY', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'airtug', name = 'Airtug', brand = 'HVY', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'trailers5', name = 'Trailer (Christmas)', brand = 'Unknown', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tvtrailer2', name = 'Trailer (TV)', brand = 'Unknown', price = 30000, category = 'utility', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Vans (12)
{ model = 'bison', name = 'Bison', brand = 'Bravado', price = 18000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bobcatxl', name = 'Bobcat XL Open', brand = 'Vapid', price = 13500, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'burrito3', name = 'Burrito', brand = 'Declasse', price = 4000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'gburrito2', name = 'Burrito Custom', brand = 'Declasse', price = 11500, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rumpo', name = 'Rumpo', brand = 'Bravado', price = 9000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'journey', name = 'Journey', brand = 'Zirconium', price = 6500, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'minivan', name = 'Minivan', brand = 'Vapid', price = 7000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'minivan2', name = 'Minivan Custom', brand = 'Vapid', price = 10000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'paradise', name = 'Paradise', brand = 'Bravado', price = 9000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rumpo3', name = 'Rumpo Custom', brand = 'Bravado', price = 19500, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'speedo', name = 'Speedo', brand = 'Vapid', price = 10000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'speedo4', name = 'Speedo Custom', brand = 'Vapid', price = 15000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'surfer', name = 'Surfer', brand = 'BF', price = 9000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'youga3', name = 'Youga Classic 4x4', brand = 'Bravado', price = 15000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'youga', name = 'Youga', brand = 'Bravado', price = 8000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'youga2', name = 'Youga Classic', brand = 'Bravado', price = 14500, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'youga4', name = 'Youga Custom', brand = 'Bravado', price = 85000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'moonbeam', name = 'Moonbeam', brand = 'Declasse', price = 13000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'moonbeam2', name = 'Moonbeam Custom', brand = 'Declasse', price = 15000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'boxville', name = 'Boxville LSDWP', brand = 'Brute', price = 45000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'boxville2', name = 'Boxville Go Postal', brand = 'Brute', price = 45000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'boxville3', name = 'Boxville Humane Labs', brand = 'Brute', price = 45000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'boxville4', name = 'Boxville Post OP', brand = 'Brute', price = 45000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'boxville5', name = 'Armored Boxville', brand = 'Brute', price = 45000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pony', name = 'Pony', brand = 'Brute', price = 45000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pony2', name = 'Pony (Smoke on the water)', brand = 'Brute', price = 45000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'journey2', name = 'Journey II', brand = 'Zirconium', price = 7000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'surfer3', name = 'Surfer Custom', brand = 'BF', price = 15000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'speedo5', name = 'Speedo Custom', brand = 'Vapid', price = 238000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mule2', name = 'Mule', brand = 'Maibatsu', price = 40000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mule3', name = 'Mule', brand = 'Maibatsu', price = 40000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'taco', name = 'Taco Truck', brand = 'Brute', price = 45000, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'boxville6', name = 'Boxville (LSDS)', brand = 'Brute', price = 47500, category = 'vans', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Cycles (13)
{ model = 'bmx', name = 'BMX', brand = 'Bike', price = 160, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cruiser', name = 'Cruiser', brand = 'Bike', price = 510, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'fixter', name = 'Fixter', brand = 'Bike', price = 225, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'scorcher', name = 'Scorcher', brand = 'Bike', price = 280, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tribike', name = 'Whippet Race Bike', brand = 'Bike', price = 500, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tribike2', name = 'Endurex Race Bike', brand = 'Bike', price = 700, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tribike3', name = 'Tri-Cycles Race Bike', brand = 'Bike', price = 520, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'inductor', name = 'Inductor', brand = 'Coil', price = 5000, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'inductor2', name = 'Junk Energy Inductor', brand = 'Coil', price = 5000, category = 'cycles', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Service (17)
{ model = 'brickade', name = 'Brickade', brand = 'MTL', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'brickade2', name = 'Brickade 6x6', brand = 'MTL', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pbus2', name = 'Festival Bus', brand = 'Unknown', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'wastelander', name = 'Wastelander', brand = 'MTL', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rallytruck', name = 'Dune', brand = 'MTL', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'metrotrain', name = 'Metro Train', brand = 'Unknown', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'freight', name = 'Freight Train', brand = 'Unknown', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'cablecar', name = 'Cable Car', brand = 'Unknown', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'trash', name = 'Trashmaster', brand = 'JoBuilt', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'trash2', name = 'Trashmaster', brand = 'JoBuilt', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'tourbus', name = 'Tour Bus', brand = 'Brute', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'taxi', name = 'Taxi', brand = 'Vapid', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'rentalbus', name = 'Rental Shuttle Bus', brand = 'Brute', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'coach', name = 'Dashound', brand = 'Brute', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'bus', name = 'Bus', brand = 'Brute', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'airbus', name = 'Airport Bus', brand = 'Brute', price = 100000, category = 'service', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Commercial (20)
{ model = 'cerberus', name = 'Apocalypse Cerberus', brand = 'MTL', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pounder2', name = 'Pounder Custom', brand = 'MTL', price = 55000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mule4', name = 'Mule Custom', brand = 'Maibatsu', price = 40000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'phantom3', name = 'Phantom Custom', brand = 'Jobuilt', price = 110000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hauler2', name = 'Hauler Custom', brand = 'Jobuilt', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'phantom2', name = 'Phantom Wedge', brand = 'Jobuilt', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mule5', name = 'Mule (Heist)', brand = 'Maibatsu', price = 40000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'stockade', name = 'Stockade', brand = 'Brute', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'pounder', name = 'Pounder', brand = 'MTL', price = 55000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'phantom', name = 'Phantom', brand = 'Jobuilt', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'packer', name = 'Packer', brand = 'MTL', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'mule', name = 'Mule', brand = 'Maibatsu', price = 40000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'hauler', name = 'Hauler', brand = 'Jobuilt', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'biff', name = 'Biff', brand = 'Brute', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'benson', name = 'Benson', brand = 'Vapid', price = 55000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'benson2', name = 'Benson (Cluckin Bell)', brand = 'Vapid', price = 55000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'phantom4', name = 'Phantom (Christmas)', brand = 'Vapid', price = 100000, category = 'commercial', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
-- Open Wheel (22)
{ model = 'openwheel2', name = 'DR1', brand = 'Declasse', price = 100000, category = 'openwheel', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'openwheel1', name = 'BR8', brand = 'Benefactor', price = 100000, category = 'openwheel', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'formula2', name = 'R88', brand = 'Ocelot', price = 100000, category = 'openwheel', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
{ model = 'formula', name = 'PR4', brand = 'Progen', price = 100000, category = 'openwheel', shop = { 'cardealer', 'fmpdm', 'laryscars' } },
}
for i = 1, #vehicles do
Config.vehicles[vehicles[i].model] = {
spawncode = vehicles[i].model,
name = vehicles[i].name,
brand = vehicles[i].brand,
model = vehicles[i].model,
price = vehicles[i].price,
category = vehicles[i].category,
shop = vehicles[i].shop,
class = vehicles[i].class or nil,
seats = vehicles[i].seats or nil,
weight = vehicles[i].weight or nil,
}
end

View file

@ -1,34 +0,0 @@
-- If you already have the old dealerships SQL don't need to run this
CREATE TABLE `dealership_stock` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`model` MEDIUMTEXT,
`stock` INT(10) DEFAULT 0,
`job` MEDIUMTEXT,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `id` (`id`) USING BTREE
);
CREATE TABLE `dealership_sells` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`description` LONGTEXT,
`job` MEDIUMTEXT,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `id` (`id`) USING BTREE
);
CREATE TABLE `dealership_imports` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`description` LONGTEXT,
`job` MEDIUMTEXT,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `id` (`id`) USING BTREE
);
CREATE TABLE `dealership_showroom` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`vehicleID` LONGTEXT,
`vehicle` MEDIUMTEXT,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `id` (`id`) USING BTREE
);

View file

@ -1,41 +0,0 @@
Config.dealerships = Config.dealerships or {}
Config.dealerships.fmpdm = { -- Dealership ID, NEEDS TO BE THE SAME AS THE JOB!!!
enabled = true, -- true or false to enable or disable the dealership
label = 'Premium Deluxe Motorsports', -- Dealership label
logo = 'https://i.ibb.co/nkBN3bs/logo.png', -- Dealership logo that'll show on UI
job = false, -- Dealership job or false to not player owned dealerships, NEEDS TO BE THE SAME AS THE ID!!!
lockCatalogueJob = false, -- can be false for everyone to open the catalogue or a job if you want to lock it to some job
currency = 'bank', -- bank, cash or money to ESX (Also to QBCore you can choose other currency like crypto and etc)
testDriveRoutingBucket = true, -- Set this to false if you don't want the test drive to be inside of a Routing Bucket
allowChangeVehicle = true, -- If true players will be able to change the vehicles on the catalogue witout job
testDriveTime = 50, -- Test drive time in seconds
testDriveSpawn = vec4(-805.46, -237.29, 37.12, 206.87), -- Test drive spawn coords
buySpawn = vec4(-796.82, -219.97, 37.26, 120.47), -- Vehicle buy spawn coords
blip = { enabled = true, coords = vec3(-795.15, -238.44, 37.08), sprite = 523, color = 3, scale = 0.6, display = 4 }, -- Dealership map blip
catalogues = { -- The catalogues to the players see the vehicle and emplooyes change the vehicle on showrrom
{ coords = vec3(-792.55, -227.65, 37.4), radius = 0.4 },
{ coords = vec3(-788.9, -225.45, 37.4), radius = 0.4 },
{ coords = vec3(-781.35, -238.1, 37.35), radius = 0.4 },
{ coords = vec3(-785.85, -240.35, 37.35), radius = 0.4 },
},
categories = { -- The categories that will show on the catalogue and dashboard (need to add the shop with the job name to the vehicles.lua too on the shops field otherwise it'll not show the vehicles!!)
{ label = 'Compacts', id = 'compacts' },
{ label = 'Sedans', id = 'sedans' },
{ label = 'SUVs', id = 'suvs' },
{ label = 'Coupes', id = 'coupes' },
{ label = 'Muscle', id = 'muscle' },
{ label = 'Sports Classics', id = 'classics' },
{ label = 'Sports', id = 'sports' },
{ label = 'Super', id = 'super' },
{ label = 'Motorcycles', id = 'motorcycles' },
{ label = 'OffRoad', id = 'offroad' },
{ label = 'Industrial', id = 'industrial' },
{ label = 'Utility', id = 'utility' },
{ label = 'Vans', id = 'vans' },
{ label = 'Cycles', id = 'cycles' },
{ label = 'Service', id = 'service' },
{ label = 'Commercial', id = 'commercial' },
{ label = 'Open Wheel', id = 'openwheel' },
}
}

View file

@ -1,54 +0,0 @@
Config.dealerships = Config.dealerships or {}
Config.dealerships.laryscars = { -- Dealership ID, NEEDS TO BE THE SAME AS THE JOB!!!
enabled = true, -- true or false to enable or disable the dealership
label = "Lary's Cars", -- Dealership label
logo = 'https://i.ibb.co/nkBN3bs/logo.png', -- Dealership logo that'll show on UI
job = 'laryscars', -- Dealership job or false to not player owned dealerships, NEEDS TO BE THE SAME AS THE ID!!!
lockCatalogueJob = false, -- can be false for everyone to open the catalogue or a job if you want to lock it to some job
currency = 'cash', -- bank, cash or money to ESX (Also to QBCore you can choose other currency like crypto and etc)
useStock = true, -- When using job = false this will be ignored
allowBuyCatalogue = true, -- If true players will be able to buy the vehicles on the catalogue
allowChangeVehicle = true, -- If true players will be able to change the vehicles on the catalogue witout job
needsMission = true, -- Set to false or true to disable/disable the needing of going pick up the car
testDriveRoutingBucket = true, -- Set this to false if you don't want the test drive to be inside of a Routing Bucket
testDriveTime = 50, -- Test drive time in seconds
testDriveSpawn = vec4(1223.21, 2688.7, 37.56, 108.43), -- Test drive spawn coords
truck = 'packer', -- The truck used on importation
trailer = 'tr4', -- The trailer used on importation
truckSpawn = vec4(1245.86, 2667.8, 37.55, 357.46), -- Importation truck spawn coords
buySpawn = vec4(1210.15, 2719.98, 38.01, 178.31), -- Vehicle buy spawn coords
comissions = { buyPercentage = 50, sellComission = 10 }, -- The dealership commisions (buyPercentage is the percentage of vehicle price that the dealership will buy it and the sellComission is the comission that the employee will earn on selling vehicles to players)
blip = { enabled = true, coords = vec3(1223.71, 2722.84, 38.01), sprite = 523, color = 3, scale = 0.6, display = 4 }, -- Dealership map blip
dashboards = { -- Dealership dashboards to import vehicles and see transations and etc
{ coords = vec3(1225.45, 2739.45, 38.25), radius = 0.5, includeBossMenu = true },
},
catalogues = { -- The catalogues to the players see the vehicle and emplooyes change the vehicle on showrrom
{ coords = vec3(1216.1, 2735.45, 38.15), radius = 0.25, vehicleCoords = vec4(1215.17, 2732.47, 37.1, 358.38), vehicle = 'premier', vehicleColor = 54 },
{ coords = vec3(1218.8, 2735.45, 38.15), radius = 0.25, vehicleCoords = vec4(1218.77, 2732.35, 37.1, 3.14), vehicle = 'mesa', vehicleColor = 0 },
{ coords = vec3(1229.35, 2735.4, 38.1), radius = 0.25, vehicleCoords = vec4(1229.48, 2733.08, 37.1, 356.21), vehicle = 'vacca', vehicleColor = 73 },
{ coords = vec3(1232.95, 2735.5, 38.15), radius = 0.25, vehicleCoords = vec4(1233.06, 2732.51, 38.1, 0.95), vehicle = 'cavalcade', vehicleColor = 4 },
},
categories = { -- The categories that will show on the catalogue and dashboard (need to add the shop with the job name to the vehicles.lua too on the shops field otherwise it'll not show the vehicles!!)
{ label = 'Compacts', id = 'compacts' },
{ label = 'Sedans', id = 'sedans' },
{ label = 'SUVs', id = 'suvs' },
{ label = 'Coupes', id = 'coupes' },
{ label = 'Muscle', id = 'muscle' },
{ label = 'Sports Classics', id = 'classics' },
{ label = 'Sports', id = 'sports' },
{ label = 'Super', id = 'super' },
{ label = 'Motorcycles', id = 'motorcycles' },
{ label = 'OffRoad', id = 'offroad' },
{ label = 'Industrial', id = 'industrial' },
{ label = 'Utility', id = 'utility' },
{ label = 'Vans', id = 'vans' },
{ label = 'Cycles', id = 'cycles' },
{ label = 'Service', id = 'service' },
{ label = 'Commercial', id = 'commercial' },
{ label = 'Open Wheel', id = 'openwheel' },
},
pickups = {
vec4(1201.35, -3187.03, 5.98, 175.35)
}
}

View file

@ -1,54 +0,0 @@
Config.dealerships = Config.dealerships or {}
Config.dealerships.cardealer = { -- Dealership ID, NEEDS TO BE THE SAME AS THE JOB!!!
enabled = true, -- true or false to enable or disable the dealership
label = 'Premium Deluxe Motorsports', -- Dealership label
logo = 'https://i.ibb.co/nkBN3bs/logo.png', -- Dealership logo that'll show on UI
job = false, -- Dealership job or false to not player owned dealerships, NEEDS TO BE THE SAME AS THE ID!!!
lockCatalogueJob = 'police', -- can be false for everyone to open the catalogue or a job if you want to lock it to some job
currency = 'cash', -- bank, cash or money to ESX (Also to QBCore you can choose other currency like crypto and etc)
useStock = true, -- When using job = false this will be ignored
allowBuyCatalogue = true, -- If true players will be able to buy the vehicles on the catalogue
allowChangeVehicle = true, -- If true players will be able to change the vehicles on the catalogue witout job
needsMission = true, -- Set to false or true to disable/disable the needing of going pick up the car
testDriveRoutingBucket = true, -- Set this to false if you don't want the test drive to be inside of a Routing Bucket
testDriveTime = 50, -- Test drive time in seconds
testDriveSpawn = vec4(-69.48, -1105.88, 26.07, 73.5), -- Test drive spawn coords
truck = 'packer', -- The truck used on importation
trailer = 'tr4', -- The trailer used on importation
truckSpawn = vec4(-58.46, -1072.99, 27.23, 70.0), -- Importation truck spawn coords
buySpawn = vec4(-17.59, -1107.66, 26.65, 161.25), -- Vehicle buy spawn coords
comissions = { buyPercentage = 50, sellComission = 10 }, -- The dealership commisions (buyPercentage is the percentage of vehicle price that the dealership will buy it and the sellComission is the comission that the employee will earn on selling vehicles to players)
blip = { enabled = true, coords = vec3(-58.01, -1097.08, 26.44), sprite = 523, color = 3, scale = 0.6, display = 4 }, -- Dealership map blip
dashboards = { -- Dealership dashboards to import vehicles and see transations and etc
{ coords = vec3(-45.9, -1090.5, 26.4), radius = 0.5, includeBossMenu = true },
},
catalogues = { -- The catalogues to the players see the vehicle and emplooyes change the vehicle on showrrom
{ coords = vec3(-46.7, -1094.6, 26.6), radius = 0.3, vehicleCoords = vec4(-47.34, -1097.28, 25.46, 299.48), vehicle = 'premier', vehicleColor = 54 },
{ coords = vec3(-42.1, -1096.2, 26.6), radius = 0.3, vehicleCoords = vec4(-42.82, -1098.86, 25.46, 301.18), vehicle = 'mesa', vehicleColor = 0 },
{ coords = vec3(-37.2, -1098.0, 26.6), radius = 0.3, vehicleCoords = vec4(-38.15, -1100.60, 25.46, 296.99), vehicle = 'vacca', vehicleColor = 73 },
{ coords = vec3(-33.0, -1099.5, 26.6), radius = 0.3, vehicleCoords = vec4(-33.69, -1102.26, 25.46, 297.53), vehicle = 'cavalcade', vehicleColor = 4 },
},
categories = { -- The categories that will show on the catalogue and dashboard (need to add the shop with the job name to the vehicles.lua too on the shops field otherwise it'll not show the vehicles!!)
{ label = 'Compacts', id = 'compacts' },
{ label = 'Sedans', id = 'sedans' },
{ label = 'SUVs', id = 'suvs' },
{ label = 'Coupes', id = 'coupes' },
{ label = 'Muscle', id = 'muscle' },
{ label = 'Sports Classics', id = 'classics' },
{ label = 'Sports', id = 'sports' },
{ label = 'Super', id = 'super' },
{ label = 'Motorcycles', id = 'motorcycles' },
{ label = 'OffRoad', id = 'offroad' },
{ label = 'Industrial', id = 'industrial' },
{ label = 'Utility', id = 'utility' },
{ label = 'Vans', id = 'vans' },
{ label = 'Cycles', id = 'cycles' },
{ label = 'Service', id = 'service' },
{ label = 'Commercial', id = 'commercial' },
{ label = 'Open Wheel', id = 'openwheel' },
},
pickups = {
vec4(1201.35, -3187.03, 5.98, 175.35)
}
}

View file

@ -1,41 +0,0 @@
fx_version 'cerulean'
description 'FiveM Dealership script'
author 'Marttins | MT Scripts'
lua54 'yes'
game 'gta5'
shared_scripts {
'@ox_lib/init.lua',
'configs/*',
'dealerships/*',
}
client_scripts {
'@qbx_core/modules/lib.lua',
'@qbx_core/modules/playerdata.lua',
'client/**/*',
}
server_scripts {
'@oxmysql/lib/MySQL.lua',
'server/**/*',
}
ui_page 'web/build/index.html'
files {
'locales/*',
'web/build/index.html',
'web/build/**/*',
'web/assets/**/*',
'vehiclesImages/*',
}
escrow_ignore {
'server/functions.lua',
'server/callbacks.lua',
'client/functions.lua',
'configs/*.lua',
'dealerships/*.lua'
}
dependency '/assetpacks'

View file

@ -1,94 +0,0 @@
{
"target_dashboard": "Dashboard",
"target_dashboard_icon": "fas fa-laptop",
"target_management": "Boss menu",
"target_management_icon": "fas fa-user-tie",
"target_catalogue": "Catalogue",
"target_catalogue_icon": "fas fa-laptop",
"target_vehicle_info": "%s %s - %s$",
"target_vehicle_info_icon": "fas fa-info",
"target_test_drive": "Test Drive",
"target_test_drive_icon": "fas fa-car",
"target_buy_vehicle": "Buy vehicle",
"target_buy_vehicle_icon": "fas fa-dollar-sign",
"timer_testdrive_time": "Remaining time",
"textui_pess_cancel_test_drive": "Cancel test drive",
"textui_press_deliver_vehicle": "Finish importation",
"notify_cant_spawn_trailer": "All the pickup locations are occupied!!",
"notify_cant_spawn_truck": "Truck truck spawn location is occupied!!",
"notify_no_money": "The company does not have enoght money!!",
"notify_pick_delivery": "Get into the truck outside and go to the GPS location and pick the vehicle trailer!",
"notify_finish_delivery": "Now go to the GPS location and finish the importatio!",
"notify_stock_added": "Stock added!",
"notify_vehicle_bought": "Vehicle bought!",
"notify_no_money_player": "You don't have that money!",
"noitfy_no_id": "No ID provided!",
"notify_missing_fields": "You need to fill all the needed fields!",
"notify_no_nearby": "No players neaby you!",
"notify_vehicle_no_stock": "This vehicle does not have stock!",
"notify_stock_removed": "Stock removed!",
"notify_vehicle_sold": "Vehicle sold! You earned %s$",
"blip_vehicle": "Pickup vehicle",
"blip_vehicle_finish": "Delivery vehicle",
"logs_vehicle_imported_title": "Vehicle Imported",
"logs_vehicle_imported_message": "Player **%s (%s)** imported the vehicle **%s** for **%s** having a new stock of **%s** at the **%s** dealership company",
"logs_vehicle_bought_title": "Vehicle Bought",
"logs_vehicle_bought_message": "Player **%s (%s)** bought the vehicle **%s** for **%s$** at **%s** dealership",
"logs_add_stock_command_title": "Add stock command",
"logs_add_stock_command_message": "Player **%s (%s)** added stock for the vehicle **%s** having a new stock of **%s** at the **%s** dealership company",
"ui_all": "All",
"ui_stocked": "Stocked",
"ui_search": "Search",
"ui_vehicle_info_title": "Vehicle Information",
"ui_price": "Price",
"ui_category": "Category",
"ui_stock": "Stock",
"ui_class": "Class",
"ui_weight": "Trunk weight",
"ui_seats": "Seats",
"ui_confirm_buy_vehicle_title": "Confirm Purchase",
"ui_confirm_buy_vehicle_message": "You're sure you want to buy this vehicle?",
"ui_cancel": "Cancel",
"ui_confirm": "Confirm",
"ui_buy": "Buy",
"ui_test_drive": "Test Drive",
"ui_dealership_sells_title": "Dealership Sells",
"ui_dealership_importations_title": "Dealership Importations",
"ui_date": "Date",
"ui_employee": "Employee",
"ui_customer": "Customer",
"ui_plate": "Plate",
"ui_model": "Model",
"ui_sells": "Sells",
"ui_importations": "Importations",
"ui_confirm_sell_title": "Confirm vehicle sell",
"ui_player_id": "Player",
"ui_sell": "Sell",
"ui_cancel_stock": "Cancel stock",
"ui_confirm_importation_title": "Confirm importation",
"ui_confirm_importation_message": "You're sure you want to import this vehicle?",
"ui_add_stock": "Add stock",
"ui_date_format": "%d/%m/%Y - %X",
"ui_change_vehicle": "Change",
"command_add_stock_help": "Add dealership vehicle stock",
"command_add_stock_vehicle_name": "vehicle",
"command_add_stock_vehicle_help": "Vehicle spawn name",
"command_add_stock_amount_name": "amount",
"command_add_stock_amount_help": "Amount of stock to add",
"command_add_stock_dealership_name": "dealership",
"command_add_stock_dealership_help": "Job of the dealership to add stock",
"command_remove_stock_help": "Remove dealership vehicle stock",
"command_remove_stock_vehicle_name": "vehicle",
"command_remove_stock_vehicle_help": "Vehicle spawn name",
"command_remove_stock_amount_name": "amount",
"command_remove_stock_amount_help": "Amount of stock to remove",
"command_remove_stock_dealership_name": "dealership",
"command_remove_stock_dealership_help": "Job of the dealership to remove stock"
}

View file

@ -1,90 +0,0 @@
{
"target_dashboard": "Dashboard",
"target_dashboard_icon": "fas fa-laptop",
"target_management": "Menu do chefe",
"target_management_icon": "fas fa-user-tie",
"target_catalogue": "Catálogo",
"target_catalogue_icon": "fas fa-laptop",
"target_vehicle_info": "%s %s - %s$",
"target_vehicle_info_icon": "fas fa-info",
"target_test_drive": "Test Drive",
"target_test_drive_icon": "fas fa-car",
"target_buy_vehicle": "Comprar veículo",
"target_buy_vehicle_icon": "fas fa-dollar-sign",
"timer_testdrive_time": "Tempo restante",
"textui_pess_cancel_test_drive": "Cancelar test drive",
"textui_press_deliver_vehicle": "Terminar importação",
"notify_cant_spawn_trailer": "Todas as localizações da pickup estão ocupadas!",
"notify_cant_spawn_truck": "A localização para spawn do camião está ocupada!",
"notify_no_money": "A empresa não tem dinheiro suficiente!",
"notify_pick_delivery": "Entra no camião, vai até à localização indicada e vai buscar o reboque!",
"notify_finish_delivery": "Agora vai até à localização do GPS e termina a importação!",
"notify_stock_added": "Stock adicionado!",
"notify_vehicle_bought": "Veículo comprado!",
"notify_no_money_player": "Não tens dinheiro suficiente!",
"noitfy_no_id": "A tua identificação não foi verificada!",
"notify_missing_fields": "Precisas preencher todos os campos!",
"notify_vehicle_no_stock": "Este veiculo não tem stock!",
"notify_stock_removed": "Stock removido!",
"blip_vehicle": "veículo pickup",
"blip_vehicle_finish": "veículo de entrega",
"logs_vehicle_imported_title": "Veículo importado",
"logs_vehicle_imported_message": "Jogador **%s (%s)** importou o veículo **%s** para **%s** tendo um novo stock de **%s** no **%s** importador",
"logs_vehicle_bought_title": "Ve+iculo adquirido",
"logs_vehicle_bought_message": "Jogador **%s (%s)** comprou um novo veículo **%s** para **%s$** em **%s** importador",
"ui_all": "Tudo",
"ui_stocked": "Em stock",
"ui_search": "Pesquisar",
"ui_vehicle_info_title": "Informação de veículo",
"ui_price": "Preço",
"ui_category": "Categoria",
"ui_stock": "Stock",
"ui_class": "Classe",
"ui_weight": "Capacidade da mala",
"ui_seats": "Lugares",
"ui_confirm_buy_vehicle_title": "Confirmar compra",
"ui_confirm_buy_vehicle_message": "Tens a certeza que queres adquirir este veículo?",
"ui_cancel": "Cancelar",
"ui_confirm": "Confirmar",
"ui_buy": "Comprar",
"ui_test_drive": "Test Drive",
"ui_dealership_sells_title": "Vendas",
"ui_dealership_importations_title": "Importações",
"ui_date": "Data",
"ui_employee": "Funcionário",
"ui_customer": "Cliente",
"ui_plate": "Matrícula",
"ui_model": "Modelo",
"ui_sells": "Vendas",
"ui_importations": "Importações",
"ui_confirm_sell_title": "Confirmar venda do veículo",
"ui_player_id": "ID do jogador",
"ui_sell": "Vender",
"ui_cancel_stock": "Cancelar stock",
"ui_confirm_importation_title": "Confirmar importação",
"ui_confirm_importation_message": "Tens a certeza que queres importar este veículo?",
"ui_add_stock": "Adicionar stock",
"ui_date_format": "%d/%m/%Y - %X",
"ui_change_vehicle": "Trocar",
"command_add_stock_help": "Adicionar stock a um veiculo de um stand",
"command_add_stock_vehicle_name": "veiculo",
"command_add_stock_vehicle_help": "Nome de spawn do veiculo",
"command_add_stock_amount_name": "quantia",
"command_add_stock_amount_help": "Quantia de stock a adicionar",
"command_add_stock_dealership_name": "stand",
"command_add_stock_dealership_help": "Job do stand a adicionar stock",
"command_remove_stock_help": "Remover stock de veiculo de um stand",
"command_remove_stock_vehicle_name": "veiculo",
"command_remove_stock_vehicle_help": "Nome de spawn do veiculo",
"command_remove_stock_amount_name": "quantia",
"command_remove_stock_amount_help": "Quantia de stock a remover",
"command_remove_stock_dealership_name": "stand",
"command_remove_stock_dealership_help": "Job do stand a remover stock"
}

View file

@ -1,15 +0,0 @@
if Config.framework == 'esx' then
lib.callback.register('mt_dealerships:server:getPlayerJobESX', function(source)
local src = source
local Player = Config.core.GetPlayerFromId(src)
if not Player then return end
return Player.getJob().name
end)
lib.callback.register('mt_dealerships:server:getPlayerJobIsBossESX', function(source)
local src = source
local Player = Config.core.GetPlayerFromId(src)
if not Player then return end
return (Player.getJob().grade_name == 'boss')
end)
end

View file

@ -1,107 +0,0 @@
---@param account string
---@param amount integer
addAccountMoney = function(account, amount)
if Config.banking == 'Renewed-Banking' then
exports['Renewed-Banking']:addAccountMoney(account, amount)
elseif Config.banking == 'esx_addonaccount' then
TriggerEvent('esx_addonaccount:getSharedAccount', 'society_'..account, function(account)
account.addMoney(amount)
end)
else
exports[Config.banking]:AddMoney(account, amount)
end
end
---@param account string
---@param amount integer
removeAccountMoney = function(account, amount)
if Config.banking == 'Renewed-Banking' then
exports['Renewed-Banking']:removeAccountMoney(account, amount)
elseif Config.banking == 'esx_addonaccount' then
TriggerEvent('esx_addonaccount:getSharedAccount', 'society_'..account, function(account)
account.removeMoney(amount)
end)
else
exports[Config.banking]:RemoveMoney(account, amount)
end
end
---@param account string
---@return number
getAccountMoney = function(account)
local value = 0
if Config.banking == 'Renewed-Banking' then
value = exports['Renewed-Banking']:getAccountMoney(account)
elseif Config.banking == 'esx_addonaccount' then
TriggerEvent('esx_addonaccount:getSharedAccount', 'society_'..account, function(account)
value = account.money
end)
elseif Config.banking == 'qb-management' then
value = exports[Config.banking]:GetMoney(account)
else
value = exports[Config.banking]:GetAccountBalance(account)
end
return value
end
---@param webhook string
---@param title string
---@param message string
---@param image string
createLog = function(webhook, title, message, image)
PerformHttpRequest(webhook, function(err, text, headers) end, 'POST', json.encode({
embeds = {
{
title = title,
author = {
name = "MT Scripts - Dealerships",
icon_url = 'https://cdn.discordapp.com/attachments/1014907105733517442/1141400655450361916/Logo_PNG_8K.png?ex=66292c32&is=6616b732&hm=7f280578a3f1186b3778c2e828032df28d8f0b21debf468f126e0f5cb099e3d8&',
url = 'https://mt-scripts.tebex.io/',
},
color = '000000255',
description = message,
image = { url = image or '' },
footer = { text = 'mt-scripts.tebex.io' },
}
}
}), { ['Content-Type'] = 'application/json' })
end
---@param PlayerData table
---@param model string
---@param mods table
---@param plate string
---@param dealership table
addVehicleToGarage = function(PlayerData, model, mods, plate, dealership)
local src = source
if Config.framework == 'qb' or Config.framework == 'qbx' then
MySQL.insert('INSERT INTO `player_vehicles` (license, citizenid, vehicle, hash, mods, plate) VALUES (?, ?, ?, ?, ?, ?)', { PlayerData.license, PlayerData.citizenid, model, GetHashKey(model), json.encode(mods), plate })
if Config.mInsurance.enable then
local info = {}
info.name = PlayerData.charinfo.firstname .. " " .. PlayerData.charinfo.lastname
info.plate = plate
info.model = model
if Config.mInsurance.inventory == "qb" then
local Player = Config.core.Functions.GetPlayer(src)
Player.Functions.AddItem('car_registration', 1, false, info)
elseif Config.mInsurance.inventory == "ox" then
local metadata = { description = 'Name: '..PlayerData.charinfo.firstname .. " " .. PlayerData.charinfo.lastname..' \nPlate: '..plate..' \nModel: '..model }
exports.ox_inventory:AddItem(src, 'car_registration', 1, metadata)
end
end
elseif Config.framework == 'esx' then
MySQL.insert('INSERT INTO `owned_vehicles` (owner, plate, vehicle) VALUES (?, ?, ?)', { PlayerData.identifier, plate, json.encode({model = joaat(model), plate = plate}) })
if Config.mInsurance.enable then
local xPlayer = Config.core.GetPlayerFromId(src)
local name = xPlayer.getName()
local metadata = { description = 'Name: '..PlayerData.charinfo.firstname .. " " .. PlayerData.charinfo.lastname..' \nPlate: '..plate..' \nModel: '..model }
exports.ox_inventory:AddItem(src, 'car_registration', 1, metadata)
MySQL.insert('INSERT INTO m_insurance_registration (plate, model, registration, identifier) VALUES (?, ?, ?, ?)', {plate, vehicle, 1, PlayerData.license})
end
end
end

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,13 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/src/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>NUI React Boilerplate</title>
<script type="module" crossorigin src="./assets/index-yg9jBeC4.js"></script>
</head>
<body>
<div id="root"></div>
</body>
</html>