Caindo através do mapa no FiveM: colisões não carregando, como corrigir
Jogadores caem através do mapa ao spawnar ou teletransportar? Corrija colisões tardias: arquivos .ybn faltando, streaming demais, RequestCollisionAtCoord e HasCollisionLoadedAroundEntity.
O sintoma: você spawna, teletransporta ou entra em um interior personalizado e cai através do chão, às vezes para o mar ou o vazio sob o mapa, ou cai por alguns segundos ao conectar antes de pousar. A causa é uma coisa: o jogo desenha o mundo antes de ter carregado a colisão que o torna sólido. Aqui está como corrigi-lo nos arquivos e em seus scripts.
Por que acontece
Dados de colisão (arquivos .ybn) são transmitidos como modelos. O jogo os carrega ao redor do jogador, e leva tempo. Quando um script move o jogador longe de uma vez ou um jogador spawna em um servidor ocupado, o jogador pode ser colocado antes do chão existir. A gravidade vence e o jogador cai.
Existem quatro causas usuais:
- Um mapa personalizado não tem colisão, ou não está no stream.
- O servidor faz stream de muito, então cada carga é lenta.
- Um script teletransporta sem esperar que a colisão carregue.
- A conexão é lenta, então os arquivos de recursos chegam atrasados para um jogador que ingressa.
Causa 1: .ybn faltando em um mapa personalizado
Se você cai apenas dentro de um MLO ou um mapa, procure no seu recurso primeiro:
my_mlo/
fxmanifest.lua
stream/
my_mlo.ymap
my_mlo.ytyp
my_mlo.ybn <- the collisions- Os arquivos
.ybndevem estar dentro destream. Um.ybnfora dele nunca é enviado aos jogadores. - Um pacote para várias partes de um prédio pode ter vários arquivos
.ybn. Certifique-se de que todos eles vieram quando você copiou a pasta. - Se o pacote não tem
.ybnnenhum, o autor não fez as colisões, e uma ferramenta de edição de mapa é necessária para construí-las. Entre em contato com o autor ou escolha outro mapa. - Verifique se o recurso está iniciado e o manifesto tem
this_is_a_map 'yes'. Veja como instalar um MLO para o layout completo.
Causa 2: streaming demais
Cada jogador baixa e carrega os arquivos transmitidos de seus recursos. Texturas muito grandes, muitos carros de addon, roupas, peds e mapas usam o orçamento de streaming, e as colisões então carregam tarde porque ficam na fila atrás dos arquivos pesados.
Os sinais são uma junção lenta, texturas que aparecem tarde e avisos no console. Reduza e remova o que você não precisa: ativos superdimensionados e perda de textura mostra como. Um servidor mais leve carrega colisões mais rápido para todos.
Dica: depois de remover ativos, limpe seu próprio cache de cliente e teste novamente, pois um cache antigo pode ocultar o ganho. Veja limpar o cache do FiveM.
Causa 3: um script que não espera
Esta é a causa mais comum em teletransportes, respawns e seletores de spawn. A correção é congelar o jogador, solicitar a colisão, esperar até que carregue e depois deixar o jogador ir.
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)
endO que cada parte faz:
FreezeEntityPositionmantém o jogador imóvel, para que a gravidade não possa agir enquanto você espera.RequestCollisionAtCoorddiz ao jogo para começar a carregar a colisão nessas coordenadas. Chame-a em cada frame enquanto você espera.HasCollisionLoadedAroundEntityretorna true quando a colisão ao redor do ped está lá.- O timeout para um loop infinito se a área nunca carregar, por exemplo quando o mapa não tem colisão nenhuma.
Use o mesmo padrão quando um jogador spawna após seleção de personagem e para veículos: congele o veículo com FreezeEntityPosition(vehicle, true) e espere em HasCollisionLoadedAroundEntity(vehicle).
Causa 4: spawning muito cedo ao conectar
Ao conectar, o primeiro spawn pode acontecer antes de a área estar pronta. Scripts de spawn e multicaráter que não esperam são a razão usual. Se o jogador fica invisível e congelado durante os primeiros segundos e depois cai, verifique seu script de spawn para o padrão acima. Para uma junção que trava na tela de carregamento, veja jogadores presos na tela de carregamento.
Se o problema ocorrer apenas para jogadores com conexões lentas, os arquivos ainda estão sendo baixados quando o jogador é colocado. Manter os arquivos transmitidos pequenos é a melhor ajuda, e uma tela de carregamento ou fade que mantém o jogador até que a verificação acima seja verdadeira evita a maioria das quedas visíveis.
Lista de verificação de depuração para um lugar
- Acontece com todos ou apenas com alguns jogadores? Todos apontam para os arquivos do mapa, alguns jogadores para cache ou velocidade.
- Acontece apenas em um lugar? Então é um recurso de mapa sem colisão lá.
- Pare esse recurso de mapa e tente novamente. Se você não cair mais, o mapa carece de colisão. Se um lugar base do jogo também faz você cair, o problema é a carga, não o mapa.
- Acontece apenas logo após um teletransporte? O script precisa do loop de espera acima.
Quando dois mapas se sobrepõem
Uma colisão também pode estar faltando quando um mapa remove os objetos do jogo base e o outro mapa não coloca sua própria colisão em seu lugar. Veja conflitos de mapa.
Lista de verificação
| Sintoma | Correção |
|---|---|
| Cair dentro de um mapa personalizado | Adicione os arquivos .ybn à sua pasta stream |
| Cair após um teletransporte | Congele, RequestCollisionAtCoord, espere por HasCollisionLoadedAroundEntity |
| Cair ao conectar | Faça o script de spawn esperar que a colisão carregue antes de descongelar |
| Tudo carrega lentamente | Reduza o tamanho e a contagem de ativos transmitidos |
| Apenas alguns jogadores caem | Limpe seu cache e verifique sua conexão |
| Loop de espera infinito | Adicione um timeout para que o loop termine mesmo se a área nunca carregar |
Respostas rápidas
Por que caio através do mapa quando me teletransporto?
O jogo ainda não carregou a colisão ao redor da nova posição, então não há chão para pisar. Solicite a colisão no destino e espere até que seja carregada antes de descongelar o jogador.
Qual nativa espera que colisões carreguem?
HasCollisionLoadedAroundEntity(entity) retorna true quando a colisão ao redor dessa entidade está carregada. Chame RequestCollisionAtCoord(x, y, z) primeiro para que o jogo comece a carregá-la.
Por que acontece apenas em um mapa personalizado?
O mapa não tem arquivos de colisão .ybn, ou eles estão na pasta errada, ou faltam no stream. O modelo visível está lá mas nada sólido.
Scripts sem esse problema
Advanced BoostingBoosting de veículos pelo tablet: contratos da classe D à S+, crews e fila ao vivo.Ver script →
Quest CreatorUm editor visual de missões e diálogos com NPCs, montado nó por nó dentro do jogo.Ver script →
CCTV Security CamerasCâmeras posicionáveis, um tablet com várias telas ao vivo e fotos impressas como prova.Ver script →