Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
COMMUNITY QUESTION

How to save a table using Datastore2?

Hi, I've been asking this question for 4 times and this is the 5th one so please help me. So basically I added bool values to the folder so I could access the players inventory later in the game and the problem is that it isn't saving.

Datastore2 script:

local DataStore2 = require(1936396537)
local default = {"Wooden Sword","Wooden Bow","Wooden Spear"}
game.Players.PlayerAdded:Connect(function(plr)
	local dataweap = DataStore2("Weapons",plr)
	
	local fol = Instance.new("Folder")
	fol.Parent = plr
	fol.Name = "Weapons"
	dataweap:Get(default)
	for i,v in pairs(dataweap:Get())do
		local tag = Instance.new("BoolValue")
		tag.Parent = fol
		tag.Name = v
	end
	
	dataweap:OnUpdate(function(new)
		for i,v in pairs(fol:GetChildren())do -- remving old values in the folder
			v:Destroy()
		end
		for i,v in pairs(dataweap:Get())do -- Adding new bool values
			if game:GetService("ReplicatedStorage").Weapons:FindFirstChild(v)then
				local tag = Instance.new("BoolValue")
				tag.Parent = fol
				tag.Name = v
			end
		end
		dataweap:Set()
	end)
end)

Giver script:

local par = script.Parent
local cool = false
par.Touched:Connect(function(hit)
	if hit.Parent:FindFirstChild("Humanoid")and cool == false then
		cool = true
		if game.Players:GetPlayerFromCharacter(hit.Parent)then
			local name = game.Players:GetPlayerFromCharacter(hit.Parent)
			local Datastore2 = require(1936396537)
			local dataweap = Datastore2("Weapons",name)
			local weap = game.ReplicatedStorage.Weapons:GetChildren()
			local ran = weap[math.random(1,#weap)]
			print(ran)
			table.insert(dataweap, ran.Name)
			for i,v in pairs(dataweap:Get())do -- Just to check what is in the data
				print(v)
			end
			print(dataweap)
		end
		wait(7)
		cool = false
	end
end)

The giver gives a player random weapons when they touch it. So this actually print out:

-- Magic Staff

-- Wooden Sword
-- Wooden Bow
-- Wooden Spear

So I think that there is some problem with the table.insert thing in the giver script or is there a different way to put string values into a datastore2 table? Help please, Thank you

2 comments

0

It's my first time seeing a DataStore being required...What does it do?

0

It's some DataStore ModuleScript that simplifies data storage.

1 answer

This is a good question, and a lot of people ask this... so hopefully, I can help you out.

Let's start with an example, setting up a DataStore.

local Players = game:GetService("Players")

local DataStore2 = require(1936396537)
DataStore2.Combine("DATA", "weapons")

local default_data = {"Wooden Sword","Wooden Bow","Wooden Spear"}

Players.PlayerAdded:Connect(function(player)
	local weaponsStore = DataStore2("weapons", player)
	
	-- Get Data & Set Default
	local weapons = weaponsStore:Get(default_data)
end)

Now what this did, is we created the DataStrore, and then we fetched the data and set a default value if no data has been saved under that key... Now, to answer the question about saving tables, rather than using the :Get function, we would use the :Set function. Here is an example:

local new_data = {"Stone Sword", "Wooden Bow", "Wooden Spear"}
weaponsStore:Set(new_data)

I hoped this answer your question, and if it didn't, respond to this post and I will do my best to assist you further! Also, here is a link to the DataStore2 documentation, this should be able to answer all your questions.

This discussion is preserved as it was. New answers, comments, and votes are closed.