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

Dialog Shop Broken, please help?

Okay, so when I play and try to buy the gun it says: 'player is not a valid member of Players' when in this code:

workspace.Joe.Head.Dialog.DialogChoiceSelected:connect(function(player,choice)
	   if choice.Name == "Silencer" then
	    for _,Player in pairs(game.Players.player.Name) do
		if Player:FindFirstChild("leaderstats") then
			if Player.leaderstats.Money.Value >= 130 and player.Backpack:FindFirstChild("M4A4") then
			player.Backpack.M4A4:Destroy()	
			Player.leaderstats.Money.Value = Player.leaderstats.Money.Value -130
            game.Lighting.SilencedM4A4:Clone().Parent = player.Backpack
			else
				if player.Backpack:FindFirstChild("M4A4") == nil then
					choice.ResponseDialog = "Sorry, you don't have a glock"
					end
				end 
		else
			if Player.leaderstats.Money.Value < 130 then
				choice.ResponseDialog = "Sorry, you don't have enough money!"
end
		end
	end
	end
end)

It gets the player in function when they click the dialog! Please help!

1 answer

✓ Accepted answer

The problem is, player is an object. for _,players need a TABLE, like if you get children or players. A Table could be a whole list of objects. In this case, we are trying to find the player(which is already a variable.) Just replace all the capital, "P"s in "Player" and get rid of the for loop.

workspace.Joe.Head.Dialog.DialogChoiceSelected:connect(function(player,choice)
       if choice.Name == "Silencer" then --removed for loop.
        if player:FindFirstChild("leaderstats") then --all "Player" are now "player" since player was referenced on the first line of the code.
            if player.leaderstats.Money.Value >= 130 and player.Backpack:FindFirstChild("M4A4") then
            player.Backpack.M4A4:Destroy()  
            player.leaderstats.Money.Value = player.leaderstats.Money.Value -130
            game.Lighting.SilencedM4A4:Clone().Parent = player.Backpack
            else
                if player.Backpack:FindFirstChild("M4A4") == nil then
                    choice.ResponseDialog = "Sorry, you don't have a glock"
                    end
                end 
        else
            if player.leaderstats.Money.Value < 130 then
                choice.ResponseDialog = "Sorry, you don't have enough money!"
end
    end
    end
end)

Hope it helps!

1 comment

0

Thank you so much!!!!

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