Tomber dans la carte dans FiveM : collisions non chargées, comment corriger
Les joueurs tombent dans la carte au spawn ou téléport ? Corrigez les collisions tardives : fichiers .ybn manquants, trop de streaming, RequestCollisionAtCoord et HasCollisionLoadedAroundEntity.
Le symptôme : vous spawner, vous téléporter ou vous marchez dans un intérieur personnalisé et vous tombez à travers le sol, parfois dans la mer ou le vide sous la carte, ou vous tombez pendant quelques secondes à la connexion avant d'atterrir. La cause est une chose : le jeu dessine le monde avant d'avoir chargé la collision qui le rend solide. Voici comment le corriger dans les fichiers et dans vos scripts.
Pourquoi cela arrive
Les données de collision (fichiers .ybn) sont streamées comme les modèles. Le jeu les charge autour du joueur, et cela prend du temps. Quand un script déplace le joueur loin à la fois, ou qu'un joueur spawn sur un serveur occupé, le joueur peut être placé avant que le sol n'existe. La gravité gagne et le joueur tombe.
Il y a quatre causes habituelles :
- Une carte personnalisée n'a pas de collision, ou elle n'est pas streamée.
- Le serveur stream trop, donc chaque charge est lente.
- Un script se téléporte sans attendre la collision.
- La connexion est lente, donc les fichiers de ressource arrivent tard pour un joueur qui se joint.
Cause 1 : .ybn manquant dans une carte personnalisée
Si vous tombez seulement à l'intérieur d'un MLO ou d'une carte, regardez d'abord sa ressource :
my_mlo/
fxmanifest.lua
stream/
my_mlo.ymap
my_mlo.ytyp
my_mlo.ybn <- the collisions- Les fichiers
.ybndoivent être à l'intérieur destream. Un.ybnen dehors n'est jamais envoyé aux joueurs. - Un pack pour plusieurs parties d'un bâtiment peut avoir plusieurs fichiers
.ybn. Assurez-vous que tous sont arrivés quand vous avez copié le dossier. - Si le pack n'a pas
.ybndu tout, l'auteur n'a pas fait les collisions, et un outil d'édition de carte est nécessaire pour les construire. Contactez l'auteur ou choisissez une autre carte. - Vérifiez que la ressource est démarrée et que le manifeste a
this_is_a_map 'yes'. Voir comment installer un MLO pour la disposition complète.
Cause 2 : streaming trop de choses
Chaque joueur télécharge et charge les fichiers streamés de vos ressources. De très grandes textures, trop de voitures addon, vêtements, peds et cartes utilisent le budget de streaming, et les collisions se chargent alors tard car elles font la queue derrière les fichiers lourds.
Les signes sont une lenteur à se joindre, les textures qui s'affichent tard, et les avertissements dans la console. Réduisez et supprimez ce dont vous n'avez pas besoin : actifs surdimensionnés et perte de texture montre comment. Un serveur plus léger charge les collisions plus vite pour tout le monde.
Astuce : après avoir supprimé les actifs, videz votre propre cache client et testez à nouveau, car un ancien cache peut masquer le gain. Voir vider le cache FiveM.
Cause 3 : un script qui n'attend pas
C'est la cause la plus courante sur les téléports, respawns et sélecteurs de spawn. La correction est de geler le joueur, de demander la collision, d'attendre qu'elle se charge, et seulement ensuite de laisser le joueur partir.
local function teleportSafe(coords)
local ped = PlayerPedId()
FreezeEntityPosition(ped, true)
SetEntityCoordsNoOffset(ped, coords.x, coords.y, coords.z, false, false, false)
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
local timeout = GetGameTimer() + 5000
while not HasCollisionLoadedAroundEntity(ped) and GetGameTimer() < timeout do
RequestCollisionAtCoord(coords.x, coords.y, coords.z)
Wait(0)
end
FreezeEntityPosition(ped, false)
endCe que chaque partie fait :
FreezeEntityPositiontient le joueur immobile, donc la gravité ne peut pas agir pendant que vous attendez.RequestCollisionAtCoorddit au jeu de commencer à charger la collision à ces coordonnées. Appelez-le à chaque frame pendant que vous attendez.HasCollisionLoadedAroundEntityretourne true quand la collision autour du ped est là.- Le timeout arrête une boucle sans fin si la zone ne charge jamais, par exemple quand la carte n'a pas de collision du tout.
Utilisez le même modèle quand un joueur spawn après la sélection de personnage, et pour les véhicules : gelez le véhicule avec FreezeEntityPosition(vehicle, true) et attendez sur HasCollisionLoadedAroundEntity(vehicle).
Cause 4 : spawn trop tôt à la connexion
À la connexion, le premier spawn peut se produire avant que la zone ne soit prête. Les scripts de spawn et multi-caractères qui n'attendent pas sont la raison habituelle. Si le joueur est invisible et gelé pendant les premières secondes puis tombe, vérifiez votre script de spawn pour le modèle ci-dessus. Pour une jointure qui s'accroche à l'écran de chargement, voir joueurs bloqués à l'écran de chargement.
Si le problème ne se pose que pour les joueurs avec des connexions lentes, les fichiers sont toujours en cours de téléchargement quand le joueur est placé. Garder les fichiers streamés petits est la meilleure aide, et un écran de chargement ou de fondu qui tient le joueur jusqu'à ce que la vérification ci-dessus soit vraie évite la plupart des chutes visibles.
Liste de vérification du débogage pour un endroit
- Arrive-t-il à tout le monde, ou seulement à certains joueurs ? Tout le monde pointe vers les fichiers de carte, certains joueurs vers le cache ou la vitesse.
- Arrive-t-il seulement à un seul endroit ? Alors c'est une ressource de carte sans collision là.
- Arrêtez cette ressource de carte et essayez à nouveau. Si vous ne tombez plus, la carte manque de collision. Si un endroit du jeu de base vous fait aussi tomber, le problème est la charge, pas la carte.
- Arrive-t-il seulement juste après un téléport ? Le script a besoin de la boucle d'attente ci-dessus.
Quand deux cartes se chevauchent
Une collision peut aussi manquer quand une carte enlève les objets du jeu de base et l'autre carte ne met pas sa propre collision à leur place. Voir conflits de carte.
Liste de vérification
| Symptôme | Correction |
|---|---|
| Tomber à l'intérieur d'une carte personnalisée | Ajoutez les fichiers .ybn à son dossier stream |
| Tomber après un téléport | Gelez, RequestCollisionAtCoord, attendez HasCollisionLoadedAroundEntity |
| Tomber à la connexion | Faites attendre le script de spawn la collision avant de le dégeler |
| Tout se charge lentement | Réduisez la taille et le nombre des actifs streamés |
| Seulement certains joueurs tombent | Videz leur cache et vérifiez leur connexion |
| Boucle d'attente sans fin | Ajoutez un timeout pour que la boucle se termine même si la zone ne charge jamais |
Réponses rapides
Pourquoi je tombe dans la carte quand je me téléporte ?
Le jeu n'a pas encore chargé la collision autour de la nouvelle position, donc il n'y a pas de sol sur lequel se tenir. Demandez la collision à la destination et attendez qu'elle se charge avant de dégeler le joueur.
Quel native attend le chargement des collisions ?
HasCollisionLoadedAroundEntity(entity) retourne true quand la collision autour de cette entité est chargée. Appelez d'abord RequestCollisionAtCoord(x, y, z) pour que le jeu commence à la charger.
Pourquoi cela arrive-t-il seulement sur une carte personnalisée ?
La carte n'a pas de fichiers de collision .ybn, ou ils sont dans le mauvais dossier, ou ils manquent du stream. Le modèle visible est là mais rien de solide ne l'est.
Des scripts sans ce problème
Advanced BoostingDu boosting de véhicules piloté par tablette : contrats de classe D à S+, crews et file d’attente en direct.Voir le script →
Quest CreatorUn éditeur visuel de quêtes et de dialogues PNJ, construit nœud par nœud en jeu.Voir le script →
CCTV Security CamerasDes caméras à placer, une tablette multi-vues en direct et des photos imprimées comme preuves.Voir le script →