Um MLO funcional para FiveM é mais do que um modelo com formato de interior. Você precisa de geometria, colisão adequada, um arquétipo MLO com dados de ambientes e portais, posicionamento no mundo e um recurso que forneça os assets exportados.
Este passo a passo usa uma oficina original de dois ambientes como exercício controlado. Não é um asset de jogo pronto para baixar. Você criará a geometria. Os nomes dos exemplos abaixo pertencem ao exercício; não são nomes especiais de arquivos do CodeWalker nem configurações garantidas para todos os interiores.
O que você vai criar
Mantenha a primeira versão pequena de propósito: uma sala da frente, uma oficina ao fundo, uma passagem entre elas e uma entrada externa. Deixe portas móveis, iluminação elaborada, conjuntos de entidades e substituições externas complexas para uma revisão posterior.
O modelo ilustrado nesta página mostra a relação entre os espaços. É um diagrama conceitual, não uma prova de teste no jogo. A validação consiste em verificar se o interior realmente exportado funciona corretamente no servidor de destino.
Antes de começar, conclua o ciclo de exportação e reimportação Blender–Sollumz e primeiro exercício YMAP. Você precisa de conhecimentos básicos de modelagem no Blender; o CodeWalker não substitui um aplicativo de modelagem.
1. Defina o local e o destino da compilação
Escolha um local de desenvolvimento onde consiga identificar a geometria original próxima e os recursos de mapa existentes. Registre a posição e a orientação desejadas no mundo. No primeiro exercício, evite substituir um prédio original complexo: a colisão existente pode bloquear sua nova entrada mesmo que seu modelo tenha uma passagem.
Decida se vai produzir assets Legacy ou Enhanced. Mantenha pastas de exportação separadas ao trabalhar com ambos. O guia de introdução ao Enhanced do Cfx.re indica as ferramentas de conversão aplicáveis e as diferenças de comportamento. Não presuma que o download dev46 vinculado neste site seja adequado aos dois destinos.
Escreva um objetivo simples: dois ambientes, uma entrada externa, nenhuma interação por scripts. Desenhe a planta antes dos detalhes. Assim, “concluído” se torna uma condição verificável, não um objetivo que muda constantemente.
2. Crie os volumes básicos do interior no Blender
Crie pisos, paredes, teto e passagens livres. Escolha uma origem local consistente e registre a transformação pretendida no mundo. O tutorial de modelagem do Sollumz mostra como manter uma referência de posicionamento enquanto a geometria editável é movida para a origem.
Neste exercício, use coleções separadas para geometria visível, colisão e referências. Os nomes das coleções servem à sua organização; não são dados obrigatórios do jogo. Organize tudo para evitar exportar um prédio de referência por acidente.
Inspecione o modelo por dentro. Confira a direção das faces, os encontros das paredes e a relação entre passagem e piso. Uma moldura decorativa não deve diminuir a abertura útil além do previsto. Mantenha escala e transformações consistentes no arquivo; não tente “corrigir” depois um posicionamento errado redimensionando aleatoriamente todo o interior no mapa.
Salve um ponto de controle na etapa de volumes básicos. Um ambiente simples e navegável é uma base melhor que uma cena mobiliada com origem incerta.
3. Prepare drawables e materiais
Use Sollumz para preparar as malhas visíveis como drawables GTA e atribuir os materiais de shader adequados ao fluxo escolhido. Comece com poucas superfícies opacas comuns. Vidros complexos, elementos emissivos e efeitos especiais acrescentam possibilidades de falha desnecessárias para validar a estrutura do interior.
Exporte e inspecione uma superfície representativa antes de texturizar tudo. Confira se referências de texturas e aparência dos materiais são preservadas no CodeWalker. Reutilizar um conjunto pequeno e coerente de materiais também facilita correções posteriores.
Mantenha um inventário simples de assets. Um exemplo pode incluir cw_workshop_shell para a estrutura visível e cw_workshop_col para a colisão do interior. Nomes distintos ajudam a reconhecer qual arquivo exportado está sendo inspecionado.
4. Crie a colisão como uma tarefa separada
Construa uma estrutura simplificada de colisão para as superfícies que o jogador deve tocar. Ela deve preservar piso, paredes e aberturas reais, sem copiar mecanicamente cada borda decorativa.
O tutorial de colisão do Sollumz aborda a conversão para um composto de colisão e a atribuição de materiais de colisão. Também explica a configuração de materiais de piso por ambiente para permitir atribuir IDs. Siga as convenções da sua versão, sem presumir que o número visual de um ambiente seja exatamente o valor interno da colisão.
Inspecione a entrada externa dos dois lados. Ao modificar um prédio existente, identifique todos os assets de colisão que bloqueiam a abertura. Não apague colisão alheia do mundo só para liberar a porta. Neste primeiro exercício original, manter o local sem substituições sobrepostas torna o teste muito mais claro.
O lição de colisão oferece um plano separado de testes de caminhada e limites.
5. Crie o YTYP e o arquétipo MLO
As definições de arquétipos conectam os nomes dos assets aos dados necessários ao jogo. O tutorial de YTYP do Sollumz descreve a criação de arquétipos base para drawables e de um arquétipo MLO a partir da seleção de colisão. Siga essa estrutura documentada, em vez de considerar a estrutura visível um interior completo por si só.
No exercício da oficina, o resultado importante é uma definição MLO que referencie os assets previstos e contenha a organização interna. Anote o nome exato do arquétipo MLO; você o usará depois em um YMAP.
Não renomeie o arquétipo durante os testes sem atualizar todas as referências. Caso contrário, uma simples organização de nomes pode parecer uma falha de renderização.
6. Adicione ambientes, limbo e portais
Crie o ambiente limbo com a ferramenta fornecida e depois defina a sala da frente e a oficina. Defina limites com geometria que realmente descreva cada espaço. Não use um limite enorme apenas porque selecionar a geometria correta leva mais tempo.
Na passagem entre os ambientes, crie um portal pelos quatro cantos e conecte os ambientes corretos. Na entrada externa, conecte o interior ao limbo conforme a convenção documentada de direção. Um portal é um dado de visibilidade; não é a malha visível da porta nem abre um buraco na colisão.
Trate isso como um pequeno grafo: sala da frente ↔ oficina e sala da frente ↔ exterior. Verifique os espaços atribuídos às extremidades e a orientação no editor. Depois teste as mesmas transições no jogo. Não confie apenas no ângulo da visualização que faz o interior parecer correto.
Mantenha as entidades internas associadas à estrutura adequada. Evite reproduzir o interior inteiro como posicionamentos independentes no mundo apenas porque isso o torna visível no início. A lição de ambientes e portais amplia o teste de dois ambientes, em vez de fornecer valores universais de flags.
7. Exporte para uma pasta limpa
Selecione os objetos a exportar e confirme que os necessários não estão ocultos. Use um único fluxo consistente. O fluxo XML documentado converte a saída de intercâmbio pelo RPF Explorer do CodeWalker.
Abra os assets exportados no formato do jogo antes de empacotar. Confira se os drawables e a colisão esperados existem e se o YTYP contém as definições previstas. Não misture o YTYP de hoje com a colisão da semana passada só porque os nomes coincidem.
Mantenha fontes, arquivos de intercâmbio e arquivos para implantação em pastas diferentes. Nunca transforme .ydr.xml em .ydr apenas renomeando. Faça a exportação ou conversão corretamente.
8. Posicione o interior no CodeWalker
Carregue os assets exportados no projeto. Adicione um novo YMAP e uma entidade com o nome exato do arquétipo MLO. Aplique uma única vez a transformação de posicionamento registrada. Se criou a geometria no espaço local, não incorpore também a mesma translação de mundo em cada componente.
Compare a entrada com o mundo ao redor e calcule flags e extensões do YMAP antes de salvar. O guia de posicionamento do Sollumz documenta essa etapa.
A geração de manifestos de mapas do jogo no CodeWalker e o arquivo FiveM fxmanifest.lua atendem a sistemas diferentes. Um arquivo gerado _manifest.ymf não substitui o manifesto de recurso abaixo.
9. Monte o recurso FiveM
Este exemplo considera um YTYP personalizado chamado cw_workshop.ytyp. Os nomes dos seus exports de drawable e colisão podem ser diferentes; mantenha os nomes gerados pelo projeto.
cw_workshop/
fxmanifest.lua
stream/
cw_workshop.ymap
cw_workshop.ytyp
cw_workshop_shell.ydr
cw_workshop_col.ybn
# Add texture dictionaries and other required exports.
Use um manifesto de recurso com o YTYP registrado explicitamente:
fx_version 'cerulean'
game 'gta5'
this_is_a_map 'yes'
files {
'stream/cw_workshop.ytyp'
}
data_file 'DLC_ITYP_REQUEST' 'stream/cw_workshop.ytyp'
As diretivas e o tipo de arquivo de dados estão documentados pelo Cfx.re e sua referência de arquivos de dados. Adicione as demais dependências reais do projeto; este trecho não é um manifesto universal para todo MLO.
10. Teste o comportamento, não apenas a aparência
Inicie o recurso em um servidor de desenvolvimento e visite o local registrado. Caminhe da rua pela sala da frente até a oficina e volte pelo mesmo caminho. Olhe por cada passagem antes de atravessar. Vire-se parado no limiar e teste os dois lados de cada limite de ambiente.
Confira pisos sólidos, passagens utilizáveis e barreiras indesejadas. Repita com iluminações diferentes, reconecte-se e aproxime-se de longe. Por fim, teste com os outros recursos de mapa que coexistirão no local.
Salve observações com coordenadas, direção da câmera e versão exata usada. Quando um teste falhar, altere uma coisa por vez. Um ambiente que desaparece de um ângulo exige investigação diferente de um jogador caindo através do piso.
As próximas etapas são otimização e uma lista repetível de verificação de lançamento. Não considere o MLO concluído só porque uma captura do CodeWalker parece correta.
Siga a transferência de fontes do navegador para o Blender
Há dois pontos de partida: modele o exercício conforme descrito acima ou use o pacote-fonte original de dois ambientes para inspecionar o fluxo limitado do complemento. O pacote-fonte não é um interior nativo pronto nem comprova que o diagrama desta página passou em um teste no jogo.
No Map Studio, limite a planta a um pavimento de ambientes retangulares e escolha Legacy. Exporte o pacote-fonte e abra o painel CW Studio em um ambiente Blender/Sollumz compatível. A base documentada é Blender 4.2.23 LTS, Sollumz 2.9.0 e szio 1.3.0.dev9. São versões fixadas para integração, não afirmações de versões “mais recentes”.
Use Importar, escolha o ZIP do pacote e depois Validar. Inspecione as estruturas geradas, aberturas físicas, associações de ambientes e portais antes de Exportar para um diretório novo. Se editou manualmente geometria gerada, não autorize substituição sem uma cena salva separada. O complemento distingue os elementos gerados; mantenha seus modelos fora dessa coleção, a menos que pretenda reconstruí-los.

Esta imagem mostra a ajuda de transferência no navegador, não uma saída do Blender nem uma cena do GTA. O complemento gera um relatório legível por máquina e XML-fonte. Inspecione ambos; uma mensagem amigável da interface não substitui a revisão dos arquivos reais.
Registre três resultados separados de validação
| Etapa | Evidências a guardar | O que não comprova |
|---|---|---|
| Fonte | Projeto salvo, cena Blender, saídas XML e relatório de geração | Compilação de arquivos nativos ou compatibilidade com o jogo |
| Nativo | YDR/YBN/YTYP/YMAP compilados e reabertos no CodeWalker | Colisão, portais e streaming durante o jogo |
| FiveM | Versão de destino, revisão do recurso e testes observados de movimento/visibilidade | Compatibilidade com outra edição ou todos os demais recursos do servidor |
Não altere “não verificado” para “aprovado” sem executar essa etapa. A origem do mundo no pacote-fonte é ilustrativa: escolha um local real e confira a geometria vizinha. O passo a passo termina com seu resultado registrado no jogo, não com o download do exemplo.