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

I'm trying to save an equipped value and it prints the correct values but doesn't give them?

So, I'm making a shop and it needs to check if the item you currently have is equipped to show "Equipped" or "Equip", so I simply put a BoolValue inside of each StringValue(the item) to see if it's equipped; and for the most part it works, it saves, it says one is true and the other is false, but when I load into the game they're both true. Please help!

My code:

local DatastoreService = game:GetService("DataStoreService") local Datastore = DatastoreService:GetDataStore("TrainingSimulatorDataTest16") local mps = game:GetService("MarketplaceService") local id = 11893526

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

local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player

local codesFolder = Instance.new("Folder")
codesFolder.Name = "CodesFolder"
codesFolder.Parent = player

local miscStats = Instance.new("Folder")
miscStats.Name = "MiscStats"
miscStats.Parent = player

local fistPowersFolder = Instance.new("Folder")
fistPowersFolder.Name = "FistPowers"
fistPowersFolder.Parent = player

local folder = Instance.new("Folder")
folder.Name = player.Name
folder.Parent = game.ServerStorage:WaitForChild("RemoteData")

local debounce = Instance.new("BoolValue")
debounce.Name = "Debounce"
debounce.Parent = folder

local coins = Instance.new("NumberValue")
coins.Name = "Coins"
coins.Parent = leaderstats

local fistPower = Instance.new("NumberValue")
fistPower.Name = "FistPower"
fistPower.Parent = miscStats

local diamonds = Instance.new("NumberValue")
diamonds.Name = "Diamonds"
diamonds.Parent = leaderstats

local rank = Instance.new("StringValue")
rank.Name = "Rank"
rank.Parent = leaderstats

local rankMultiplier = Instance.new("NumberValue")
rankMultiplier.Name = "RankMultiplier"
rankMultiplier.Parent = rank

local strength = Instance.new("NumberValue")
strength.Name = "Strength"
strength.Parent = miscStats

local dnaAmount = Instance.new("NumberValue")
dnaAmount.Name = "Dna"
dnaAmount.Parent = miscStats

local coinData,strengthData,dnaData,rankData,rankMultiplierData,diamondData,fistPowerData,codeData,fistPowersData,isEquippedFistPowerData

local success,errorMsg = pcall(function()
	
	coinData = Datastore:GetAsync("coinData-"..player.UserId)
	strengthData = Datastore:GetAsync("strengthData-"..player.UserId)
	dnaData = Datastore:GetAsync("dnaData-"..player.UserId)
	rankData = Datastore:GetAsync("rankData-"..player.UserId)
	rankMultiplierData = Datastore:GetAsync("rankMultiplierData-"..player.UserId)
	diamondData = Datastore:GetAsync("diamondData-"..player.UserId)
	fistPowerData = Datastore:GetAsync("fistPowerData-"..player.UserId)
	codeData = Datastore:GetAsync("codeData-"..player.UserId)
	fistPowersData = Datastore:GetAsync("fistPowersData-"..player.UserId)
	isEquippedFistPowerData = Datastore:GetAsync("isEquippedFistPowerData-"..player.UserId)
end)

if success then
	
	if strengthData then
		strength.Value = strengthData
		coins.Value = coinData
		dnaAmount.Value = dnaData
		rank.Value = rankData
		rankMultiplier.Value = rankMultiplierData
		diamonds.Value = diamondData
		fistPower.Value = fistPowerData
	else
		fistPower.Value = 1
		dnaAmount.Value = 50
		rank.Value = "Noob"
		
		local firstFistPower = Instance.new("StringValue")
		firstFistPower.Name = "FistPower1"
		firstFistPower.Parent = player.FistPowers
		
		local isEquipped = Instance.new("BoolValue")
		isEquipped.Name = "IsEquipped"
		isEquipped.Parent = firstFistPower
		isEquipped.Value = true
	end
	
	if codeData then

		for x = 1,#codeData do
			
			local newCode = Instance.new("StringValue")
			newCode.Name = "Code"..x
			newCode.Parent = player.CodesFolder
		end
	end
	
	if fistPowersData then
		
		for x = 1,#fistPowersData do
			
			local newFistPower = Instance.new("StringValue")
			newFistPower.Name = "FistPower"..x
			newFistPower.Parent = player.FistPowers
			
			local isEquipped = Instance.new("BoolValue")
			isEquipped.Name = "IsEquipped"
			isEquipped.Value = isEquippedFistPowerData
			isEquipped.Parent = newFistPower
			wait()
		end
	end
end
	

if mps:UserOwnsGamePassAsync(player.UserId,id) or player:GetRankInGroup(6305352) >= 255 then
	
	dnaAmount.Value = math.huge
end

end)

game.ReplicatedStorage.RemoteEvents.MiscEvents.CodeEvent.OnServerEvent:Connect(function(player,code,amount,folder,currency)

local newCode = Instance.new("StringValue")
newCode.Name = code
newCode.Parent = player.CodesFolder

player[folder][currency].Value = player[folder][currency].Value + amount

end)

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

local usedCodes = {}
local isEquippedFistPowers = {}
local fistPowers = {}

for _,code in pairs(player.CodesFolder:GetChildren()) do
	
	table.insert(usedCodes,code.Name)
	wait()
end

for _,fistPower in pairs(player.FistPowers:GetChildren()) do
	table.insert(fistPowers,fistPower.Name)
	table.insert(isEquippedFistPowers,fistPower.IsEquipped.Value)
	
	wait()
end


local success,errorMsg = pcall(function()
	
	Datastore:SetAsync("coinData-"..player.UserId,player.leaderstats.Coins.Value)
	Datastore:SetAsync("strengthData-"..player.UserId,player.MiscStats.Strength.Value)
	Datastore:SetAsync("dnaData-"..player.UserId,player.MiscStats.Dna.Value)
	Datastore:SetAsync("rankData-"..player.UserId,player.leaderstats.Rank.Value)
	Datastore:SetAsync("rankMultiplierData-"..player.UserId,player.leaderstats.Rank.RankMultiplier.Value)
	Datastore:SetAsync("diamondData-"..player.UserId,player.leaderstats.Diamonds.Value)
	Datastore:SetAsync("fistPowerData-"..player.UserId,player.MiscStats.FistPower.Value)
	Datastore:SetAsync("codeData-"..player.UserId,usedCodes)
	Datastore:SetAsync("fistPowersData-"..player.UserId,fistPowers)
	Datastore:SetAsync("isEquippedFistPowerData-"..player.UserId,isEquippedFistPowers)
end)

end)

game:BindToClose(function()

for _,player in pairs(game.Players:GetPlayers()) do
	
	local usedCodes = {}
	local isEquippedFistPowers = {}
	local fistPowers = {}
	
	for _,code in pairs(player.CodesFolder:GetChildren()) do
		
		table.insert(usedCodes,code.Name)
		wait()
	end
	
	for _,fistPower in pairs(player.FistPowers:GetChildren()) do
		table.insert(fistPowers,fistPower.Name)
		table.insert(isEquippedFistPowers,fistPower.IsEquipped.Value)
		
		wait()
	end
	
	
	local success,errorMsg = pcall(function()
		
		Datastore:SetAsync("coinData-"..player.UserId,player.leaderstats.Coins.Value)
		Datastore:SetAsync("strengthData-"..player.UserId,player.MiscStats.Strength.Value)
		Datastore:SetAsync("dnaData-"..player.UserId,player.MiscStats.Dna.Value)
		Datastore:SetAsync("rankData-"..player.UserId,player.leaderstats.Rank.Value)
		Datastore:SetAsync("rankMultiplierData-"..player.UserId,player.leaderstats.Rank.RankMultiplier.Value)
		Datastore:SetAsync("diamondData-"..player.UserId,player.leaderstats.Diamonds.Value)
		Datastore:SetAsync("fistPowerData-"..player.UserId,player.MiscStats.FistPower.Value)
		Datastore:SetAsync("codeData-"..player.UserId,usedCodes)
		Datastore:SetAsync("fistPowersData-"..player.UserId,fistPowers)
		Datastore:SetAsync("isEquippedFistPowerData-"..player.UserId,isEquippedFistPowers)
	end)
	
	local data
	
	data = Datastore:GetAsync("isEquippedFistPowerData-"..player.UserId)
	for _,stuff in pairs(data) do
		print(stuff)
	end
end

end)

1 answer

✓ Accepted answer

There is an error in line 114 in PlayerAdded function. isEquippedFistPowerData is a table, so you should index it. From what I can tell it should work, but this code is rather long to be sure.

			
isEquipped.Value = isEquippedFistPowerData[x]

As a side note, you should combine your datastores into one or two, cause you are going to hit DataStore limits very hard.

1 comment

0

It works! Thank you very much for the help, I would've never gotten it(and yes I understand what's going on and how x is the number position in the table). And I'll use a second DataStore very soon!

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