Leaderboard Event doesn't activate

I’ve been making a leaderboard for my game and I’ve been trying to add team support so that the background of the leaderboard changes colour. Every time I fire my event, nothing prints and nothing happens. It works on my player added event when the player dies. Any help? :smile:

Client
RepStorage.Events.Leaderboard.OnClientEvent:Connect(function(PlayerName, Call)
	
	if Call == "Enter" then
		
		print(PlayerName)
		
		if PlayerName.UserId ~= Player.UserId then
		
			local NewClone = script.LeaderPlayer:Clone()
			NewClone.Parent = script.Parent.Leaderboard
			NewClone.Items.Title.Text = PlayerName.Name
			NewClone.Name = PlayerName.Name
			
			wait(0.1)
			
			if PlayerName.MembershipType == Enum.MembershipType.None and not PlayerName:IsInGroup(1200769) then
				NewClone.Items.Icon.Image = ""
			elseif PlayerName.MembershipType == Enum.MembershipType.BuildersClub and not PlayerName:IsInGroup(1200769) then
				NewClone.Items.Icon.Image = "rbxassetid://124134446"
			elseif PlayerName.MembershipType == Enum.MembershipType.TurboBuildersClub and not PlayerName:IsInGroup(1200769) then
				NewClone.Items.Icon.Image = "rbxassetid://630159016"
			elseif PlayerName.MembershipType == Enum.MembershipType.OutrageousBuildersClub and not PlayerName:IsInGroup(1200769) then
				NewClone.Items.Icon.Image = "rbxassetid://67747268"
			elseif PlayerName:IsInGroup(1200769) then
				NewClone.Items.Icon.Image = "rbxassetid://1310250265"
			end
			
		end	
			
		if Player.UserId == PlayerName.UserId then
			
			for i, v in pairs(game:GetService("Players"):GetPlayers()) do
							
				local NewerClone = script.LeaderPlayer:Clone()
				NewerClone.Parent = script.Parent.Leaderboard
				NewerClone.Items.Title.Text = v.Name
				NewerClone.Name = v.Name
				
				if v.MembershipType == Enum.MembershipType.None and not v:IsInGroup(1200769) then
					NewerClone.Items.Icon.Image = ""
				elseif v.MembershipType == Enum.MembershipType.BuildersClub and not v:IsInGroup(1200769) then
					NewerClone.Items.Icon.Image = "rbxassetid://124134446"
				elseif v.MembershipType == Enum.MembershipType.TurboBuildersClub and not v:IsInGroup(1200769) then
					NewerClone.Items.Icon.Image = "rbxassetid://630159016"
				elseif v.MembershipType == Enum.MembershipType.OutrageousBuildersClub and not v:IsInGroup(1200769) then
					NewerClone.Items.Icon.Image = "rbxassetid://67747268"
				elseif v:IsInGroup(1200769) then
					NewerClone.Items.Icon.Image = "rbxassetid://1310250265"
				end
				
				wait(0.1)
				
			end
			
		end
		
	elseif Call == "Leave" then
					
		script.Parent.Leaderboard[PlayerName.Name]:Destroy()
		
	elseif Call == "TeamColour" then
		
		local TeamsServ = game:GetService("Teams")
		
		for i, v in pairs(game:GetService("Players"):GetPlayers()) do
			if v.Team == TeamsServ:FindFirstChild("Red") then
				print("red")
				script.Parent.Leaderboard[v.Name].Items.ImageColor3 = Color3.fromRGB(255, 35, 15)
				script.Parent.Leaderboard[v.Name].Items.Shadow.ImageColor3 = Color3.fromRGB(190, 0, 0)
			elseif v.Team == TeamsServ:FindFirstChild("Blue") then
				print("blue")
				script.Parent.Leaderboard[v.Name].Items.ImageColor3 = Color3.fromRGB(0, 157, 255)
				script.Parent.Leaderboard[v.Name].Items.Shadow.ImageColor3 = Color3.fromRGB(0, 123, 190)
			elseif v.Team == nil then
				print("neut")
				script.Parent.Leaderboard[v.Name].Items.ImageColor3 = Color3.fromRGB(217, 217, 217)
				script.Parent.Leaderboard[v.Name].Items.Shadow.ImageColor3 = Color3.fromRGB(182, 182, 182)
			end
		end
						
	end
	
end)
Server

-- // It prints "neut" here.

PlayerService.PlayerAdded:Connect(function(Plr)
	
	wait(0.1)
	
	Plr.CharacterAdded:Connect(function(Char)
		
		if Char:FindFirstChild("Humanoid") then
			
			Char.Humanoid.WalkSpeed = 25
			Char.Humanoid.JumpPower = 70
			
			Char:FindFirstChild("Humanoid").Died:Connect(function()
				Plr.Neutral = true
				GuiEvent:FireClient(Plr, "CutAway", "In")
				Alive.Value = false
				wait(0.5)
				Rep.Events.Leaderboard:FireAllClients(Plr, "TeamColour")
				Plr:LoadCharacter()
				wait(0.5)
				GuiEvent:FireClient(Plr, "CutAway", "Out")
			end)
			
		end
		
	end)
end)

-- // Doesn't work here.

if Mode.ScriptName == "TD" then
			
			local Red = Instance.new("Team", game:GetService("Teams"))
			Red.Name = "Red"
			Red.AutoAssignable = false
			Red.TeamColor = BrickColor.new("Bright red")
			
			local Blue = Instance.new("Team", game:GetService("Teams"))
			Blue.Name = "Blue"
			Blue.AutoAssignable = false
			Blue.TeamColor = BrickColor.new("Electric blue")
			
			RoundTimer = Mode.Round
			
			wait(0.1)			
			
			BalanceTeams()
			
			wait(0.1)
			
			for i, Plr in pairs(game:GetService("Players"):GetPlayers()) do 
			
				Rep.Events.Leaderboard:FireAllClients(nil, "TeamColour")
			
			end
		end

Note:

Rep.Events.Leaderboard:FireAllClients(nil, "TeamColour")

I have tried FireClient(Plr, “TeamColour”) as well.

Uhm, let’s see here. I’m not on a computer so this is uncomfortable to get out, but let’s go.


The first if statement in your remote. Where does the “Player” variable come from when you’re comparing PlayerName.UserId to Player.UserId? Just curious; if you don’t have a Player variable, then you’re trying to compare a number to something that’s nil.


I smell nested if statements and that makes my eyes glow red. You can shorten that down to one line by doing a little magic trick:

NewClone.Items.Icon.Image = (PlayerName:IsInGroup(1200769) and "rbxassetid://1310250265" or PlayerName.MembershipType == Enum.MembershipType.OutrageousBuildersClub and "rbxassetid://67747268" or PlayerName.MembershipType == Enum.MembershipType.TurboBuildersClub and "rbxassetid://630159016" or PlayerName.MembershipType == Enum.MembershipType.BuildersClub and "rbxassetid://124134446" or "")

In the grand scheme of things though, the above are just code criticisms. I hope you realize that you can handle everything regarding your leaderboard on the client without a server script or remote at all. The only time you should really use a remote for editing the leaderboard is if the server needs to force a change. You can otherwise locally connect to PlayerAdded and PlayerRemoving to determine who’s entering and leaving. Don’t forget to turn ResetOnSpawn off, because you don’t need that toggled for a leaderboard.

PlayerName is for getting the player that has joined / left.

Try printing the PlayerName and Call arguments in the OnClientEvent function to make sure they are correct. I think I vaguely remember passing nil as an argument to FireClient being weird, but it might have just been as the last argument.

Player, not PlayerName. Either way, my personal resolution I have is below the code criticisms I posted. You should just handle the entire leaderboard on the client. Have the server-side only push the client to do a leaderboard refresh.