Menu de Configurações Roblox: Áudio, Gráficos e Controles
Crie um menu de configurações profissional para Roblox, voltado a experiências que precisam dar autonomia ao jogador sem comprometer a arquitetura do jogo. O sistema abrange volume de música, efeitos e volume mestre, qualidade gráfica, redução de efeitos visuais e remapeamento de controles de teclado.
O prompt orienta a IA a adaptar o código à hierarquia real do seu Explorer, aos nomes da interface e aos RemoteEvents já existentes. O resultado solicitado é um LocalScript Luau completo, comentado, resiliente a referências ausentes e pronto para colar no Roblox Studio.
Ideal para desenvolvedores que já possuem uma interface criada — ou desejam definir uma estrutura clara para ela — e precisam de uma implementação escalável usando ContextActionService, UserInputService, SoundService e práticas corretas de segurança cliente-servidor.
Atue como um desenvolvedor Roblox sênior, especialista em Luau, arquitetura cliente-servidor, interfaces responsivas e sistemas de input. Gere um LocalScript Luau completo para um Menu de Configurações com seções de Áudio, Gráficos e Controles, adaptado rigorosamente ao contexto do meu projeto informado abaixo. TIPO E LOCALIZAÇÃO DO SCRIPT: o arquivo principal deve ser um LocalScript colocado em StarterPlayer > StarterPlayerScripts, pois as preferências de áudio, gráficos e controles são locais ao jogador. Ele deve localizar e controlar a ScreenGui existente em PlayerGui. Não use Script de servidor como solução principal. Caso eu tenha fornecido um RemoteEvent para persistir preferências, implemente apenas a chamada cliente; deixe explícito que qualquer gravação, validação, limite e aplicação de dados persistentes deve ocorrer no servidor por meio de um Script separado e servidor-autoritativo. Nunca trate o cliente como fonte confiável para moeda, inventário, dano, progressão, permissões ou qualquer dado competitivo. Antes de escrever o código, analise este contexto e use exatamente os caminhos e nomes fornecidos. Se algum item essencial estiver vazio, use uma seção CONFIG no topo do script com caminhos e nomes fáceis de editar, sem inventar RemoteEvents ou hierarquias complexas desnecessárias: [COLE AQUI O CONTEXTO DO MEU JOGO] - Nome/caminho da ScreenGui de configurações: - Frame principal e botões de abas (Áudio, Gráficos, Controles): - Botão para abrir, botão para fechar e botão para restaurar padrões: - Controles de áudio existentes (sliders, caixas de texto, botões +/- ou labels): - SoundGroups no SoundService e seus nomes (ex.: Master, Music, SFX): - Controles gráficos existentes (dropdown, botões, toggles e labels): - Efeitos visuais que podem ser ativados/desativados (Bloom, ColorCorrection, partículas, etc.): - Linhas/botões de remapeamento de controles e ações do jogo: - Teclas padrão por ação: - RemoteEvents/RemoteFunctions existentes e respectivos caminhos, se houver: - Sistema de salvamento já existente, atributos do Player ou DataStore no servidor, se houver: - Plataformas-alvo (PC, mobile, console): - Restrições adicionais de design, desempenho ou compatibilidade: [FIM DO CONTEXTO] FUNCIONALIDADES OBRIGATÓRIAS: 1. Implementar navegação entre as abas Áudio, Gráficos e Controles, garantindo que somente o painel selecionado fique visível e que o estado visual do botão ativo seja atualizado. 2. Em Áudio, controlar SoundService e os SoundGroups informados. Suportar volume mestre, música e efeitos, com valores normalizados de 0 a 1, arredondamento apropriado, atualização de labels/sliders e proteção contra referências ausentes. Não altere sons individualmente se houver SoundGroups configurados. 3. Em Gráficos, oferecer pelo menos presets Baixo, Médio e Alto. Ajustar preferências estritamente locais e seguras, como qualidade gráfica local quando suportada, visibilidade/Enabled de efeitos locais informados e redução de partículas/efeitos cosméticos. Não tente impor configurações globais do servidor. Preserve valores originais de instâncias alteradas para permitir restauração correta. 4. Em Controles, usar ContextActionService e UserInputService para remapear teclas de ações previamente definidas. Ao clicar em uma ação, entrar em modo de captura; aceitar apenas entradas adequadas de teclado, cancelar com Escape, bloquear teclas inválidas, impedir duplicidade de tecla entre ações e atualizar a UI. Não capture entrada quando uma TextBox estiver focada. Mantenha as ações e teclas em uma tabela central de configuração. 5. Incluir botão “Restaurar padrões”, confirmação simples e reaplicação integral dos padrões de áudio, gráficos e controles. 6. Manter todas as preferências em uma tabela local de estado durante a sessão. Se eu informar um RemoteEvent de persistência, envie somente dados de preferências permitidos, estruturados e serializáveis, com debounce/rate limit no cliente. Documente em comentário que o servidor precisa validar tipo, faixa numérica, ações permitidas e frequência das requisições antes de salvar. Não use RemoteFunction ou RemoteEvent sem confirmar que ele existe no contexto. 7. Usar WaitForChild com timeout quando adequado, FindFirstChild para elementos opcionais, conexões organizadas, nomes claros, comentários úteis e tratamento de erros via warn sem interromper todo o menu. Evite loops infinitos, polling desnecessário e APIs obsoletas. ENTREGA: responda primeiro com uma lista curta de pressupostos adotados. Em seguida, entregue somente um bloco de código markdown identificado como ```lua contendo o LocalScript integral, sem pseudocódigo, sem trechos omitidos e sem usar “...”. O código deve estar pronto para colar em StarterPlayerScripts, com uma seção CONFIG no início para todos os caminhos editáveis. Após o código, forneça instruções objetivas para testar no Roblox Studio usando Play Solo e Start Server/Start Player, incluindo testes de sliders, troca de abas, reset, remapeamento, tecla duplicada, Escape, ausência de objetos opcionais e segurança do RemoteEvent.