Trabajo de reparto de combustible
Cada gasolinera tiene un stock de cada combustible que vende. Los repostajes de los jugadores y los clientes NPC lo vacían; los conductores lo rellenan desde una refinería con una cisterna. Los ajustes están en config.delivery, los puntos de reparto en data/delivery.lua.
Quién puede trabajar
Los miembros del trabajo fueldelivery (delivery.jobs). Solo ellos ven los depósitos en el mapa y pueden coger un turno. HZ-Fuel crea el trabajo cuando tu framework no lo tiene, consulta Instalación. jobs = false deja trabajar a todo el mundo; también funcionan varios trabajos: { 'fueldelivery', 'trucker' }.
Un turno
- Habla con el despachador (E). Hay uno en cada refinería: El Burro Heights, Elysian Island, Palmer-Taylor, Grand Senora y Paleto Bay.
- Abre las Rutas: las gasolineras cortas de un combustible, agrupadas por zona, con los litros por entregar, la distancia y el pago estimado. Con hz_lib, tu personaje saca una tablet con un mapa de las rutas; sin él, las muestra un menú de ox_lib.
- Toma una ruta. Se cobra la fianza ($1,000), salen tu camión y tu cisterna, y llevas ropa de trabajo durante el turno. Las gasolineras de la ruta quedan reservadas para ti.
- Carga. En la toma de carga de la refinería, saca la manguera de la parte trasera de la cisterna y conéctala. El operario de patio te avisa cuando estás conectado y cuando la cisterna está llena.
- Entrega. Conduce hasta cada gasolinera de la ruta: el GPS va a la siguiente después de cada descarga. Conecta la manguera a las bocas de llenado de la gasolinera, una por combustible. Cada descarga se suma a tu nómina.
- Devuelve el camión en cualquier refinería. La fianza se devuelve, en proporción al estado del camión, y se te paga la nómina, +15 % cuando la cisterna vuelve vacía.
/hzfuelordersvuelve a abrir las rutas. Se puede tomar una nueva ruta cuando la cisterna está vacía o lleva el mismo combustible.- El combustible que queda en la cisterna puede ir a cualquier otra gasolinera que lo necesite.
- Se te avisa cuando una gasolinera va corta y cuando se queda seca.
- Con un hz_lib actualizado, los pasos del turno se muestran en los objetivos en pantalla (llenar la cisterna, cada gasolinera de la ruta, devolver el camión, la nómina acumulada). Sin él, el paso actual llega como notificación.
- Cuando la cisterna está llena o vacía, la manguera sigue conectada: desconéctala tú.
- Una cisterna dañada pierde parte de su carga (
damageLoss).
| Camión | Valor |
|---|---|
| Camión / remolque | phantom / tanker |
| Capacidad de la cisterna | 12.000 L, todos los combustibles juntos |
| Carga / descarga | 150 L/s en una refinería, 100 L/s en una gasolinera |
| Manguera de reparto | 12 m |
Las llaves del camión
Se entregan a través de qbx_vehiclekeys, qb-vehiclekeys, qs-vehiclekeys, wasabi_carlock, mono_carkeys, MrNewbVehicleKeys, cd_garage o vehicles_keys cuando uno de ellos está en marcha. ESX por sí solo no tiene llaves: el camión se queda abierto. Para otro script de llaves, rellena delivery.giveKeys (cliente) o delivery.giveKeysServer (servidor).
Cómo termina un turno
| Final | Fianza | Nómina |
|---|---|---|
| Camión devuelto en una refinería | Devuelta, según el estado del camión | Pagada, +15 % con la cisterna vacía |
Dejar el trabajo, o fuera de servicio con requireDuty | Devuelta solo si estás en un depósito con el camión | Pagada, sin bono |
Inactivo: ninguna transferencia y el camión aparcado 20 min (shift.idleMinutes) | Perdida | Pagada, sin bono |
| El juego del jugador se cierra a mitad de turno | Perdida | Pagada en la siguiente conexión |
Pago
Cada descarga se suma a la nómina del conductor:
pay = (litres x perLiter + perKm x km x litres / trailerCapacity)
x (1 + gradeBonus[grade]) x (1 + urgentBonus.bonus if the station was low)
x (1 - tax)
km es la distancia desde la refinería de la que salió la carga. Con los valores por defecto, una cisterna llena de Regular entregada a 6 km paga $1,350, $1,552 con el bono de cisterna vacía, y $1,940 a gasolineras por debajo del 20 %. Una cisterna llena de Diesel paga $1,690 con el bono de cisterna vacía. Una vuelta dura unos 15 minutos, así que un conductor gana hasta unos $6,200 por hora si hay suficiente demanda.
| Ajuste | Efecto |
|---|---|
pay.account | 'bank' o 'cash' |
pay.perLiter | Pago base por litro: Regular 0.10, Plus 0.12, Premium 0.14, Diesel 0.11 |
pay.perKm | 25 por km desde la refinería, para una cisterna llena (proporcional a los litros) |
pay.gradeBonus | Parte extra por rango del trabajo, p. ej. { [1] = 0.05, [2] = 0.10 } |
pay.urgentBonus | +25 % para un combustible al 20 % de su depósito o menos |
pay.emptyBonus | +15 % en la nómina cuando la cisterna vuelve vacía |
pay.tax | Parte que se retiene de cada pago, retirada de la economía |
pay.maxPerHour | Lo máximo que gana un conductor en 60 minutos. 0 = sin límite |
pay.payout | Tu propia función de pago, p. ej. pagar desde una cuenta de empresa |
deposit | 1000, se cobra al empezar y se devuelve con el camión |
pay.maxPerHour. Por defecto no hay ninguno.Stock y demanda
| Ajuste | Por defecto | Efecto |
|---|---|---|
stock.enabled | true | false = las gasolineras nunca se quedan sin combustible |
stock.capacity | Regular 8.000 L, Plus 5.000 L, Premium 4.000 L, Diesel 6.000 L | Tamaño del depósito por gasolinera |
stock.startLevel | 30 a 70 % | Nivel aleatorio de cada combustible en el primerísimo arranque |
stock.drainPerHour | Regular 400, Plus 200, Premium 150, Diesel 250 | Litros por hora que compran los clientes NPC, por gasolinera |
stock.drainFloor | 0.15 | Los clientes NPC dejan de comprar por debajo de esta parte del depósito |
stock.drainOnlyWithPlayers | true | Los clientes NPC solo compran mientras hay jugadores conectados |
stock.stationWeight | {} | Multiplicador por id de gasolinera, p. ej. { ls_ltd_grove = 1.5 } |
stock.perPlayer / maxPlayerFactor | 0.02 / 2.0 | +2 % de ventas por jugador conectado, como mucho el doble |
stock.perDriver | 0 | Litros extra por hora por cada conductor de turno, para que siempre haya trabajo. Esto crea dinero |
stock.lowLevel | 0.5 | Por debajo del 50 %, un combustible pasa a ser un pedido |
orders.maxStops / orders.maxHop | 5 / 4000 | Gasolineras en una ruta, y metros como máximo entre dos de ellas |
orders.reserveMinutes | 30 | Las gasolineras de una ruta siguen reservadas este tiempo después de la última transferencia del conductor |
orders.noWorkWhenFull | true | Ningún turno nuevo mientras todas las gasolineras estén por encima de lowLevel |
shift.maxDrivers / cooldownMinutes / minGrade | 0 / 5 / 0 | Conductores a la vez (0 = sin límite), minutos entre dos turnos, rango mínimo permitido |
Cuando nadie reparte
stock.autoRestock: un combustible que se queda al 20 % o menos (below) durante 60 minutos (afterMinutes) vuelve a subir al 45 % (to, sigue siendo un pedido), solo mientras no hay ningún conductor de turno (onlyWithoutDrivers). Las gasolineras sin punto de entrega en data/delivery.lua se rellenan así esté quien esté de turno.
Admin: stock de las gasolineras
/hzfuelstock lista todas las gasolineras con su nivel por combustible. Llena un combustible, una gasolinera o todas las gasolineras, o fija un nivel. Permitido con el ACE command, admin o group.admin.
Log de Discord
Turnos, entregas con su pago, rellenados automáticos y cambios de los admins. Pon el webhook en server.cfg, nunca en config.lua (los jugadores pueden leer ese archivo):
set hzf_delivery_webhook "https://discord.com/api/webhooks/..."
Puntos de reparto
data/delivery.lua contiene los lugares del trabajo:
| Sección | Qué contiene |
|---|---|
depots | Donde empieza y termina un turno: la posición del despachador y las plazas de aparcamiento del camión y del remolque |
refineries | Donde se llena la cisterna: la toma de carga (valve), o una válvula del propio mapa (arm), la plaza donde aparca el remolque y, opcionalmente, los combustibles que se venden allí |
stationTanks | Por id de gasolinera de data/stations.lua: las bocas de llenado (tank, de espaldas a una pared) y la plaza donde aparca el remolque |
stationTanks.
La ropa de trabajo del turno está en delivery.outfit (solo peds freemode), las voces del despachador y del operario de patio en delivery.voice ('en', 'fr' o 'auto'), y el propio operario de patio en delivery.yardWorker.
