
Damagevg2
Universal Script 📌
Does it work?
No reports yetNo reports yet. Tried it? Be the first to say.
Description
--[[ Script de Servidor (Server Script) para o Projétil Deve ser colocado DENTRO da Part ou MeshPart que é o projétil. ]] local Projetil = script.Parent -- === CONFIGURAÇÕES === local RAIO_MAXIMO_DANO = 10 -- O raio (em studs) a partir do centro do projétil para causar dano. local DANO_MAXIMO = 30 -- O dano máximo que pode ser causado (no centro). local TEMPO_VIDA = 3 -- Tempo em segundos até o projétil ser destruído se não atingir nada. local JOGADOR_CRIADOR = nil -- Será preenchido quando o projétil for criado. -- Função para aplicar dano aos jogadores próximos local function aplicarDanoEmArea(posicaoExplosao) local jogadores = game:GetService("Players"):GetPlayers() for _, jogador in ipairs(jogadores) do -- Ignora o jogador que criou o projétil if JOGADOR_CRIADOR and jogador == JOGADOR_CRIADOR then continue end local personagem = jogador.Character -- Verifica se o personagem existe e tem um HumanoidRootPart if personagem and personagem:FindFirstChild("HumanoidRootPart") then local humanoide = personagem:FindFirstChildOfClass("Humanoid") local raizPersonagem = personagem.HumanoidRootPart -- 1. Calcula a distância entre o projétil e o centro do jogador. local distancia = (raizPersonagem.Position - posicaoExplosao).Magnitude -- 2. Verifica se a distância está dentro do raio máximo de dano. if distancia <= RAIO_MAXIMO_DANO and humanoide and humanoide.Health > 0 then -- 3. Calcula o dano com base na distância (Dano decresce com a distância). -- (1 - (distancia / RAIO_MAXIMO_DANO)) => Isso retorna 1 no centro e 0 no limite. local fatorDistancia = 1 - (distancia / RAIO_MAXIMO_DANO) local danoFinal = DANO_MAXIMO * fatorDistancia -- O dano mínimo é 1, para garantir que cause algum dano. if danoFinal < 1 then danoFinal = 1 end -- Aplica o dano ao Humanoid humanoide:TakeDamage(danoFinal) print(jogador.Name .. " levou " .. math.floor(danoFinal) .. " de dano.") end end end end -- Função que ocorre quando o projétil é destruído ou atinge algo local function onProjetilFim(posicao) -- Evita que o dano seja aplicado múltiplas vezes if Projetil:GetAttribute("DanoAplicado") then return end Projetil:SetAttribute("DanoAplicado", true) -- Aplica o dano na área antes de destruir aplicarDanoEmArea(posicao) -- Efeitos visuais/sonoros de explosão (Opcional: adicione um Explosion, partículas, etc.) -- Destrói o projétil Projetil:Destroy() end -- 1. Detecta colisão (se o projétil tocar em algo, aplica o dano e destrói) Projetil.Touched:Connect(function(parteTocou) -- Impede a colisão com o criador (opcional) if JOGADOR_CRIADOR and parteTocou.Parent == JOGADOR_CRIADOR.Character then return end onProjetilFim(Projetil.Position) end) -- 2. Limite de tempo (se o projétil durar demais sem atingir nada, destrói e aplica dano) game:GetService("Debris"):AddItem(Projetil, TEMPO_VIDA) Projetil.Destroying:Connect(function() onProjetilFim(Projetil.Position) end) -- *** ATENÇÃO: Você precisa definir a variável JOGADOR
-- Script que Lança o Projétil (Exemplo de um Script de Servidor)
local RemoteEvent = game.ReplicatedStorage:WaitForChild("LancarProjetil") -- Supondo que você tem um RemoteEvent
local ProjetilModelo = game.ServerStorage:WaitForChild("SeuProjetil") -- O projétil com o script de dano dentro
RemoteEvent.OnServerEvent:Connect(function(jogador, posicaoAlvo)
local personagem = jogador.Character
if not personagem then return end
local novoProjetil = ProjetilModelo:Clone()
novoProjetil.Parent = workspace
-- Define a posição inicial e move o projétil (exemplo simplificado)
local posicaoInicial = personagem.HumanoidRootPart.Position + Vector3.new(0, 3, 0)
novoProjetil.Position = posicaoInicial
-- === IMPORTANTE: CONFIGURA O CRIADOR NO SCRIPT DO PROJÉTIL ===
local scriptDano = novoProjetil:FindFirstChildOfClass("Script")
if scriptDano and scriptDano.JOGADOR_CRIADOR then
scriptDano.JOGADOR_CRIADOR = jogador
end
-- Use BodyVelocity/LinearVelocity, ou TweenService para mover o projétil até o alvo
-- Exemplo de movimento simples:
local velocidade = Instance.new("BodyVelocity")
velocidade.MaxForce = Vector3.new(math.huge, math.huge, math.huge)
velocidade.Velocity = (posicaoAlvo - posicaoInicial).Unit * 50 -- 50 é a velocidade
velocidade.Parent = novoProjetil
-- Adiciona um atraso para remover o BodyVelocity e deixar o projétil voar um pouco antes de cair.
game:GetService("Debris"):AddItem(velocidade, 0.2)
end)







