Merge branch 'master' of https://git.evolution-state-life.de/Evolution-State-Life/Main
|
@ -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>
|
|
@ -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
|
|
@ -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
|
||||
]]
|
|
@ -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',
|
||||
}
|
|
@ -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>
|
|
@ -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'
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
Please follow the instructions: https://docs.brutalscripts.com
|
|
@ -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)
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
} --
|
|
@ -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
|
|
@ -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
|
|
@ -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'
|
Before Width: | Height: | Size: 298 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 850 B |
Before Width: | Height: | Size: 880 B |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 61 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 4.3 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 110 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 7.2 KiB |
|
@ -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>
|
|
@ -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
|
|
@ -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"
|
||||
]
|
||||
}
|
|
@ -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
|
|
@ -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' },
|
||||
}
|
|
@ -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
|
|
@ -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
|
||||
);
|
|
@ -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' },
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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'
|
|
@ -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"
|
||||
}
|
|
@ -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"
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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>
|