FiveM-Fahrzeugtreibstoff: Treibstoff beim Spawn setzen und Autos bei 0 reparieren
Wie Treibstoff in FiveM funktioniert: GetVehicleFuelLevel und SetVehicleFuelLevel, Treibstoff in State Bags, Treibstoff beim Spawnen eines Autos setzen und warum Fahrzeuge mit einem leeren Tank starten.
Typische Symptome:
A freshly spawned car has the fuel gauge at 0 and the engine cuts out after a few metres.Treibstoff in FiveM ist nicht ein System. Das Spiel hat ein Native dafür, aber fast jeder Server führt eine Treibstoffressource aus, die seinen eigenen Wert behält. Dieser Artikel erklärt die Natives, wo Treibstoffressourcen den Pegel speichern und wie man Treibstoff korrekt setzt, wenn man ein Auto spawnt.
Die zwei Natives
Das Spiel speichert einen Treibstoffpegel auf jedem Fahrzeug. Du liest und schreibst ihn auf dem Client:
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
local fuel = GetVehicleFuelLevel(vehicle)
print('fuel', fuel)
SetVehicleFuelLevel(vehicle, 100.0)GetVehicleFuelLevel gibt einen Float zurück und SetVehicleFuelLevel nimmt einen Float an. Der Wert folgt dem Benzintankvolumen aus der Fahrzeug-Handhabung, daher behandeln Skripte ihn normalerweise als Prozentsatz und halten ihn zwischen 0 und 100.
Von selbst aus verbraucht das Native keinen Treibstoff. Das Spiel entwässert ihn nur in bestimmten Situationen, daher ist eine Treibstoffressource das, was Autos Treibstoff auf Basis von Geschwindigkeit und RPM verbrauchen lässt.
Wo Treibstoffressourcen den Pegel behalten
Das ist der Teil, der die meisten Probleme verursacht. Eine Treibstoffressource muss den Pegel jedes Autos speichern, und sie wählt einen von diesen Orten:
- Ein State Bag auf der Entität. Einige Ressourcen behalten den Pegel im Zustand des Fahrzeugs, zum Beispiel
Entity(vehicle).state.fuel. So funktioniert ox_fuel, und mehrere andere moderne Ressourcen tun das gleiche. Siehe State Bags für wie die Werte zwischen Server und Clients synchronisieren. - Ein Decorator. Ältere Ressourcen speichern den Pegel mit
DecorSetFloatauf dem Fahrzeug. - Nur das Native. Die einfachsten Skripte lesen
GetVehicleFuelLevelund schreibenSetVehicleFuelLevelund nichts anderes. - Die Datenbank. Viele Ressourcen speichern auch den Pegel eigener Autos, damit er zwischen Sessions erhalten bleibt, in einer
fuel-Spalte der Fahrzeugtabelle.
Ein Native-Aufruf, der nicht von dem Ort, an dem deine Ressource liest, unterstützt wird, hat keine sichtbare Wirkung. Wenn du SetVehicleFuelLevel(vehicle, 100.0) aufrufst und das Messer bleibt bei 0, liest deine Ressource eine andere Quelle.
Tipp: Öffne die Dateien der Treibstoffressource und suche nach
state.fuel,DecorundGetVehicleFuelLevel. Was immer es liest, ist das, was du schreiben musst.
Treibstoff beim Spawnen eines Autos setzen
Was immer deine Treibstoffressource verwendet, die Reihenfolge ist die gleiche. Erstelle das Fahrzeug, warte, dass es existiert, dann setze den Treibstoff:
local vehicle = CreateVehicle(model, coords.x, coords.y, coords.z, heading, true, false)
SetVehicleNumberPlateText(vehicle, plate)
-- 1. the native, for the game's own value
SetVehicleFuelLevel(vehicle, 100.0)
-- 2. the state bag, if your fuel resource reads one
Entity(vehicle).state:set('fuel', 100.0, true)Verwende nur die Zeile, die deine Ressource liest. Das Schreiben eines State-Bag-Schlüssels, den nichts liest, ist harmlos, aber sinnlos.
Einige Ressourcen bieten auch einen Export, um den Pegel zu setzen, sodass du nicht wissen musst, wo er gespeichert ist. Wenn deins das tut, bevorzuge ihn und nimm den genauen Namen aus seiner Dokumentation:
-- placeholder: the export name depends on your fuel resource
exports['your_fuel_resource']:SetFuel(vehicle, 100.0)Für ein Auto, das auf dem Server mit CreateVehicleServerSetter gebaut wird, setze den Wert auf der Serverseite durch den State Bag. Das Native SetVehicleFuelLevel läuft auf dem Client, daher musst du für vom Server erstellte Autos die net id zum Besitzer senden und dort setzen, wie in Spawning Vehicles beschrieben.
Eigene Autos kommen leer heraus
Wenn Autos aus deiner Garage mit dem gleichen niedrigen Wert jedes Mal starten, stellt die Garage einen gespeicherten Wert wieder her, der leer ist. Überprüfe die Fahrzeugtabelle, die normalerweise den letzten bekannten Pegel in einer Spalte hält:
SELECT plate, fuel FROM player_vehicles WHERE plate = 'MIC 001';Häufige Gründe:
- Die
fuel-Spalte ist0oderNULL, weil das Auto gespeichert wurde, während der Wert nicht gespeichert wurde. - Das Garage-Skript liest die Spalte nie beim Spawnen.
- Die Treibstoffressource speichert ihren eigenen Wert an anderer Stelle als die Garage liest.
Um Fahrzeuge zu reparieren, die bereits feststecken, setze die Spalte auf einen vollen Tank:
UPDATE player_vehicles SET fuel = 100 WHERE fuel IS NULL OR fuel <= 0;ESX-Server haben oft keine fuel-Spalte in owned_vehicles, da der Treibstoff in der vehicle JSON-Spalte zusammen mit den anderen Eigenschaften gespeichert ist. Siehe Fahrzeugeigenschaften für wie dieses JSON gebaut wird.
Autos feststecken bei 0 Treibstoff
Arbeite durch die üblichen Ursachen:
Die Treibstoffressource läuft nicht oder startet zu spät. Wenn sie nach der Garage startet, haben die ersten gespawnten Autos keinen Wert. Starte sie vor den Skripten, die Fahrzeuge spawnen.
Zwei Ressourcen kämpfen. Eine Treibstoffressource und ein Skript, das SetVehicleFuelLevel jeden Frame aufruft, überschreiben sich, und das Messer springt. Halte eine Quelle.
Der Pegel wird gesetzt, bevor die Entität existiert. Bei einem vernetzten Spawn muss der Aufruf nach DoesEntityExist wahr passieren, oder er wird auf nichts angewendet.
Das Modell hat einen winzigen Tank. Das Benzintankvolumen kommt aus der Handhabung. Ein benutzerdefiniertes Fahrzeug mit fPetrolTankVolume bei einem sehr niedrigen Wert entleert sich schnell. Überprüfe die Handhabungsdatei des Fahrzeugs, siehe Fahrzeughandhabung bearbeiten.
Elektrofahrzeuge. Eine Treibstoffressource, die sie nicht ausschließt, entwässert einen Tank, der nicht existiert. Die meisten Ressourcen haben eine Liste von elektrischen Modellen zum Überspringen.
Auftanken ohne Station
Für ein Test- oder Jobfahrzeug hält eine kleine Schleife den Tank voll, während der Spieler es fährt:
CreateThread(function()
while true do
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
if vehicle ~= 0 and GetVehicleFuelLevel(vehicle) < 20.0 then
SetVehicleFuelLevel(vehicle, 100.0)
end
Wait(2000)
end
end)Das zwei-Sekunden-Wait ist beabsichtigt: Treibstoff braucht keine Überprüfung auf jedem Frame, siehe Wie Wait funktioniert.
Checkliste
| Symptom | Behebung |
|---|---|
| Gespawntes Auto hat 0 Treibstoff | Stelle den Treibstoff nach dem Spawn ein, wo deine Treibstoffressource ihn liest |
SetVehicleFuelLevel ändert nichts |
Die Ressource liest einen State Bag oder Decorator: schreibe stattdessen das oder verwende seinen Export |
| Garage-Autos kommen leer heraus | Überprüfe die fuel-Spalte oder die gespeicherten Eigenschaften und stelle sicher, dass die Garage sie wiederherstellt |
| Treibstoff springt auf und ab | Zwei Skripte setzen den Pegel: halte einen |
| Vom Server erstelltes Auto hat keinen Treibstoff | Stelle den State Bag auf dem Server ein oder sende die net id zum Besitzer |
| Leerer Tank auf einem benutzerdefinierten Auto | Überprüfe fPetrolTankVolume in seiner Handhabung |
| Elektroauto verliert Treibstoff | Füge das Modell zur Elektroliste der Treibstoffressource hinzu |
Kurze Antworten
Warum hat ein Auto, das ich spawne, keinen Treibstoff?
Die Treibstoffressource speichert normalerweise den Wert an ihrem eigenen Ort, z.B. in einem State Bag, und ein neues Fahrzeug hat dort noch keinen Wert. Stelle den Treibstoff über deine Treibstoffressource direkt nach dem Spawn ein.
Reicht SetVehicleFuelLevel aus, um einen Tank zu füllen?
Nur für den eigenen Wert des Spiels. Wenn deine Treibstoffressource Treibstoff aus einem State Bag oder ihrer eigenen Tabelle liest, ignoriert sie das Native, also setze den Wert, wo die Ressource ihn liest.
Kann ich den Treibstoffverbrauch unbegrenzt machen?
Ja. Halte den Pegel mit einem Timer auf dem Maximum, oder schalte den Verbrauch in der Konfiguration deiner Treibstoffressource aus, wenn es diese Option gibt.
Scripts ohne dieses Problem
Advanced BoostingFahrzeug-Boosting per Tablet: Aufträge von Klasse D bis S+, Crews und eine Live-Warteschlange.Script ansehen →
Chameleon Paints82 schillernde Chamäleon-Lacke in einem Menü, per Klick aufgetragen.Script ansehen →
Car BombPlatziere, finde und entschärfe Autobomben — mit Zünder-Handy und C4-Minispiel.Script ansehen →