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
| Clave | Por defecto | Descripció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'. |
dialogue | true | El 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. |
showBlips | 2 | Blips de las gasolineras: 0 ninguno, 1 solo el más cercano, 2 todos. |
globalFuelConsumptionRate | 10.0 | Lo rápido que gastan combustible todos los vehículos. |
Blips, comandos y admins
| Clave | Por defecto | Descripció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. |
commands | ver abajo | Nombres 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). |
notify | false | Tu 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
| Clave | Por defecto | Descripció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. |
cardOnly | true | Los 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' },
| Clave | Descripción |
label | Nombre en las pantallas y en los mensajes. |
price | Precio por litro. |
consumption | Multiplicador de consumo al conducir. Más bajo gasta menos. |
defaultFuelType | Tipo con el que funciona un vehículo de gasolina antes de que nadie lo llene. |
fuelAmounts | Cantidades 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 / refillTick | Litros 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
| Clave | Descripción |
dieselVehicles | Modelos 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.electricVehicles | Modelos eléctricos. Se cargan en un cargador eléctrico, y los surtidores los rechazan. |
tankSizes | Tamaño del depósito en litros por clase de vehículo. Lo usan el indicador y las pantallas. |
tankSizesByType / defaultTankSize | Tamañ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. |
vehicleTankOverrides | Tamaño del depósito de un modelo, p. ej. ['panto'] = 40. |
vehicleNozzleOffsets | La 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
| Clave | Por defecto | Descripción |
consumption.tick | 1000 | Milisegundos entre dos lecturas al conducir. |
consumption.replicateEvery | 15 | El nivel se envía a los demás jugadores cada N lecturas… |
consumption.replicateDelta | 2.0 | …o en cuanto ha variado este tanto por ciento. |
consumption.damageLeak | activado | Un 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
| Clave | Por defecto | Descripción |
cardInsertion.enabled | true | El 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.enabled | true | Animación del brazo cuando la pistola o el conector entran en el vehículo. |
sounds.enabled | true | Lector de tarjetas, pitidos de la pantalla, pistola, motor del surtidor, carga. |
ropeSystem.maxLength | 8.0 | Hasta dónde llega la pistola desde el surtidor, en metros. Más allá, el jugador la suelta. |
ropeShape.enabled | true | Física de la manguera y del cable: longitud fija, gravedad, límite de curvatura, descansa en el suelo. false = una cuerda simple. |
ropeShape.hoseLength / cableLength | 2.6 / 4.0 | Longitud en reposo, en metros. |
ropeShape.reel | true | La manguera y el cable se alargan cuando el jugador se aleja, y quedan holgados. |
pumpModels | los surtidores del juego | Modelos 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
| Clave | Por defecto | Descripción |
petrolCan.enabled | true | Bidones en los surtidores y del gasolinero. |
petrolCan.price | 1000 | Un bidón nuevo, lleno (20 L). |
petrolCan.refillPrice | 800 | Rellenar el bidón que llevas. |
petrolCan.duration | 5000 | Milisegundos 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
| Clave | Por defecto | Descripción |
oldPumps.enabled | true | Los surtidores antiguos conservan el aspecto del juego, con contadores rodantes. |
oldPumps.rateFactor | 0.75 | El combustible sale al 75 % del caudal de los surtidores modernos. |
oldPumps.askAccount | true | Solo en autoservicio: el jugador elige efectivo o banco al final. |
oldPumps.attendant.enabled | true | Un 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.vehicleRange | 8.0 | Metros entre el vehículo y el surtidor. |
oldPumps.attendant.cans | true | También llena y vende bidones, en efectivo, a petrolCan.price. |
oldPumps.attendant.voice.enabled | true | Sus 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
| Clave | Por defecto | Descripción |
electric.enabled | true | Cargadores eléctricos en el mapa. |
electric.chargerLocations | 26 cargadores | Una línea por cargador: prop, location (vector4) y ropeLength (hasta dónde llega el cable). |
electric.chargeTypes | fast, normal | label, price por cada 1 % recargado, y time en segundos por cada 0,5 %. |
electric.defaultChargeType | 'normal' | Tipo de carga elegido por defecto. |
electric.batterySizes | default = 80 | Tamañ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
| Clave | Por defecto | Descripción |
compatExports | todos en true | Responder 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
},
},
| Campo | Descripción |
id | Id único. No lo cambies una vez que tu servidor esté en marcha: el stock de la gasolinera se guarda con él. |
label | Nombre que se muestra en las pantallas y en el trabajo de reparto. |
brand | Para tu propio uso (exports, otros scripts). La pantalla del surtidor es la misma en todas partes. |
coords / radius | Centro de la gasolinera y radio de activación. |
pumps | Posiciones exactas de los surtidores de la gasolinera. |
attendant | true = un gasolinero atiende esta gasolinera. |
attendantPost | vec4(x, y, z, heading): dónde espera. Por defecto: junto al primer surtidor. |
fuels | Combustibles 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.