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

How do I grab player ID's in a script?

How do I grab player ID's in a script? I seem to be stuck with my problem here.

local BadgeService = game:GetService("BadgeService")
local Players = game:GetService("Players")
local UserID = Players.LocalPlayer.UserId

script.Parent.MouseButton1Down:Connect(function(player)
	script.Parent.Parent.Click:Play()
	if  BadgeService:UserHasBadgeAsync(UserID, 2124620114) then
		print("Giving gamepass to player")
		script.LocalScript.RemoteEvent2:FireClient(player)
	end
end)

2 answers

✓ Accepted answer

Hello there! Is this a server script? If so, put the MouseButton1Down in a local script, and fire the remote event. That is my recommendation, and it may be necessary for filtering enabled.

To get the UserId of a player in a serverscript, use the PlayerAdded event. An example of it with your code is shown below:

local BadgeService = game:GetService("BadgeService")
local Players = game:GetService("Players")

game.Players.PlayerAdded:Connect(function(plr)
	local UserID = plr.UserId
	script.Parent.MouseButton1Down:Connect(function()
		script.Parent.Parent.Click:Play()
		if BadgeService:UserHasBadgeAsync(UserID, 2124620114) then
			print("Giving gamepass to player")
			script.LocalScript.RemoteEvent2:FireClient(plr)
		end
        end)
end)

The reason why this works is you define a parameter called player which is the player that has been added into the game. Therefore, you can use this parameter to access the player.

Again, I highly recommend that you change your script drastically if it is a ServerScript. I hope this helped. Have a nice day!

Now, this has a syntax error, meaning you typed the code wrong.

Now if it is a local script you can not do game.Players.LocalPlayer because that is nil on server, and if it is a local script then you can not do :FireClient().

If you do want to do FireClient because it is a local script. Then replace the RemoteEvent with a BindableEvent, and do :Fire(), and when receiving the signal do .Event:Connect().

If it is a server script, do someting like this.

local BadgeService = game:GetService("BadgeService")
local Players = game:GetService("Players")

script.Parent.MouseButton1Down:Connect(function(player)
	script.Parent.Parent.Click:Play()
	local UserID = player.UserId
	if BadgeService:UserHasBadgeAsync(UserID, 2124620114) then
		print("Giving gamepass to player")
		script.LocalScript.RemoteEvent2:FireClient(player)
	end
end)

I hope this helps!

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