Configuration

Tout est dans config.lua, qui reste ouvert et modifiable. Les stations sont listées dans data/stations.lua, les sites de livraison dans data/delivery.lua. Le job de livraison a sa propre page : Job de livraison.

Votre serveur, vos règles. config.lua, data/, locales/ et les pages des écrans de pompe dans html/ ne sont pas chiffrés. Vous pouvez y changer les prix, le paiement, la consommation par classe ou modèle de véhicule, la taille des réservoirs, les modèles diesel et électriques, les blips, le nom des commandes, les droits admin, les notifications, le pompiste, le job de livraison, les stations et les 19 langues. Avec hz_lib, les prix, le paiement et la paie du livreur se changent aussi en jeu depuis /hzpanel, sans redémarrage.

Dans /hzpanel

Quand hz_lib tourne, /hzpanel a un onglet Carburant. Un changement s'applique tout de suite sur le serveur et pour chaque joueur, sans redémarrage. config.lua reste la valeur par défaut : un réglage jamais enregistré dans le panel garde sa valeur de config.lua, et un serveur sans hz_lib utilise simplement config.lua. Une valeur enregistrée dans le panel l'emporte sur le fichier. Avec hz_lib 1.2.1 ou plus récent, le bouton de réinitialisation du panel efface cette valeur et le réglage suit de nouveau config.lua. Avec hz_lib 1.2.0, ce bouton enregistre à la place la valeur par défaut du panel.

  • Général : carte seulement aux pompes modernes et bornes (cardOnly), compte débité d'abord (paymentAccount), prix au litre de chaque carburant, prix de la recharge rapide et normale, prix du jerrican et de son remplissage, consommation de tous les véhicules (globalFuelConsumptionRate).
  • Métier de livreur : paie par litre livré pour chaque carburant, paie par km, gain maximum d'un livreur par heure, caution du camion.
Les écrans de pompe déjà affichés gardent leurs anciens prix jusqu'à leur prochain affichage.

Général

CléDéfautDescription
framework'auto''esx', 'qbcore', 'qbox', 'ox' ou 'standalone'. 'auto' demande à hz_lib, puis cherche le framework lui-même, puis passe en standalone.
inventory'auto''ox_inventory', 'qs-inventory', 'ps-inventory', 'codem-inventory', 'origen_inventory', 'core_inventory', 'tgiann-inventory' ou 'none'.
dialoguetrueLe pompiste et le répartiteur parlent dans la boîte de dialogue de hz_lib quand hz_lib tourne. false utilise les menus et les notifications d'ox_lib.
showBlips2Blips des stations : 0 aucun, 1 la plus proche seulement, 2 toutes.
globalFuelConsumptionRate10.0Vitesse à laquelle tous les véhicules brûlent le carburant.

Blips, commandes et admins

CléDéfautDescription
stationBlip{ sprite = 361, colour = 6, scale = 0.8 }Icône, couleur et taille des blips des stations. Les blips du job de livraison sont dans delivery.blips.
commandsvoir ci-dessousNoms des commandes de chat. Renommez-en une si un autre script l'utilise déjà.
adminAces{ 'command', 'admin', 'group.admin' }Un joueur qui a l'une de ces ACE peut utiliser les outils admin (/hzfuelsites, /hzfuelstock, /hzfuelplace).
notifyfalseVotre propre système de notifications pour tous les messages de HZ-Fuel. false = ox_lib, et le système de notifications de hz_lib pour les messages envoyés par le serveur.
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,

Paiement

CléDéfautDescription
requirePayment'auto'true fait payer les joueurs, false rend le carburant gratuit (les écrans affichent quand même le prix). 'auto' fait payer quand un système d'argent est trouvé (hz_lib, ESX, QBCore, Qbox, ou un objet argent liquide d'ox_inventory) et se coupe sinon.
paymentAccount'cash'Compte débité en premier. L'autre sert quand il est vide.
cardOnlytrueLes pompes modernes, le jerrican acheté à la pompe et les bornes prennent la carte : compte bancaire uniquement. Les stations de campagne prennent le liquide, par leur pompiste. false débite paymentAccount d'abord, puis l'autre compte.
Le prix est fixé par le serveur. Chaque plein est facturé d'après le carburant réellement servi et les prix de ce fichier. Pour brancher votre propre économie, voir setPaymentMethod.

Carburants et prix

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' },

CléDescription
labelNom sur les écrans et dans les messages.
pricePrix au litre.
consumptionMultiplicateur de consommation en roulant. Plus bas, le véhicule brûle moins.
defaultFuelTypeCarburant d'un véhicule à essence avant que quelqu'un ne le remplisse.
fuelAmountsQuantités proposées sur l'écran de la pompe après le carburant, en litres. 'full' fait le plein. Une table vide saute l'étape : la pompe coule jusqu'à ce que le joueur arrête.
refillValue / refillTickLitres par tick (0.50) et durée d'un tick en ms (300) : le débit de la pompe.
Un véhicule garde le carburant de son dernier plein, et sa consommation suit ce carburant.

Véhicules

CléDescription
dieselVehiclesModèles qui ne prennent que du diesel : camions, bus, chantier, agriculture, militaire… Tous les autres véhicules, add-ons compris, roulent à l'essence.
electric.electricVehiclesModèles électriques. Ils se rechargent à une borne, et les pompes les refusent.
tankSizesTaille du réservoir en litres par classe de véhicule. Sert à la jauge et aux écrans.
tankSizesByType / defaultTankSizeTaille du réservoir par type de véhicule (voiture 65 L, moto 15 L, bateau 180 L…). Le prix est facturé d'après cette table.
vehicleTankOverridesTaille du réservoir d'un modèle, par exemple ['panto'] = 40.
vehicleNozzleOffsetsLa trappe à carburant est trouvée toute seule sur chaque véhicule. Pour une voiture custom qui en a besoin, décalez le pistolet par modèle : ['adder'] = { nozzleOffset = { forward = -0.10, up = 0.05 } } (en mètres).

Consommation

CléDéfautDescription
consumption.tick1000Millisecondes entre deux mesures en roulant.
consumption.replicateEvery15Le niveau est envoyé aux autres joueurs toutes les N mesures…
consumption.replicateDelta2.0…ou dès qu'il a bougé de ce nombre de %.
consumption.damageLeakactivéUn réservoir abîmé (santé sous tankHealth, 700) fuit de 0,10 à 0,20 % du réservoir par mesure, en plus de ce que brûle le moteur.
consumption.classes{}Multiplicateur de consommation par classe de véhicule (0 compactes, 8 motos, 15 hélicoptères, 18 urgences…).
consumption.models{}Multiplicateur de consommation par modèle, par nom de spawn. L'emporte sur la classe.
0 veut dire que le véhicule ne consomme jamais de carburant et ne fuit jamais. Des véhicules d'urgence qui ne tombent jamais en panne sèche, des motos qui consomment moins, une supercar qui consomme plus :

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

Les multiplicateurs de classe et de modèle s'appliquent en plus de globalFuelConsumptionRate et de la consumption du carburant.


Pompes et tuyaux

CléDéfautDescription
cardInsertion.enabledtrueLe joueur glisse une carte bancaire dans la pompe avant que l'écran s'ouvre, et la reprend à la fin. model est l'objet de la carte.
insertAnim.enabledtrueGeste du bras quand le pistolet ou la prise entre dans le véhicule.
sounds.enabledtrueLecteur de carte, bips de l'écran, pistolet, moteur de pompe, recharge.
ropeSystem.maxLength8.0Distance maximale entre le pistolet et la pompe, en mètres. Au-delà, le joueur lâche le pistolet.
ropeShape.enabledtruePhysique du tuyau et du câble : longueur fixe, gravité, limite de pliage, repos au sol. false = une corde simple.
ropeShape.hoseLength / cableLength2.6 / 4.0Longueur au repos, en mètres.
ropeShape.reeltrueLe tuyau et le câble s'allongent quand le joueur s'éloigne, et restent détendus.
pumpModelsles pompes du jeuModèles de pompes servis par HZ-Fuel. Voir Cartes qui remplacent les pompes.
Les positions d'écran et de caméra de chaque modèle de pompe et de borne sont ajustées aux pompes du jeu et à la borne HZ. Laissez ces tables telles quelles.

Jerrican

CléDéfautDescription
petrolCan.enabledtrueJerricans aux pompes et chez le pompiste.
petrolCan.price1000Un jerrican neuf, plein (20 L).
petrolCan.refillPrice800Remplir le jerrican qu'on porte.
petrolCan.duration5000Millisecondes pour remplir un jerrican vide à la pompe.
petrolCanItem'WEAPON_PETROLCAN'Nom de l'objet. ox_inventory utilise WEAPON_PETROLCAN, la plupart des autres inventaires weapon_petrolcan.
Trouvés tout seuls : ox_inventory, qb-inventory (et ps / lj), qs-inventory, codem-inventory, tgiann-inventory, origen_inventory, core_inventory, hz_lib, et ESX sans inventaire à objets (le jerrican est une arme du loadout). ox_inventory garde le niveau du jerrican dans l'objet. Avec les autres, le niveau est gardé par joueur sur le serveur et survit aux redémarrages.

Un autre inventaire ? Remplissez les trois fonctions côté serveur, utilisées avant tout le reste :

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,
},


Anciennes stations et pompiste

CléDéfautDescription
oldPumps.enabledtrueLes anciennes pompes gardent l'aspect du jeu, avec leurs compteurs à rouleaux.
oldPumps.rateFactor0.75Le carburant coule à 75 % du débit des pompes modernes.
oldPumps.askAccounttrueLibre-service seulement : le joueur choisit liquide ou banque à la fin.
oldPumps.attendant.enabledtrueUn pompiste sert les stations marquées attendant = true. false = libre-service.
oldPumps.attendant.model's_m_m_autoshop_01'Son modèle de ped.
oldPumps.attendant.fuels{ 'diesel' }Ce que vendent ces stations. Les fuels propres à une station ont la priorité.
oldPumps.attendant.vehicleRange8.0Mètres entre le véhicule et la pompe.
oldPumps.attendant.canstrueIl remplit et vend aussi des jerricans, en liquide, au prix de petrolCan.price.
oldPumps.attendant.voice.enabledtrueSes propres répliques. false = les répliques génériques du jeu.
oldPumps.attendant.voice.language'auto''en' (anglais, comme les personnages du jeu), 'fr', ou 'auto' (la langue du serveur).
oldPumps.attendant.voice.fallback'en'Voix utilisée avec 'auto' quand la langue du serveur n'en a pas.
Comment il travaille : Anciennes stations et pompiste.

Recharge électrique

CléDéfautDescription
electric.enabledtrueBornes de recharge sur la carte.
electric.chargerLocations26 bornesUne ligne par borne : prop, location (vector4) et ropeLength (portée du câble).
electric.chargeTypesfast, normallabel, price pour 1 % rechargé, et time en secondes pour 0,5 %.
electric.defaultChargeType'normal'Type de charge choisi par défaut.
electric.batterySizesdefault = 80Taille de batterie en kWh par modèle, pour l'énergie et le temps affichés à l'écran.
Plus de détails dans Recharge électrique.

Remplacement drop-in

CléDéfautDescription
compatExportstout à trueRépond aux exports de LegacyFuel, qb-fuel, cdn-fuel, ps-fuel et ox_fuel. Mettez à false la ligne d'un script que vous gardez installé.
compatStateBags{ 'qb-fuel' }Statebags supplémentaires remplis avec le niveau, pour les scripts qui les lisent. fuel (ox_fuel) est toujours écrit.
Ce que les autres scripts peuvent appeler : Exports et compatibilité.

Stations

data/stations.lua liste les 27 stations : 17 modernes et 10 stations de campagne avec pompiste.

{
    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
    },
},

ChampDescription
idIdentifiant unique. Ne le renommez pas une fois le serveur en ligne : le stock de la station est gardé sous ce nom.
labelNom affiché sur les écrans et dans le job de livraison.
brandPour votre usage (exports, autres scripts). L'écran de pompe est le même partout.
coords / radiusCentre de la station et rayon d'activation.
pumpsPositions exactes des pompes de la station.
attendanttrue = un pompiste sert cette station.
attendantPostvec4(x, y, z, heading) : où il attend. Par défaut : près de la première pompe.
fuelsCarburants vendus dans cette station. Par défaut : les fuels du pompiste dans une station de campagne, tous les carburants ailleurs.

Langue

HZ-Fuel suit la langue d'ox_lib. Réglez-la dans votre server.cfg :

setr ox:locale "fr"

19 langues sont livrées dans locales/ : cs, de, en, es, et, fr, hr, hu, it, lt, nl, pl, pr, pt-br, ro, ru, tr, zh-cn et zh-tw. Les lignes manquantes reviennent à l'anglais. Pour une autre langue, copiez locales/en.json dans un nouveau fichier nommé d'après son code et traduisez-le.

Les voix des PNJ sont en anglais ou en français (voice.language). Le texte de leurs répliques dans la boîte de dialogue suit la langue de chaque joueur, comme des sous-titres.