Combustible de vehículos de FiveM: establece combustible al spawnear y arregla autos atascados a 0
Cómo funciona el combustible en FiveM: GetVehicleFuelLevel y SetVehicleFuelLevel, combustible en bolsas de estado, establecer combustible al spawnear un auto, y por qué los vehículos comienzan con un tanque vacío.
Síntomas típicos:
A freshly spawned car has the fuel gauge at 0 and the engine cuts out after a few metres.El combustible en FiveM no es un sistema. El juego tiene un nativo para ello, pero casi todos los servidores ejecutan un recurso de combustible que mantiene su propio valor. Este artículo explica los nativos, dónde los recursos de combustible almacenan el nivel, y cómo establecer el combustible correctamente cuando spawneas un auto.
Los dos nativos
El juego almacena un nivel de combustible en cada vehículo. Lo lees y escribes en el cliente:
local vehicle = GetVehiclePedIsIn(PlayerPedId(), false)
local fuel = GetVehicleFuelLevel(vehicle)
print('fuel', fuel)
SetVehicleFuelLevel(vehicle, 100.0)GetVehicleFuelLevel devuelve un flotante y SetVehicleFuelLevel toma un flotante. El valor sigue el volumen del tanque de gasolina del manejo del vehículo, por lo que los scripts normalmente lo tratan como un porcentaje y lo mantienen entre 0 y 100.
Por sí solo, el nativo no consume combustible. El juego solo lo drena en situaciones específicas, así que un recurso de combustible es lo que hace que los autos usen combustible según la velocidad y RPM.
Dónde los recursos de combustible mantienen el nivel
Esta es la parte que causa la mayoría de los problemas. Un recurso de combustible tiene que recordar el nivel de cada auto, y elige uno de estos lugares:
- Una bolsa de estado en la entidad. Algunos recursos mantienen el nivel en el estado del vehículo, por ejemplo
Entity(vehicle).state.fuel. Así es como funciona ox_fuel, y varios otros recursos modernos hacen lo mismo. Ver bolsas de estado para cómo los valores se sincronizan entre servidor y clientes. - Un decorador. Los recursos más antiguos almacenan el nivel con
DecorSetFloaten el vehículo. - Solo el nativo. Los scripts más simples leen
GetVehicleFuelLevely escribenSetVehicleFuelLevely nada más. - La base de datos. Muchos recursos también guardan el nivel de autos poseídos para que persista entre sesiones, en una columna
fuelde la tabla de vehículos.
Una llamada nativa que no está respaldada por el lugar que tu recurso lee no tiene efecto visible. Si llamas SetVehicleFuelLevel(vehicle, 100.0) y el indicador permanece a 0, tu recurso lee otra fuente.
Consejo: abre los archivos del recurso de combustible y busca
state.fuel,DecoryGetVehicleFuelLevel. Lo que lea es lo que tienes que escribir.
Establece combustible cuando spawneas un auto
Sea cual sea tu recurso de combustible, el orden es el mismo. Crea el vehículo, espera a que exista, luego establece el combustible:
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)Usa solo la línea que tu recurso lee. Escribir una clave de bolsa de estado que nada lee es inofensivo pero inútil.
Algunos recursos también proporcionan una exportación para establecer el nivel para que no tengas que saber dónde se almacena. Si el tuyo lo hace, prefiérelo, y toma el nombre exacto de su documentación:
-- placeholder: the export name depends on your fuel resource
exports['your_fuel_resource']:SetFuel(vehicle, 100.0)Para un auto construido en el servidor con CreateVehicleServerSetter, establece el valor lado del servidor a través de la bolsa de estado. El nativo SetVehicleFuelLevel se ejecuta en el cliente, así que para autos creados por servidor entregas el net id al propietario y lo estableces allí, como se describe en spawning vehicles.
Los autos poseídos salen vacíos
Si los autos de tu garaje comienzan con el mismo valor bajo cada vez, el garaje restaura un valor guardado que está vacío. Verifica la tabla de vehículos, que generalmente mantiene el último nivel conocido en una columna:
SELECT plate, fuel FROM player_vehicles WHERE plate = 'MIC 001';Razones comunes:
- La columna
fueles0oNULLporque el auto fue almacenado mientras el valor no se guardaba. - El script del garaje nunca lee la columna al spawnear.
- El recurso de combustible guarda su propio valor en otro lugar que el garaje no lee.
Para reparar vehículos que ya están atascados, establece la columna a un tanque lleno:
UPDATE player_vehicles SET fuel = 100 WHERE fuel IS NULL OR fuel <= 0;Los servidores ESX a menudo no tienen una columna fuel en owned_vehicles, ya que el combustible se guarda dentro de la columna vehicle JSON junto con las otras propiedades. Ver propiedades del vehículo para cómo se construye ese JSON.
Autos atascados a 0 combustible
Trabaja a través de las causas habituales:
El recurso de combustible no se está ejecutando o comenzó tarde. Si comienza después del garaje, los primeros autos spawneados no tienen valor. Inicia antes que los scripts que spawnean vehículos.
Dos recursos luchan. Un recurso de combustible y un script que llama SetVehicleFuelLevel cada fotograma se sobrescriben entre sí, y el indicador salta. Mantén una sola fuente.
El nivel se establece antes de que la entidad exista. En un spawn en red, la llamada tiene que ocurrir después de que DoesEntityExist sea verdadero, o se aplica a nada.
El modelo tiene un tanque diminuto. El volumen del tanque de gasolina viene del manejo. Un vehículo personalizado con fPetrolTankVolume con un valor muy bajo se vacía rápido. Verifica el archivo de manejo del vehículo, ver editar manejo de vehículos.
Vehículos eléctricos. Un recurso de combustible que no los excluye drena un tanque que no existe. La mayoría de los recursos tienen una lista de modelos eléctricos para saltar.
Repostar sin estación
Para un vehículo de prueba o de trabajo, un pequeño bucle mantiene el tanque lleno mientras el jugador lo conduce:
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)La espera de dos segundos es deliberada: el combustible no necesita un chequeo cada fotograma, ver cómo funciona Wait.
Lista de verificación
| Síntoma | Solución |
|---|---|
| El auto spawneado tiene 0 combustible | Establece el combustible después del spawn, donde tu recurso de combustible lo lee |
SetVehicleFuelLevel no cambia nada |
El recurso lee una bolsa de estado o decorador: escribe eso en su lugar, o usa su exportación |
| Los autos del garaje salen vacíos | Verifica la columna fuel o las propiedades guardadas, y asegúrate de que el garaje las restaure |
| El combustible sube y baja | Dos scripts establecen el nivel: mantén uno |
| El auto creado por servidor no tiene combustible | Establece la bolsa de estado en el servidor, o envía el net id al propietario |
| Tanque vacío en un auto personalizado | Verifica fPetrolTankVolume en su manejo |
| El auto eléctrico pierde combustible | Agrega el modelo a la lista eléctrica del recurso de combustible |
Respuestas rápidas
¿Por qué un auto que spawneo no tiene combustible?
El recurso de combustible generalmente almacena el nivel en su propio lugar, como una bolsa de estado, y un vehículo nuevo no tiene valor allí aún. Establece el combustible a través de tu recurso de combustible justo después del spawn.
¿Es SetVehicleFuelLevel suficiente para llenar un tanque?
Solo para el valor del propio juego. Si tu recurso de combustible lee el combustible desde una bolsa de estado o su propia tabla, ignora el nativo, así que establece el valor donde el recurso lo lee.
¿Puedo hacer que el consumo de combustible sea ilimitado?
Sí. Mantén el nivel al máximo en un temporizador, o apaga el consumo en la configuración de tu recurso de combustible si tiene esa opción.
Scripts que evitan este problema
Advanced BoostingBoosting de vehículos desde una tablet: contratos de clase D a S+, crews y cola en vivo.Ver script →
Chameleon Paints82 pinturas camaleón que cambian de color, en un menú de un clic.Ver script →
Car BombColoca, detecta y desactiva bombas en coches — con detonador y minijuego de C4.Ver script →