Robuxの転送は、Roblox Plusの購読者が他のユーザーに直接Robuxを送信できる機能です。
ゲーム内での転送をサポートするには、PromptRobuxTransferAsyncを呼び出して転送プロンプトを開き、BindReceiptHandlerを使用して転送のレシートを処理します。 購読者が転送を完了すると、あなたのゲームは送信されたRobuxの**10%を獲得し、受取人は残りの90%**を受け取ります。 例えば、100 Robuxの転送では、受取人に90 Robuxが支払い、あなたのゲームには10 Robuxが支払われます。
転送から得られるRobuxはDevExプログラムの対象です。 Robloxはこれらの転送に手数料を徴収しません。

クリエイターとして、転送の詳細へのアクセスや実行の制御はできません。 すべてのRobux転送はRobloxプラットフォームによって処理および管理され、送信者と受取人のアクションは同じ安全性と適格性のチェックを通過します。 あなたのゲーム内では、転送はRoblox制御のUIを通して完了し、安全かつポリシーに準拠していることが保証されます。
Robux転送のプロンプト
ゲーム内でRobuxの転送を開始するには:
- サーバーサイドのスクリプトからPromptRobuxTransferAsyncを呼び出します。
- 必要なパラメータを渡します:
- sender: 転送を開始するプレイヤー。
- receiverUserId: 受取人のユーザーID。
- amount: 転送するRobuxの金額。
- 転送リクエストを識別するtransferRequestIdを返すので、それを保存します。これは後でレシートとログまたは関連づける際に使用できます。
次の例は、2人のユーザー間でRobuxの転送を開始します:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- ユーザーがRemoteEventをトリガーしたときにRobuxを転送します
local transferEvent = game.ReplicatedStorage:WaitForChild("RequestTransfer")
transferEvent.OnServerEvent:Connect(function(sender, receiverUserId, amount)
-- 入力を検証します
if not sender or not sender:IsA("Player") then
return
end
if typeof(receiverUserId) ~= "number" or receiverUserId <= 0 then
warn("無効なreceiverUserId")
return
end
if typeof(amount) ~= "number" or amount <= 0 then
warn("無効なamount")
return
end
local success, result = pcall(function()
return MarketplaceService:PromptRobuxTransferAsync(sender, receiverUserId, amount)
end)
if success then
print(`転送がTransferRequestId: {result}で開始されました`)
else
warn(`転送に失敗しました: {result}`)
end
end)
転送のレシートを処理する
転送が成功すると、Robloxは送信者と受取人の両方のためにレシートを生成します。 これらのレシートは、BindReceiptHandlerを使って処理し、転送が成功裏に完了したことを確認できます。
Plusの購読者がゲーム内でRobuxを転送することを奨励するために、各成功した転送に対してアイテムやその他の特典を提供することができます。 そうした場合、報酬を付与する前にレシートを処理し、完了した転送に対してのみ付与されることを保証します。
Robux転送のレシートを処理するには:
- BindReceiptHandlerを使用して、転送を開始したユーザーのレシートを処理するために、RobuxTransferSenderのハンドラーを登録します。
- Robuxを受け取ったユーザーのために、RobuxTransferReceiverのために2番目のハンドラーを登録します。
- 各ハンドラーで、レシート情報を検査し、PlayerIdやTransferRequestIdを確認します。 両方のレシートタイプには、PromptRobuxTransferAsyncによって返されたtransferRequestIdと一致するTransferRequestIdが含まれています。
- ハンドラーからEnum.ReceiptDecisionの値を返します:
- レシートの処理が完了した後にProcessedを返します。 これはレシートを完了とマークし、Robux転送が成功したことを確認します。
- レシートがまだ処理できない場合(たとえば、ユーザーがサーバーにいない場合)は、NotProcessedYetを返します。 これはレシートを未解決のままにしておき、後で(たとえば、ユーザーが再びサーバーに参加したとき)配信できるようにします。
次の例は、送信者と受取人のレシートのためのハンドラーを登録します:
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
-- 送信者のレシートを処理します(Robuxを送信したユーザー)
local senderConnection = MarketplaceService:BindReceiptHandler(
Enum.ReceiptType.RobuxTransferSender,
function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
-- ユーザーがサーバーを離れた - レシートの処理はユーザーがサーバーに再参加するまで遅延します
return Enum.ReceiptDecision.NotProcessedYet
end
print(`{player.Name}がRobuxを送信しました (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- ここで送信者側の確認やUIの更新を行うことができます
return Enum.ReceiptDecision.Processed
end
)
-- 受取人のレシートを処理します(Robuxを受け取ったユーザー)
local receiverConnection = MarketplaceService:BindReceiptHandler(
Enum.ReceiptType.RobuxTransferReceiver,
function(receiptInfo)
local player = Players:GetPlayerByUserId(receiptInfo.PlayerId)
if not player then
return Enum.ReceiptDecision.NotProcessedYet
end
print(`{player.Name}がRobuxを受け取りました (TransferRequestId: {receiptInfo.TransferRequestId})`)
-- ここで受取人側の利点やUIの更新を行うことができます
return Enum.ReceiptDecision.Processed
end
)