Lavoro FiveM meccanico: nativi di riparazione, tuning mod e controlli lavoro
Costruisci un lavoro meccanico FiveM: ripara un veicolo con SetVehicleFixed e nativi di salute, sintonizza con SetVehicleModKit e SetVehicleMod, salva mod e controlla azioni per lavoro.
Il sintomo: il tuo meccanico ripara un'auto e il motore ancora fuma, i danni rimangono, una parte sintonizzata scompare dopo un riavvio, o qualsiasi giocatore può riparare i veicoli gratuitamente.
Un lavoro meccanico è due lavori in uno: riparazione (valori di salute e nativi) e tuning (mod dei veicoli). Entrambi vengono eseguiti sul client, quindi la parte che devi proteggere è chi è autorizzato a attivarli.
Riparazione di un veicolo
Un nativo non è sufficiente per una riparazione pulita. Questa combinazione fa il lavoro:
-- client
local function repairVehicle(vehicle)
SetVehicleFixed(vehicle)
SetVehicleDeformationFixed(vehicle)
SetVehicleEngineHealth(vehicle, 1000.0)
SetVehicleBodyHealth(vehicle, 1000.0)
SetVehicleUndriveable(vehicle, false)
SetVehicleEngineOn(vehicle, true, true, false)
endSetVehicleFixedripara il veicolo in generale, compresi gli pneumatici.SetVehicleDeformationFixedrimuove i danni che il primo nativo può lasciare.SetVehicleEngineHealtheSetVehicleBodyHealthprendono un valore fino a1000.0. Sotto zero il motore è morto, quindi ripristinarli lo fa riavviare.
Poiché un veicolo è un'entità in rete, il client che fa la riparazione dovrebbe possederlo. Se la riparazione funziona sulla tua auto e non su quella di un cliente, richiedi il controllo prima:
NetworkRequestControlOfEntity(vehicle)
local timeout = 0
while not NetworkHasControlOfEntity(vehicle) and timeout < 50 do
Wait(10)
timeout += 1
endPer riparazioni parziali (solo motore, solo corpo), chiama solo il nativo di salute corrispondente. I valori di salute sono importanti anche per altri script, ad esempio danno veicolo e salute motore spiega cosa fa ogni numero.
Tuning con SetVehicleMod
I mod sono slot numerati. Due regole si applicano a tutti:
- Chiama
SetVehicleModKit(vehicle, 0)prima di qualsiasi cambio mod. - Chiedi al gioco quante opzioni ha uno slot con
GetNumVehicleMods. Un indice di-1è la parte stock.
-- client
local function setMod(vehicle, modType, index)
SetVehicleModKit(vehicle, 0)
local count = GetNumVehicleMods(vehicle, modType)
if index >= -1 and index < count then
SetVehicleMod(vehicle, modType, index, false)
end
end
-- engine is mod type 11, brakes 12, transmission 13, suspension 15
setMod(vehicle, 11, 2)
-- turbo is a toggle, not a numbered mod
ToggleVehicleMod(vehicle, 18, true)Controllare l'indice rispetto a GetNumVehicleMods evita un fallimento silenzioso quando un veicolo ha meno opzioni di quanto ti aspetti. Vernice e colore usano i loro nativi (SetVehicleColours e altri), quindi trattali come un menu separato.
Suggerimento: costruisci il menu di tuning dal veicolo stesso, facendo un loop sui slot con
GetNumVehicleMods, piuttosto che hardcodificare i numeri. I veicoli add-on spesso hanno un numero diverso di opzioni.
Salvataggio dei mod
Impostare un mod cambia solo l'entità live. Quando il giocatore ripone l'auto in garage e la ritira, il mod è andato a meno che non sia stato salvato con il veicolo. Salva l'intero set di proprietà dopo il tuning e applicale quando il veicolo appare. L'intero flusso è in salvataggio delle proprietà del veicolo e dei mod.
Azioni controllate per lavoro
Il codice di riparazione e tuning viene eseguito sul client, quindi un client modificato può chiamarlo per chiunque. Metti la regola sul server:
-- server (ox_lib)
lib.callback.register('mechanic:canRepair', function(source)
-- 1. job check: use your framework's player/job getter here
-- 2. distance check: the player must be near a vehicle or workshop
-- 3. item check and removal
local removed = exports.ox_inventory:RemoveItem(source, 'repairkit', 1)
return removed and true or false
end)-- client
lib.callback('mechanic:canRepair', false, function(ok)
if ok then repairVehicle(vehicle) end
end)Il controllo del lavoro dipende dal tuo framework. Su ESX leggi il lavoro dall'oggetto giocatore, su QBCore e QBox leggilo dai dati del giocatore. Usa il getter del tuo framework nel passaggio 1 e confrontalo con il nome del tuo lavoro meccanico, come descritto in aggiunta di un lavoro su ESX e aggiunta di un lavoro su QBCore. Per il pattern di callback tra i framework, vedi server callback.
Altre cose degne di controllo:
- Kit di riparazione come elementi, in modo che una riparazione costi qualcosa e l'elemento sia rimosso sul server.
- Zone workshop, quindi il tuning si apre solo dentro un garage o a un banco di lavoro.
- Pagare il meccanico o l'account della società sul server, non dal client.
Una barra di avanzamento con un'opzione di annullamento rende le riparazioni appropriate. Vedi barre di avanzamento su ESX, QBCore e ox_lib.
Elenco di controllo
| Sintomo | Soluzione |
|---|---|
| I danni rimangono dopo la riparazione | Aggiungi SetVehicleDeformationFixed |
| Il motore ancora fuma | Imposta la salute del motore di nuovo su 1000.0 |
| La riparazione funziona solo sulla tua auto | Richiedi il controllo di rete del veicolo per primo |
SetVehicleMod non fa nulla |
Chiama SetVehicleModKit(vehicle, 0) prima |
| Indice mod fuori intervallo | Controlla GetNumVehicleMods per quello slot |
| I mod scompaiono dopo il riavvio | Salva le proprietà con il veicolo |
| Chiunque può riparare | Controlla lavoro, distanza e elemento sul server |
Risposte rapide
Perché SetVehicleFixed non ripara il danno del corpo?
Ripara la maggior parte del veicolo ma non sempre la deformazione visibile. Chiama SetVehicleDeformationFixed(vehicle) anche, e imposta la salute del motore e del corpo tu stesso.
Perché SetVehicleMod non fa nulla?
Devi chiamare prima SetVehicleModKit(vehicle, 0). Senza il kit mod, il gioco ignora il cambio mod.
Come mi assicuro che solo i meccanici possono riparare?
Controlla il lavoro sul server prima di accettare la riparazione, e prendi l'elemento di riparazione sul server. Un controllo del lavoro lato client può essere saltato da un client modificato.

