📦 fxmanifest per Veicoli Custom

INFO

Configurazione finale della risorsa veicolo per FiveM. Tutti i file meta e i modelli vengono caricati attraverso la cartella stream/ e i data_file dichiarati.

ObiettivoDettagli
Cosa imparerai• Struttura finale della risorsa veicolo FiveM
• Configurare fxmanifest.lua con data_file e scripts
• Client Lua per spawn e debug del veicolo
Prerequisiti• Tutti i 4 file meta completati (vehicles, carvariations, handling, carcols)
• Modello YFT e texture YTD pronti

Struttura Finale della Risorsa

vehicle_custom_sport/
├── fxmanifest.lua
├── client.lua
├── server.lua               ← Opzionale
├── stream/
│   ├── custom_sport.yft             ← Modello 3D scheletrato
│   ├── custom_sport.ytd             ← Texture dictionary
│   ├── custom_sport.vehicles.meta   ← Definizione veicolo
│   ├── custom_sport.carvariations.meta ← Colori e default
│   ├── custom_sport.handling.meta   ← Fisica e guida
│   ├── custom_sport.carcols.meta    ← Luci standard
│   └── custom_sport.carcols_gen9.meta ← Luci next-gen (opzionale)

fxmanifest Completo

-- fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
 
author 'TuoNome'
description 'Veicolo Custom - Sportiva'
version '1.0.0'
 
-- I file .yft e .ytd in stream/ vengono caricati automaticamente
-- I file .meta richiedono data_file esplicito
 
files {
    'stream/*.meta',
}
 
data_file 'VEHICLE_METADATA_FILE' 'stream/*.vehicles.meta'
data_file 'CARCOLS_FILE' 'stream/*.carcols.meta'
data_file 'CARCOLS_GEN9_FILE' 'stream/*.carcols_gen9.meta'
data_file 'VEHICLE_VARIATION_FILE' 'stream/*.carvariations.meta'
data_file 'HANDLING_FILE' 'stream/*.handling.meta'
 
client_script 'client.lua'

WARNING

Se dimentichi di dichiarare un data_file nel fxmanifest, il file meta corrispondente verrà ignorato senza alcun errore visibile. Ad esempio, se salti HANDLING_FILE, il veicolo spawnerà ma non si muoverà. Controlla sempre che tutti i data_file siano presenti.


Client Lua per Spawn Veicolo

-- client.lua
 
-- Registra il nome visualizzato
Citizen.CreateThread(function()
    AddTextEntry('CUSTOMSPORT', 'Sportiva Custom')
    AddTextEntry('MAKE_CUSTOM', 'Custom Motors')
end)
 
-- Comando per spawnare il veicolo (debug/test)
RegisterCommand('spawncustom', function()
    local playerPed = PlayerPedId()
    local coords = GetEntityCoords(playerPed)
    local heading = GetEntityHeading(playerPed)
    
    local vehicleHash = GetHashKey('custom_sport')
    
    RequestModel(vehicleHash)
    local attempts = 0
    while not HasModelLoaded(vehicleHash) and attempts < 50 do
        Wait(100)
        attempts = attempts + 1
    end
    
    if HasModelLoaded(vehicleHash) then
        local vehicle = CreateVehicle(vehicleHash, coords.x + 3.0, coords.y + 3.0, coords.z, heading, true, false)
        
        SetPedIntoVehicle(playerPed, vehicle, -1)  -- -1 = posto guida
        
        SetVehicleNumberPlateText(vehicle, 'CUSTOM')
        SetVehicleCustomPrimaryColour(vehicle, 255, 0, 0)
        SetVehicleCustomSecondaryColour(vehicle, 0, 0, 0)
        
        SetModelAsNoLongerNeeded(vehicleHash)
        
        print('^2Veicolo custom spawnato con successo!')
    else
        print('^1ERRORE: Modello veicolo non caricato!')
    end
end, false)
 
-- Cleanup memoria
AddEventHandler('onResourceStop', function(resourceName)
    if GetCurrentResourceName() == resourceName then
        SetModelAsNoLongerNeeded(GetHashKey('custom_sport'))
    end
end)

TIP

AddTextEntry è fondamentale per far sì che il nome del veicolo e della marca appaiano correttamente nell’interfaccia di gioco. Senza, il gioco mostrerà “NULL” o “UNKNOWN”. La chiave deve corrispondere ai valori gameName e makeName del vehicles.meta.


Server Lua (Opzionale)

-- server.lua
 
-- Comando admin per dare il veicolo a un giocatore
RegisterCommand('givecustom', function(source, args)
    local target = tonumber(args[1]) or source
    
    TriggerClientEvent('vehicle:spawnCustom', target)
end, true)
 
print('^2[VEHICLE] Risorsa veicolo custom caricata!')

Comandi di Test

ComandoDescrizione
/spawncustomSpawna il veicolo di fronte al giocatore
/givecustom [id](Admin) Dà il veicolo a un giocatore

Comandi Console F8

# Verifica che la risorsa sia caricata
status

# Ricarica la risorsa senza restartare il server
restart vehicle_custom_sport

# Ace permissions per il comando admin
add_ace resource.vehicle_custom_sport command.givecustom allow

Errori Comuni

ErroreCausaSoluzione
Veicolo invisibileYFT mancante o nome non matcha col vehicles.metaControlla che modelName nel meta sia uguale al nome del .yft
Veicolo senza texture (rosa/checker)YTD mancante o txdName erratoVerifica che txdName matchi col nome del .ytd
Crash all’avvicinarsiYFT corrotto o ossa mancantiRiesporta da Blender con CodeWalker
Handling non funziona (veicolo non si muove)HANDLING_FILE non dichiaratoAggiungi data_file 'HANDLING_FILE' nel fxmanifest
Luci non funzionanoCARCOLS_FILE mancanteAggiungi il data_file e controlla il modelName
Colori sbagliatiCarvariations.meta con erroriVerifica gli indici colore
Non si apre in CodeWalkerYFT esportato maleControlla che tutte le mesh siano triangolate (Ctrl+T in Blender)
Veicolo spawna ma scompareModello non caricato prima di spawnareUsa RequestModel e aspetta HasModelLoaded
Texture distorteUV mal posizionatiRiallinea UV in Blender

QUESTION

Qual è l’errore più comune quando un veicolo risulta invisibile in gioco? Il modelName nel vehicles.meta non corrisponde al nome del file .yft. Controlla sempre che i nomi siano identici in tutti i meta file.


Verifica Finale

Checklist pre-rilascio:

  • Tutti i 4 meta file principali sono presenti (vehicles, carvariations, handling, carcols)
  • modelName è identico in tutti i meta file
  • txdName matcha col nome del .ytd
  • Il .yft contiene lo skeleton con tutti i bones obbligatori
  • fxmanifest ha tutti i data_file dichiarati
  • Il veicolo spawna correttamente in gioco
  • Luci, portiere e ruote funzionano
  • I colori di default sono corretti

TIP

✅ Modulo Veicoli completato! Passa al Modulo 07 — Suoni Custom.


Torna alla: Indice Generale