【Roblox】パスの購入について
はじめに
今回はRobloxでのパスの購入のプログラムについて紹介します。
Robloxバージョン:0.638.1.6380615
参考にした記事・サイト
指定のパスを所持しているかどうか
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を活用したゲームの開発、 また企業の商品やサービスの認知度拡大に寄与する3Dワールドの制作など、 Robloxにおける様々な活用支援を行っております。 Robloxのコンテンツ開発をご検討されている企業様は、お気軽にご相談ください。 landho.co.jp/
Discussion