Veículo Dirigível com Física Customizada em Luau
Gere uma implementação profissional de veículo dirigível para Roblox, adequada a carros ou motos, com física customizada baseada em forças/constraints modernas. O resultado prioriza aceleração progressiva, frenagem, esterçamento suave, suspensão configurável, limite de velocidade, tração, derrapagem controlada e comportamento previsível em rede.
O prompt solicita uma arquitetura completa com ModuleScript compartilhado, Script autoritativo no servidor e LocalScript para captura de controles e feedback visual. Ele também exige validação de RemoteEvents, evitando que o cliente controle velocidade, forças, dano ou qualquer estado importante do veículo.
Ideal para desenvolvedores que desejam substituir sistemas genéricos de VehicleSeat por uma base extensível, comentada e adaptável a veículos próprios. Basta informar a estrutura real do Explorer, nomes das peças, constraints e remotes já existentes para receber os arquivos prontos para colar no Roblox Studio.
Atue como um desenvolvedor Roblox sênior especializado em Luau, física de veículos, arquitetura cliente-servidor e segurança multiplayer. Crie um sistema completo de veículo dirigível com física customizada para [CARRO/MOTO], pronto para integração no meu jogo Roblox. Não entregue pseudocódigo, trechos incompletos, APIs inexistentes ou uma solução baseada apenas em VehicleSeat sem física própria. Antes de gerar o código, use obrigatoriamente o contexto abaixo. Se algum campo essencial estiver ausente, faça no máximo 8 perguntas objetivas antes de programar. Se houver informação suficiente, assuma valores razoáveis, declare essas suposições em uma seção curta e entregue a solução completa. CONTEXTO DO MEU JOGO (vou preencher): - Tipo de veículo: [carro / moto] - Caminho e nome do Model do veículo no Explorer: [ex.: Workspace.Vehicles.Car01] - Peça raiz/chassi e PrimaryPart: [nome] - Nome do VehicleSeat, Seat ou sistema de ocupação: [nome/caminho] - Rodas: [nomes e posições: dianteira esquerda, dianteira direita, traseira esquerda, traseira direita; ou moto] - Constraints existentes por roda (HingeConstraint, SpringConstraint, attachments): [detalhar] - Attachments existentes e respectivos nomes: [detalhar] - RemoteEvents/RemoteFunctions já existentes e seus caminhos: [detalhar ou “nenhum”] - Estrutura atual de ReplicatedStorage, ServerScriptService e StarterPlayerScripts: [detalhar] - O veículo é spawnado manualmente, por garagem ou clonado de ServerStorage?: [detalhar] - Parâmetros desejados: velocidade máxima, aceleração, ré, força de freio, ângulo de direção, altura/dureza/amortecimento da suspensão, grip, drift e massa aproximada: [detalhar] - Plataforma-alvo: [PC / mobile / console / todas] - Regras adicionais, como combustível, dano, propriedade do veículo, respawn e múltiplos veículos: [detalhar] Projete a solução usando uma arquitetura robusta em três arquivos, adaptando os caminhos aos dados que forneci: (1) um ModuleScript chamado VehiclePhysicsConfig em ReplicatedStorage.Shared, contendo tipagem Luau, parâmetros, utilitários e configuração por veículo; (2) um Script chamado VehicleServer em ServerScriptService, responsável por criar/configurar conexões, controlar o estado autoritativo, atribuir network ownership quando apropriado, validar o condutor e aplicar ou autorizar forças físicas; (3) um LocalScript chamado VehicleController em StarterPlayer.StarterPlayerScripts, responsável exclusivamente por ler teclado/gamepad/touch, suavizar input local e enviar comandos mínimos ao servidor. Caso o meu projeto exija outra localização, explique precisamente a alteração e mantenha a separação entre responsabilidades. Implemente física customizada moderna com constraints e/ou forças compatíveis com Roblox atual, preferindo VectorForce, AngularVelocity, AlignOrientation, HingeConstraint e SpringConstraint quando fizer sentido. Não use BodyVelocity, BodyGyro ou outros BodyMovers legados, salvo se eu pedir explicitamente. O sistema deve contemplar: aceleração e desaceleração progressivas; marcha à ré; frenagem; direção dependente da velocidade; esterçamento suave; limite de velocidade; resistência ao rolamento e arrasto; tração configurável; derrapagem controlada; suspensão configurável; detecção confiável de rodas no solo com RaycastParams que excluam o próprio veículo; e estabilização para reduzir capotamentos sem deixar a condução artificial. Para moto, inclua inclinação visual/física controlada em curvas e estabilização apropriada; para carro, trate direção dianteira e tração dianteira/traseira/4x4 conforme configuração. Segurança é obrigatória. O cliente nunca pode decidir dano, moeda, inventário, teleporte, velocidade final, força final, propriedade do veículo ou ocupante. Todo input enviado por RemoteEvent deve ser validado no servidor: jogador é o ocupante autorizado, veículo existe, valores são number finitos, estão no intervalo esperado, frequência de envio é limitada, estado do veículo permite o comando e o jogador não está tentando controlar veículo alheio. Inclua rate limiting simples por jogador/veículo e limpeza de conexões, estados e ownership quando o jogador sair, morrer, desocupar o assento ou o veículo for destruído. Não confie em nomes enviados pelo cliente para localizar instâncias. Entregue a resposta nesta ordem: 1) visão geral curta da arquitetura; 2) árvore exata de instalação no Explorer; 3) todos os arquivos completos, cada um em seu próprio bloco markdown com identificador ```lua, precedido pelo caminho, tipo (Script, LocalScript ou ModuleScript) e nome do arquivo; 4) lista explícita de objetos/Attachments/Constraints que preciso criar ou renomear no veículo; 5) instruções de instalação e teste no Roblox Studio, incluindo Play Solo e teste Start Server com 2 Players; 6) checklist de diagnóstico para problemas de rodas sem contato, veículo sem movimento, direção invertida, network ownership e RemoteEvent ausente. O código deve ser Luau válido, completo, comentado em português do Brasil, com --!strict quando viável, tipos para estruturas relevantes, WaitForChild com timeouts e mensagens de warn úteis. Evite dependências externas. Preserve meus nomes e caminhos quando fornecidos; use nomes-padrão apenas quando eu não os informar. Explique onde ajustar os parâmetros de dirigibilidade sem exigir alteração da lógica central.