Every time I play test on Roblox Studio, the player occasionally doesn’t receive his uniform and assigned leader stats. From my knowledge, using a loop to detect if the player is fully loaded is bad practice and it is usually preferred to use bindable events but I am not quite sure on how to go about it.
repeat task.wait() until Player.CharacterAppearanceLoaded
The script in question:
local Players = game:GetService("Players")
local TeamService = game:GetService("Teams")
local ServerStorage = game:GetService("ServerStorage")
local RStorage = game:GetService("ReplicatedStorage")
local Teams = {
"Allies";
"Axis";
}
for _, v in ipairs(Teams) do
local Team = Instance.new("StringValue")
Team.Name = v
Team.Parent = TeamService
end
Players.PlayerAdded:Connect(function(Player)
local RandomTeam = Teams[math.random(1, #Teams)]
local CurrentTeam = TeamService:WaitForChild(RandomTeam)
local Team = Instance.new("ObjectValue")
local TeamPlayer = Instance.new("StringValue")
TeamPlayer.Name = "Team"
TeamPlayer.Value = CurrentTeam.Name
TeamPlayer.Parent = Player
Team.Name = Player.Name
Team.Value = Player
Team.Parent = CurrentTeam
Player.Team = TeamService[RandomTeam]
Player.CharacterAdded:Connect(function(newCharacter)
--repeat task.wait() until Player.CharacterAppearanceLoaded
local Humanoid = newCharacter:FindFirstChildOfClass("Humanoid")
local TeamName = RStorage:FindFirstChild("Textures").TeamName:Clone()
TeamName.PlayerName.Text = Player.Name
TeamName.Parent = newCharacter
TeamName.Adornee = newCharacter.Head
if TeamPlayer.Value == "Allies" then
local NewShirt = ServerStorage:FindFirstChild("TeamUniforms").Americans.Shirt:Clone()
NewShirt.Parent = newCharacter
local NewPants = ServerStorage:FindFirstChild("TeamUniforms").Americans.Pants:Clone()
NewPants.Parent = newCharacter
local AlliesHelmet = ServerStorage:FindFirstChild("TeamUniforms").Americans.AmericansHelmet:Clone()
Humanoid:AddAccessory(AlliesHelmet)
elseif TeamPlayer.Value == "Axis" then
local NewShirt = ServerStorage:FindFirstChild("TeamUniforms").Germans.Shirt:Clone()
NewShirt.Parent = newCharacter
local NewPants = ServerStorage:FindFirstChild("TeamUniforms").Germans.Pants:Clone()
NewPants.Parent = newCharacter
local AxisHelmet = ServerStorage:FindFirstChild("TeamUniforms").Germans.GermansHelmet:Clone()
Humanoid:AddAccessory(AxisHelmet)
end
newCharacter.Humanoid.Died:Connect(function()
Player.leaderstats:FindFirstChild("Deaths").Value += 1
Player.leaderstats:FindFirstChild("Killstreak").Value = 0
if newCharacter.Humanoid:FindFirstChild("creator") then
local Player = newCharacter.Humanoid.creator.Value
local Leaderstats = Player.leaderstats
Leaderstats.Kills.Value += 1
Leaderstats.Killstreak.Value += 1
end
end)
end)
local Statistics = Instance.new("Folder",Player)
Statistics.Name = "leaderstats"
local Kills = Instance.new("IntValue",Statistics)
Kills.Value = 0
Kills.Name = "Kills"
local Deaths = Instance.new("IntValue",Statistics)
Deaths.Value = 0
Deaths.Name = "Deaths"
local Killstreak = Instance.new("IntValue",Statistics)
Killstreak.Value = 0
Killstreak.Name = "Killstreak"
end)
Players.PlayerRemoving:Connect(function(PlayerRemoved)
local User = TeamService:FindFirstChild(PlayerRemoved.Name, true)
if (User) then
User:Destroy()
end
end)