mcpField
R
roblox-teleport-matchmaking

roblox-teleport-matchmaking

github.com/el4cteo開発54466 回インストール2 週間前に更新
リポジトリ

roblox-teleport-matchmaking について

Roblox 開発者向けのテレポートとマッチメイキングのスキルです。場所間の移動、ロビーから試合への流れに加え、アクセス制御、データ受け渡し、マッチング信号、サーバー管理を解説します。

主な機能

  1. 01場所のアクセス制御設定
  2. 02TeleportOptions によるプレイヤー移動
  3. 03場所間での試合データ受け渡し
  4. 04ロビーから試合へのフロー構築
  5. 05マッチング信号のカスタマイズ
  6. 06サーバーのライフサイクルと終了処理

活用シーン

  1. 01キューのパーティーを予約試合サーバーへ移動
  2. 02試合後にプレイヤーをロビーへ戻す
  3. 03スキルやゲームモードでパブリックサーバーをマッチング
  4. 04試合設定の安全な受け渡し

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/el4cteo/roblox-skills --skill roblox-teleport-matchmaking

インストール後、Claude Code で/roblox-teleport-matchmakingを入力して読み込まれたか確認します。

詳細

テレポート、プレイス、マッチメイキング

構造

  • ユニバース (体験) には、スタートプレイスとサブプレイスが含まれます。すべてのプレイスは DataStores、 MemoryStores、MessagingService、開発者製品、パスを共有します。
  • 一般的なレイアウト: ロビー (スタートプレイス) → マッチプレイス (予約サーバー) → ロビーに戻る、または 個別のワールドプレイスを持つハブ。共有コードはパッケージまたは共有 Rojo ツリーに置いてください。
  • プレイスのアクセス制御 (Creator Dashboard): Fully open、Limited to same universe、または Secure within universe only (非スタートプレイスへのサーバー起点のテレポートのみ — 進行ゲートや テストプレイスに推奨)。それ以外の場合、クライアントはユニバース内の任意の場所に自分自身をテレポートできます。

テレポート (サーバー)

--!strict
local TeleportService = game:GetService("TeleportService")

local ATTEMPTS = 5
local RETRY_DELAY = 1
local FLOOD_DELAY = 15

local function safeTeleport(placeId: number, players: { Player }, options: TeleportOptions?): (boolean, any)
	local ok: boolean, result: any = false, nil
	for _ = 1, ATTEMPTS do
		ok, result = pcall(function()
			return TeleportService:TeleportAsync(placeId, players, options)
		end)
		if ok then
			break
		end
		task.wait(RETRY_DELAY)
	end
	if not ok then
		warn("Teleport failed:", result)
	end
	return ok, result
end

-- A teleport can still fail after TeleportAsync succeeds: retry transient failures.
TeleportService.TeleportInitFailed:Connect(function(player, teleportResult, errorMessage, placeId, options)
	if teleportResult == Enum.TeleportResult.Flooded then
		task.wait(FLOOD_DELAY)
	elseif teleportResult == Enum.TeleportResult.Failure then
		task.wait(RETRY_DELAY)
	else
		warn(`Invalid teleport [{teleportResult.Name}]: {errorMessage}`)
		return
	end
	safeTeleport(placeId, { player }, options)
end)

return safeTeleport

TeleportOptions:

  • ShouldReserveServer = true → 新しい 予約サーバー (プライベート、アクセスコードでのみ到達可能) — マッチ、ダンジョン、パーティに最適。ReservedServerAccessCode と PrivateServerId を含む TeleportAsyncResult を返します。
  • ReservedServerAccessCode = code → 既存の予約サーバーに参加します (ReserveServerAsync(placeId) または以前の結果から取得)。
  • ServerInstanceId = jobId → 特定の公開サーバー (例: 「フレンドのサーバーに参加」)。
  • SetTeleportData(table) → 到着時に player:GetJoinData().TeleportData (サーバー) または TeleportService:GetLocalPlayerTeleportData() (クライアント) で読み取れる非セキュアなデータ。 クライアントはこれを改ざんできます: 通貨、アイテム、権限のために決して信頼しないでください — ユーザー ID または予約サーバーの PrivateServerId をキーとする DataStores/MemoryStores を使用してください。

非推奨: Teleport、TeleportToPlaceInstance、TeleportToPrivateServer、TeleportPartyAsync、 TeleportToSpawnByName、ReserveServer → TeleportAsync + TeleportOptions / ReserveServerAsync。

プレイス間のデータ引き継ぎ

  1. テレポートする前にプレイヤーのデータを保存します (ProfileStore: セッションを終了する / 保存を待つ)。
  2. 目的地はセッションロック付きで読み込まれます (古いサーバーが解放するまで ProfileStore が再試行します)。
  3. マッチパラメータ (モード、マップ、チーム割り当て) については、テレポートする前に予約サーバーの PrivateServerId (またはアクセスコード) をキーとする MemoryStore/DataStore エントリを書き込みます。 マッチサーバーは起動時に game.PrivateServerId を読み取り、その設定を読み込みます。
  4. 到着時に、TeleportService:SetTeleportGui(gui) (クライアント、テレポート前) が遷移中も ローディング画面を表示し続けます。到着時には ReplicatedFirst のローディング画面を使用してください。

サーバータイプの検出

サーバーgame.PrivateServerIdgame.PrivateServerOwnerId
公開""0
予約 (ReserveServerAsync/ShouldReserveServer)空でない0
プライベート (VIP) サーバー空でないオーナーのユーザー ID

ロビー → マッチの流れ

  1. プレイヤーはロビーでキューに入ります (パーティリーダーが招待; パーティメンバーはサーバー側に保存されます)。
  2. モードとレーティング別の MemoryStoreQueue / ソート済みマップでキューに入るか ( roblox-data-stores を参照)、 Roblox のマッチメイキングを使用して公開サーバーを埋めます。
  3. マッチが成立したら: 新しい ID をキーとするマッチ設定を MemoryStore に書き込み、ShouldReserveServer = true で全プレイヤーを TeleportAsync し、返された PrivateServerId ↔ マッチ ID のマッピングを保存します。
  4. マッチサーバー: 予定されたプレイヤーを待ち (タイムアウト付き)、ラウンドを実行し、結果を保存し、全員を ロビープレイス (公開サーバー、または ServerInstanceId 経由でパーティのロビー) にテレポートで戻します。

Roblox マッチメイキング (参加するプレイヤーがどのサーバーに割り当てられるか)

デフォルトのマッチメイキングでは、対象となる公開サーバーをシグナル (フレンド、レイテンシ、言語、年齢層、 占有率など) によってスコアリングし、重み付けされた合計が最も高いものを選択します。Creator Hub ではプレイスごとにカスタマイズできます:

  • Roblox のシグナルの重みを調整する、または カスタム属性 に基づく カスタムシグナル を追加する:
    • プレイヤー属性: DataStore に保存された値 (例: PlayerElo)。マッチメイキング設定で構成します。
    • サーバー属性: 実行時に MatchmakingService:SetServerAttribute(name, value) で設定します (例: GameMode、ServerLevel)。テストには InitializeServerAttributesForStudio を使用します。
  • 適用する前にモックサーバーに対してスコアをプレビューし、その後プレイスに構成を適用します。 スキルベースの公開サーバーにはこれを使用し、正確なチーム構成が必要な場合は予約サーバーを使用します。

サーバーのライフサイクル

  • シャットダウン時のセーブには game:BindToClose、サーバーを識別するには game.JobId、アップデート後の ソフトシャットダウン (Open Cloud の :restartServers または「Restart servers for updates」) はプレイヤーを新しいサーバーにテレポートします。
  • サーバーブラウザー: 各サーバーは { jobId, players, mode } を MemoryStore のソート済みマップ (TTL) にハートビート送信します — roblox-data-stores を参照してください。

関連スキル

roblox-data-stores (セッションロック、MemoryStore キュー)、roblox-security (アクセス制御)、 roblox-game-systems (ラウンドループ)、roblox-open-cloud (サーバーの再起動)。

コメント