Advertisement
HanzerCopy

Versi 1

Apr 17th, 2025
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.06 KB | Source Code | 0 0
  1. local DAMAGE_PER_SECOND = 10
  2. local REGEN_PER_SECOND = 1
  3. local TOUCH_DELAY = 0.2
  4. local DAMAGE_AREA = script.Parent
  5. local touchingPlayers = {}
  6. local function isStillTouching(part, character)
  7.     for _, limb in ipairs(character:GetChildren()) do
  8.         if limb:IsA("BasePart") then
  9.             for _, touching in ipairs(limb:GetTouchingParts()) do
  10.                 if touching == part then
  11.                     return true
  12.                 end
  13.             end
  14.         end
  15.     end
  16.     return false
  17. end
  18. -- Fungsi untuk damage
  19. local function applyDamage(character)
  20.     local humanoid = character:FindFirstChild("Humanoid")
  21.     if not humanoid then return end
  22.     if not touchingPlayers[character] then
  23.         touchingPlayers[character] = true
  24.         while touchingPlayers[character] and humanoid.Health > 0 do
  25.             humanoid:TakeDamage(DAMAGE_PER_SECOND * TOUCH_DELAY)
  26.             wait(TOUCH_DELAY)
  27.         end
  28.     end
  29. end
  30. -- Fungsi untuk regen halus
  31. local function startRegen(character)
  32.     local humanoid = character:FindFirstChild("Humanoid")
  33.     if not humanoid then return end
  34.     -- Delay sebentar, cek apakah masih menyentuh
  35.     wait(0.2)
  36.     if isStillTouching(DAMAGE_AREA, character) then return end
  37.     while not touchingPlayers[character] and humanoid.Health < humanoid.MaxHealth do
  38.         local targetHealth = math.min(humanoid.Health + REGEN_PER_SECOND * TOUCH_DELAY, humanoid.MaxHealth)
  39.         local currentHealth = humanoid.Health
  40.         local steps = 5
  41.         local interval = TOUCH_DELAY / steps
  42.         for i = 1, steps do
  43.             if touchingPlayers[character] then return end
  44.             humanoid.Health = currentHealth + (targetHealth - currentHealth) * (i / steps)
  45.             wait(interval)
  46.         end
  47.     end
  48. end
  49. -- Saat menyentuh
  50. DAMAGE_AREA.Touched:Connect(function(hit)
  51.     local player = game.Players:GetPlayerFromCharacter(hit.Parent)
  52.     if player then
  53.         applyDamage(hit.Parent)
  54.     end
  55. end)
  56. -- Saat keluar
  57. DAMAGE_AREA.TouchEnded:Connect(function(hit)
  58.     local player = game.Players:GetPlayerFromCharacter(hit.Parent)
  59.     if player then
  60.         -- Matikan damage
  61.         touchingPlayers[hit.Parent] = nil
  62.         -- Coba mulai regen setelah pastikan sudah benar-benar keluar
  63.         coroutine.wrap(function()
  64.             startRegen(hit.Parent)
  65.         end)()
  66.     end
  67. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement