🛂

【Roblox】パスの購入について

2024/09/16に公開

はじめに

今回はRobloxでのパスの購入のプログラムについて紹介します。

Robloxバージョン:0.638.1.6380615

参考にした記事・サイト
https://create.roblox.com/docs/ja-jp/production/monetization/game-passes
https://create.roblox.com/docs/reference/engine/classes/MarketplaceService

指定のパスを所持しているかどうか

local hasPass = MarketplaceService:UserOwnsGamePassAsync(localPlayer.UserId, passId)

MarketplaceServiceのUserOwnsGamePassAsyncを呼ぶことで指定のパスを所持しているか確認できます。

引数
userId:確認したいPlayerのユーザーId
passId:確認したいパスのId

 

実際に使用すると、ゲーム開始直後など結果が取得できない場合があります。
そのため処理はpcallで囲むことをおすすめします。

▼ 例

local MarketplaceService = game:GetService("MarketplaceService")
local player = game:GetService("Players").LocalPlayer
local passId = 111111111
local hasPass = false

-- プレイヤーがすでにパスを所有しているかチェック
local success, message = pcall(function()
	hasPass = MarketplaceService:UserOwnsGamePassAsync(player.UserId, passId)
end)

-- エラーがある場合、警告を発して関数から退出
if not success then
	warn("Error while checking if player has pass: " .. tostring(message))
	return
end

if hasPass then
	-- すでにパスを所持している
	print("User owns the pass!")
else
	-- 所持していない
	print("User does not own the pass!")
end

また、処理に時間がかかるので複数のパスを確認する際は非同期処理にした方がいいと思います。

パスの情報を取得する

local productInfo = MarketplaceService:GetProductInfo(assetId, infoType)

MarketplaceServiceのGetProductInfoで製品の情報を取得できます。

引数のinfoType次第で開発者製品の情報の取得もできます。

引数
assetId:確認したい製品のアセットId
infoType:Enum.InfoType。GamePassにすることでパスを、Productにすることで開発者製品を指定する。

取得できる情報はパスの名前から値段、誰が作成したかまで取得できます。
処理に時間がかかるため、複数のパスの情報を取得する場合は非同期処理をおすすめします。
また、この処理もゲーム開始時に取得できない場合があるためpcallで囲むことをおすすめします。

購入ダイアログを表示する

MarketplaceService:PromptGamePassPurchase(localPlayer, assetId)

MarketplaceServiceのPromptGamePassPurchaseを実行することでパスの購入ダイアログを作成できます。

引数
localPlayer:ダイアログを出したいPlayer
assetId:購入させたいアセットのId


購入ダイアログ

上記ダイアログにある値段や名前、アイコンなどはRobloxのダッシュボードで設定したものが表示されます。

プログラム上で変更や編集はできないので注意が必要です。

※編集はダッシュボードでできます。

結果の受け取り

-- パス購入完了時に呼ばれる
local function onPromptGamePassPurchaseFinished(player:Player, gamePassId:number, wasPurchased:boolean)

	if wasPurchased then
		-- 購入に成功した場合
		-- gamePassIdに応じて、結果を反映する
		print("Success to purchase", player, gamePassId)
	else
		-- 購入に失敗した場合
		error("Failure to purchase", player, gamePassId)
	end

end

MarketplaceService.PromptGamePassPurchaseFinished:Connect(onPromptGamePassPurchaseFinished)

MarketplaceServiceのPromptGamePassPurchaseFinishedは購入のダイアログを閉じた際に呼ばれる関数を設定できるイベントです。

引数
player:購入ダイアログを閉じたPlayer
gamePassId:パスのアセットId
wasPurchased:購入されたかどうか(キャンセルでダイアログを閉じた場合はfalse)

購入後の結果の反映はサーバー側で行ってください。

クライアント側で行うと悪用される場合があります。

開発者製品用に似たイベントも用意されているので間違えないように注意しましょう。

まとめ

  • パスを所持しているかを確認するにはMarketplaceService:UserOwnsGamePassAsyncを使用する。
  • 製品の情報を参照した場合はMarketplaceService:GetProductInfoを使用する。
  • 購入のダイアログはMarketplaceService:PromptGamePassPurchaseで生成する。
  • 購入の結果はMarketplaceService.PromptGamePassPurchaseFinishedで確認する。

ぜひVIPのパスなどを作ってゲームを盛り上げましょう!!

ランド・ホー Roblox開発チーム

Discussion