Hi guys, I am trying to use DataStores in my new game but when I go to test them, the values don't load and I'm not sure why they aren't loading. I did have an error before I made a tiny amendment to the script, it said:

EDIT: I now keep getting this error. It occurs on the lines where the asynchronous methods of the data store are used (Line 16 and line 89 is where I started getting these errors, it alternates between the two randomly.)

HTTP 403 (HTTP/1.1 403 XSRF Token Validation Failed)

Now it does not show anything in the output and I'm not sure how to fix the script. Any help is appreciated, thanks!

Script (EDITED, found out why it wasn't functioning at all but now it won't progress through the clearAllValues function as it throws the token validation error above after the "if ds ~= nil then" line):

math.randomseed(tick())

rs = game:GetService("ReplicatedStorage")

function clearAllValues(item,ds,plr)
	for i,v in pairs(item:GetChildren()) do
		if not v:IsA("Folder") then
			v:Destroy()
		end
		clearAllValues(v,ds,plr)
		if v.Parent ~= plr.Accessories then
			local hasGot = Instance.new("BoolValue")
			hasGot.Name = "HasGotItem"
			hasGot.Parent = v
			if ds ~= nil then
				hasGot.Value = (ds:GetAsync(hasGot.Parent.Name.."HasGot") ~= nil) and ds:GetAsync(hasGot.Parent.Name.."HasGot") or false
				hasGot.Changed:connect(function()
					ds:UpdateAsync(hasGot.Parent.Name.."HasGot",function()
						return hasGot.Value
					end)
				end)
			end
		end
	end
end

function createFolder(plr,parent,ds)
	if parent:IsA("Folder") then
		local pClone = parent:Clone()
		pClone.Parent = plr
		clearAllValues(pClone,ds,plr)
	end
end

game.Players.PlayerAdded:connect(function(plr)
	local ds = (game:GetRemoteBuildMode()) and nil or game:GetService("DataStoreService"):GetDataStore("Stats",tostring(plr.userId))
	local stats = Instance.new("Folder",plr)
	stats.Name = "PlayerStats"
	local egg_bucks = Instance.new("IntValue",stats)
	local basketlevel = Instance.new("IntValue",stats)
	local currentRoundEggs = Instance.new("IntValue",stats)
	local introDone = Instance.new("BoolValue",stats)
	local tutorialDone = Instance.new("BoolValue",stats)
	local inGame = Instance.new("BoolValue",stats)
	local changing = Instance.new("BoolValue",stats)
	local playing = Instance.new("BoolValue",stats)
	introDone.Name = "IntroDone"
	tutorialDone.Name = "TutDone"
	currentRoundEggs.Name = "CurrentEggSpace"
	egg_bucks.Name = "Eggs"
	basketlevel.Name = "BasketLevel"
	inGame.Name = "InGame"
	changing.Name = "IsChanging"
	playing.Name = "IsPlaying"
	
	coroutine.resume(coroutine.create(function() createFolder(plr,rs.Accessories,ds) end))
	
	local torsocolor = BrickColor.Random()
	
	plr.CharacterAdded:connect(function(char)
		plr:ClearCharacterAppearance()
		local bodyColors = Instance.new("BodyColors",char)
		bodyColors.TorsoColor = torsocolor
		local shirt = Instance.new("ShirtGraphic",char)
		shirt.Graphic = "rbxassetid://180484140"
		char.Humanoid.Died:connect(function()
			if inGame.Value == true then
				egg_bucks.Value = (plr.Accessories.Perks["Double Eggs"].HasGotItem.Value ~= true) and egg_bucks.Value + currentRoundEggs.Value or egg_bucks.Value + (currentRoundEggs.Value * 2)
				currentRoundEggs.Value = 0
				inGame.Value = false
			end
			changing.Value = false
			plr.PlayerGui.GameHUD.HUDType.Value = "Intro"
		end)
		coroutine.resume(coroutine.create(function()
			while inGame.Value == false and changing.Value == false do
				wait()
				if tutorialDone.Value == true then
					char.Humanoid.WalkSpeed = 32
				else
					char.Humanoid.WalkSpeed = 0
				end
			end
		end))
	end)
	
	if ds ~= nil then
		print("We're online!")
		egg_bucks.Value = (ds:GetAsync(egg_bucks.Name) ~= nil) and ds:GetAsync(egg_bucks.Name) or 0
		basketlevel.Value = (ds:GetAsync(basketlevel.Name) ~= nil) and ds:GetAsync(basketlevel.Name) or 1
		tutorialDone.Value = (ds:GetAsync(tutorialDone.Name) ~= nil) and ds:GetAsync(tutorialDone.Name) or false

		egg_bucks.Changed:connect(function()
			ds:UpdateAsync(egg_bucks.Name,function()
				return egg_bucks.Value
			end)
		end)
	
		basketlevel.Changed:connect(function()
			ds:UpdateAsync(basketlevel.Name,function()
				return basketlevel.Value
			end)
		end)
		
		tutorialDone.Changed:connect(function()
			ds:UpdateAsync(tutorialDone.Name,function()
				return tutorialDone.Value
			end)
		end)
	end
end)

6 comments

0

What part of the script did you modify?

0

I made an amendment on line 36, but realized that was why it didn't work. I changed it and I get the token validation error as stated above.

0

I have also edited the post to say where the token validation error was pointing to.

0

Is this in Studio or online mode?

0

The values load in Studio's test server mode and I get the token validation error, but nothing happens in Online mode and I get no error when I check the developer console.

0

I really don't know what the problem is with the script, so if anyone can shed some light on the issue, I'd greatly appreciate it. Thanks! :)