Why does this datastore script not work

Hello, i am trying to save every character model in a folder with datastore and it doesn’t work/save so i’m trynna know whats wrong with the script

the script:

local Players = game:GetService("Players")
local DSService = game:GetService("DataStoreService")
local data = DSService:GetDataStore("datastore1")
local data2 = DSService:GetDataStore("datastore2")


Players.PlayerAdded:Connect(function(player)
	Instance.new("Folder",player).Name = "Profilefolders"
	Instance.new("Folder",player.Profilefolders).Name = "OwnedCharacters"
	Instance.new("Folder",player.Profilefolders).Name = "Drcurrencies"
	Instance.new("IntValue",player.Profilefolders.Drcurrencies).Name = "Coins"
	local key = player.UserId
	local owns = player.Profilefolders:WaitForChild("OwnedCharacters")
	wait(1)
	local savedLevel = data:GetAsync(key)
	if savedLevel ~= nil then
		for i, data in pairs(savedLevel) do
			local ownsdata = owns:FindFirstChild(data[1])
			if ownsdata then
				ownsdata.Value = data[2]
			else
				local instance = Instance.new(data[3])
				if instance then
					instance.Name = data[1]
					instance.Value = data[2]
					instance.Parent = owns
				end
			end
		end
	else
		data:SetAsync(key, {})
	end
end)
Players.PlayerRemoving:Connect(function(player)
	local key = player.UserId
	local savedLevel = data:GetAsync(key)
	local owns = player.Profilefolders:WaitForChild("OwnedCharacters")
	if not owns then return end
	owns = owns:GetChildren()
	local objData = {}
	for i, obj in pairs(owns) do
		table.insert(objData, {obj.Name, obj.Value, obj.ClassName})
	end
	if savedLevel == nil then
		data:SetAsync(key, objData)
	else
		data:UpdateAsync(key, function(oldValue)
			oldValue = objData
			return objData
		end)
	end
end)
game:BindToClose(function()
	for i, player in pairs(Players:GetPlayers()) do
		local key = player.UserId
		local savedLevel = data:GetAsync(key)
		local owns = player.Profilefolders:WaitForChild("OwnedCharacters")
		if not owns then return end
		owns = owns:GetChildren()
		local objData = {}
		for i, obj in pairs(owns) do
			table.insert(objData, {obj.Name, obj.Value, obj.ClassName})
		end
		if savedLevel == nil then
			data:SetAsync(key, objData)
		else
			data:UpdateAsync(key, function(oldValue)
				oldValue = objData
				return objData
			end)
		end
	end
	wait(3)
end)

Do you have studio to api services enabled?

1 Like

yea, i have it turned on since.