Accessible files

Here you can find all the files which can be edite to make the asset compatible with your server.​

config.lua
----------------------------------------------------------------------------------------------
----------------------------------| BRUTAL VEHICLE SHOP :) |----------------------------------
----------------------------------------------------------------------------------------------

--[[

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 = {} -- Don't touch it

Config['Core'] = 'ESX'  -- ESX / QBCore  | Other core setting on the 'core' folder
Config['BrutalNotify'] = true -- Buy here: (4€+VAT) https://store.brutalscripts.com | Or set up your own notify >> cl_utils.lua
Config['BrutalKeys'] = true -- Buy here: (15€+VAT) https://store.brutalscripts.com | Or set up your own vehiclekeys >> cl_utils.lua

-- You can add your own notify here >> cl_utils.lua

Config['VehicleShops'] = {
    -- Discord Webhook config in 'webhook.lua'
    ['MoneyForm'] = '$',  -- Please add your server money form | EXAMPLES: '$', '€', 'Ft', 'Lira', etc.
    ['Plate'] = 'LLL NNN',  -- L = Letter, N = Number, ' ' = SPACE | Maximum 8 character!!! Examples: 'LL NN LL', 'NN', 'LNLN' | Edit as you like
    ['TestDrive'] = {Use = true, price = 5000, time = 60},  -- Test drive config
    ['TestDriveCancel'] = {Use = true, command = 'cancel', Suggestion = 'Use the command to end the test drive'},  -- Testdrive command | true / false | command = 'COMMAND' | Suggestion = Chat label, to turn off: set ''
    ['TestDriveRevive'] = true,  -- Revive a player if he died during vehicle testing
    ['Metric'] = 'KMH', -- KMH / MPH
    ['UseScreenBlur'] = true,  -- true / false | Want to use Screen Blur?
    ['MenuOpenKey'] = 38,  -- More controls: https://docs.fivem.net/docs/game-references/controls/
    ['MaxVehiclesSpeed'] = 400, -- Max speed a vehicle can go at (it is only used for UI purposes, it does NOT change the speed of a vehicle)
    ['ColourExtraMoney'] = 2500, -- PRICE / false | The extra money what you have to pay if your car's color isn't black or white
    
    ['Tunings'] = {  -- Vehicle tunings
        ['Exist'] = true,  -- Want to use? | true / false
        ['Engine'] = {false, 15000, 2},  -- true/false, price/level , The maximum value of tuning you want to be able to put into the vehicle
        ['Brakes'] = {false, 8000, 5},
        ['Turbo'] = {false, 50000},
        ['Xeon'] = {true, 500},
        ['Livery'] = {true, 10000},
    },
    
    ['UseColorGTAID'] = false, -- Will set the vehicle color based on the color ID: https://wiki.rage.mp/index.php?title=Vehicle_Colors
    ['Colours'] = {  -- Vehicle Colours | You can't add more! (Only 10)
        [1] = {255, 255, 255, GTAID = 134},  -- R, G, B, GTA COLOUR | The GTA color is used by the script if ['UseColorGTAID'] is true
        [2] = {0, 0, 0, GTAID = 0},
        [3] = {150, 150, 150, GTAID = 4},      
        [4] = {255, 0, 0, GTAID = 27},
        [5] = {255, 150, 0, GTAID = 41},        
        [6] = {255, 230, 0, GTAID = 89},
        [7] = {0, 255, 0, GTAID = 55},          
        [8] = {0, 0, 255, GTAID = 79},
        [9] = {76, 0, 255, GTAID = 145},         
        [10] = {255, 0, 255, GTAID = 137},
    },
    
    ['Shops'] = {
        --------------------------------------------------------------------------
        -----------------------------| VEHICLE SHOP |-----------------------------
        --------------------------------------------------------------------------

        ['Vehicle Shop'] = {
            ['Use'] = true,  -- Want to use this shop? | true / false
            ['Coords'] = { x = -43.0507, y = -1104.0652, z = 26.4223}, -- Shop possition
            ['TextDistance'] = 1.3,  -- Open Menu Distance
            ['Marker'] = {Distance = 15, Sprite = 36, Rotation = true, UpAndDown = false, Brightness = 100, r = 260, g = 40, b = 40},  -- More sprites: https://docs.fivem.net/docs/game-references/markers/
            ['Cam'] = {x = -46.4095, y = -1102.0146, z = 27.2223, rotation = {-15.0,0.0,-20} },  -- Shop camera position
            ['PreviewVehicle'] = {x = -44.4230, y = -1096.9951, z = 26.4223, heading = 158.5431-45},  -- Preview vehicle position
            ['SpawnCoords'] = {x = -24.8248, y = -1082.5984, z = 26.6334, heading = 70.1315},  -- Vehicle Spawn Coords
            ['TestCoords'] = {x = -1695.7524, y = -2840.3235, z = 13.9444, heading = 328.2468},  -- Vehicle Test Coords
            ['Blip'] = {Use = true, colour = 0, label = 'Vehicle Shop', size = 0.8, sprite = 225 }, -- Blip config
            ['SeveralCategorys'] = true,  -- Want to use Categorys in this Shop? | true / false (If false, the first category will appear only)
            ['Caregorys'] = {  -- You can add endless amount of cagerorys
                {
                    title = "Super Sport",  -- Category name
                    vehicles = {
                        {model = "adder", label = "Adder", price = 900000, type = 'car'},  -- model = vehicle model, label = Vehicle Label, price = Vehicle Price, type = Vehicle type ('boat', 'car', 'heli', 'plane', etc.)
                        {model = "zentorno", label = "Zentorno", price = 765000, type = 'car'},
                        {model = "cheetah", label = "Cheetah", price = 375000, type = 'car'},
                        {model = "zeno", label = "Zeno", price = 560000, type = 'car'},
                        {model = "visione", label = "Visione", price = 640000, type = 'car'},
                        {model = "champion", label = "Champion", price = 200000, type = 'car'},
                        {model = "ignus", label = "Ignus", price = 330000, type = 'car'},
                        {model = "tigon", label = "Tigon", price = 265000, type = 'car'},
                        {model = "furia", label = "Furia", price = 399000, type = 'car'},
                        {model = "krieger", label = "Krieger", price = 534000, type = 'car'},
                        {model = "emerus", label = "Emerus", price = 760000, type = 'car'},
                        {model = "thrax", label = "Thrax", price = 1000000, type = 'car'},
                        {model = "autarch", label = "Autarch", price = 1500000, type = 'car'},
                        {model = "vagner", label = "Vagner", price = 489000, type = 'car'},
                        {model = "tempesta", label = "Tempesta", price = 345000, type = 'car'},
                        {model = "tyrus", label = "Tyrus", price = 850000, type = 'car'},
                        {model = "reaper", label = "Reaper", price = 120000, type = 'car'},
                        {model = "fmj", label = "FMJ", price = 280000, type = 'car'},
                        {model = "t20", label = "T20", price = 530000, type = 'car'},
                        {model = "osiris", label = "Osiris", price = 267000, type = 'car'},
                        {model = "banshee", label = "Banshee", price = 150000, type = 'car'},
                        {model = "vacca", label = "Vacca", price = 270000, type = 'car'},
                        {model = "infernus", label = "Infernus", price = 190000, type = 'car'}

                    }
                },
                {
                    title = "Sedans",
                    vehicles = {
                        {model = "ingot", label = "Ingot", price = 13400, type = 'car'},
                        {model = "premier", label = "Premier", price = 23000, type = 'car'},
                        {model = "regina", label = "Regina", price = 16000, type = 'car'},
                    }
                },
                {
                    title = "Compats",
                    vehicles = {
                        {model = "asbo", label = "Asbo", price = 8000, type = 'car'},
                        {model = "hellion", label = "Hellion", price = 29000, type = 'car'},
                    }
                },
                {
                    title = "Muscle",
                    vehicles = {
                        {model = "vamos", label = "Vamos", price = 50000, type = 'car'},
                    }
                },
                {
                    title = "Suvs",
                    vehicles = {
                        {model = "rocoto", label = "Rocoto", price = 76000, type = 'car'},
                        {model = "mesa", label = "Mesa", price = 100000, type = 'car'},
                    }
                },
                {
                    title = "Off Road",
                    vehicles = {
                        {model = "brawler", label = "Brawler", price = 99000, type = 'car'},
                        {model = "guardian", label = "Guardian", price = 160000, type = 'car'},
                    }
                },
                {
                    title = "Vans",
                    vehicles = {
                        {model = "speedo", label = "Speedo", price = 70000, type = 'car'},
                    }
                },
                -- You can add more categorys...
            }
        },
        --------------------------------------------------------------------------
        ------------------------------| BOAT SHOP |-------------------------------
        --------------------------------------------------------------------------
        ['Boat Shop'] = {
            ['Use'] = true,
            ['Coords'] = { x = -713.2616, y = -1297.8879, z = 5.1019},
            ['TextDistance'] = 1.3,
            ['Marker'] = {Distance = 15, Sprite = 35, Rotation = true, UpAndDown = false, Brightness = 100, r = 260, g = 40, b = 40},
            ['Cam'] = {x = -729.3079, y = -1357.8542, z = 4.9027, rotation = {-15.0,0.0,-40} },
            ['PreviewVehicle'] = {x = -719.5148, y = -1347.1199, z = 0.5714, heading = 140.7528-45},
            ['SpawnCoords'] = {x = -723.5148, y = -1351.1199, z = 0.5714, heading = 140.7528},
            ['TestCoords'] = {x = -853.1735, y = -1544.8879, z = 0.6218, heading = 135.6689},
            ['Blip'] = {Use = true, colour = 0, label = 'Boat Shop', size = 0.8, sprite = 427 },
            ['SeveralCategorys'] = false, 
            ['Caregorys'] = {
                {
                    title = "Boats",
                    vehicles = {
                        {model = "seashark", label = "Seashark", price = 160000, type = 'boat'},
                        {model = "speeder", label = "Speeder", price = 230000, type = 'boat'},
                        {model = "dinghy", label = "Dinghy", price = 340000, type = 'boat'},
                        {model = "toro", label = "Toro", price = 2000000, type = 'boat'},
                    }
                },
            }
        },
        --------------------------------------------------------------------------
        -----------------------| PLANE AND HELICOPTER SHOP |----------------------
        --------------------------------------------------------------------------
        ['Plane & Helicopter Shop'] = {
            ['Use'] = true,
            ['Coords'] = { x = -711.2363, y = -1459.9780, z = 5.0005},
            ['TextDistance'] = 1.3,
            ['Marker'] = {Distance = 15, Sprite = 34, Rotation = true, UpAndDown = false, Brightness = 100, r = 260, g = 40, b = 40},
            ['Cam'] = {x = -718.8840, y = -1436.9779, z = 7.0005, rotation = {-17.0,0.0,140} },
            ['PreviewVehicle'] = {x = -724.7278, y = -1444.2869, z = 5.0005, heading = 320.7925-45},
            ['SpawnCoords'] = {x = -750.1570, y = -1444.5887, z = 5.0005, heading = 228.2726},
            ['TestCoords'] = {x = -745.8632, y = -1469.1633, z = 5.0004, heading = 323.0506},
            ['Blip'] = {Use = true, colour = 0, label = 'Plane & Helicopter Shop', size = 0.8, sprite = 64 },
            ['SeveralCategorys'] = false,
            ['Caregorys'] = {
                {
                    title = "Plane & Helicopter",
                    vehicles = {
                        {model = "volatus", label = "Volatus", price = 10000000, type = 'heli'},
                        {model = "havok", label = "Havok", price = 4900000, type = 'heli'},
                    }
                },
            }
        },

        -- You can add more Shop
    },

    ['UseVehicleSell'] = true,  -- Want to use the Vehicle Sell function? true / false
    ['VehicleSellPercentage'] = 50,

    --------------------------------------------------------------------------
    ------------------------------| TRANSLATE |-------------------------------
    --------------------------------------------------------------------------

    ['OpenShop'] = 'Press [E] to Open Menu',

    ['TestNotify'] = {'Vehicle Test', 'You have', 'second to test the Vehicle!', 'Cancel command: /'},
    ['BuyNotify'] = {'Vehicle Purchase', 'You have bought a(n)', 'with', 'plate!'},
    ['SellNotify'] = {'Get in that vehicle which you want to sell<br>You have 30 sec to get in the vehicle!'},

    ['Notify'] = { 
        [1] = {"Vehicle Shop", "You don't have enought money!", 5000, "error"},  -- Type, Label, Time | 1000 = 1 sec
        [2] = {"Vehicle Shop", "The spawn space is not empty!", 5000, "error"},
        [3] = {"Vehicle Shop", "You are already testing a vehicle!", 5000, "error"},
        [4] = {"Vehicle Shop", "This vehicle model does not exist!", 5000, "error"},
        [5] = {"Vehicle Shop", "This is not your vehicle!", 5000, "error"},
        [6] = {"Vehicle Shop", "You have successfully sold your vehicle!", 5000, "success"},
        [7] = {"Vehicle Shop", "You can't be in the vehicle!", 5000, "error"},
    },
}
client-utils.lua
function notification(title, text, time, type) -- Buy here: (4€+VAT) https://store.brutalscripts.com
    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

RegisterNetEvent('brutal_vehicleshop:client:buyvehicle_utils')
AddEventHandler('brutal_vehicleshop:client:buyvehicle_utils', function(Vehicle, Plate, Model, Price, Label)
    SetVehicleMaxFuel(Vehicle)  -- Our special function
    -- You can add more function and trigger
end)

RegisterNetEvent('brutal_vehicleshop:client:GiveKeys')
AddEventHandler('brutal_vehicleshop:client:GiveKeys', function(vehicle, plate)
	-- Leave blank if you have no keys to give
	Citizen.Wait(1000)
	if Config['BrutalKeys'] and GetResourceState("brutal_keys") == "started" then exports.brutal_keys:addVehicleKey(plate, plate) end	

	--TriggerEvent('vehiclekeys:client:SetOwner', plate)  -- for QBCore (if not work, we can't help you with this)
end)

RegisterNetEvent('brutal_vehicleshop:client:GiveKeysTestDrive')
AddEventHandler('brutal_vehicleshop:client:GiveKeysTestDrive', function(vehicle, plate)
	-- Leave blank if you have no keys to give
    if Config['BrutalKeys'] and GetResourceState("brutal_keys") == "started" then exports.brutal_keys:addVehicleTemporaryKey(Config['VehicleShops']['TestDrive']['time'], plate, plate) end
	
	--TriggerEvent('vehiclekeys:client:SetOwner', plate)  -- for QBCore (if not work, we can't help you with this)
end)

RegisterNetEvent('brutal_vehicleshop:client:onMenuOpen')
AddEventHandler('brutal_vehicleshop:client:onMenuOpen', function()
	-- Code to execute when the player opens the vehicle shop
end)

RegisterNetEvent('brutal_vehicleshop:client:onMenuClose')
AddEventHandler('brutal_vehicleshop:client:onMenuClose', function()
	-- Code to execute when the player leaves the vehicle shop
end)

RegisterNetEvent('brutal_vehicleshop:client:onStartTestDrive')
AddEventHandler('brutal_vehicleshop:client:onStartTestDrive', function(vehicle)
	-- Code to execute when the player starts the test drive
end)

RegisterNetEvent('brutal_vehicleshop:client:onFinishTestDrive')
AddEventHandler('brutal_vehicleshop:client:onFinishTestDrive', function(vehicle)
	-- Code to execute when the player finishes the test drive
end)

RegisterNetEvent('brutal_vehicleshop:client:onSellVehicle')
AddEventHandler('brutal_vehicleshop:client:onSellVehicle', function(vehicle)
	if Config['BrutalKeys'] and GetResourceState("brutal_keys") == "started" then 
		local plate = GetVehicleNumberPlateText(vehicle)
		exports.brutal_keys:removeKey(plate, true) 
	end	
	DeleteEntity(vehicle)
	-- Code to execute when a vehicle is sold
end)

function SetVehicleMaxFuel(vehicle)  -- It fills the car's tank
    SetVehicleFuelLevel(vehicle, 100.0)
    DecorSetFloat(vehicle, "_FUEL_LEVEL", GetVehicleFuelLevel(vehicle))
end

function GPS_Enable()  -- if you don't want to use, comment out the line
    DisplayRadar(true)
end

function GPS_Disable()  -- if you don't want to use, comment out the line
    DisplayRadar(false)
end

function BuyAnimation()  -- Vehicle Buy animation
	local PP = PlayerPedId()
	FreezeEntityPosition(PP, true)
	local ad = "missheistdockssetup1clipboard@base"  
	local prop_name = 'prop_notepad_01'
	local secondaryprop_name = 'prop_pencil_01'
	loadAnimDict(ad)

	if not IsEntityDead(PP) then
		local x,y,z = table.unpack(GetEntityCoords(PP))
		prop = CreateObject(GetHashKey(prop_name), x, y, z+0.2,  true,  true, true)
		secondaryprop = CreateObject(GetHashKey(secondaryprop_name), x, y, z+0.2,  true,  true, true)
		AttachEntityToEntity(prop, PP, GetPedBoneIndex(PP, 18905), 0.1, 0.02, 0.05, 10.0, 0.0, 0.0, true, true, false, true, 1, true)
		AttachEntityToEntity(secondaryprop, PP, GetPedBoneIndex(PP, 58866), 0.12, 0.0, 0.001, -150.0, 0.0, 0.0, true, true, false, true, 1, true)
		TaskPlayAnim(PP, ad, "base", 8.0, 1.0, -1, 49, 0, 0, 0, 0)
		Citizen.Wait(5000)
		FreezeEntityPosition(PP, false)
		ClearPedSecondaryTask(PP)
		DetachEntity(prop, 1, 1)
		DeleteObject(prop)
		DetachEntity(secondaryprop, 1, 1)
		DeleteObject(secondaryprop)
	end
end
server-utils.lua
local YourWebhook = 'WEBHOOK-HERE'  -- help: https://docs.brutalscripts.com/site/others/discord-webhook

function GetWebhook()
    return YourWebhook
end

RegisterNetEvent('brutal_vehicleshop:server:buyvehicle_utils')
AddEventHandler('brutal_vehicleshop:server:buyvehicle_utils', function(Vehicle, Plate, Model, Price, Label)
    SendDiscord('VEHICLE BOUGHT', '**Player:** '.. source ..' ['.. GetIdentifier(source) ..']\n**Vehicle:** '.. Label ..' ['.. Model ..']\n**Plate:** '.. Plate ..'\n**Price:** '.. Price ..' '.. Config['VehicleShops']['MoneyForm'] ..'\n\nPlayer bought a vehicle!', 1)
    -- You can add more function and trigger
end)

----------------------------------------------------------------------------------------------------------
--------------------------------------------------| SQL |-------------------------------------------------
----------------------------------------------------------------------------------------------------------

SoldVehicles = {}

if Config['Core'] == 'ESX' then
--------------------------------------------------------------------------
---------------------------------| ESX |----------------------------------
--------------------------------------------------------------------------

    RESCB('brutal_vehicleshop:server:isPlateTaken', function(source, cb, plate)
        MySQL.scalar('SELECT plate FROM owned_vehicles WHERE plate = ?', {plate},
        function(result)
            cb(result ~= nil)
        end)
    end)

    RegisterNetEvent('brutal_vehicleshop:server:InsertVehicle')
    AddEventHandler('brutal_vehicleshop:server:InsertVehicle', function(vehicle, plate, model, hash, vehicleProps, vehtype)
        MySQL.insert('INSERT INTO owned_vehicles (owner, plate, vehicle, type) VALUES (?, ?, ?, ?)', {
            GetIdentifier(source), 
            plate, 
            json.encode(vehicleProps),
            vehtype
        }, function(rowsChanged) end)
    end)

    RESCB('brutal_vehicleshop:server:CheckPlayerOwned', function(source, cb, modelhash, model, plate, price)
        MySQL.single('SELECT * FROM owned_vehicles WHERE owner = ? AND plate = ?', {GetIdentifier(source), plate},
        function(result)
            if result then
                
                if json.decode(result.vehicle).model == model or json.decode(result.vehicle).model == modelhash then
                    if string.gsub(json.decode(result.vehicle).plate, '%s+', '') == string.gsub(plate, '%s+', '') then
                        MySQL.update('DELETE FROM owned_vehicles WHERE plate = ?', {plate})
                        SendDiscord('VEHICLE SELLED', '**Player:** '.. source ..' ['.. GetIdentifier(source) ..']\n**Plate:** '.. plate ..' \n**Model:** '.. model ..'\n**For that price:** '.. price ..' '.. Config['VehicleShops']['MoneyForm'] ..'\n\nThe player has sold his vehicle!', 2)
                        table.insert(SoldVehicles, plate)
                        cb(true)
                    else
                        SendDiscord('HACKER', '**Player:** '.. source ..' ID ['.. GetIdentifier(source) ..']\n**Reason:** Attempted To Resell Vehicle With Invalid Plate\nTried to make a lot of money', 3)
                        cb(false)
                    end
                else
                    SendDiscord('HACKER', '**Player:** '.. source ..' ID ['.. GetIdentifier(source) ..']\n**Reason:** Attempted To Resell Vehicle With Invalid Model\nTried to make a lot of money', 3)
                    cb(false)
                end
            else
                cb(false)
            end
        end)
    end)

elseif Config['Core'] == 'QBCore' then
--------------------------------------------------------------------------
--------------------------------| QBCore |--------------------------------
--------------------------------------------------------------------------
    RESCB('brutal_vehicleshop:server:isPlateTaken', function(source, cb, plate)
        MySQL.scalar('SELECT plate FROM player_vehicles WHERE plate = ?', {plate},
        function(result)
            cb(result ~= nil)
        end)
    end)
    
    RegisterNetEvent('brutal_vehicleshop:server:InsertVehicle')
    AddEventHandler('brutal_vehicleshop:server:InsertVehicle', function(vehicle, plate, model, hash, vehicleProps, vehtype)
        MySQL.insert('INSERT INTO player_vehicles (license, citizenid, vehicle, hash, mods, plate, garage, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', {
            GetIdentifier(source),
            GetCitizenID(source),
            model,
            hash,
            json.encode(vehicleProps),
            plate,
            'pillboxgarage',
            0
        })
    end)
    
    RESCB('brutal_vehicleshop:server:CheckPlayerOwned', function(source, cb, modelhash, model, plate, price)
        MySQL.single('SELECT * FROM player_vehicles WHERE license = ? AND plate = ?', {GetIdentifier(source), plate},
        function(result)
            if result then

                if result.vehicle == model or result.hash == string.gsub(modelhash, '%s+', '') then
                    if string.gsub(result.plate, '%s+', '') == string.gsub(plate, '%s+', '') then
                        MySQL.update('DELETE FROM player_vehicles WHERE plate = ?', {plate})
                        SendDiscord('VEHICLE SELLED', '**Player:** '.. source ..' ['.. GetIdentifier(source) ..']\n**Plate:** '.. plate ..' \n**Model:** '.. model ..'\n**For that price:** '.. price ..' '.. Config['VehicleShops']['MoneyForm'] ..'\n\nThe player has sold his vehicle!', 2)
                        table.insert(SoldVehicles, plate)
                        cb(true)
                    else
                        SendDiscord('HACKER', '**Player:** '.. source ..' ID ['.. GetIdentifier(source) ..']\n**Reason:** Attempted To Resell Vehicle With Invalid Plate\nTried to make a lot of money', 3)
                        cb(false)
                    end
                else
                    SendDiscord('HACKER', '**Player:** '.. source ..' ID ['.. GetIdentifier(source) ..']\n**Reason:** Attempted To Resell Vehicle With Invalid Model\nTried to make a lot of money', 3)
                    cb(false)
                end
            else
                cb(false)
            end
        end)
    end)

end
client-core.lua
Core = nil

if Config['Core'] == 'ESX' then
    
    Core = exports['es_extended']:getSharedObject()

    LoadedEvent = 'esx:playerLoaded'
    ReviveEvent = 'esx_ambulancejob:revive'
    PlayerDiedHealth = 0
    TSCB = Core.TriggerServerCallback

    function GetVehicleProperties(vehicle)
        return Core.Game.GetVehicleProperties(vehicle)
    end

elseif Config['Core'] == 'QBCore' then

    Core = exports['qb-core']:GetCoreObject()
    
    LoadedEvent = 'QBCore:Client:OnPlayerLoaded'
    ReviveEvent = 'hospital:client:Revive'
    PlayerDiedHealth = 150
    TSCB = Core.Functions.TriggerCallback

    function GetVehicleProperties(vehicle)
        return Core.Functions.GetVehicleProperties(vehicle)
    end

end
server-core.lua
Core = nil

if Config['Core'] == 'ESX' then
--------------------------------------------------------------------------
---------------------------------| ESX |----------------------------------
--------------------------------------------------------------------------

    Core = exports['es_extended']:getSharedObject()

    RESCB = Core.RegisterServerCallback
    GETPFI = Core.GetPlayerFromId
    RUI = Core.RegisterUsableItem
    Accounts = {'money', 'bank'}

    function GetIdentifier(xPlayer)
        if type(xPlayer) == 'number' then
            local xPlayer = GETPFI(xPlayer)
            return xPlayer.identifier
        else
            return xPlayer.identifier
        end
    end

    function GetAccountMoney(xPlayer,account)
        return xPlayer.getAccount(account).money
    end

    function RemoveAccountMoney(xPlayer, account, amount)
        xPlayer.removeAccountMoney(account, amount)
    end

    function AddAccountMoney(xPlayer, account, amount)
        xPlayer.addAccountMoney(account, amount)
    end

elseif Config['Core'] == 'QBCore' then
--------------------------------------------------------------------------
--------------------------------| QBCore |--------------------------------
--------------------------------------------------------------------------

    Core = exports['qb-core']:GetCoreObject()
    
    RESCB = Core.Functions.CreateCallback
    GETPFI = Core.Functions.GetPlayer
    RUI = Core.Functions.CreateUseableItem
    Accounts = {'cash', 'bank'}

    function GetIdentifier(xPlayer)
        if type(xPlayer) == 'number' then
            local xPlayer = GETPFI(xPlayer)
            return xPlayer.PlayerData.license
        else
            return xPlayer.PlayerData.license
        end
    end

    function GetCitizenID(xPlayer)
        if type(xPlayer) == 'number' then
            local xPlayer = GETPFI(xPlayer)
            return xPlayer.PlayerData.citizenid
        else
            return xPlayer.PlayerData.citizenid
        end
    end

    function GetAccountMoney(xPlayer, account)
        if account == Accounts[1] then
            return xPlayer.PlayerData.money['cash']
        elseif account == Accounts[2] then
            return xPlayer.PlayerData.money['bank']
        end
    end

    function RemoveAccountMoney(xPlayer, account, amount)
        xPlayer.Functions.RemoveMoney(account, amount)
    end

    function AddAccountMoney(xPlayer, account, amount)
        xPlayer.Functions.AddMoney(account, amount)
    end
    
end

Last updated

Was this helpful?