Hello, could someone please help me debug this issue?
Currently, there is a save script that is intended to save the player’s stage number (from leaderboard) into higheststage. However, the value is not saving AND not returning an error message, implying that there is an error with either highestvalue or stage.
Thank you for looking at this!
datastore = game:GetService("DataStoreService")
local higheststage = datastore:GetDataStore("HighestStage") --Container for a value
local players = game:GetService("Players")
players.PlayerAdded:Connect(function(player)
wait(5)
userId = player.UserId --Get the player's id
print(tostring(userId))
stage = player.leaderstats.Stage --Leaderboard stage value
local highestvalue = higheststage:GetAsync(userId) --Get value of higheststage for player
print(tostring(highestvalue))
print(tostring(stage.Value))
stage.Value = highestvalue --Set stage to saved value
print(tostring(stage.Value))
end)
players.PlayerRemoving:Connect(function()
local setSuccess, errorMessage = pcall(function()
higheststage:SetAsync(userId, stage.Value)
end)
if not setSuccess then
errorMessage = "Data not saved!"
warn(errorMessage)
end
end)
I set stage in another script for leaderboard
Also wdym that i didn’t set player (like do u mean i should’ve typed (function(player) bc i don’t use player anywhere in this)
your saving and getting data is confusing me. idk why but i think you made a global variable with userId and stage, just do it like this:
local datastore = game:GetService("DataStoreService")
local higheststage = datastore:GetDataStore("HighestStage") --Container for a value
local players = game:GetService("Players")
players.PlayerAdded:Connect(function(player)
local success, data = pcall(function()
return higheststage:GetAsync(tostring(player.UserId))
end)
if success then
if not data then
data = 1
end
print("yay success")
end
local highestvalue = data
local stage = Instance.new("IntValue")
stage.Value = highestvalue
stage.Name = "stage"
stage.Parent = player
stage.Changed:Connect(function()
data = stage.Value
end
end)
players.PlayerRemoving:Connect(function(player)
local stage = player:FindFirstChild("stage")
if stage then
local setSuccess, errorMessage = pcall(function()
higheststage:SetAsync(tostring(player.UserId), stage.Value)
end)
if not setSuccess then
errorMessage = "Data not saved!"
warn(errorMessage)
end
end
end)
I did this in another script called ‘leaderstatscript’ (sry i kinda rushed this)
local players = game:GetService("Players")
local function updateleaderboard(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local stage = Instance.new("IntValue")
stage.Name = "Stage"
stage.Parent = leaderstats
end
players.PlayerAdded:Connect(updateleaderboard)