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

Why doesn't this script work?

So, I made a script that SHOULD remove weapons (in this case, the "ClassicSword") when touched a brick called "RedInteractive". For some reason - it doesn't work. Output is not giving any errors, but it doesn't print out what I've told it to print. Can anyone help? Big thanks!

Sincerely, Director1406.

P.S. Code is bellow

p = game.Players.LocalPlayer


game.Workspace.RedInteractive.Touched:connect(function(hit)
	if p.Backpack:FindFirstChild("ClassicSword") == true then
		print("entering castle, removing weaps")
		p.Backpack.ClassicSword:Destroy()
	elseif p.Backpack:FindFirstChild("ClassicSword") == false then
		print("leaving castle, giving back weaps")
		local copy = game.Lighting.ClassicSword:Clone()
		copy.Parent = p.Backpack
	end
end)

2 comments

0

is this in a LocalScript (as you're using LocalPlayer)?

0

Yes it is.

1 answer

If you're using a local script, DON'T. You don't need to use a local script for this process. The main reason your code is not working is because you use game.Players.LocalPlayer in order to get the player. The problem with this is that the script is probably in Workspace meaning there is no local player. Meaning p = nil. The way you can fix this is by getting the player from the part that touched the brick. In this case, "hit". The code would look something like this,

-- IN REGULAR SCRIPT
-- remove local player
game.Workspace.RedInteractive.Touched:connect(function(hit)-- I would recomend that you put this inside of the part and use script.Parent.Touched instead because that would work much better

    if not hit.Parent:FindFirstChild("Humanoid") then return end-- if hit isn't part of a character returns end

    local p = game.Players:GetPlayerFromCharacter(hit.Parent)--Gets the player from the character.

    if p.Backpack:FindFirstChild("ClassicSword") == true then
        print("entering castle, removing weaps")
        p.Backpack.ClassicSword:Destroy()

    elseif p.Backpack:FindFirstChild("ClassicSword") == false then
        print("leaving castle, giving back weaps")
        local copy = game.Lighting.ClassicSword:Clone()-- I would also recomend using ServerStorage instead of Lighting

        copy.Parent = p.Backpack
    end
end)

That should work. Good luck!

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