Inventário Visual Roblox com Drag-and-Drop Seguro
Gere um sistema profissional de inventário visual para Roblox, com interface de slots, arrastar e soltar itens, empilhamento, troca de posições, limites de pilha e feedback visual durante a movimentação. O prompt orienta a IA a adaptar a solução à estrutura real do seu projeto antes de produzir o código.
A solução prioriza arquitetura cliente-servidor segura: a interface executa localmente, mas toda alteração real do inventário é validada e confirmada pelo servidor. Ideal para jogos de RPG, survival, tycoon, simulador, aventura e qualquer experiência que exija gerenciamento confiável de itens.
Atue como um desenvolvedor Roblox sênior, especialista em Luau, arquitetura cliente-servidor, interfaces responsivas e segurança anti-exploit. Crie um sistema completo de inventário visual com drag-and-drop, pronto para integração no meu projeto Roblox Studio. Antes de escrever o código, analise e use o contexto abaixo. Se algum campo estiver vazio ou não existir no projeto, adote nomes consistentes e deixe explícitas as premissas no início da resposta, sem interromper a solução com perguntas desnecessárias. CONTEXTO DO MEU JOGO (preencherei antes de enviar): - Estrutura atual no Explorer (ScreenGui, Frames, templates, pastas e scripts): [COLE AQUI] - Nome e localização dos RemoteEvents/RemoteFunctions já existentes: [COLE AQUI] - Fonte de dados dos itens/inventário (DataStore, ProfileService, Attributes, ModuleScript, leaderstats etc.): [COLE AQUI] - Lista de itens e propriedades disponíveis (Id, nome, ícone, quantidade, MaxStack, raridade, peso etc.): [COLE AQUI] - Quantidade de slots e regras especiais (hotbar, inventário expandível, peso máximo, itens não empilháveis etc.): [COLE AQUI] - Comportamento visual desejado, resolução/alvo de plataforma e estilo da UI: [COLE AQUI] - Sistema de persistência já implementado e APIs internas que devem ser preservadas: [COLE AQUI] OBJETIVO FUNCIONAL: Implemente um inventário em grade com slots visuais, ícone, contador de quantidade e estado vazio. O jogador deve conseguir clicar/tocar e arrastar um item para outro slot. O sistema deve suportar: mover item para slot vazio, trocar dois itens, empilhar itens compatíveis até MaxStack, manter excedente no slot de origem, impedir ações inválidas e atualizar a interface imediatamente após a confirmação do servidor. Inclua feedback visual durante o arrasto: item/flutuante seguindo cursor ou toque, destaque válido/inválido no slot alvo e restauração visual caso a operação seja rejeitada. O sistema deve funcionar com mouse e touch; suporte a gamepad é desejável se não elevar excessivamente a complexidade. ARQUITETURA OBRIGATÓRIA: 1. Gere todos os arquivos necessários, não apenas um trecho isolado. Para este sistema, entregue no mínimo: - Um ModuleScript de definições/utilitários de item, em ReplicatedStorage.Shared (ou adapte ao meu contexto). - Um RemoteEvent em ReplicatedStorage.Remotes para solicitação de movimentação e um RemoteEvent para sincronização/atualização de inventário, caso meus remotes não sejam compatíveis. - Um Script servidor em ServerScriptService, responsável por manter ou acessar o estado autoritativo do inventário, validar e aplicar cada operação. - Um LocalScript em StarterPlayer > StarterPlayerScripts ou dentro do ScreenGui em StarterGui, responsável exclusivamente por UI, input e renderização. - Se necessário, um template de Slot em ReplicatedStorage ou dentro da ScreenGui, detalhando sua hierarquia esperada. 2. Declare para cada arquivo: nome sugerido, tipo exato (Script, LocalScript ou ModuleScript), local exato no Explorer e dependências. 3. Não invente APIs obscuras nem use sintaxe incompatível com Luau atual. Use WaitForChild com critério, conexões desconectáveis quando aplicável, task.spawn/task.delay quando adequado e tipagem Luau onde ela tornar o código mais seguro e legível. SEGURANÇA E VALIDAÇÃO: O servidor é totalmente autoritativo. O cliente nunca pode decidir quantidade, item final, dano, moeda ou estado real do inventário. Ao receber a solicitação de arrastar, o servidor deve validar Player, índices de origem/destino, tipo dos dados, existência dos slots, item na origem, compatibilidade de empilhamento, MaxStack e todas as regras de bloqueio. O cliente deve enviar apenas índices de slot e uma intenção de operação, nunca tabelas completas de inventário nem quantidade confiável. Implemente rate limit simples por jogador, tratamento para estado desatualizado e rejeição segura de payloads malformados. Nunca confie em valores enviados pelo cliente. REQUISITOS DE QUALIDADE DO CÓDIGO: Forneça código Luau completo, executável e comentado, sem pseudocódigo, sem omitir funções e sem usar "..." como substituto de implementação. Todo código deve ficar em blocos markdown separados usando ```lua. Preserve a separação entre dados, regras de domínio, rede e apresentação. Evite recriar toda a UI de forma desnecessária; faça renderização determinística dos slots alterados ou uma atualização completa simples e confiável, justificando brevemente a escolha. Trate desconexão do jogador e limpeza de conexões/estado no servidor. FORMATO DA RESPOSTA: 1. Liste as premissas adotadas e a árvore final do Explorer. 2. Explique brevemente o fluxo cliente-servidor da operação de drag-and-drop. 3. Entregue cada arquivo com título contendo caminho e tipo, seguido de seu bloco ```lua completo. 4. Informe qualquer configuração manual de UI necessária, incluindo nomes exatos de Frames, ImageLabels, TextLabels, UIGridLayout, atributos e templates. 5. Finalize com um roteiro objetivo de teste no Roblox Studio: teste local com 2 jogadores, cenários de mover, trocar, empilhar, exceder MaxStack, soltar fora de slot, payload remoto inválido e reconexão. Inclua também como localizar erros no Output. Se o contexto que forneci já possuir estruturas ou remotes, adapte-se a eles e não duplique sistemas. Caso haja incompatibilidade, explique a alteração mínima necessária e entregue uma versão segura e pronta para colar.