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

What is wrong with this script Assign Values script?

I've got this LocalScript to assign some Bool and Number Values to the Player once he joins, but nothing is happening. What is the problem here?

wait(2) -- wait for the character to load

goldKey = "PlayerGold"
gemsKey = "PlayerGems"
levelKey = "PlayerLevel"
xpKey = "PlayerExp"

function assignValues()
plr = game.Players.LocalPlayer
leaderstats = Instance.new("IntValue")
gold = Instance.new("NumberValue")
gems = Instance.new("NumberValue")
level = Instance.new("NumberValue")
xp = Instance.new("NumberValue")


    --leaderstats
    leaderstats.Parent = plr
    leaderstats.Name = "leaderstats"

    --gold and gems
    gold.Parent = plr.leaderstats
    gold.Name = "Gold"
    gold.Value = plr:LoadNumber(goldKey) or 10
    gems.Parent = plr.leaderstats
    gems.Name = "Gems"
    gems.Value = plr:LoadNumber(gemsKey)
    --level and xp
    level.Parent = plr.leaderstats
    level.Name = "Level"
    level.Value = plr:LoadNumber(levelKey) or 1
    xp.Parent = plr
    xp.Name = "Exp"
    xp.Value = plr:LoadNumber(xpKey)
end

function saveStats()
    repeat wait() until plr
    --gold and gems save
    plr:SaveNumber(goldKey, plr.leaderstats.Gold.Value)
    plr:SaveNumber(gemsKey, plr.leaderstats.Gems.Value)
    --level and xp save
    plr:SaveNumber(levelKey, plr.leaderstats.Level.Value)
    plr:SaveNumber(xpKey, plr.Exp.Value)
end


assignValues()

plr.leaderstats.Gold.Changed:connect(saveStats)
plr.leaderstats.Gems.Changed:connect(saveStats)
plr.leaderstats.Level.Changed:connect(saveStats)
plr.Exp.Changed:connect(saveStats)


1 answer

✓ Accepted answer

As documented on the Wiki SaveNumber and LoadNumber have to run from normal Script objects, not LocalScripts.

This really belongs in a regular Script over a LocalScript anyway. The contents will not have to change at all except to redefine plr in terms a of a script.Parent.Parent... if this is inside the PlayerGui or PlayerPack.


Here's a Server Script that uses the PlayerAdded event:

wait(2) -- wait for the character to load

goldKey = "PlayerGold"
gemsKey = "PlayerGems"
levelKey = "PlayerLevel"
xpKey = "PlayerExp"

function assignValues(plr)
	plr:WaitForDataReady();
	leaderstats = Instance.new("IntValue")
	gold = Instance.new("NumberValue")
	gems = Instance.new("NumberValue")
	level = Instance.new("NumberValue")
	xp = Instance.new("NumberValue")
	--leaderstats
	leaderstats.Parent = plr
	leaderstats.Name = "leaderstats"

	--gold and gems
	gold.Parent = plr.leaderstats
	gold.Name = "Gold"
	gold.Value = plr:LoadNumber(goldKey) or 10
	gems.Parent = plr.leaderstats
	gems.Name = "Gems"
	gems.Value = plr:LoadNumber(gemsKey)
	--level and xp
	level.Parent = plr.leaderstats
	level.Name = "Level"
	level.Value = plr:LoadNumber(levelKey) or 1
	xp.Parent = plr
	xp.Name = "Exp"
	xp.Value = plr:LoadNumber(xpKey)

	gold.Changed:connect(function() saveStats(plr) end)
	gems.Changed:connect(function() saveStats(plr) end)
	level.Changed:connect(function() saveStats(plr) end)
	xp.Changed:connect(function() saveStats(plr) end)
end

function saveStats(plr)
	--gold and gems save
	plr:SaveNumber(goldKey, plr.leaderstats.Gold.Value)
	plr:SaveNumber(gemsKey, plr.leaderstats.Gems.Value)
	--level and xp save
	plr:SaveNumber(levelKey, plr.leaderstats.Level.Value)
	plr:SaveNumber(xpKey, plr.Exp.Value)
end



game.Players.PlayerAdded:connect(assignValues);

Please mark this answer as accepted if it addressed all of the so far stated questions.


EDIT: We have to wait for data to be ready before attempting to save or load data.

8 comments

0

It's not in a Gui, it's just a script in the Workspace. How can I get around the problem with the LocalPlayer?

1

A LocalScript in the workspace will not run... Really this should be using PlayerAdded in a normal Script. I have edited the answer to include a conversion using PlayerAdded.

1

Anywhere a Script would run (which is both of those, I suppose the modern way would be ServerScriptStorage). There's no reference to script in here so obviously the code itself is blind to where it runs.

0

I tried it, and it worked up until the 21st line of your script. It loaded Leaderstats, Gold, but it didn't work on Gold's Value, and didn't insert the other values.

0

Edited to WaitForDataReady.

0

Doesn't work at all now, not even inserting leaderstats.

0

It will only work online where Data is available....

0

That worked, thanks!

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