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 let players w/ higher tiered VIPs go into VIP rooms for lower tiered VIPs?

I'm having trouble making a system where a player w/ a high tier VIP game pass is able to go into a room that's accessible to lower tiered VIPs.

Example: Let's say a player bought a VIP game pass that's called Mega VIP. That player who bought Mega VIP should also get access to the VIP tier below Mega VIP, called Normal VIP.

How would I let the player that bought Mega VIP also get access to Normal VIP which is a "lower tier" than Mega VIP? (Hope I didn't sound too redundant with this question.)

Here's my script: (Does not work)


local Config = script.Parent.Configuration
local Gamepass = Config.GamepassId.Value
local Group = Config.GroupId.Value
local Gamepass2 = Config.GamepassId2.Value
local Kill = Config.KillOnTouch.Value

local Door = script.Parent.Door

Door.Transparency = 0
Door.CanCollide = true

function AllowedIn(Player)
	if Player.userId == 0 then
		return false
	elseif Gamepass or Gamepass2 > 0 then
		if game.MarketplaceService:PlayerOwnsAsset(Player,Gamepass or Gamepass2) then
			return true
		end
	elseif Group > 0 then
		if Player:IsInGroup(Group) then
			return true
		end
	end
	return false
end

local Debounce = true

Door.Touched:connect(function(hit)
	if hit.Parent:FindFirstChild("Humanoid") then
		local Player = game.Players:GetPlayerFromCharacter(hit.Parent)
		if Player and Debounce then
			Debounce = false
			if AllowedIn(Player) then
				Door.CanCollide = false
				Door.Transparency = 0.5
				spawn(function()
					wait(1.5)
					Door.CanCollide = true
					Door.Transparency = 0
				end)
			else
				if Gamepass or Gamepass2 > 0 then
					game.MarketplaceService:PromptPurchase(Player,Gamepass)
				end
				if Kill then
					hit.Parent.Humanoid.Health = 0
					local Explosion = Instance.new("Explosion",workspace)
					Explosion.BlastPressure = 0
					Explosion.Position = hit.Position
				else
					if hit.Parent:FindFirstChild("Torso") then
						hit.Parent.Torso.Velocity = Door.CFrame.lookVector * 150
					end
				end
			end
			wait(0.3)
			Debounce = true
		end
	end
end)

1 answer

✓ Accepted answer

I cleaned up your code and made it a bit easier to understand with comments and general style. I changed it from more of a manual system to a bit more automatic in terms of creating the AllowedIn function.

The general way my changes work is that they check if the VIP level of a player is bigger than or equal to the level of a door. The majority of the changed code is simply setting it up, as the actual checking of the level is very simple!

local Pass1 = 0000 -- VIP
local Pass2 = 0000 -- Mega VIP
local Group = 0000

local Marketplace = game:GetService("MarketplaceService")
local PlayerLevels = {} -- easy to access table of VIP levels

game.Players.PlayerAdded:connect(function(Player) -- this function assigns the VIP level of a player
	local Level = 0

	if Player:IsInGroup(Group) then
		Level = 3 -- make sure the levels descend
	elseif Marketplace:PlayerOwnsAsset(Player,Pass2) then -- do these in descending order of tier
		Level = 2
	elseif Marketplace:PlayerOwnsAsset(Player,Pass1) then
		Level = 1
	end

	PlayerLevels[Player.UserId] = Level -- Sets the value
end)

local function AllowedIn(Player,MinLevel) -- MinLevel is the minimum VIP level required to enter
	if PlayerLevels[Player.UserId] >= MinLevel then -- the `Table[Index]` is a way of getting a value in a table similar to searching a library for a book with a specific name
		return true
	else
		return false
	end
end

local Debounce = true
Door.Touched:connect(function(Hit)
	local Player = game.Players:GetPlayerFromCharacter(Hit.Parent) or game.Players:GetPlayerFromCharacter(Hit.Parent.Parent) -- R15 compatible
	if not Player or not Debounce then return end -- Finish if player wasn't found or debounce is happening

	if AllowedIn(Player,1) then -- Assuming this is a VIP door
		Debounce = false
		Door.CanCollide = false
		Door.Transparency = 0.5
	else
		Marketplace:PromptPurchase(Player,Gamepasses1) -- assuming this is a VIP door
		-- Kill stuff
	end

	wait(1.5)
	Door.CanCollide = true
	Door.Transparency = 0
	Debounce = true
end)

Anything you don't understand? Please tell me :) Hope I could help!

~TDP

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