FiveM Mechaniker-Job: Reparatur-Natives, Tuning-Mods und Job-Überprüfungen

Baue einen FiveM-Mechaniker-Job: Repariere ein Fahrzeug mit SetVehicleFixed und Gesundheits-Natives, Tuning mit SetVehicleModKit und SetVehicleMod, speichere Mods, und gerate Aktionen nach Job.

Das Symptom: dein Mechaniker repariert ein Auto und der Motor raucht immer noch, die Dellen bleiben, ein gestimmtes Teil verschwindet nach einem Neustart, oder jeder Spieler kann Fahrzeuge kostenlos reparieren.

Ein Mechaniker-Job ist zwei Jobs in einem: Reparatur (Gesundheitswerte und Natives) und Tuning (Fahrzeug-Mods). Beide laufen auf dem Client, daher ist das Teil, das du schützen musst, wer berechtigt ist, sie auszulösen.

Ein Fahrzeug reparieren

Ein Native ist nicht genug für eine saubere Reparatur. Diese Kombination macht den Job:

lua
-- client
local function repairVehicle(vehicle)
    SetVehicleFixed(vehicle)
    SetVehicleDeformationFixed(vehicle)
    SetVehicleEngineHealth(vehicle, 1000.0)
    SetVehicleBodyHealth(vehicle, 1000.0)
    SetVehicleUndriveable(vehicle, false)
    SetVehicleEngineOn(vehicle, true, true, false)
end
  • SetVehicleFixed repariert das Fahrzeug allgemein, einschließlich Reifen.
  • SetVehicleDeformationFixed entfernt die Dellen, die der erste Native hinterlassen kann.
  • SetVehicleEngineHealth und SetVehicleBodyHealth nehmen einen Wert bis zu 1000.0. Unter Null ist der Motor tot, daher macht sie wieder Sinn, es neu zu starten.

Da ein Fahrzeug eine Netzwerk-Entität ist, sollte der Client, der die Reparatur ausführt, es besitzen. Wenn die Reparatur bei deinem eigenen Auto funktioniert und nicht bei dem eines Kunden, fordere zuerst die Kontrolle an:

lua
NetworkRequestControlOfEntity(vehicle)
local timeout = 0
while not NetworkHasControlOfEntity(vehicle) and timeout < 50 do
    Wait(10)
    timeout += 1
end

Für Teilreparaturen (nur Motor, nur Karosserie), rufe nur den entsprechenden Gesundheits-Native auf. Gesundheitswerte sind auch für andere Skripte wichtig, zum Beispiel Fahrzeugschaden und Motor-Gesundheit erklärt, was jede Zahl macht.

Tuning mit SetVehicleMod

Mods sind nummerierte Slots. Zwei Regeln gelten für alle:

  1. Rufe SetVehicleModKit(vehicle, 0) vor jeder Mod-Änderung auf.
  2. Frage das Spiel, wie viele Optionen ein Slot mit GetNumVehicleMods hat. Ein Index von -1 ist das Original-Teil.
lua
-- client
local function setMod(vehicle, modType, index)
    SetVehicleModKit(vehicle, 0)
    local count = GetNumVehicleMods(vehicle, modType)
    if index >= -1 and index < count then
        SetVehicleMod(vehicle, modType, index, false)
    end
end

-- engine is mod type 11, brakes 12, transmission 13, suspension 15
setMod(vehicle, 11, 2)

-- turbo is a toggle, not a numbered mod
ToggleVehicleMod(vehicle, 18, true)

Die Überprüfung des Index gegen GetNumVehicleMods vermeidet einen stillen Fehler, wenn ein Fahrzeug weniger Optionen hat als du erwartest. Farbe und Färbung nutzen ihre eigenen Natives (SetVehicleColours und andere), daher behandle sie als ein separates Menü.

Tipp: Baue das Tuning-Menü aus dem Fahrzeug selbst auf, durchschleife die Slots mit GetNumVehicleMods, statt die Nummern hart zu kodieren. Addon-Fahrzeuge haben oft eine unterschiedliche Anzahl von Optionen.

Speichere die Mods

Das Setzen eines Mod ändert nur die Live-Entität. Wenn der Spieler das Auto in die Garage stellt und es wieder rausnimmt, ist der Mod weg, es sei denn, er wurde mit dem Fahrzeug gespeichert. Speichere den vollständigen Satz von Eigenschaften nach dem Tuning und wende sie an, wenn das Fahrzeug spawnt. Der gesamte Fluss ist in Speichere Fahzeugeigenschaften und Mods.

Job-gated Aktionen

Der Reparatur- und Tuning-Code läuft auf dem Client, daher kann ein modifizierter Client ihn für jeden aufrufen. Lege die Regel auf dem Server fest:

lua
-- server (ox_lib)
lib.callback.register('mechanic:canRepair', function(source)
    -- 1. job check: use your framework's player/job getter here
    -- 2. distance check: the player must be near a vehicle or workshop
    -- 3. item check and removal
    local removed = exports.ox_inventory:RemoveItem(source, 'repairkit', 1)
    return removed and true or false
end)
lua
-- client
lib.callback('mechanic:canRepair', false, function(ok)
    if ok then repairVehicle(vehicle) end
end)

Die Job-Überprüfung hängt von deinem Framework ab. Auf ESX lies den Job aus dem Spieler-Objekt, auf QBCore und QBox lies ihn aus den Spielerdaten. Nutze deines Frameworks Getter im Schritt 1 und vergleiche mit deinem Mechaniker-Job-Namen, wie in Füge einen Job auf ESX hinzu und Füge einen Job auf QBCore hinzu behandelt. Für das Callback-Muster über Frameworks, siehe Server-Callbacks.

Andere Dinge, die es lohnt, zu gaten:

  • Reparatur-Kits als Items, daher kostet eine Reparatur etwas und das Item wird auf dem Server entfernt.
  • Workshop-Zonen, daher öffnet sich das Tuning nur in einer Garage oder auf einer Bank.
  • Zahle den Mechaniker oder das Gesellschafts-Konto auf dem Server, nicht vom Client.

Ein Fortschrittsbalken mit einer Abbrechts-Option macht Reparaturen richtig wirken. Siehe Fortschrittsbälken auf ESX, QBCore und ox_lib.

Checkliste

Symptom Behebung
Dellen bleiben nach der Reparatur Füge SetVehicleDeformationFixed hinzu
Motor raucht immer noch Stelle die Motor-Gesundheit auf 1000.0 zurück
Reparatur funktioniert nur auf deinem eigenen Auto Fordere zuerst die Netzwerk-Kontrolle des Fahrzeugs an
SetVehicleMod macht nichts Rufe SetVehicleModKit(vehicle, 0) zuerst auf
Mod-Index außer Bereich Überprüfe GetNumVehicleMods für diesen Slot
Mods verschwinden nach dem Neustart Speichere die Eigenschaften mit dem Fahrzeug
Jeder kann reparieren Überprüfe Job, Distanz und Item auf dem Server

Kurze Antworten

Warum repariert SetVehicleFixed nicht den Karosserieschaden?

Es repariert den größten Teil des Fahrzeugs, aber nicht immer die sichtbare Verformung. Rufe auch SetVehicleDeformationFixed(vehicle) auf, und stelle die Motor- und Karosseriegesundheit selbst fest.

Warum macht SetVehicleMod nichts?

Du musst SetVehicleModKit(vehicle, 0) zuerst aufrufen. Ohne das Mod-Kit ignoriert das Spiel die Mod-Änderung.

Wie stelle ich sicher, dass nur Mechaniker reparieren können?

Überprüfe den Job auf dem Server, bevor du die Reparatur akzeptierst, und nimm das Reparatur-Item auf dem Server. Eine Client-seitige Job-Überprüfung kann von einem modifizierten Client übersprungen werden.

Scripts ohne dieses Problem

Chameleon Paints82 schillernde Chamäleon-Lacke in einem Menü, per Klick aufgetragen.Script ansehen →Item Creator V2Erstelle nutzbare Items mit Animationen, Props, Effekten und mehr — ganz ohne Code.Script ansehen →

Weiterlesen