Combate Melee Seguro com Hitbox, Animação e Cooldown
Gere uma implementação profissional de combate corpo a corpo para Roblox, com detecção de alvos por hitbox espacial usando GetPartBoundsInBox e OverlapParams. O sistema separa corretamente as responsabilidades entre cliente e servidor: o cliente cuida de input e animação responsiva, enquanto o servidor valida ataques, alcance, cooldown e aplica dano ao Humanoid.
Ideal para desenvolvedores que precisam de uma base segura, extensível e pronta para colar no Roblox Studio. O prompt solicita uma arquitetura completa com LocalScript, Script de servidor e ModuleScript de configurações, incluindo orientação de instalação, RemoteEvent, filtragem de personagens e instruções de teste multiplayer.
Atue como um desenvolvedor Roblox sênior especializado em Luau, arquitetura cliente-servidor, performance e segurança contra exploits. Gere um sistema completo, funcional e pronto para colar no Roblox Studio para combate corpo a corpo (melee), com detecção de hit por área usando `Workspace:GetPartBoundsInBox()` e `OverlapParams`, dano ao `Humanoid`, animação de ataque e cooldown. Não entregue pseudocódigo, trechos incompletos, dependências implícitas ou código genérico. Antes de escrever o código, considere e adapte a solução ao contexto do meu jogo abaixo. Caso alguma informação esteja ausente, use os valores padrão especificados mais adiante e declare claramente suas suposições, sem interromper a resposta com perguntas. CONTEXTO DO MEU JOGO (vou preencher): - Nome/modelo do personagem e rig: [R6, R15 ou personalizado] - Ferramenta (Tool) usada no ataque, se existir: [nome e localização] - RemoteEvents/RemoteFunctions já existentes e seus caminhos: [ex.: ReplicatedStorage.Remotes.MeleeAttack] - IDs de animação de ataque: [ex.: rbxassetid://0000000000] - Dano desejado: [valor] - Cooldown desejado: [segundos] - Tamanho da hitbox (Vector3): [ex.: 5, 4, 6] - Distância da hitbox à frente do personagem: [ex.: 3] - Partes que podem ser atingidas, equipes, NPCs, PvP e regras especiais: [detalhes] - Estrutura relevante no Explorer: [detalhes] Se eu não preencher o contexto, use estes padrões: personagem R15/R6 padrão, `ReplicatedStorage.Remotes.MeleeAttack` como RemoteEvent, 20 de dano, 0,65 segundo de cooldown, hitbox `Vector3.new(5, 4, 6)`, deslocamento frontal de 3 studs, PvP e NPCs habilitados, sem dano ao próprio atacante e sem friendly fire apenas se `Player.Team` e `TargetPlayer.Team` existirem e forem iguais. Implemente a arquitetura abaixo e informe explicitamente o tipo e o local de cada arquivo no Explorer: 1. Um `ModuleScript` chamado `MeleeConfig` em `ReplicatedStorage`, contendo configurações centralizadas: dano, cooldown, tamanho/offset da hitbox, janela ativa do golpe, limite de distância, IDs de animação e opções de debug. 2. Um `LocalScript` em `StarterPlayer > StarterPlayerScripts` (ou dentro da Tool, caso o contexto indique Tool) para detectar input de clique/toque, impedir spam local apenas para responsividade, carregar/tocar a animação via `Animator`, e solicitar o ataque ao servidor pelo RemoteEvent. O cliente nunca deve enviar dano, alvo, Humanoid, parte atingida ou quantidade de moeda. 3. Um `Script` em `ServerScriptService` para criar ou localizar com segurança o RemoteEvent, receber pedidos de ataque, impor rate limit/cooldown autoritativo por jogador, validar personagem, Humanoid vivo, `HumanoidRootPart`, estado do atacante, distância plausível e demais condições. Somente o servidor deve calcular a hitbox, identificar alvos e aplicar `Humanoid:TakeDamage()`. No servidor, calcule a caixa de ataque à frente do `HumanoidRootPart` usando `CFrame` e `GetPartBoundsInBox`. Configure `OverlapParams` com `FilterType = Enum.RaycastFilterType.Exclude` para ignorar o personagem do atacante e demais instâncias necessárias. Percorra as partes retornadas, encontre o `Model` ancestral com `Humanoid`, deduplique vítimas para que cada Humanoid sofra dano apenas uma vez por golpe, ignore Humanoids mortos e impeça autoataque. Se aplicável, aplique a regra de time no servidor. Inclua uma validação extra de distância entre os `HumanoidRootPart` do atacante e da vítima para reduzir abuso de RemoteEvent ou inconsistências físicas. O timing deve ser consistente: a animação inicia localmente para baixa latência, mas a janela real de dano é controlada no servidor por um pequeno atraso configurável (`HitDelay` ou `ActiveWindowDelay`). Não use `Region3` legado como implementação principal; mencione brevemente que `OverlapParams` é a abordagem atual. Não use `wait()`; prefira `task.wait()`, `task.delay()` e `os.clock()` ou `time()` para controle de cooldown. Não use `Touched` como método principal de dano. Não confie em atributos, valores ou sinais enviados pelo cliente para decidir dano/cooldown. Entregue a resposta nesta ordem: (1) resumo técnico curto da arquitetura; (2) tabela com arquivo, tipo e localização no Explorer; (3) todos os scripts completos, cada um em seu próprio bloco markdown identificado como `lua`, com comentários úteis em português; (4) passos exatos para criar/configurar o RemoteEvent, inserir os scripts e substituir o ID da animação; (5) checklist de testes no Roblox Studio, incluindo Play Solo e Start Server com múltiplos jogadores; (6) uma seção curta de solução de problemas para animação que não toca, hitbox que não detecta e dano duplicado. Garanta que os nomes usados sejam consistentes entre todos os arquivos e que o código seja compatível com Luau atual.