Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local DAMAGE_PER_SECOND = 10
- local REGEN_PER_SECOND = 1
- local TOUCH_DELAY = 0.2
- local DAMAGE_AREA = script.Parent
- local touchingPlayers = {}
- local function isStillTouching(part, character)
- for _, limb in ipairs(character:GetChildren()) do
- if limb:IsA("BasePart") then
- for _, touching in ipairs(limb:GetTouchingParts()) do
- if touching == part then
- return true
- end
- end
- end
- end
- return false
- end
- -- Fungsi untuk damage
- local function applyDamage(character)
- local humanoid = character:FindFirstChild("Humanoid")
- if not humanoid then return end
- if not touchingPlayers[character] then
- touchingPlayers[character] = true
- while touchingPlayers[character] and humanoid.Health > 0 do
- humanoid:TakeDamage(DAMAGE_PER_SECOND * TOUCH_DELAY)
- wait(TOUCH_DELAY)
- end
- end
- end
- -- Fungsi untuk regen halus
- local function startRegen(character)
- local humanoid = character:FindFirstChild("Humanoid")
- if not humanoid then return end
- -- Delay sebentar, cek apakah masih menyentuh
- wait(0.2)
- if isStillTouching(DAMAGE_AREA, character) then return end
- while not touchingPlayers[character] and humanoid.Health < humanoid.MaxHealth do
- local targetHealth = math.min(humanoid.Health + REGEN_PER_SECOND * TOUCH_DELAY, humanoid.MaxHealth)
- local currentHealth = humanoid.Health
- local steps = 5
- local interval = TOUCH_DELAY / steps
- for i = 1, steps do
- if touchingPlayers[character] then return end
- humanoid.Health = currentHealth + (targetHealth - currentHealth) * (i / steps)
- wait(interval)
- end
- end
- end
- -- Saat menyentuh
- DAMAGE_AREA.Touched:Connect(function(hit)
- local player = game.Players:GetPlayerFromCharacter(hit.Parent)
- if player then
- applyDamage(hit.Parent)
- end
- end)
- -- Saat keluar
- DAMAGE_AREA.TouchEnded:Connect(function(hit)
- local player = game.Players:GetPlayerFromCharacter(hit.Parent)
- if player then
- -- Matikan damage
- touchingPlayers[hit.Parent] = nil
- -- Coba mulai regen setelah pastikan sudah benar-benar keluar
- coroutine.wrap(function()
- startRegen(hit.Parent)
- end)()
- end
- end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement