Configuración

Todo está en config.lua, que queda abierto y editable. Las gasolineras están en data/stations.lua, los puntos de reparto en data/delivery.lua. El trabajo de reparto tiene su propia página: Trabajo de reparto de combustible.

Tu servidor, tus reglas. config.lua, data/, locales/ y las páginas de las pantallas de los surtidores en html/ no están cifrados: puedes cambiar los precios, el pago, el consumo por clase o modelo de vehículo, el tamaño de los depósitos, los modelos diésel y eléctricos, los blips, los nombres de los comandos, los permisos de admin, las notificaciones, el gasolinero, el trabajo de reparto, las gasolineras y los 19 idiomas. Con hz_lib, los precios, el pago y la paga del conductor también se cambian en el juego desde /hzpanel, sin reiniciar.

En /hzpanel

Con hz_lib en marcha, /hzpanel tiene una pestaña Combustible. Un cambio se aplica al momento en el servidor y para todos los jugadores, sin reiniciar. config.lua sigue siendo el valor por defecto: un ajuste que nunca guardas en el panel conserva su valor de config.lua, y un servidor sin hz_lib simplemente usa config.lua. Un valor guardado en el panel manda sobre el archivo. Con hz_lib 1.2.1 o posterior, el botón de restablecer del panel borra ese valor y el ajuste vuelve a seguir config.lua. Con hz_lib 1.2.0, el botón de restablecer guarda en su lugar el valor por defecto del panel.

  • General: solo tarjeta en surtidores modernos y cargadores (cardOnly), cuenta que se cobra primero (paymentAccount), precio por litro de cada combustible, precios de la carga rápida y normal, precios del bidón y de su relleno, consumo de todos los vehículos (globalFuelConsumptionRate).
  • Trabajo de reparto: paga por litro entregado de cada combustible, paga por km, máximo que gana un conductor por hora, fianza del camión.
Las pantallas de surtidor que ya se muestran conservan sus precios anteriores hasta que se vuelven a mostrar.

General

ClavePor defectoDescripción
framework'auto''esx', 'qbcore', 'qbox', 'ox' o 'standalone'. 'auto' pregunta a hz_lib, luego busca el framework por sí mismo y, si no, funciona en standalone.
inventory'auto''ox_inventory', 'qs-inventory', 'ps-inventory', 'codem-inventory', 'origen_inventory', 'core_inventory', 'tgiann-inventory' o 'none'.
dialoguetrueEl gasolinero y el despachador hablan en el cuadro de diálogo de hz_lib cuando hz_lib está en marcha. false usa los menús y las notificaciones de ox_lib.
showBlips2Blips de las gasolineras: 0 ninguno, 1 solo el más cercano, 2 todos.
globalFuelConsumptionRate10.0Lo rápido que gastan combustible todos los vehículos.

Blips, comandos y admins

ClavePor defectoDescripción
stationBlip{ sprite = 361, colour = 6, scale = 0.8 }Icono, color y tamaño de los blips de las gasolineras. Los blips del trabajo de reparto están en delivery.blips.
commandsver abajoNombres de los comandos de chat. Cambia el nombre de uno si otro script ya lo usa.
adminAces{ 'command', 'admin', 'group.admin' }Un jugador con cualquiera de estos ACE puede usar las herramientas de admin (/hzfuelsites, /hzfuelstock, /hzfuelplace).
notifyfalseTu propio sistema de notificaciones para todos los mensajes de HZ-Fuel. false = ox_lib, y el sistema de notificaciones de hz_lib para los mensajes que envía el servidor.
commands = {
    fuelType = 'fueltype',      -- what the current vehicle drinks
    tanker = 'tanker',          -- delivery job: what the trailer carries
    orders = 'hzfuelorders',    -- delivery job: the tours board
    stock = 'hzfuelstock',      -- admin: station stocks
    sites = 'hzfuelsites',      -- admin: stations and delivery points
    place = 'hzfuelplace',      -- admin: move a delivery point to where you stand
},

-- called on the client with ox_lib's notify table { title, description, type, duration }
notify = function(data)
    exports['my_notify']:Alert(data.title or 'Fuel', data.description, data.type, 5000)
end,

Pago

ClavePor defectoDescripción
requirePayment'auto'true cobra a los jugadores, false hace el combustible gratis (las pantallas siguen mostrando el precio). 'auto' cobra cuando encuentra un sistema de dinero (hz_lib, ESX, QBCore, Qbox, o un objeto de efectivo de ox_inventory) y se desactiva si no.
paymentAccount'cash'Cuenta que se cobra primero. La otra se usa cuando esta está vacía.
cardOnlytrueLos surtidores modernos, el bidón comprado en un surtidor y los cargadores eléctricos aceptan tarjeta: solo cuenta bancaria. Las gasolineras rurales aceptan efectivo, a través de su gasolinero. false cobra primero paymentAccount y luego la otra cuenta.
El precio lo fija el servidor. Cada repostaje se cobra según el combustible realmente servido y los precios de este archivo. Para conectar tu propia economía, consulta setPaymentMethod.

Tipos de combustible y precios

fuelTypes = {
    regular = { label = 'Regular', price = 2.50, consumption = 1.0 },
    plus    = { label = 'Plus',    price = 3.00, consumption = 0.9 },
    premium = { label = 'Premium', price = 3.50, consumption = 0.8 },
    diesel  = { label = 'Diesel',  price = 2.80, consumption = 0.85 },
},
defaultFuelType = 'regular',
fuelAmounts = { 20, 40, 'full' },

ClaveDescripción
labelNombre en las pantallas y en los mensajes.
pricePrecio por litro.
consumptionMultiplicador de consumo al conducir. Más bajo gasta menos.
defaultFuelTypeTipo con el que funciona un vehículo de gasolina antes de que nadie lo llene.
fuelAmountsCantidades ofrecidas en la pantalla del surtidor después del tipo, en litros. 'full' llena el depósito. Una tabla vacía se salta el paso: el surtidor sigue hasta que el jugador lo para.
refillValue / refillTickLitros por tick (0.50) y duración del tick en ms (300): el caudal del surtidor.
Un vehículo conserva el tipo con el que se llenó por última vez, y su consumo sigue ese tipo.

Vehículos

ClaveDescripción
dieselVehiclesModelos que solo admiten diésel: camiones, autobuses, construcción, agrícolas, militares… Todos los demás vehículos, add-ons incluidos, funcionan con gasolina.
electric.electricVehiclesModelos eléctricos. Se cargan en un cargador eléctrico, y los surtidores los rechazan.
tankSizesTamaño del depósito en litros por clase de vehículo. Lo usan el indicador y las pantallas.
tankSizesByType / defaultTankSizeTamaño del depósito por tipo de vehículo (coche 65 L, moto 15 L, barco 180 L…). El precio se cobra según esta tabla.
vehicleTankOverridesTamaño del depósito de un modelo, p. ej. ['panto'] = 40.
vehicleNozzleOffsetsLa tapa del depósito se encuentra sola en cada vehículo. Para un coche custom que lo necesite, mueve la pistola por modelo: ['adder'] = { nozzleOffset = { forward = -0.10, up = 0.05 } } (metros).

Consumo

ClavePor defectoDescripción
consumption.tick1000Milisegundos entre dos lecturas al conducir.
consumption.replicateEvery15El nivel se envía a los demás jugadores cada N lecturas…
consumption.replicateDelta2.0…o en cuanto ha variado este tanto por ciento.
consumption.damageLeakactivadoUn depósito dañado (salud por debajo de tankHealth, 700) pierde del 0,10 al 0,20 % del depósito por lectura, además de lo que quema el motor.
consumption.classes{}Multiplicador de consumo por clase de vehículo (0 compactos, 8 motos, 15 helicópteros, 18 emergencias…).
consumption.models{}Multiplicador de consumo por modelo, por nombre de spawn. Tiene prioridad sobre la clase.
0 significa que el vehículo nunca gasta combustible ni pierde nada. Vehículos de emergencia que nunca se quedan sin combustible, motos que gastan menos, un superdeportivo que gasta más:

consumption = {
    -- tick, replicateEvery, replicateDelta, damageLeak as above
    classes = { [18] = 0.0, [8] = 0.6 },
    models = { adder = 1.5 },
},

Los multiplicadores de clase y de modelo se aplican además de globalFuelConsumptionRate y del consumption del tipo de combustible.


Surtidores y mangueras

ClavePor defectoDescripción
cardInsertion.enabledtrueEl jugador mete una tarjeta bancaria en el surtidor antes de que se abra la pantalla, y la recupera al final. model es el prop de la tarjeta.
insertAnim.enabledtrueAnimación del brazo cuando la pistola o el conector entran en el vehículo.
sounds.enabledtrueLector de tarjetas, pitidos de la pantalla, pistola, motor del surtidor, carga.
ropeSystem.maxLength8.0Hasta dónde llega la pistola desde el surtidor, en metros. Más allá, el jugador la suelta.
ropeShape.enabledtrueFísica de la manguera y del cable: longitud fija, gravedad, límite de curvatura, descansa en el suelo. false = una cuerda simple.
ropeShape.hoseLength / cableLength2.6 / 4.0Longitud en reposo, en metros.
ropeShape.reeltrueLa manguera y el cable se alargan cuando el jugador se aleja, y quedan holgados.
pumpModelslos surtidores del juegoModelos de surtidor que gestiona HZ-Fuel. Consulta Mapas que reemplazan los surtidores.
Las posiciones de la pantalla y de la cámara de cada modelo de surtidor y de cargador están ajustadas a los surtidores del juego y al cargador HZ. Deja esas tablas como están.

Bidón de gasolina

ClavePor defectoDescripción
petrolCan.enabledtrueBidones en los surtidores y del gasolinero.
petrolCan.price1000Un bidón nuevo, lleno (20 L).
petrolCan.refillPrice800Rellenar el bidón que llevas.
petrolCan.duration5000Milisegundos para llenar un bidón vacío en el surtidor.
petrolCanItem'WEAPON_PETROLCAN'Nombre del objeto. ox_inventory usa WEAPON_PETROLCAN, la mayoría de los demás inventarios weapon_petrolcan.
Se detectan solos: ox_inventory, qb-inventory (y ps / lj), qs-inventory, codem-inventory, tgiann-inventory, origen_inventory, core_inventory, hz_lib, y ESX sin inventario de objetos (el bidón es un arma del loadout). ox_inventory guarda el nivel del bidón en el objeto. Con los demás, el nivel se guarda por jugador en el servidor y sobrevive a los reinicios.

¿Otro inventario? Rellena las tres funciones del lado del servidor, que se usan antes que nada:

petrolCan = {
    has = function(source) return exports['my_inventory']:HasItem(source, 'weapon_petrolcan', 1) end,
    give = function(source) return exports['my_inventory']:AddItem(source, 'weapon_petrolcan', 1) end,
    canCarry = function(source) return exports['my_inventory']:CanCarryItem(source, 'weapon_petrolcan', 1) end,
},


Gasolineras antiguas y gasolinero

ClavePor defectoDescripción
oldPumps.enabledtrueLos surtidores antiguos conservan el aspecto del juego, con contadores rodantes.
oldPumps.rateFactor0.75El combustible sale al 75 % del caudal de los surtidores modernos.
oldPumps.askAccounttrueSolo en autoservicio: el jugador elige efectivo o banco al final.
oldPumps.attendant.enabledtrueUn gasolinero atiende las gasolineras marcadas con attendant = true. false = autoservicio.
oldPumps.attendant.model's_m_m_autoshop_01'Su modelo de ped.
oldPumps.attendant.fuels{ 'diesel' }Lo que venden estas gasolineras. El fuels propio de una gasolinera tiene prioridad.
oldPumps.attendant.vehicleRange8.0Metros entre el vehículo y el surtidor.
oldPumps.attendant.canstrueTambién llena y vende bidones, en efectivo, a petrolCan.price.
oldPumps.attendant.voice.enabledtrueSus propias frases de voz. false = las frases genéricas del juego.
oldPumps.attendant.voice.language'auto''en' (inglés, como los personajes del juego), 'fr', o 'auto' (el idioma del servidor).
oldPumps.attendant.voice.fallback'en'Voz que se usa con 'auto' cuando el idioma del servidor no tiene ninguna.
Cómo trabaja: Gasolineras antiguas y gasolinero.

Carga eléctrica

ClavePor defectoDescripción
electric.enabledtrueCargadores eléctricos en el mapa.
electric.chargerLocations26 cargadoresUna línea por cargador: prop, location (vector4) y ropeLength (hasta dónde llega el cable).
electric.chargeTypesfast, normallabel, price por cada 1 % recargado, y time en segundos por cada 0,5 %.
electric.defaultChargeType'normal'Tipo de carga elegido por defecto.
electric.batterySizesdefault = 80Tamaño de la batería en kWh por modelo, para la energía y el tiempo que muestra la pantalla.
Más en Carga eléctrica.

Reemplazo directo

ClavePor defectoDescripción
compatExportstodos en trueResponder a los exports de LegacyFuel, qb-fuel, cdn-fuel, ps-fuel y ox_fuel. Pon en false la línea de un script que mantengas instalado.
compatStateBags{ 'qb-fuel' }Statebags adicionales que se rellenan con el nivel de combustible, para los scripts que los leen. fuel (ox_fuel) se escribe siempre.
Lo que pueden llamar otros scripts: Exports y compatibilidad.

Gasolineras

data/stations.lua lista las 27 gasolineras: 17 modernas y 10 rurales con gasolinero.

{
    id = 'ls_ltd_grove',
    brand = 'ltd',
    label = 'LTD Grove Street',
    coords = vec3(-71.28, -1761.16, 29.48),
    radius = 60.0,
    pumps = {
        vec3(-63.61, -1767.93, 28.26),
        -- one line per pump
    },
},

CampoDescripción
idId único. No lo cambies una vez que tu servidor esté en marcha: el stock de la gasolinera se guarda con él.
labelNombre que se muestra en las pantallas y en el trabajo de reparto.
brandPara tu propio uso (exports, otros scripts). La pantalla del surtidor es la misma en todas partes.
coords / radiusCentro de la gasolinera y radio de activación.
pumpsPosiciones exactas de los surtidores de la gasolinera.
attendanttrue = un gasolinero atiende esta gasolinera.
attendantPostvec4(x, y, z, heading): dónde espera. Por defecto: junto al primer surtidor.
fuelsCombustibles que se venden en esta gasolinera. Por defecto: los fuels del gasolinero en una gasolinera rural, todos los tipos en las demás.

Idioma

HZ-Fuel sigue el idioma de ox_lib. Configúralo en tu server.cfg:

setr ox:locale "fr"

Se incluyen 19 idiomas en locales/: cs, de, en, es, et, fr, hr, hu, it, lt, nl, pl, pr, pt-br, ro, ru, tr, zh-cn y zh-tw. Las líneas que falten usan el inglés. Para otro idioma, copia locales/en.json a un archivo nuevo con el nombre de su código y tradúcelo.

Las voces de los NPC están en inglés o en francés (voice.language). El texto de sus frases en el cuadro de diálogo sigue el idioma de cada jugador, como unos subtítulos.