It's a very simple script, yet I can't get it to work. It's supposed to assign the 3 values hidden inside the player, but it simply doesn't work. No output.

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

pointsKey = "PlayerPoints"
coinsKey = "PlayerCoins"
newKey = "PlayerNew"

function assignValues(plr)
    plr:WaitForDataReady();
	wait(2)
    points = Instance.new("NumberValue")
    coins = Instance.new("NumberValue")
	notnew = Instance.new("BoolValue")
	
	
    --new
	notnew.Parent = plr
	notnew.Name = "NotNew"
	notnew.Value = plr:LoadBoolean(newKey)

    --points and coins
    points.Parent = plr
    points.Name = "Points"

	coins.Parent = plr
    coins.Name = "Coins"

    if notnew.Value == false then --check if player is new
		plr.NotNew.Value = true
		plr.Points.Value = 0
		plr.Coins.Value = 0
			if plr.PlayerGui.ScreenGui.Tutorial.Visible == false then
				plr.PlayerGui.ScreenGui.Tutorial.Visible = true
				plr.PlayerGui.ScreenGui.Tutorial.Position = UDim2.new(0, -600, 0, 100)
				plr.PlayerGui.ScreenGui.Tutorial:TweenPosition(UDim2.new(0,500,0,100), "Out", "Bounce", 1)
			end
	elseif notnew.Value == true then
		plr.Points.Value = plr:LoadNumber(pointsKey)
		plr.Coins.Value = plr:LoadNumber(coinsKey)
	end

    points.Changed:connect(function() saveStats(plr) end)
   	coins.Changed:connect(function() saveStats(plr) end)
    notnew.Changed:connect(function() saveStats(plr) end)

end

function saveStats(plr)
    --coins and points save
    plr:SaveNumber(coinsKey, plr.Coins.Value)
    plr:SaveNumber(pointsKey, plr.Points.Value)
	--new save
	plr:SaveBoolean(newKey, plr.NotNew.Value)
end

game.Players.PlayerAdded:connect(assignValues)