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

Gamespass on sit problem?

I tried to combine one script with another, and make it so when you sit, it checks if you are a vip and if so it puts a gui in your playergui. It has no errors or anything.

Players = game:GetService("Players")
Workspace = game:GetService("Workspace")
Seat = script.Parent
GUI = script.GUI
Active = false
Player = nil
NewGui = nil
gps = game:GetService("GamePassService");
id =  266394204 --Gamepass ID
VIP = {"Player","NotSoNorm","Adeleina"} --Special Players
players = game.Players:GetPlayers()

Seat.ChildAdded:connect(function(Child)
	for i=1,#VIP do
		for i=1,#players do
			if players[i].Name == VIP[i].Name or gps:PlayerHasPass(players[i], id) then
					if Active == false then
				if Child.Name == "SeatWeld" then
					Active = true
					Player = Players:GetPlayerFromCharacter(Child.Part1.Parent)
					if Player ~= nil then
						PlayerGui = Player:FindFirstChild("PlayerGui")
						if PlayerGui ~= nil then
							NewGui = GUI:Clone()
							NewGui.Parent = PlayerGui
							end
						end
					end
				end
			end
		end
	end
end)

1 answer

I suggest using a simple debugging technique: add print statements before each 'if' statement to see which condition is failing.

I would also restructure your script a bit:

Players = game:GetService("Players")
Workspace = game:GetService("Workspace")
Seat = script.Parent
GUI = script.GUI
Active = false
gps = game:GetService("GamePassService");
id =  266394204 --Gamepass ID
VIP = {"Player","NotSoNorm","Adeleina"} --Special Players
players = game.Players:GetPlayers()
for i = 1, #VIP do --convert to dictionary for easy lookup
	VIP[VIP[i]] = true
	VIP[i] = nil
end
Seat.ChildAdded:connect(function(Child)
	if Active then return end
	if Child.Name ~= "SeatWeld" then return end
	local player = Players:GetPlayerFromCharacter(Child.Part1.Parent)
	if not player then return end
	if not VIP[player.Name] and not gps:PlayerHasPass(player, id) then return end --not VIP and no access
	PlayerGui = Player:FindFirstChild("PlayerGui")
	if PlayerGui ~= nil then
		local NewGui = GUI:Clone()
		NewGui.Parent = PlayerGui
		Active = true
	end
end)

Notice how I do several checks in the beginning and return from the function if they fail. This prevents you from needing numerous tabs.

Note that this script will only give the GUI to a single person due to the 'Active' variable. You should consider simply checking to see whether the GUI is in the PlayerGui, instead of using 'Active'.

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