Leaderstats Multicategoria Seguro para Roblox Luau
Gere um sistema robusto de leaderstats para Roblox com múltiplas categorias de estatísticas, ideal para jogos de RPG, tycoon, simulador, PvP, corrida ou economia. O resultado organiza os dados do jogador entre estatísticas visíveis no placar e categorias internas, sem violar o comportamento nativo da pasta leaderstats.
O prompt orienta a IA a criar um Script Luau pronto para ServerScriptService, com arquitetura servidor-autoritativa, configuração centralizada, prevenção de duplicações em respawns e suporte opcional a RemoteEvents já existentes no seu projeto. Inclui validação rigorosa de entradas e um roteiro de testes no Roblox Studio.
Atue como um desenvolvedor Roblox sênior, especialista em Luau, arquitetura cliente-servidor, sistemas de progressão e segurança anti-exploit. Crie um sistema completo de leaderstats com múltiplas categorias de estatísticas do jogador, usando um único Script de servidor para ser colocado em ServerScriptService.
Antes de escrever o código, considere o contexto do meu jogo abaixo. Caso algum campo esteja vazio, use os valores padrão sugeridos e deixe a configuração claramente concentrada no topo do script para edição futura:
- Nome do lugar/jogo e gênero: [COLE AQUI]
- Estatísticas visíveis desejadas no placar: [ex.: Coins, Gems, Kills, Level]
- Categorias internas desejadas e suas estatísticas: [ex.: Combate: Kills, Deaths, DamageDealt | Economia: CoinsEarned, CoinsSpent | Progresso: XP, Level]
- Valores iniciais de cada estatística: [COLE AQUI]
- Quais estatísticas devem aparecer no leaderboard padrão: [COLE AQUI]
- Nomes e caminhos de objetos já existentes no Explorer: [COLE AQUI]
- RemoteEvents/RemoteFunctions existentes, seus caminhos e finalidade: [COLE AQUI]
- Sistemas que podem alterar estatísticas: [ex.: NPCs, ferramentas, rounds, loja, checkpoints]
- Regras especiais, limites máximos, valores mínimos e formato de exibição: [COLE AQUI]
Entregue APENAS um Script Luau completo, funcional e pronto para colar, seguido de instruções objetivas de instalação e teste. Não crie interfaces gráficas, DataStore, módulos externos, RemoteEvents novos, LocalScripts ou múltiplos arquivos, salvo se eu explicitamente pedir depois. O código principal deve vir integralmente dentro de um único bloco markdown no formato ```lua.
Requisitos técnicos obrigatórios:
1. Declare explicitamente no início, em comentários, que o arquivo é um Script e que deve ser inserido em ServerScriptService. Use serviços com game:GetService(), especialmente Players e ReplicatedStorage apenas se for necessário integrar RemoteEvents informados no contexto.
2. Ao jogador entrar, crie exatamente uma Folder chamada leaderstats diretamente dentro do Player, pois esta é a estrutura reconhecida pelo leaderboard nativo do Roblox. Entenda que subpastas dentro de leaderstats não são exibidas corretamente pelo placar padrão: portanto, somente estatísticas selecionadas para exibição devem ser filhas diretas de leaderstats.
3. Crie uma Folder separada no Player, com nome configurável como PlayerStats ou StatsCategories, para organizar as categorias internas. Nela, crie Folders por categoria, como Economia, Combate e Progresso, contendo IntValue, NumberValue, BoolValue ou StringValue conforme necessário. Para cada estatística exibida no placar, mantenha uma referência clara e sincronizada com sua origem categorizada. Prefira que o valor categorizado seja a fonte de verdade e que o leaderstats espelhado seja atualizado por GetPropertyChangedSignal("Value") ou uma estratégia equivalente, evitando loops de sincronização.
4. Centralize toda a definição das categorias, estatísticas, tipos de ValueBase, valores padrão, visibilidade no placar, limites mínimo/máximo e ordem lógica em uma tabela de configuração no topo. Valide essa configuração no servidor antes de criar instâncias. Trate nomes duplicados, categorias inválidas, tipos não permitidos e estatísticas visíveis inexistentes de forma defensiva, com warn informativo sem derrubar o servidor.
5. Garanta idempotência: se estruturas ou valores já existirem por algum motivo, reutilize somente objetos compatíveis ou substitua-os de modo seguro e documentado. Não duplique conexões nem recrie leaderstats indevidamente. Faça limpeza de conexões associadas ao jogador quando PlayerRemoving for disparado para evitar vazamentos de memória.
6. Se eu fornecer RemoteEvents existentes que alterem estatísticas, integre-os somente no servidor. Para cada OnServerEvent, valide rigorosamente o Player remetente, tipos de argumentos, números NaN/infinito, intervalos aceitáveis, limites máximos de alteração e condições de gameplay descritas no contexto. Nunca aceite do cliente valores finais de moeda, dano, XP, kills, inventário ou level. O cliente pode apenas solicitar uma ação; o servidor deve decidir e calcular o resultado. Se não houver RemoteEvents informados, não invente integrações de rede.
7. Implemente funções locais bem nomeadas para localizar estatísticas categorizadas, alterar valores com clamp, criar estruturas e sincronizar valores visíveis. Todas as alterações devem ocorrer no servidor. Comente o código em português de forma útil, explicando decisões de arquitetura e pontos seguros de integração com outros sistemas do jogo.
8. Não use wait() legado, não use loadstring, não use código ofuscado e não presuma que objetos opcionais existem. Use task e verificações defensivas quando necessário. O script deve ser compatível com Roblox Studio atual e Luau com --!strict, desde que os tipos não impeçam sua execução prática.
Depois do bloco de código, escreva uma seção curta chamada "Instalação e teste" explicando: onde criar e colar o Script; como editar a tabela de configuração; como testar com Start Server e pelo menos dois Players; como conferir as categorias no Explorer; como confirmar que apenas os valores diretos de leaderstats aparecem no placar; e como integrar posteriormente sistemas confiáveis de recompensa no servidor.