Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

Is it just me or is humanOther:TakeDamage(5) not working?

Asked by 3 years ago

So I've been making a game and I chose to make a sword. This is the script

local tool = script.Parent

local function onTouch(partOther)

    local humanOther = partOther.Parent:FindFirstChild("Humanoid")

    if not humanOther then return end

    if humanOther.Parent == tool then return end

    humanOther:TakeDamage(5)
end

local function slash()

    local str  = Instance.new("StringValue")
    str.Name = "toolanim"
    str.Value = "Slash"
    str.Parent = tool
end

tool.Activated:Connect(slash)
tool.Handle.Touched:Connect(onTouch) 

The Script kinda works but it doesn't do 5 damage, it just oneshot kills the other person. How do i fix this?

1 answer

Log in to vote
1
Answered by 3 years ago

The reason it one shot kills the other person is because when touched, the event not only fires once, but rather fires multiple times in a row. There is a solution to this problem with the use of debounce.

local tool = script.Parent

local debounce = false

local function onTouch(partOther)

    local humanOther = partOther.Parent:FindFirstChild("Humanoid")

    if not humanOther then return end

    if humanOther.Parent == tool then return end

    if humanOther and not debounce then
    debounce = true
    humanOther:TakeDamage(5)
    wait(0.5) --This is adjustable
    debounce = false
    end
end

local function slash()

    local str  = Instance.new("StringValue")
    str.Name = "toolanim"
    str.Value = "Slash"
    str.Parent = tool
end

tool.Activated:Connect(slash)
tool.Handle.Touched:Connect(onTouch) 

The debounce acts kind of like a cooldown, after it detects a collision through the touch event, it will wait the determined time until the event can be fired again.

Ad

Answer this question