# Installation

{% hint style="warning" %}
Ich empfehle zur Installation von Scripts **WinSCP**\
\
**FileZilla** überträgt in den meisten Fällen einige verschlüsselte Dateien nicht. Dadurch kann es passieren, dass die Scripts nicht funktionieren!
{% endhint %}

## 1. YourEquipment herunterladen und installieren

Nach dem Kauf von YourEquipment über den Tebex Store kannst du es unter folgendem Link herunterladen und über ein FTP Programm auf deinem Server hinzufügen.

{% embed url="<https://portal.cfx.re>" %}

Füge YourEquipment anschließend in deine Start Config hinzu.\
YourEquipment muss **nach** der Framework und MySQL Ressource starten.

```
start [YourEquipment]
```

## 2. SQL Import

Damit YourEquipment ordnungsgemäß funktioniert, muss die beiliegende SQL Datei (INSERT.sql) in deine Datenbank importiert werden.

{% hint style="info" %}
Ein Import der beiliegenden "Update\_x.x.sql" ist nur notwendig, wenn YourEquipment bereits installiert ist. Bei einer Neuinstallation muss *nur* die INSERT.sql importiert werden!&#x20;
{% endhint %}

## 3. Admin Zugriff (ACE Permission)

Um vollständigen Zugriff auf die Administration zu haben, sind so genannte ACE Permissions notwendig. Diese kannst du einfach in deine Start Config hinzufügen. Die License bzw. Steam ID findest du beispielsweise in der users Datenbank.

```
#ACE Permission anhand der License ID
add_ace identifier.license:xxxx "eq.admin" allow

#ACE Permission anhand der Steam ID
add_ace identifier.steam:xxxx "eq.admin" allow

#ACE Permission für Benutzer Gruppen
add_ace group.superadmin "eq.admin" allow
```

{% hint style="info" %}
Spieler mit ACE Permission haben **vollständigen** Zugriff auf die Administration. Gehe damit mit Bedacht um!
{% endhint %}

Du kannst ebenfalls in FiveM den Befehl "**/eqadmin**" eingeben. Wenn du nicht berechtigt bist, wird dir die entsprechende ACE Permissions Zeile angezeigt, die du dann kopieren und einfügen kannst.

<figure><img src="/files/2bGuj8jrBr6PpqF5bfKK" alt=""><figcaption></figcaption></figure>

## 4. Anpassungen für ESX Legacy

Für ESX Legacy sind Anpassungen notwendig, damit das Geräte Menü bei den Fahrzeugen korrekt erkannt wird.\
Öffne dazu in der Ressource *es\_extended* die Datei: *server/modules/onesync.lua*\
Suche hier nach folgender Funktion (bei Zeile 89):

```lua
function ESX.OneSync.SpawnVehicle(model, coords, heading, properties, cb)
```

Füge hier folgende Zeile ein (bei Zeile 146):

```lua
TriggerEvent("YourEquipment:entityCreated", createdVehicle)
```

Die Funktion sollte dann so aussehen:

```lua
function ESX.OneSync.SpawnVehicle(vehicleModel, coords, heading, vehicleProperties, cb, vehicleType)
    if cb and not ESX.IsFunctionReference(cb) then
        error("Invalid callback function")
    end

    vehicleModel = joaat(vehicleModel)

    local promise = not cb and promise.new()

    local function resolve(result)
        if promise then
            promise:resolve(result)
        elseif cb then
            cb(result)
        end

        return result
    end

    local function reject(err)
        if promise then
            promise:reject(err)
        end
        error(err)
    end

    CreateThread(function()
        if not vehicleType then
            local xPlayer = ESX.GetExtendedPlayers()[1]
            if xPlayer then
                vehicleType = ESX.GetVehicleType(vehicleModel, xPlayer.source)
            end
        end

        if not vehicleType then
            return reject("No players found nearby to check vehicle type! Alternatively, you can specify the vehicle type manually.")
        end

        local createdVehicle = CreateVehicleServerSetter(vehicleModel, vehicleType, coords.x, coords.y, coords.z, heading)
        local tries = 0

        local hasNetOwner = next(ESX.OneSync.GetClosestPlayer(coords, 300, nil, 0) or {}) ~= nil

        while not createdVehicle or createdVehicle == 0
            or (hasNetOwner and NetworkGetEntityOwner(createdVehicle) == -1)
            or (not hasNetOwner and not DoesEntityExist(createdVehicle)) do
            Wait(200)
            tries = tries + 1
            if tries > 40 then
                return reject(("Could not spawn vehicle - ^5%s^7!"):format(vehicleModel))
            end
        end

        -- luacheck: ignore
        SetEntityOrphanMode(createdVehicle, 2)
        local networkId = NetworkGetNetworkIdFromEntity(createdVehicle)
        Entity(createdVehicle).state:set("VehicleProperties", vehicleProperties, true)
	TriggerEvent("YourEquipment:entityCreated", createdVehicle, GetVehicleNumberPlateText(createdVehicle))
        resolve(networkId)
    end)

    if promise then
        return Citizen.Await(promise)
    end
end
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.loverp-scripts.de/love-rp-de/your-equipment/installation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
