Alright. Bingo. I was being stupid. Delete your leaderstats script and your datastore script. Delete the script in StarterCharacterScripts too.
Make a new regular script in ServerScriptService.
Then paste this code inside:
local Players = game:GetService("Players")
local TestService = game:GetService("TestService")
local RunService = game:GetService("RunService")
local DataStoreService = game:GetService("DataStoreService")
local DataStore = DataStoreService:GetDataStore("DataStoreValues") --Name the DataStore whatever you want
Players.PlayerAdded:Connect(function(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local Strength = Instance.new("IntValue")
Strength.Name = "Strength"
Strength.Parent = leaderstats
Strength.Value = 0
local Coins = Instance.new("IntValue")
Coins.Name = "Coins"
Coins.Parent = leaderstats
Coins.Value = 0
local Stars = Instance.new("IntValue")
Stars.Name = "Stars"
Stars.Parent = leaderstats
Strength.Value = 0
local Kills = Instance.new("IntValue")
Kills.Name = "Kills"
Kills.Parent = leaderstats
Kills.Value = 0
local value1Data = Strength
local value2Data = Coins
local value3Data = Stars
local value4Data = Kills
player.CharacterAdded:Connect(function(Character)
Character.Humanoid.Died:Connect(function(Died)
local creator = Character.Humanoid:FindFirstChild("creator")
local leaderstats = creator.Value:FindFirstChild("leaderstats")
if creator ~= nil and creator.Value~= nil then
leaderstats.Kills.Value += 1
end
end)
end)
local s, e = pcall(function()
value1Data = DataStore:GetAsync(player.UserId.."-Value1") or 0 --check if they have data, if not it'll be "0"
value2Data = DataStore:GetAsync(player.UserId.."-Value2") or 0
value3Data = DataStore:GetAsync(player.UserId.."-Value3") or 0
value4Data = DataStore:GetAsync(player.UserId.."-Value4") or 0
end)
if s then
Strength.Value = value1Data --setting data if its success
Coins.Value = value2Data
Stars.Value = value3Data
Kills.Value = value4Data
else
TestService:Error(e) --if not success then we error it to the console
end
end)
game.Players.PlayerRemoving:Connect(function(player)
local s, e = pcall(function()
DataStore:SetAsync(player.UserId.."-Value1", player.leaderstats.Strength.Value) --setting data
DataStore:SetAsync(player.UserId.."-Value2", player.leaderstats.Coins.Value)
DataStore:SetAsync(player.UserId.."-Value3", player.leaderstats.Stars.Value)
DataStore:SetAsync(player.UserId.."-Value4", player.leaderstats.Kills.Value)
end)
if not s then TestService:Error(e)
end
end)
game:BindToClose(function(player)
if not RunService:IsStudio() then
local s, e = pcall(function()
DataStore:SetAsync(player.UserId.."-Value1", player.leaderstats.Strength.Value) --setting data
DataStore:SetAsync(player.UserId.."-Value2", player.leaderstats.Coins.Value)
DataStore:SetAsync(player.UserId.."-Value3", player.leaderstats.Stars.Value)
DataStore:SetAsync(player.UserId.."-Value4", player.leaderstats.Kills.Value)
end)
if not s then TestService:Error(e)
end
end)
end