Retiring PointsService

Hi Creators,

PointsService has been deprecated for years and we are now announcing to retire it on June 30th, 2023. If you still want to keep the corresponding features in your experience, we suggest updating to use Data Stores instead.

After June 30th, all AwardPoints() will return success but not update the backend. All get APIs (GetAwardablePoints(),GetGamePointBalance(),GetPointBalance()) will return 0.

We realize that despite the service being deprecated some experiences still use it in a meaningful way therefore we offer to migrate data from PointsService to a Roblox data store of your choice for experiences that need it.

Migration

In order to have PointsService data migrated, you need to complete the following steps before May 31st, 2023:

  1. Incorporate the migration module into your experience (source code below). This module should be a drop-in replacement for the PointsService in most cases.

  2. Fill out this form to let us know that your experience needs to have data migrated.

Source Code

Below is the source code of the migration module. It should be added as a ModuleScript in your experience.

-- change the datastore name as desired
local datastoreName = "_rbx_UserPoints"
local pointsAwarded = Instance.new("BindableEvent")

local ds = game:GetService("DataStoreService"):GetOrderedDataStore(datastoreName)
local ps = game:GetService("PointsService")

return {
	AwardPoints = function(self: any, userId: number, amount: number)
		if userId <= 0 then
			error('User id must be positive')
		end
		if amount <= 0 then
			error('Point amount must be positive')
		end

		-- optimistically assume that the user has already been migrated
		local finalPoints = ds:UpdateAsync(userId, function (currentPoints: number?): number?
			if not currentPoints then
				-- oops, not actually migrated
				return nil
			end
			return currentPoints + amount
		end)

		if not finalPoints then
			-- this user has not been migrated, migrate it now
			local legacyPoints = ps:GetGamePointBalance(userId)

			finalPoints = ds:UpdateAsync(userId, function (currentPoints: number?): number
				if not currentPoints then
					-- still not migrated, add point amount from the legacy system
					-- to the amount of points awarded
					return legacyPoints + amount
				else
					-- the user must have been migrated from another instance;
					-- disregard legacy points and proceed as usual
					return currentPoints + amount
				end
			end)
		end
		
		if finalPoints then
			pointsAwarded:Fire(userId, amount, finalPoints, finalPoints)
		end
	end,

	GetGamePointBalance = function(self: any, userId: number): number
		if userId <= 0 then
			error('User id must be positive')
		end

		-- optimistically assume the user has been migrated
		local points = ds:GetAsync(userId)
		if not points then
			-- user not migrated yet, query legacy system
			points = ps:GetGamePointBalance(userId)
		end

		return points
	end,

	GetPointBalance = function(self: any, userId: number): number
		return 0
	end,

	GetAwardablePoints = function(self: any): number
		return 2^31 - 1
	end,
	
	PointsAwarded = pointsAwarded.Event,
}

To use the module, add the following line to the beginning of each script file that uses PointsService:

local PointsServiceWrapper = require(script.Parent.PointsServiceWrapper)

Then replace each call to PointsService:AwardPoints with PointsServiceWrapper:AwardPoints and each call to PointsService:GetGamePointBalance with PointsServiceWrapper:GetGamePointBalance.

FAQ

What happens if I don’t fill out the migration request form?

  • If you don’t migrate, the points data for your experience will be lost. PointsService data will only be migrated for experiences indicated on the migration form.

What happens if I fill out the form but don’t incorporate the migration module into my experience?

  • The migration module is required to ensure that data is migrated correctly and no data is lost. We cannot guarantee the completeness of the migrated data if the migration module is not used.

Please let us know if you have any questions or concerns.

Sincerely,
The Roblox Creator Services Team

173 Likes

This topic was automatically opened after 10 minutes.

I’m kind of surprised it has taken this long. Points has been fairly useless for a long time now, and the removal of game leaderboards a long time ago really made it just borderline worthless. However I do feel sadness for the games that do require it, but I’m happy Roblox is making an effort to ensure these games continue to function.

70 Likes

About time it would happen. In my opinion, you guys should’ve revamped it instead ngl, like adding leaderboards back and maybe even showing stats to other people on profiles. I have a lot of ideas but I guess you guys are retiring it anyway.

25 Likes

I can’t think of a single game that still uses PointsService, so I guess this was bound to come sooner or later. Huge props to staff for writing out a full replacement module for those who still use it!

One tiny thing though; there’s a lingering backtick here.
image
Might wanna remove that so someone doesn’t accidentally copy it

46 Likes

Kill it! This was one of the more useless features, especially when DataStore originally came out.

9 Likes

I used to use PointsService despite deprecation due to the fact that https://points.roblox.com/docs is the only way to export data from a Roblox experience (to either a different experience in a different session or a website) without running into global rate-limits or having an external database (OpenCloud has a fixed limit for requests). While this implementation is no longer used by me, that is simply because I am no longer making cross-experience play in my Roblox experiences however there is still a need for a feature similar to the hacky PointsService workaround I used.

12 Likes

This was still a thing?
I remember using it on work on a pizza place in 2017 and later leardboards got removed, i didn’t care about the leardboards being removed, and was kinda surprised it was still there when there was no use.

2 Likes

This is a terrible update. Roblox is now permanently and irrevocably ruined. It has officially gone corpo, no longer listening to or caring about the community.

44 Likes

Lol…

No one has cared about or used points for years. It hasn’t been maintained. It used to be the currency of Roblox before Robux/Tix. That’s about it. The rest were just tycoons and people abusing points to give themselves infinite points.

Points have been nothing special. Not sure what you want

5 Likes

No one has cared about or used points for years. It hasn’t been maintained. It used to be the currency of Roblox before Robux/Tix.

That is incredibly incorrect, it was just a system devs used to award points to players that could be viewed on a leaderboard via the website’s game page.

It was largely removed several years ago

19 Likes

Don’t even know why you guys removed the PointsService feature on games. Was a good feature that made me actually grind back in the day.

6 Likes

It appears that I was thinking of the wrong points

2 Likes

Welp, there goes all the points i got in work at a pizza place

19 Likes

Which can be replaced by better systems by the developers themselves?

4 Likes

Goodbye old friend :wave:. Will always remember you popping up everytime I completed an obby, a tycoon or in pizza place.

21 Likes

I’m not surprised that this is being removed. It’s been so unused for so long now. The only games I can think are games that have been around since 2015-2018. Other than that, I don’t see a single modern game with PointService.

1 Like

Those systems are usually straight up garbage. Back then games were different.

2 Likes

So far, most people replying here are happy with the update (myself included). I think Roblox is listening to the community here. Points service has not been a thing for years and it’s no surprise that it’s being removed.

7 Likes

Yet another iconic Roblox memory going away, but for good.

Question: I have a Capture The Flag game that still gives points to users when they Capture The Flag, but I dont need that in my game, so can i just leave this alone or do i have to put in a script to make sure the point system goes away?

4 Likes