ScriptBlox is undergoing maintenance, so downtime is possible. Sorry for the inconvenience!
Universal Script 📌
8.7k Views

Damagevg2

Universal Script 📌Uploaded by
8 months ago
Please login to perform these actions:

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

View Raw
Edited By: davyramos14 Download


Comments
0
No comments. Please Login to add a comment.