MarketplaceService:PromptPurchase can still be called from the CLIENT!

So I have a Free Limited Ugc, I award it for an ingame quest

But apparently MarketplaceService:PromptPurchase which is used to give the item can still be
called from the CLIENT!
Even though Roblox published a statement that its been fixed!

I just double checked and I can call it from client. I already lost 60 copies in 1 hour due to this exploit!

I took it off sale and will manually give it to players, but can anyone help me?? Thank you!

1 Like

can you send over the code for the prompt purchase in your game? im having the same problem.

Well I actually found a solution, took me hours!
Here you can do this:
Setup a new game under the same owner as your actual game
set the Ugc to only available in THAT game
When you want to grant the Ugc you teleport the player there
There you check Teleport Data you give to the teleport and if its not valid you kick them!
All night I only maybe lost 1 ugc compared to 60 in 1 hour in the evening so it does work!

Only down side it has to be a local script because TeleportAsync doesn’t teleport to other experiences. Only Teleport does for me.

Here’s the local script

local MarketS = game:GetService("MarketplaceService")
local TeleportS = game:GetService("TeleportService")
local player = game.Players.LocalPlayer


local succ, err = pcall(function()
	if TeleportS:GetLocalPlayerTeleportData().Eligible then
		task.wait(3)
		--MarketS:PromptPurchase(player,17409345286, true)
		game.ReplicatedStorage.RemoteEvent:FireServer(96742487662364)

		task.wait(20)
		return true
	else
		player:Kick("You are not eligible")
	end
end)
if not succ or err then
	player:Kick("You are not eligible .2")
	if err then warn(err) end
end

In the actual game you do this:

local MarketS = game:GetService("MarketplaceService")
local TeleportS = game:GetService("TeleportService")
local TpOpt = Instance.new("TeleportOptions")
TpOpt:SetTeleportData({
	Eligible = true
})
TpOpt.ShouldReserveServer = true
TeleportS:Teleport(placeID!,Player,TpOpt:GetTeleportData())