Issues in many scripts having to do with DataStores

I have a game (tycoon) and there are many issues in different scripts.

  1. Issue in leaderstats script - not appearing in explorer or screen
  2. Issue in tycoon saving script - tycoon not saving
  3. Issue in achievements script - not appearing in explorer

So I will now post code from the scripts:

Leaderstats
local stats = Instance.new("IntValue")
		stats.Name = "leaderstats"
		local kills = false
		if Settings.LeaderboardSettings.KOs then
			kills = Instance.new("IntValue")
			kills.Name = Settings.LeaderboardSettings.KillsName
			kills.Value = 0
		end
		local deaths = false
		if Settings.LeaderboardSettings.WOs then
			deaths = Instance.new("IntValue")
			deaths.Name = Settings.LeaderboardSettings.DeathsName
			deaths.Value = 0
		end
		
		local cash = false
		if Settings.LeaderboardSettings.ShowCurrency then
			cash = Instance.new("StringValue")
			cash.Name = Settings.CurrencyName
			cash.Value = 0
		end
		
		local cash2 = false
		if Settings.Currency2.CurrencyShowed then
			cash2 = Instance.new("NumberValue")
			cash2.Name = Settings.Currency2.Name
			cash2.Value = 0
		end
		
		local cash3 = false
		if Settings.Currency3.CurrencyShowed then
			cash3 = Instance.new("IntValue")
			cash3.Name = Settings.Currency3.Name
			cash3.Value = 0
		end
Tycoon
--I'd rather not post it here because it is very long
Achievements
local players = game:GetService("Players")
local Datastoreservice = game:GetService("DataStoreService")
local dataStore = Datastoreservice:GetDataStore("AchievementProgressTestII")

local function SaveData(plr)
	local key = "plr-"..plr.UserId
	
	local save = {
		
 		["Achievement1"] = plr["Achievements"]["Cocoa Collecting 1"],
		["Achievement2"] = plr["Achievements"]["Grass Parkour"],
		["Achievement3"] = plr["Achievements"]["Sand Parkour"],
		["Achievement4"] = plr["Achievements"]["Snow Parkour"],
		["Achievement5"] = plr["Achievements"]["Lava Parkour"]
		
	}
	
	local success, err = pcall(function()
		dataStore:SetAsync(key, save)
	end)
	
	if not success then
		warn("Failed to overwrite data: "..tostring(err))
	end
end

function LoadData(plr)

	local AchievementSettings = require(script.Parent.Settings2)

	local achievementsFolder = Instance.new("Folder", plr)
	achievementsFolder.Name = AchievementSettings.AchievementSettings.Name
		
	local achievement1 = Instance.new("NumberValue", achievementsFolder)
	achievement1.Name = AchievementSettings.AchievementSettings.Achievements["1"]
	achievement1.Value = 0
	
	local achievement2 = Instance.new("NumberValue", achievementsFolder)
	achievement1.Name = AchievementSettings.AchievementSettings.Achievements["2"]
	achievement1.Value = 0
	
	local achievement3 = Instance.new("NumberValue", achievementsFolder)
	achievement1.Name = AchievementSettings.AchievementSettings.Achievements["3"]
	achievement1.Value = 0
	
	local achievement4 = Instance.new("NumberValue", achievementsFolder)
	achievement1.Name = AchievementSettings.AchievementSettings.Achievements["4"]
	achievement1.Value = 0
	
	local achievement5 = Instance.new("NumberValue", achievementsFolder)
	achievement1.Name = AchievementSettings.AchievementSettings.Achievements["5"]
	achievement1.Value = 0

	--[[local achievement2 = Instance.new("NumberValue", achievementsFolder)
	achievement2.Name = AchievementSettings.AchievementSettings.Achievements["2"]
	achievement2.Value = 0--]]
	
	local key = "plr-"..plr.UserId
	
	local savedData
	
	local success, err = pcall(function()
		savedData = dataStore:GetAsync(key)
	end)
	
	if not success then
		warn("Failed to save data: "..tostring(err))
		return
	end
	
	if savedData then
		achievement1.Value = savedData.Cash
	else
		SaveData(plr)
	end

end

game.Players.PlayerAdded:Connect(LoadData)
game.Players.PlayerRemoving:Connect(SaveData)

If you can help that would be good. If you need more information ask me what information you need.

Thank you!


Any edits will be here:

1 Like

In the leaderstats script you are not parenting the instances to anything.

I think for the datastore you’re not saving the value. It should be something like this.

["Achievement1"] = plr["Achievements"]["Cocoa Collecting 1"].Value

The not saving issue could be due to using SetAsync() when saving data, from my own experiences coding datastores I’ve found that SetAsync() causes a lot of issues saving data. If anything look into using UpdateAsync(), it works much better and checks for previous saves before overwriting any of the players data.

Here’s a post about UpdateAsync() (GlobalDataStore | Documentation - Roblox Creator Hub) If u need more help I could probably help edit your achievements script to work with UpdateAsync()