ROBLOX Premium is breaking my custom leaderboard

Alright so the owner of a group I develop for recently had his membership changed in ROBLOX Premium, and basically when he joins the game our custom leaderboard breaks and shows all of the teams plus puts him on the Security Department Team as seen here: image
Any user that joins after him has the same problem:

, however users that join before him do not have that problem:

I know this has something to do with ROBLOX Premium because the custom leaderboard script is not supposed to show your membership level, however for him it does.

Some fixes I have tried:
-Adding Enum.MembershipType.Premium to the script that loads the custom leaderboard
-Setting the membership image to nothing

The Script:

game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
local ScrollList = script.Parent:WaitForChild("Container"):WaitForChild("ScrollList")
local State = false
local Rank = game.Players.LocalPlayer:GetRankInGroup(3563533)
local GetMembershipIcon = function(Type)
	if Type == Enum.MembershipType.None then
		return ""
	elseif Type == Enum.MembershipType.BuildersClub then
		return ""
	elseif Type == Enum.MembershipType.TurboBuildersClub then
		return ""
	elseif Type == Enum.MembershipType.OutrageousBuildersClub then
		return ""
	elseif Type == Enum.MembershipType.Premium then
		return ""
	end
end
local function CreatePlayerFrame(Player)
	local PlayerFrame = script.Player:Clone()
	PlayerFrame.Name = Player.Name
	if (Player.Team.Name == "Intelligence Agency" or Player.Team.Name == "Internal Security Department" or Player.Team.Name == "Tactical Response Squadron") and Rank < 70 and game.Players.LocalPlayer.Team.Name ~= Player.Team.Name then
		PlayerFrame.PlayerName.Text, PlayerFrame.PlayerName.Back.Text = "[ REDACTED ]", "[ REDACTED ]"
	else
		PlayerFrame.PlayerName.Text, PlayerFrame.PlayerName.Back.Text = Player.Name, Player.name
	end
	PlayerFrame.Parent = ScrollList
	PlayerFrame.LayoutOrder = ScrollList[Player.Team.Name].LayoutOrder + 1
	PlayerFrame.MembershipIcon.Image = ""
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.LayoutOrder >= PlayerFrame.LayoutOrder and v.Name ~= PlayerFrame.Name then
			v.LayoutOrder = v.LayoutOrder + 1
		end
	end
end
local function RemovePlayerFrame(Player)
	local PlayerFrame = ScrollList[Player.Name]
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.LayoutOrder >= PlayerFrame.LayoutOrder and v.Name ~= PlayerFrame.Name then
			v.LayoutOrder = v.LayoutOrder - 1
		end
	end
	PlayerFrame:Destroy()
end
local function ChangeTeam(Player)
	local PlayerFrame = ScrollList[Player.Name]
	if Player.Team.Name == "Intelligence Agency" or Player.Team.Name == "Internal Security Department" or Player.Team.Name == "Tactical Response Squadron" or Player.Team.Name == "SOC" or Player.Team.Name == "REDACTED" then
		PlayerFrame.PlayerName.Text, PlayerFrame.PlayerName.Back.Text = "[ REDACTED ]", "[ REDACTED ]"
	else
		PlayerFrame.PlayerName.Text, PlayerFrame.PlayerName.Back.Text = Player.Name, Player.name
	end
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.LayoutOrder >= PlayerFrame.LayoutOrder and v.Name ~= PlayerFrame.Name then
			v.LayoutOrder = v.LayoutOrder - 1
		end
	end
	PlayerFrame.LayoutOrder = ScrollList[Player.Team.Name].LayoutOrder + 1
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.LayoutOrder >= PlayerFrame.LayoutOrder and v.Name ~= PlayerFrame.Name then
			v.LayoutOrder = v.LayoutOrder + 1
		end
	end
end
for _, Team in pairs(game.Teams:GetChildren()) do
	if Team then
		local TeamFrame = script.Team:Clone()
		TeamFrame.Name = Team.Name
		TeamFrame.TeamName.Text, TeamFrame.TeamName.Back.Text = Team.Name, Team.name
		TeamFrame.Background.ImageColor3 = Team.TeamColor.Color
		TeamFrame.Parent = ScrollList
		TeamFrame.LayoutOrder = #ScrollList:GetChildren() - 1 + 1
	end
end
for _, Player in pairs(game.Players:GetChildren()) do
	CreatePlayerFrame(Player)
end
game.Players.PlayerAdded:connect(function(Player)
	CreatePlayerFrame(Player)
end)
game.Players.PlayerRemoving:connect(function(Player)
	RemovePlayerFrame(Player)
end)
game:GetService("UserInputService").InputBegan:connect(function(IO, GP)
	if GP == false and IO.KeyCode == Enum.KeyCode.Tab then
		ScrollList.Parent:TweenPosition(State and UDim2.new(1, -175, 0, 5) or UDim2.new(1, 0, 0, 5), "Out", "Quad", 0.5, true)
		State = not State
	end
end)
local function GetVisibleFrames()
	local n = 0
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.Visible == true then
			n = n + 1
		end
	end
	return n
end
if Rank < 10 and workspace:FindFirstChild("CDCLeave") then
	workspace:FindFirstChild("CDCLeave"):Destroy()
end
while wait(1) do
	ScrollList.CanvasSize = UDim2.new(0, 0, 0, GetVisibleFrames() * 26 + 26 + 26 + 26)
	for i, v in pairs(game.Players:GetChildren()) do
		if v:GetPropertyChangedSignal("Team") then
			ChangeTeam(v)
		end
	end
	for i, v in pairs(game.Teams:GetChildren()) do
		if #v:GetPlayers() == 0 then
			ScrollList[v.Name].Visible = false
		else
			ScrollList[v.Name].Visible = true
		end
	end
end

Any ideas on whats wrong in the script?

You could just try making it always return "" rather than checking their membership.

game.StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
local ScrollList = script.Parent:WaitForChild("Container"):WaitForChild("ScrollList")
local State = false
local Rank = game.Players.LocalPlayer:GetRankInGroup(3563533)
local GetMembershipIcon = function(Type)
	return ""
end
local function CreatePlayerFrame(Player)
	local PlayerFrame = script.Player:Clone()
	PlayerFrame.Name = Player.Name
	if (Player.Team.Name == "Intelligence Agency" or Player.Team.Name == "Internal Security Department" or Player.Team.Name == "Tactical Response Squadron") and Rank < 70 and game.Players.LocalPlayer.Team.Name ~= Player.Team.Name then
		PlayerFrame.PlayerName.Text, PlayerFrame.PlayerName.Back.Text = "[ REDACTED ]", "[ REDACTED ]"
	else
		PlayerFrame.PlayerName.Text, PlayerFrame.PlayerName.Back.Text = Player.Name, Player.name
	end
	PlayerFrame.Parent = ScrollList
	PlayerFrame.LayoutOrder = ScrollList[Player.Team.Name].LayoutOrder + 1
	PlayerFrame.MembershipIcon.Image = ""
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.LayoutOrder >= PlayerFrame.LayoutOrder and v.Name ~= PlayerFrame.Name then
			v.LayoutOrder = v.LayoutOrder + 1
		end
	end
end
local function RemovePlayerFrame(Player)
	local PlayerFrame = ScrollList[Player.Name]
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.LayoutOrder >= PlayerFrame.LayoutOrder and v.Name ~= PlayerFrame.Name then
			v.LayoutOrder = v.LayoutOrder - 1
		end
	end
	PlayerFrame:Destroy()
end
local function ChangeTeam(Player)
	local PlayerFrame = ScrollList[Player.Name]
	if Player.Team.Name == "Intelligence Agency" or Player.Team.Name == "Internal Security Department" or Player.Team.Name == "Tactical Response Squadron" or Player.Team.Name == "SOC" or Player.Team.Name == "REDACTED" then
		PlayerFrame.PlayerName.Text, PlayerFrame.PlayerName.Back.Text = "[ REDACTED ]", "[ REDACTED ]"
	else
		PlayerFrame.PlayerName.Text, PlayerFrame.PlayerName.Back.Text = Player.Name, Player.name
	end
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.LayoutOrder >= PlayerFrame.LayoutOrder and v.Name ~= PlayerFrame.Name then
			v.LayoutOrder = v.LayoutOrder - 1
		end
	end
	PlayerFrame.LayoutOrder = ScrollList[Player.Team.Name].LayoutOrder + 1
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.LayoutOrder >= PlayerFrame.LayoutOrder and v.Name ~= PlayerFrame.Name then
			v.LayoutOrder = v.LayoutOrder + 1
		end
	end
end
for _, Team in pairs(game.Teams:GetChildren()) do
	if Team then
		local TeamFrame = script.Team:Clone()
		TeamFrame.Name = Team.Name
		TeamFrame.TeamName.Text, TeamFrame.TeamName.Back.Text = Team.Name, Team.name
		TeamFrame.Background.ImageColor3 = Team.TeamColor.Color
		TeamFrame.Parent = ScrollList
		TeamFrame.LayoutOrder = #ScrollList:GetChildren() - 1 + 1
	end
end
for _, Player in pairs(game.Players:GetChildren()) do
	CreatePlayerFrame(Player)
end
game.Players.PlayerAdded:connect(function(Player)
	CreatePlayerFrame(Player)
end)
game.Players.PlayerRemoving:connect(function(Player)
	RemovePlayerFrame(Player)
end)
game:GetService("UserInputService").InputBegan:connect(function(IO, GP)
	if GP == false and IO.KeyCode == Enum.KeyCode.Tab then
		ScrollList.Parent:TweenPosition(State and UDim2.new(1, -175, 0, 5) or UDim2.new(1, 0, 0, 5), "Out", "Quad", 0.5, true)
		State = not State
	end
end)
local function GetVisibleFrames()
	local n = 0
	for i, v in pairs(ScrollList:GetChildren()) do
		if v:IsA("Frame") and v.Visible == true then
			n = n + 1
		end
	end
	return n
end
if Rank < 10 and workspace:FindFirstChild("CDCLeave") then
	workspace:FindFirstChild("CDCLeave"):Destroy()
end
while wait(1) do
	ScrollList.CanvasSize = UDim2.new(0, 0, 0, GetVisibleFrames() * 26 + 26 + 26 + 26)
	for i, v in pairs(game.Players:GetChildren()) do
		if v:GetPropertyChangedSignal("Team") then
			ChangeTeam(v)
		end
	end
	for i, v in pairs(game.Teams:GetChildren()) do
		if #v:GetPlayers() == 0 then
			ScrollList[v.Name].Visible = false
		else
			ScrollList[v.Name].Visible = true
		end
	end
end
1 Like

Hi!

Considering this script is owned by my group, if you could tell me who sold it to you I would be happy to support you as is customary of anything we sell on from our group :slight_smile: although I don’t remember us ever selling this particular asset.

8 Likes

The script was in the group well before I joined, however I believe ForgetfulEvents or SCPF_Iota added it. Somebody else came into our game claiming they created it so we have removed it and created a new one.

1 Like