Hi, basically in my game I have been encountering this problem where if I join or any other player joins it seems, if there were people already playing the game, their characters dont load. What i mean is that they are invisible, they dont make sounds, you cant see the tool they have equipped or anything. The only way to fix it is for the invisible person to reset their character. Obviously, this is very bad. I have noticed, however, that this only occurs if the people already playing are NEW players. I don't really know what the cause of it is but this is the script that loads when the player joins the game, in serverscriptservice. Help would be much appreciated!
local dataStores = game:GetService("DataStoreService"):GetDataStore("PointsDataStore") local defaultCash = 50 local defaultKills = 0 local defaultWins = 0 local playersLeft = 0 game.Players.PlayerAdded:Connect(function(player, Humanoid) playersLeft = playersLeft + 1 local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player local ss = Instance.new("BoolValue") ss.Name = "Screenshake" ss.Parent = player ss.Value = true local KillStreak = Instance.new("IntValue") KillStreak.Name = "Streak" KillStreak.Parent = player local Points = Instance.new("IntValue") Points.Name = "Points" Points.Value = 0 Points.Parent = leaderstats local Kills = Instance.new("IntValue") Kills.Name = "Kills" Kills.Value = 0 Kills.Parent = leaderstats local Wins = Instance.new("IntValue") Wins.Name = "Wins" Wins.Value = 0 Wins.Parent = leaderstats local playerData = Instance.new("Folder") playerData.Name = player.Name playerData.Parent = game.ServerStorage.PlayerData local equipped = Instance.new("StringValue") equipped.Name = "Equipped" equipped.Parent = playerData local inventory = Instance.new("Folder") inventory.Name = "Inventory" inventory.Parent = playerData player.CharacterAdded:Connect(function(character) character.Humanoid.WalkSpeed = 16 character.Humanoid.Died:Connect(function() -- Whenever somebody dies, this event will run KillStreak.Value = 0 if character.Humanoid and character.Humanoid:FindFirstChild("creator") then if player.Character.Humanoid:FindFirstChild("creator") then local tag = player.Character.Humanoid:FindFirstChild("creator") local player2 = tag.Value local kills2 = player2.leaderstats.Kills local streak = player2:FindFirstChild("Streak") local point = player2.leaderstats.Points streak.Value = streak.Value + 1 kills2.Value = kills2.Value + 1 point.Value = point.Value + 50 if player.UserId == 264630904 then game:GetService("BadgeService"):AwardBadge(player2.UserId, 2130186578) end local useri = player2.UserId game.ReplicatedStorage.youkill:FireClient(player2, player.DisplayName) game.ReplicatedStorage.Ow:FireClient(player,player2) game.ReplicatedStorage.ps:FireClient(player2,streak.Value) game.ReplicatedStorage.STREAK:FireAllClients(player2.DisplayName,streak.Value) game.ReplicatedStorage.Feed:FireAllClients(player.DisplayName,player2.DisplayName) if streak.Value == 5 then point.Value = point.Value + 100 elseif streak.Value == 10 then point.Value = point.Value + 200 elseif streak.Value == 15 then point.Value = point.Value + 300 elseif streak.Value == 20 then point.Value = point.Value + 400 elseif streak.Value == 30 then point.Value = point.Value + 600 elseif streak.Value == 40 then point.Value = point.Value + 800 elseif streak.Value == 50 then point.Value = point.Value + 1000 elseif streak.Value == 60 then point.Value = point.Value + 1200 elseif streak.Value == 70 then point.Value = point.Value + 1400 elseif streak.Value == 80 then point.Value = point.Value + 1600 elseif streak.Value == 90 then point.Value = point.Value + 1800 elseif streak.Value == 100 then point.Value = point.Value + 2000 end wait(6) game.ReplicatedStorage.Buttonsvisible:FireClient(player) else game.ReplicatedStorage.Buttonsvisible:FireClient(player) end else if character:FindFirstChild("GameTag") then game.ReplicatedStorage.riiiiip:FireAllClients(player.Name) end end if character:FindFirstChild("GameTag") then character.GameTag:Destroy() end end) end) game.ReplicatedStorage.playtimee.OnServerEvent:Connect(function(playername) if playername.Name == player.Name then playername.leaderstats.Points.Value = playername.leaderstats.Points.Value + 100 end end) -- Data stores local player_data local kills_data local wins_data local weaponsData local equippedData pcall(function() player_data = dataStores:GetAsync(player.UserId.."-Points") end) pcall(function() kills_data = dataStores:GetAsync(player.UserId.."-Kills") end) pcall(function() wins_data = dataStores:GetAsync(player.UserId.."-Wins") end) pcall(function() weaponsData = dataStores:GetAsync(player.UserId.."-Weps") end) pcall(function() equippedData = dataStores:GetAsync(player.UserId.."-EquippedValue") end) if player_data ~= nil then -- Player has saved data, load it in Points.Value = player_data else -- New player Points.Value = defaultCash end if kills_data ~= nil then Kills.Value = kills_data else Kills.Value = defaultKills end if wins_data ~= nil then Wins.Value = wins_data else Wins.Value = defaultWins end if weaponsData then -- For loop through the weapons saved for _, weapon in pairs(weaponsData) do if game.ServerStorage.Items:FindFirstChild(weapon) then local weaponClone = game.ServerStorage.Items[weapon]:Clone() weaponClone.Parent = inventory print(weapon.." Loaded in!") end end if equippedData then equipped.Value = equippedData player:WaitForChild("PlayerGui") game.ReplicatedStorage.SendEquipped:FireClient(player,equippedData) end else print("No weapons data") end end) local bindableEvent = Instance.new("BindableEvent") game.Players.PlayerRemoving:Connect(function(player) pcall(function() dataStores:SetAsync(player.UserId.."-Points", player.leaderstats.Points.Value) print("Saved") end) pcall(function() dataStores:SetAsync(player.UserId.."-Kills", player.leaderstats.Kills.Value) print("Saved") end) pcall(function() dataStores:SetAsync(player.UserId.."-Wins", player.leaderstats.Wins.Value) print("Saved") end) pcall(function() local weapons = game.ServerStorage.PlayerData[player.Name].Inventory:GetChildren() local weaponsTable = {} for _, v in pairs(weapons) do table.insert(weaponsTable,v.Name) end dataStores:SetAsync(player.UserId.."-Weps",weaponsTable) if game.ServerStorage.PlayerData[player.Name].Equipped.Value ~= nil then local equippedVal = game.ServerStorage.PlayerData[player.Name].Equipped dataStores:SetAsync(player.UserId.."-EquippedValue",equippedVal.Value) end end) print("saved weapons and points!") playersLeft = playersLeft - 1 bindableEvent:Fire() end) game:BindToClose(function() -- This will be triggered upon shutdown while playersLeft > 0 do bindableEvent.Event:Wait() end end)