> ## Documentation Index
> Fetch the complete documentation index at: https://docs.thunder-studio.net/llms.txt
> Use this file to discover all available pages before exploring further.

# Exemples

> Intégrer ts-persistence dans d’autres scripts.

Quand un véhicule est supprimé par une commande admin ou rangé en garage, il faut souvent le retirer de la persistance pour qu’il ne réapparaisse pas plus tard.\
Voici des exemples avec l’export `ForgetVehicle`.

## Commande supprimer véhicule (`/dv`)

Si vous supprimez un véhicule à la main, retirez-le de la persistance pour éviter qu’il soit restauré automatiquement.

<Tabs>
  <Tab title="QBCore">
    Ajoutez : `exports['ts-persistence']:ForgetVehicle(nil, QBCore.Functions.GetPlate(veh))`

    ```lua resources/[qb]/qb-core/client/events.lua theme={null}
        RegisterNetEvent('QBCore:Command:DeleteVehicle', function()
            local ped = PlayerPedId()
            local veh = GetVehiclePedIsUsing(ped)
            if veh ~= 0 then
                -- Retirer le véhicule de la persistance
                exports['ts-persistence']:ForgetVehicle(nil, QBCore.Functions.GetPlate(veh))
                
                SetEntityAsMissionEntity(veh, true, true)
                DeleteVehicle(veh)
            else
                local pcoords = GetEntityCoords(ped)
                local vehicles = GetGamePool('CVehicle')
                for _, v in pairs(vehicles) do
                    if #(pcoords - GetEntityCoords(v)) <= 5.0 then
                        -- Retirer le véhicule de la persistance
                        exports['ts-persistence']:ForgetVehicle(nil, QBCore.Functions.GetPlate(v))
                        
                        SetEntityAsMissionEntity(v, true, true)
                        DeleteVehicle(v)
                    end
                end
            end
        end)
    ```
  </Tab>

  <Tab title="ESX">
    Ajoutez avant `DeleteEntity(Vehicle)` :

    ```lua theme={null}
    local plate = GetVehicleNumberPlateText(Vehicle)
    if not plate or plate == "" then
        print("Aucune plaque pour le véhicule " .. tostring(Vehicle))
    else
        local success = exports['ts-persistence']:ForgetVehicle(nil, plate, true)
        if not success then print("Échec ForgetVehicle " .. tostring(Vehicle)) end
    end
    ```

    ```lua [core]\es_extended\server\modules\commands.lua:113-173 theme={null}
        ESX.RegisterCommand(
            { "cardel", "dv" },
            "admin",
            function(xPlayer, args)
                local ped = GetPlayerPed(xPlayer.source)
                local pedVehicle = GetVehiclePedIsIn(ped, false)

                if DoesEntityExist(pedVehicle) then
                    local plate = GetVehicleNumberPlateText(pedVehicle)
                    if not plate or plate == "" then
                        print("No plate found for vehicle " .. tostring(pedVehicle))
                    else
                        local success = exports['ts-persistence']:ForgetVehicle(nil, plate, true)
                        if not success then print("Failed to forget vehicle " .. tostring(pedVehicle)) end
                    end
                    DeleteEntity(pedVehicle)
                end

                local coords = GetEntityCoords(ped)
                local Vehicles = ESX.OneSync.GetVehiclesInArea(coords, tonumber(args.radius) or 5.0)
                for i = 1, #Vehicles do
                    local Vehicle = NetworkGetEntityFromNetworkId(Vehicles[i])
                    if DoesEntityExist(Vehicle) then

                        local plate = GetVehicleNumberPlateText(Vehicle)
                        if not plate or plate == "" then
                            print("Aucune plaque pour le véhicule " .. tostring(Vehicle))
                        else
                            local success = exports['ts-persistence']:ForgetVehicle(nil, plate, true)
                            if not success then print("Échec ForgetVehicle " .. tostring(Vehicle)) end
                        end

                        DeleteEntity(Vehicle)
                    end
                end
                if Config.AdminLogging then
                    ESX.DiscordLogFields("UserActions", "Delete Vehicle /dv Triggered!", "pink", {
                        { name = "Player", value = xPlayer and xPlayer.name or "Server Console", inline = true },
                        { name = "ID",     value = xPlayer and xPlayer.source or "Unknown ID",   inline = true },
                    })
                end
            end,
            false,
            {
                help = TranslateCap("command_cardel"),
                validate = false,
                arguments = {
                    { name = "radius", validate = false, help = TranslateCap("command_cardel_radius"), type = "number" },
                },
            }
        )
    ```
  </Tab>
</Tabs>

## Synchroniser l'etat de verrouillage des portes

Quand votre script de cles verrouille/deverrouille un vehicule, mettez aussi a jour `ts-persistence` avec :

`exports['ts-persistence']:UpdateDoorStatus(vehicle, status)`

* `status = 2` pour verrouiller
* `status = 1` pour deverrouiller

Exemple avec `lfKeys` (meme logique a appliquer a n'importe quel script de cles) :

```lua theme={null}
if locked == 1 or locked == 0 then
    -- votre logique de lock
    exports['ts-persistence']:UpdateDoorStatus(vehicle, 2)
elseif locked == 2 then
    -- votre logique d'unlock
    exports['ts-persistence']:UpdateDoorStatus(vehicle, 1)
end
```

Important : l'exemple `lfKeys` est seulement une reference.\
Pour tout autre script de cles, appelez simplement `UpdateDoorStatus` juste apres le changement de statut des portes.

## Intégration à un système de garage

Lorsqu’un véhicule est correctement rangé, appelez l’export pour qu’il ne soit plus restauré par la persistance.

Exemple avec `qb-garages` quand un véhicule est déposé :

<Tabs>
  <Tab title="QBCore">
    Ajoutez : `exports['ts-persistence']:ForgetVehicle(nil, plate)`

    ```lua resources/[qb]/qb-garages/client/main.lua theme={null}
        local function DepositVehicle(veh, data)
            local plate = QBCore.Functions.GetPlate(veh)
            QBCore.Functions.TriggerCallback('qb-garages:server:canDeposit', function(canDeposit)
                if canDeposit then
                    local bodyDamage = math.ceil(GetVehicleBodyHealth(veh))
                    local engineDamage = math.ceil(GetVehicleEngineHealth(veh))
                    local totalFuel = exports[Config.FuelResource]:GetFuel(veh)
                    TriggerServerEvent('qb-mechanicjob:server:SaveVehicleProps', QBCore.Functions.GetVehicleProperties(veh))
                    TriggerServerEvent('qb-garages:server:updateVehicleStats', plate, totalFuel, engineDamage, bodyDamage)
                    
                    -- Retirer le véhicule de la persistance
                    exports['ts-persistence']:ForgetVehicle(nil, plate)
                    
                    CheckPlayers(veh)
                    if plate then TriggerServerEvent('qb-garages:server:UpdateOutsideVehicle', plate, nil) end
                    QBCore.Functions.Notify(Lang:t('success.vehicle_parked'), 'primary', 4500)
                else
                    QBCore.Functions.Notify(Lang:t('error.not_owned'), 'error', 3500)
                end
            end, plate, data.type, data.indexgarage, 1)
        end
    ```
  </Tab>

  <Tab title="ESX">
    Ajoutez avant `ESX.Game.DeleteVehicle(vehicle)` : `exports['ts-persistence']:ForgetVehicle(nil, ESX.Game.GetPlate(vehicle))`

    ```lua [esx_addons]\esx_garage\client\main.lua:344-359 theme={null}
        if isInVehicle then
            if IsControlJustReleased(0, 38) then
                local vehicle = GetVehiclePedIsIn(playerPed, false)
                local vehicleProps = ESX.Game.GetVehicleProperties(vehicle)
                ESX.TriggerServerCallback('esx_garage:checkVehicleOwner', function(owner)
                    if owner then
                        exports['ts-persistence']:ForgetVehicle(nil, ESX.Game.GetPlate(vehicle))
                        ESX.Game.DeleteVehicle(vehicle)
                        TriggerServerEvent('esx_garage:updateOwnedVehicle', true, currentMarker, nil,
                            {vehicleProps = vehicleProps})
                    else
                        ESX.ShowNotification(TranslateCap('not_owning_veh'), 'error')
                    end
                end, vehicleProps.plate)
            end
        end
    ```
  </Tab>
</Tabs>
