mri-QboxResourcesMaji Gasdelivery

maji-gasdelivery — Manual

Emprego de caminhoneiro: alugue caminhão e tanque, encha o tanque no depósito e abasteça os postos de gasolina espalhados por Los Santos.


Sumário

  1. Dependências
  2. Instalação
  3. Configuração
  4. Fluxo do trabalho
  5. Menu do NPC
  6. Integrações
  7. Entrypoints para outros recursos
  8. Estrutura de arquivos

Dependências

RecursoObrigatórioObservação
qb-coreSimDeclarado em dependencies. Framework, dinheiro, notificações, progressbar e spawn de veículos
qb-targetSimDeclarado em dependencies. Único target suportado (Config.Target = 'qb')
ox_libSimMenu de contexto do NPC e lib.callback
PolyZoneSimCarregado via @PolyZone/client.lua e @PolyZone/BoxZone.lua. Delimita a área do depósito
rep-talkNPCSimO NPC “Seu Wilson” é criado por exports['rep-talkNPC']:CreateNPC. Sem ele não há como iniciar o trabalho
cdn-fuelSimValor padrão de Config.FuelScript. Usado em exports[Config.FuelScript]:SetFuel ao spawnar o caminhão
qb-vehiclekeys ou mk_vehiclekeysSimEntrega as chaves do caminhão alugado. Escolhido em Config.VehicleKeys
qb-phoneNãoEnvia o e-mail com o próximo destino (qb-phone:server:sendNewMail). Sem ele o blip ainda é criado
InteractSoundNãoEfeitos sonoros de bico e abastecimento (InteractSound_SV:PlayOnSource)

Instalação

  1. Copie a pasta maji-gasdelivery para resources/.
  2. Adicione ao server.cfg:
    ensure maji-gasdelivery
  3. Copie os .ogg de sounds/ para a pasta de sons do seu recurso de InteractSound. Os nomes usados no código são: pickupnozzle, putbacknozzle, refuel, fuelstop.
  4. Não há SQL nem itens de inventário a cadastrar.

Configuração

Arquivo: config.lua.

CampoTipoObrigatórioDescrição
Config.DebugboolSimAtiva prints de diagnóstico no console (IDs de veículo, zona, cooldown)
Config.BliparraySimBlips do ponto de início. Cada item usa title, color, id (sprite) e x/y/z
Config.TargetstringSimSistema de target. Só 'qb' é suportado — o suporte a ox foi removido
Config.UseMenuboolSimPresente no config, mas não é lido em nenhum lugar do código. O menu de contexto é sempre usado
Config.MenustringSimIdem: declarado, mas não consumido pelo código
Config.PedTypestringSimModelo do NPC do trabalho. Padrão: a_m_m_ktown_01
Config.VehicleKeysstringSim'qb-vehiclekeys' ou 'mk_vehiclekeys'
Config.TruckToSpawnstringSimModelo do caminhão. Precisa poder puxar um trailer grande. Padrão: packer
Config.TrailerToSpawnstringSimModelo do tanque. Deve ser uma variante de tanker, senão a corda do bico fica fora de posição. Padrão: tanker2
Config.PayPerFuelingnumberSimPagamento por posto abastecido. É um math.random(1200, 2500) avaliado uma única vez no carregamento do recurso — o valor fica fixo até o próximo restart, e o pagamento final é ele multiplicado pelo número de postos
Config.FuelScriptstringSimRecurso de combustível usado no SetFuel do caminhão: cdn-fuel, ps-fuel ou LegacyFuel
Config.PayTypestringSimConta usada tanto para cobrar quanto para pagar: 'bank' ou 'cash'
Config.TruckPricenumberSimCusto de alugar o caminhão + tanque. Padrão: 1000
Config.TankPricenumberSimCusto de alugar só o tanque, para quem usa caminhão próprio. Padrão: 2000
Config.MaxFuelDeliveriesnumberSimQuantos postos podem ser abastecidos antes de voltar ao depósito para reencher o tanque. Padrão: 1
Config.PumpLocationstabelaSimPostos sorteados como destino. Cada entrada tem apenas coords (vector3), que é onde o prop de abastecimento será spawnado

As coordenadas do depósito, do NPC e do ponto de spawn dos veículos estão fixas em client/main.lua, não no config.


Fluxo do trabalho

  1. Fale com o NPC “Seu Wilson” (blip “Caminhoneiro”, em 1721.87, -1557.67) e abra o menu.
  2. Escolha alugar um caminhão (cobra Config.TruckPrice) ou trabalhar com caminhão próprio (cobra só Config.TankPrice). Em ambos os casos o tanque é spawnado e um blip aponta para ele.
  3. Engate o tanque no caminhão. Um novo blip aponta para o depósito.
  4. No depósito, use o target no prop prop_storagetank_02b para pegar o bico, leve-o até o tanque e use o target no trailer para encher (progressbar de 15s).
  5. Um posto aleatório de Config.PumpLocations é sorteado, um e-mail é enviado pelo qb-phone e um blip com rota aparece.
  6. No posto, pegue o bico no trailer e use o target no prop de abastecimento para descarregar (progressbar de 30s).
  7. Repita até atingir Config.MaxFuelDeliveries; então volte ao depósito para reencher o tanque, ou volte ao NPC para receber.

O bico se solta e o combustível “quebra a linha” se o jogador se afastar mais de 10 metros do ponto onde o pegou.


OpçãoDescrição
Reabastecer PostoSó fica habilitada quando há um pedido pendente do cdn-fuel. Dispara cdn-fuel:station:client:initiatefuelpickup e consome o pedido
Alugue um caminhão e comece a trabalharCobra Config.TruckPrice e spawna caminhão + tanque
Comece a trabalhar com seu próprio caminhãoCobra Config.TankPrice e spawna só o tanque
Obtenha salárioPaga postos abastecidos × Config.PayPerFueling, remove os veículos e zera o progresso
Reiniciar o trabalhoCancela o trabalho, remove os veículos e zera o progresso. Se houver postos abastecidos ainda não pagos, avisa uma vez antes de deixar cancelar

Integrações

cdn-fuel

Além do SetFuel no caminhão alugado, o recurso escuta os pedidos urgentes de reabastecimento de posto do cdn-fuel. Um outro recurso registra o pedido via md-refuelcdn:server:set; a partir daí a opção “Reabastecer Posto” do menu fica habilitada e o primeiro jogador que aceitar dispara o fluxo do próprio cdn-fuel e consome o pedido para todos.

qb-phone

Ao terminar de encher o tanque no depósito e a cada posto concluído, o jogador recebe um e-mail de “O chefe” com o aviso do próximo destino, via qb-phone:server:sendNewMail. Sem o qb-phone o e-mail simplesmente não chega — o blip com rota continua sendo criado.

rep-talkNPC

O NPC do trabalho é criado com exports['rep-talkNPC']:CreateNPC, com diálogo de apresentação e as opções “Como funciona esse trabalho?” / “Trabalhar”. Ambas levam ao menu de contexto do emprego.


Entrypoints para outros recursos

Export Refuelcdn_status (servidor)

Retorna true se existe um pedido urgente de reabastecimento pendente.

local pendente = exports['maji-gasdelivery']:Refuelcdn_status()

Registrar um pedido urgente

-- Servidor: marca que há um pedido pendente
TriggerServerEvent('md-refuelcdn:server:set')
 
-- Servidor: limpa o pedido e avisa todos os clientes
TriggerServerEvent('md-refuelcdn:server:delete')
 
-- Cliente: envia os dados do pedido (amount, newAmount, location) para o menu
TriggerClientEvent('md-refuelcdn:client:set', src, amount, newAmount, location)

Callback de status

local pendente = lib.callback.await('md-refuelcdn:server:status', false)

Abrir o menu do trabalho

TriggerEvent('md-opentruckermenu')

Estrutura de arquivos

maji-gasdelivery/
├── client/
│   └── main.lua      — NPC, menu, spawn de veículos, bicos e cordas, blips, targets e progressbars
├── server/
│   └── main.lua      — cobrança do aluguel, pagamento, estado do pedido do cdn-fuel e export Refuelcdn_status
├── config.lua        — veículos, preços, contas, target, fuel script e lista de postos
├── sounds/           — .ogg de bico e abastecimento (copiar para o recurso de InteractSound)
└── fxmanifest.lua