> For the complete documentation index, see [llms.txt](https://eyestore.gitbook.io/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://eyestore.gitbook.io/documentation/packages/garage.md).

# GARAGE

#### Garage Script Configuration Guide<br>

**1. General Customization**

```
Customize = {
    Framework = "NewESX", -- QBCore - ESX - NewESX - OldQBCore (Write the framework you used as in the example)
    Mysql = "oxmysql", -- oxmysql | ghmattimysql | mysql-async (Write the SQL script you use as in the example)

    AdminNewJobCar = 'newjobvehicle', -- /newjobvehicle PlayerID JobVehicle - (Example: /newjobvehicle 2 police3)
    AdminList = {
        ["license:392d20db55be8ad6069a3c5e135f59e7b0ce1c4d"],
        --["license:"],
    },

    PriceType = 'cash', -- cash - bank
    GaragesPrice = 0,
    ImpoundGaragesPrice = 600,
    JobGaragesPrice = 1,

    Carkeys = function(Plate)
        TriggerEvent('vehiclekeys:client:SetOwner', Plate) --   qb-core
    end,

    VehNotOwnedNotify = function()
        print("Vehicle Not Owner Notification")
    end,
    
    GetVehFuel = function(Veh)
        return GetVehicleFuelLevel(Veh) -- exports["fuel-script"]:GetFuel(Veh) - exports["LegacyFuel"]:GetFuel(Veh) - GetVehicleFuelLevel(Veh)
    end,

    SetVehFuel = function(Veh, Fuel)
        return SetVehicleFuelLevel(Veh, Fuel) -- exports['fuel-script']:SetFuel(Veh, Fuel) - exports['LegacyFuel']:SetFuel(Veh, Fuel) - SetVehicleFuelLevel(Veh, Fuel)
    end,
}
```

**2. Adding Garages**

To add garages, you can use the following format. Each garage should be defined with its location, type, and other features.

**Example Garage Configuration**

```
Customize.Garages = {
    {
        Blips = {
            Position = vector3(213.56, -809.54, 31.01),
            Label = "Car",
            Sprite = 357,
            Display = 4,
            Scale = 0.5,
            Color = 18,
        },
        Npc = {  Hash = "s_m_y_barman_01", Pos = vector3(213.56, -809.54, 31.01), Heading = 340.67 },
        Type = 'car', -- car, air, sea
        UIName = 'Test Pilbox Hill',
        Camera = {
            vehSpawn = vector4(236.95, -783.71, 30.63, 179.64),
            location = { posX = 233.37, posY = -789.9, posZ = 30.6, rotX = 0.0, rotY = 0.0, rotZ = -22.0, fov = 50.0 },
        },
        VehPutPos = vector3(212.39, -797.34, 30.88),
        VehSpawnPos = vector4(209.64, -791.39, 30.5, 248.63),
    },
    {
        Blips = {
            Position = vector3(463.75, -982.43, 43.69),
            Label = "Air",
            Sprite = 357,
            Display = 4,
            Scale = 0.5,
            Color = 18,
        },
        Npc = {  Hash = "s_m_y_barman_01", Pos = vector3(463.75, -982.43, 43.69), Heading = 89.74 },
        Type = 'air', -- car, air, sea
        UIName = 'Test Pilbox Hill',
        Camera = {
            vehSpawn = vector4(-75.3122, -818.490, 326.17, 201.5),
            location = { posX = -58.0, posY = -828.5, posZ = 335.17, rotX = -25.0, rotY = 0.0, rotZ = 73.2, fov = 40.0 },
        },
        VehPutPos = vector3(449.76, -981.27, 43.69),
        VehSpawnPos = vector4(449.85, -981.23, 43.69, 93.23),
    },
    {
        Blips = {
            Position = vector3(-869.43, -1491.55, 5.17),
            Label = "Sea",
            Sprite = 357,
            Display = 4,
            Scale = 0.5,
            Color = 18,
        },
        Npc = {  Hash = "s_m_y_barman_01", Pos = vector3(-869.43, -1491.55, 5.17), Heading = 112.87 },
        Type = 'sea', -- car, air, sea
        UIName = 'Test Pilbox Hill',
        Camera = {
            vehSpawn = vector4(-855.5, -1484.77, -0.47, 111.13),
            location = { posX = -868.0, posY = -1495.0, posZ = 6.31, rotX = -25.0, rotY = 0.0, rotZ = -40.0, fov = 40.0 },
        },
        VehPutPos = vector3(-858.29, -1475.77, 0.5),
        VehSpawnPos = vector4(-799.54, -1502.98, -0.08, 114.38),
    }
}
```

**4. Adding Impound Garages**

Impound garages are also added in a similar way.

**Example Impound Garage Configuration**

```
Customize.ImpoundGarages = {
    {
        Blips = {
            Position = vector3(409.43, -1623.11, 29.29),
            Label = "Impound Garages",
            Sprite = 357,
            Display = 4,
            Scale = 0.5,
            Color = 1,
        },
        Npc = {  Hash = "s_m_y_barman_01", Pos = vector3(409.43, -1623.11, 29.29), Heading = 233.95 },
        Type = 'car', -- car, air, sea
        UIName = 'Impound Garage',
        Camera = {
            vehSpawn = vector4(402.04, -1632.39, 28.9, 159.52),
            location = { posX = 402.56, posY = -1644.22, posZ = 31.76, rotX = -10.0, rotY = 0.0, rotZ = 22.0, fov = 50.0 },
        },
        VehSpawnPos = vector4(419.88, -1629.18, 28.9, 140.26),
    },
}
```

**5. Helper Functions**

The script includes several helper functions to manage framework integration and SQL execution.

**Example Helper Functions**

```
function GetFramework()
    local Get = nil
    if Customize.Framework == "ESX" then
        while Get == nil do
            TriggerEvent('esx:getSharedObject', function(Set) Get = Set end)
            Citizen.Wait(0)
        end
    end
    if Customize.Framework == "NewESX" then
        Get = exports['es_extended']:getSharedObject()
    end
    if Customize.Framework == "QBCore" then
        Get = exports["qb-core"]:GetCoreObject()
    end
    if Customize.Framework == "OldQBCore" then
        while Get == nil do
            TriggerEvent('QBCore:GetObject', function(Set) Get = Set end)
            Citizen.Wait(200)
        end
    end
    return Get
end

function ExecuteSql(query)
    local IsBusy = true
    local result = nil
    if Customize.Mysql == "oxmysql" then
        if MySQL == nil then
            exports.oxmysql:execute(query, function(data)
                result = data
                IsBusy = false
            end)
        else
            MySQL.query(query, {}, function(data)
                result = data
                IsBusy = false
            end)
        end
    elseif Customize.Mysql == "ghmattimysql" then
        exports.ghmattimysql:execute(query, {}, function(data)
            result = data
            IsBusy = false
        end)
    elseif Customize.Mysql == "mysql-async" then   
        MySQL.Async.fetchAll(query, {}, function(data)
            result = data
            IsBusy = false
        end)
    end
    while IsBusy do
        Citizen.Wait(0)
    end
    return result
end
```

#### Summary

This guide helps you configure your garage script by providing detailed examples for general customization, adding garages, job garages, impound garages, and helper functions. By following this structure, you can easily manage and expand your FiveM server's garage system.

Feel free to adjust the examples to fit your specific needs and integrate them into your GitBook documentation for better visibility and usability.
