The datastore i am using is from a youtuber i copied because it is closest to how i want to save my items/info. Only problem is i am stuck on how to save and load something that has 3 values. The way it saves, it saves a folder then it saves intvalues under it but my items have three things i need to save. Item name, amount and image id. An int value can only do the name and either the amount or image id.

I made a workaround just using that but the further i got into my game and the inventory gui's, the more redundant my code is because i am having to always try and get the items image id from somewhere else. I have tried to fix this but i am not good with tables. what i want to be able to save is a folder named items, and inside that is a part(thats named) then under that is two intvalues.

local dataStoreService = game:GetService("DataStoreService")
local dataStore = dataStoreService:GetDataStore("Player")

local loaded = {}

game.Players.PlayerAdded:Connect(function(player)
	local success, value = pcall(dataStore.GetAsync, dataStore, player.UserId)
	if success == false then player:Kick("DataStore failed to load, please try again.") return end
	local data = value or {}
	print ("loaded:", data)
	for i, folder in game.ServerStorage.PlayerData:GetChildren() do
		local subData = data[folder.Name] or {}
		local clone = folder:Clone()
		for i, child in clone:GetChildren() do
			child.Value = subData[child.Name] or child.Value
		end
		clone.Parent = player
	end
	loaded[player] = true
end)

game.Players.PlayerRemoving:Connect(function(player)
	if loaded[player] ==nil then return end
	local data = {}
	for i, folder in game.ServerStorage.PlayerData:GetChildren() do
		local subData = {}
		for i, child in player[folder.Name]:GetChildren() do
			subData[child.Name] = child.Value
			end
		data[folder.Name] = subData
		player[folder.Name]:Destroy()
		
	end
	local success, Value = pcall(dataStore.SetAsync, DataStore, player.UserId, data)
	print("Saved:", data)
	loaded[player] = nil
end)

game:BindToClose(function()
	while next(loaded) ~= nil do
		task.wait()
	end
end)