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

Why is my data store not recognising the Value of my IntValue?

Ok, so my first issue is the Data Store not updating when a Variable changes. The current code I have for this is

    var1.Changed:Connect(function()
        print("Saving. . .")
        data1:SetAsync(player.UserId, var1.Value)
	print(player.Name.. "'s data of "..var1.Value.." "..var1.Name.." has been saved!")
    end)

To me, it seemed like it wasn't recognising that the Value had changed because it never printed 'Saving...' but I can't understand why...

Second of all the data never saves when the player leaves the game.

game.Players.PlayerRemoving:Connect(function(player)
	print("Saving. . .")
	data1:SetAsync(player.UserId, player.leaderstats.Credits.Value)
	print(player.Name.. "'s data of "..var1.Value.." "..var1.Name.." has been saved!")
end)

This prints out PureGamerGames's data of 0 Credits has been saved! however, I never set the Value to 0.

The only possible solution I thought maybe the issue was the game not recognising var1, however, I have it declared here.

    local var1 = Instance.new("IntValue", stats)
    var1.Name = "Credits"
    var1.Value = data1:GetAsync(player.UserId, var1.Value) or 0
    data1:SetAsync(player.UserId, var1.Value)

One thing to note is that I have API access enabled and I was testing this out in play test..

1 answer

✓ Accepted answer

Hey there! Your script is difficult to read and everything is scattered. I hope you will not mind if I write a new script and explain. :D

For first insert a script into ServerScriptService and type in:

local DataStore = game:GetService("DataStoreService")
local CreditsData = DataStore:GetDataStore("Credits") -- gets data store for credits

game.Players.PlayerAdded:Connect(function(player) -- starts when player joins
	local leaderstats = Instance.new("Folder") -- creating folder inside of player
	leaderstats.Parent = player
	leaderstats.Name = "leaderstats"
	local Credits = 	Instance.new("IntValue") -- creating credits inside of leaderstats
	Credits.Paraent = leaderstats
	Credits.Name = "Credits"
	Credits.Value = 0	

	local PlrData = CreditsData:GetAsync(player.UserId) -- getting data from datastore

	if PlrData ~= nil then -- checking if player already have data or not
		Credits.Value = PlrData -- set credits value the value from datastore
		print("Successfuly loaded " .. player.Name .. " 's data. Got " .. PlrData .. " credits from datastore.")
	else -- if player has not data in datastore then:
		CreditsData:SetAsync(player.UserId, Credits.Value) -- saves information into datastore
	end
end)

game.Players.PlayerRemoving:Connect(function(player) -- starts when player leave
	CreditsData:SetAsync(player.UserId, player.leaderstats.Credits.Value) -- saves data
end)

I recommend to use ":UpdateAsync()" when you want to update your data store information, but player still doesnt leave

Here is example:

local DataStore = game:GetService("DataStoreService")
local CreditsData = DataStore:GetDataStore("Credits") -- gets data store for credits

game.Players.PlayerAdded:Connect(function(player) -- starts when player joins
	local leaderstats = Instance.new("Folder") -- creating folder inside of player
	leaderstats.Parent = player
	leaderstats.Name = "leaderstats"
	local Credits = 	Instance.new("IntValue") -- creating credits inside of leaderstats
	Credits.Paraent = leaderstats
	Credits.Name = "Credits"
	 
	Credits.Value.Changed:Connect(function() --starts when credits value changed
		CreditData:UpdateAsync(player.UserId) -- updating value
	end)
end)

1 comment

0

Thank you, just modified it a little bit.

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