Introduction
Streamer un véhicule custom = ajouter un modèle 3D, ses textures et ses metadata à ton serveur. Les joueurs téléchargent les fichiers à la connexion et le véhicule est ensuite spawnable comme un véhicule vanilla. C'est ce qui permet d'avoir des Lamborghini, polices custom, voitures de roleplay sur ton serveur.
Prérequis
- Un serveur FiveM chez VeryCloud
- Accès Files dans Wisp
- Un véhicule custom acheté ou téléchargé légalement (.zip avec ytd, yft, meta)
- Un trainer admin pour tester le spawn (vMenu fait l'affaire)
Étape 1 : Comprendre la structure d'un véhicule FiveM
Un véhicule FiveM contient au minimum :
| Fichier | Rôle |
|---|---|
<vehicle>.yft |
Modèle 3D du véhicule |
<vehicle>_hi.yft |
LOD haute résolution |
<vehicle>.ytd |
Textures (skins, decals) |
vehicles.meta |
Définition véhicule (specs, classe) |
handling.meta |
Tenue de route, masse, vitesse |
carcols.meta |
Couleurs primaires/secondaires |
carvariations.meta |
Combinaisons couleurs/extras |
Certains véhicules ajoutent _hi, +hi, fichiers de damage models, etc.
Étape 2 : Créer la ressource
Dans Wisp → Files → /resources/[vehicles]/[custom_cars]/myveh/ :
Structure recommandée :
/resources/
└── [vehicles]/
└── [custom_cars]/
└── myveh/
├── fxmanifest.lua
└── stream/
├── myveh.yft
├── myveh_hi.yft
├── myveh.ytd
└── data/
├── vehicles.meta
├── handling.meta
├── carcols.meta
└── carvariations.meta
Étape 3 : Le fxmanifest.lua
fx_version 'cerulean'
game 'gta5'
author 'VeryCloud'
description 'Custom vehicle: myveh'
version '1.0.0'
files {
'data/vehicles.meta',
'data/handling.meta',
'data/carcols.meta',
'data/carvariations.meta'
}
data_file 'HANDLING_FILE' 'data/handling.meta'
data_file 'VEHICLE_METADATA_FILE' 'data/vehicles.meta'
data_file 'CARCOLS_FILE' 'data/carcols.meta'
data_file 'VEHICLE_VARIATION_FILE' 'data/carvariations.meta'
Ces data_file indiquent à FiveM comment interpréter chaque fichier meta.
Étape 4 : vehicles.meta (le minimum vital)
Structure simplifiée :
<?xml version="1.0" encoding="UTF-8"?>
<CVehicleModelInfo__InitDataList>
<InitDatas>
<Item>
<modelName>myveh</modelName>
<txdName>myveh</txdName>
<handlingId>myveh</handlingId>
<gameName>myveh</gameName>
<vehicleMakeName>VeryCloud</vehicleMakeName>
<vehicleClass>VC_SPORT</vehicleClass>
<type>VEHICLE_TYPE_CAR</type>
<plateType>VPT_FRONT_AND_BACK_PLATES</plateType>
<wheelType>VWT_SPORT</wheelType>
<seats value="2"/>
<!-- bien d'autres champs ... -->
</Item>
</InitDatas>
</CVehicleModelInfo__InitDataList>
Le <modelName> est l'identifiant que tu utiliseras pour spawn (/car myveh par exemple).
Étape 5 : Ajouter à server.cfg
ensure myveh
Restart le serveur.
Étape 6 : Tester en jeu
Connecte-toi, ouvre le trainer (vMenu : M) → Vehicle Spawner → Spawn by Name → tape myveh.
Si le véhicule apparaît, c'est gagné. Sinon, voir le dépannage.
Étape 7 : Plusieurs véhicules dans une seule ressource
Tu peux regrouper plusieurs véhicules dans une seule ressource pour gérer un pack :
/resources/[vehicles]/sport_pack/
├── fxmanifest.lua
└── stream/
├── car1.yft, car1.ytd
├── car2.yft, car2.ytd
└── data/
├── vehicles.meta (avec multiple <Item>)
├── handling.meta (avec multiple <Item>)
└── ...
Avantage : un seul ensure au lieu de N.
Étape 8 : Optimisation des assets
Pour éviter de saturer le download des joueurs :
- Compresse les YTD : OpenIV permet de réencoder à plus bas bitrate (perte visuelle négligeable)
- Pas de LOD inutiles : un
_hiqui pèse 50 Mo n'est pas nécessaire pour une voiture de fond - Pas de fichiers en doublon : un seul .yft suffit pour un modèle, n'embarque pas les sources Blender
Un véhicule custom propre = 10-30 Mo. Si tu vois 100+ Mo, optimise.
Étape 9 : Permissions de spawn
Si tu veux limiter le spawn de certains véhicules custom à des groupes (VIP par ex), utilise ACE :
add_ace group.vip "vehicle.spawn.myveh" allow
add_ace group.user "vehicle.spawn.myveh" deny
Et côté ressource, check la permission avant de spawn.
Étape 10 : Gérer les conflits
Plusieurs véhicules peuvent partager le même modelName si tu utilises des packs téléchargés sur des sites random. Conflit garanti.
Pour vérifier :
grep -r "<modelName>" /resources/ | sort | uniq -d
Renomme ceux en conflit (modifier modelName dans vehicles.meta + fichiers .yft/.ytd).
Dépannage
Le véhicule n'apparaît pas dans le trainer
ensuremanquant dans server.cfg- Erreur de parsing dans vehicles.meta → check console F8
Spawn mais véhicule transparent / noir
- Le YTD ne se charge pas (faute de cohérence avec le YFT)
- Vérifie que le
txdNamedans vehicles.meta matche bien le fichier YTD
Crash du joueur au spawn
- Modèle 3D mal exporté (souvent depuis Blender / 3ds Max avec mauvais réglages)
- LOD trop élevé / fichiers corrompus
Handling chelou (voiture qui ne tient pas la route)
- handling.meta absent ou avec
<handlingId>ne matchant pas - Copie-colle un handling vanilla similaire en base
Commandes utiles
# Verifier le fxmanifest
cat /resources/[vehicles]/myveh/fxmanifest.lua
# Spawner via console serveur
sv echo "Use vMenu in-game to spawn"
# Voir la taille des assets
du -sh /resources/[vehicles]/myveh/
Conclusion
Streamer un véhicule custom FiveM = structure fichiers + fxmanifest + ensure. Le boulot principal est l'optimisation : un pack de 50 véhicules mal compressés = 2 Go que tes joueurs téléchargent à chaque connexion (cache aidant). Reste à <500 Mo total custom assets pour une UX raisonnable.
Pour aller plus loin : custom liveries (textures par joueur), tuning custom (extras dans GTA V), véhicules emergency/police avec sirens et lights custom.


















