Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

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

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

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

This discussion is preserved as it was. New answers, comments, and votes are closed.