So basically I'm making an item saver, it saves via the items name (Such as "Basic Sword") but part of my game will be weapon upgrades, enchanting and such.

The saving works so far but currently doesn't save the values within the sword.

How would one create a table connected to the value. Such as:

local saveTable = {SwordA = {Upgrade=12, Enchant="CritChance3", Effect="Circle5"}, SwordB = {Upgrade=5, Enchant="Sharp5", Effect="Spark3"}}

My script currently is as follows:

local dataStore = game:GetService("DataStoreService")
local itemSaves = dataStore:GetDataStore("playersItems")

local gameItemsFolder = game.ServerStorage.Items
local swordFolder = gameItemsFolder.Swords
local potionFolder = gameItemsFolder.Potions

local function saveItems(lostPlayer)
	local Key = lostPlayer.UserId .. "-Items"
	local SaveTable = {Swords={}, Potions={}}
	
	local starterGear = lostPlayer:WaitForChild("StarterGear")
	
	for _,item in pairs(starterGear:GetChildren()) do
		if item:FindFirstChild("weaponServer") then
			table.insert(SaveTable.Swords, item.Name)
			
		elseif item:FindFirstChild("potionServer") then
			table.insert(SaveTable.Potions, item.Name)
		end
	end
end

local function loadItems(newPlayer)
	local Key = newPlayer.UserId .. "-Items"
	local CanLoad = true
	local playerItems = itemSaves:GetAsync(Key)
	
	local Backpack = newPlayer:WaitForChild("Backpack")
	local starterGear = newPlayer:WaitForChild("StarterGear")
	
	if playerItems == nil then
		CanLoad = false
	end
	
	if CanLoad == false then
		return nil
	else
		for _,v in pairs(playerItems.Swords) do
			local foundItem = swordFolder:FindFirstChild(v)
			if foundItem then
				local cloneA = foundItem:Clone()
				local cloneB = foundItem:Clone()
				
				cloneA.Parent = Backpack
				cloneB.Parent = starterGear
			else
				warn("Item: '" .. v .. "' Not Found")
			end
		end
		
		for _,v in pairs(playerItems.Potions) do
			local foundItem = potionFolder:FindFirstChild(v)
			if foundItem then
				local cloneA = foundItem:Clone()
				local cloneB = foundItem:Clone()
				
				cloneA.Parent = Backpack
				cloneB.Parent = starterGear
			else
				warn("Item: '" .. v .. "' Not Found")
			end
		end
	end
end

game.Players.PlayerAdded:Connect(function(newPlayer)
	wait(2)
	if loadItems(newPlayer) == nil then
		local startItems = gameItemsFolder.starterItems
		
		for _,v in pairs(startItems:GetChildren()) do
			local Backpack = newPlayer:WaitForChild("Backpack")
			local starterGear = newPlayer:WaitForChild("StarterGear")
			local playerArmour = newPlayer:WaitForChild("playerArmour")
			local playerEnchants = newPlayer:WaitForChild("playerEnchants")
			
			local itemType = v:FindFirstChild("itemType")
			
			if itemType.Value == "Weapon" or itemType.Value == "Potion" then
				v:Clone().Parent = Backpack
				v:Clone().Parent = starterGear
			elseif itemType.Value == "Armour" then
				v:Clone().Parent = playerArmour
			elseif itemType.Value == "Enchant" then
				v:Clone().Parent = playerEnchants
			end
		end
	end
end)

game.Players.PlayerRemoving:Connect(function(lostPlayer)
	wait()
	saveItems()
end)