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:
-- 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)
endSetVehicleFixedrepariert das Fahrzeug allgemein, einschließlich Reifen.SetVehicleDeformationFixedentfernt die Dellen, die der erste Native hinterlassen kann.SetVehicleEngineHealthundSetVehicleBodyHealthnehmen einen Wert bis zu1000.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:
NetworkRequestControlOfEntity(vehicle)
local timeout = 0
while not NetworkHasControlOfEntity(vehicle) and timeout < 50 do
Wait(10)
timeout += 1
endFü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:
- Rufe
SetVehicleModKit(vehicle, 0)vor jeder Mod-Änderung auf. - Frage das Spiel, wie viele Optionen ein Slot mit
GetNumVehicleModshat. Ein Index von-1ist das Original-Teil.
-- 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:
-- 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)-- 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.

