recently I am trying to save the value of a stringValue, but it does not save and gives me the error of "Invalid argument # 3", will it also save if the Value is changed by a LocalScript?

local ds = game:GetService("DataStoreService")
local valueDs = ds:GetDataStore("valueDs")

game.Players.PlayerAdded:Connect(function(player)
	local Keys = Instance.new("Folder")
	Keys.Name = "Keys"
	Keys.Parent = player

	local MenuKey = Instance.new("StringValue")
	MenuKey.Name = "MenuKey"
	MenuKey.Parent = Keys
	MenuKey.Value = "M"
	
	local InteractiveKey = Instance.new("StringValue")
	InteractiveKey.Name = "InteractiveKey"
	InteractiveKey.Parent = Keys
	InteractiveKey.Value = "F"
	
	local AgacharseKey = Instance.new("StringValue")
	AgacharseKey.Name = "AgacharseKey"
	AgacharseKey.Parent = Keys
	AgacharseKey.Value = "C"
	
	local EmotesKey = Instance.new("StringValue")
	EmotesKey.Name = "EmotesKey"
	EmotesKey.Parent = Keys
	EmotesKey.Value = "B"

	local data = {
		["MenuKey"] = player.Keys.MenuKey.Value,
		["InteractiveKey"] = player.Keys.InteractiveKey.Value,
		["AgacharseKey"] = player.Keys.AgacharseKey.Value,
		["EmotesKey"] = player.Keys.EmotesKey.Value,-- Repeat for all of them
	}
	
	local success,Err = pcall(function()
		valueDs:SetAsync(player.UserId, data)
	end)

	if success then
		MenuKey.Value = data
		InteractiveKey.Value = data
		AgacharseKey.Value = data
		EmotesKey.Value = data
	else
		print("No se pudieron guardar los datos")
		wait(Err)
	end
end)

game.Players.PlayerRemoving:Connect(function(player)

	local success, Err = pcall(function()
		valueDs:SetAsync(player.UserId.."-MenuKey", player.Keys.MenuKey.Value)
		valueDs:SetAsync(player.UserId.."-InteractiveKey", player.Keys.InteractiveKey.Value)
		valueDs:SetAsync(player.UserId.."-AgacharseKey", player.Keys.AgacharseKey.Value)
		valueDs:SetAsync(player.UserId.."-EmotesKey", player.Keys.EmotesKey.Value)
	end)

	if success then
		print("Guardado exitosamente")
	else
		print("Error al guardar datos")
		warn(Err)
	end
end)