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

How can I make this tool giving/removing script better & work?

Asked by 9 years ago

So, here's the explanation to my script: Basically their will be 4 invisible parts that will cover a certain area and the only way to get in is to walk through those parts causing a touched event to occur which will see if you have a sword and if not, give you a sword plus Global Variable in your player to mimic if you have one of not. This script is having problems when a tool or hat touched the part causing it so say "Humanoid is not a valid member of Hat". Is their a better way to perform my script or do I have to work out the bugs?

script: (Not a LocalScript)

db = false


script.Parent.Touched:connect(function(Hit)
    local Character = Hit.Parent
    local Player = game.Players:GetPlayerFromCharacter(Character)
    if Hit.ClassName == "Part" and Character and Character.Humanoid and Character:FindFirstChild("SwordStatus") == nil then
        if db == false then db = true
            local Has = Instance.new("BoolValue", Character)
            Has.Name = "SwordStatus"
            Has.Value = false
            if Character.SwordStatus.Value == false then
                local Getting = game.ReplicatedStorage.LinkedSword:Clone()
                Getting.Parent = Player.Backpack
                Hit.Parent.SwordStatus.Value = true
                wait(0.5)
                db = false
            end
        end
    elseif Hit.ClassName == "Part" and Character and Character.Humanoid and Character:FindFirstChild("SwordStatus") ~= nil then
        if db == false then db = true
            if Character.SwordStatus.Value == true then
                local FindSwordB = Player.Backpack:FindFirstChild("LinkedSword")
                local FindSwordPlr = Character:FindFirstChild("LinkedSword")
                if FindSwordB ~= nil and FindSwordPlr == nil then
                    FindSwordB:remove()
                    wait(0.5)
                    db = false
                elseif FindSwordB == nil and FindSwordPlr ~= nil then
                    FindSwordPlr:remove()
                    wait(0.5)
                    db = false
                end
            end
        end
    elseif  Hit.ClassName == "Hat" then
        print("")
    elseif Hit.ClassName == "Tool" then
        print("")
    end
end)

1 answer

Log in to vote
0
Answered by 9 years ago

Instead of just Character.Humanoid, try Character:findFirstChild("Humanoid").

Ad

Answer this question