Search code examples
luarobloxluau

Attempt to index boolean with 'Health'


I made a punch script, with a hitbox part, but it doesn't gives damage and i have an error in the output called "Attempt to index boolean with 'Health'", but the humanoid exists and his properties too, what is happening? Can i fix that? Code here:

local rep = game:GetService("ReplicatedStorage")
local debounceDMG = true

rep.Combate.Soco.OnServerEvent:Connect(function(plr)
    local math = math.random(1,2)
    local char = plr.Character or plr.CharacterAdded:Wait()
    local Humanoid = char.Humanoid
    local lanim = char.Humanoid:LoadAnimation(script.Left)
    local lanim1 = char.Humanoid:LoadAnimation(script.Animation)
    local hitbox = Instance.new("Part")
    hitbox.Parent = workspace
    hitbox.Transparency = 0
    hitbox.Anchored = true
    hitbox.CanCollide = false
    hitbox.Size = Vector3.new(2.5,2.5,2.5)
    hitbox.CanTouch = true
    local c = game:GetService("RunService").Heartbeat:Connect(function()
        if math == 2 then
            hitbox.Position = char.LeftHand.Position
        elseif math == 1 then
            hitbox.Position = char.RightHand.Position
        end
    end)
    if math == 2 then
        lanim:Play()
    elseif math == 1 then
        lanim1:Play()
    end
    hitbox.Touched:Connect(function(hit)
        local hum = hit.Parent:FindFirstChild("Humanoid") ~= Humanoid
        if hum  then
            hum.Health -= 5
        end
    end)
    task.wait(.3)
    hitbox:Destroy()
    c:Disconnect()
end)

Solution

  • This line:

    local hum = hit.Parent:FindFirstChild("Humanoid") ~= Humanoid
    

    assigns a boolean to hum, depending on whether the return value from FindFirstChild is not equal to Humanoid.

    Because hum is a boolean, that's why you get the Attempt to index boolean with 'Health' runtime error on this line:

                hum.Health -= 5
    

    First, I'd recommend adding this hot comment to the very top of your script: --!strict. Then, Luau LSP (if you're using Visual Studio Code) and/or Roblox Studio can tell you about this mistake before your code even runs. It's really nice to see the red squiggle appear and tell you more precisely what's wrong.

    Second, you probably mean for the hum assignment to simply be:

    local hum = hit.Parent:FindFirstChild("Humanoid")