Xbox Live 跨网络多人游戏实现示例:多人游戏
版本 1.0,2020/3/1
此示例方案旨在阐述传统多人游戏或 MOBA 中推荐的跨网络功能和流。 它将显示一个可能的设计和实现路径。
在此方案中,该游戏支持以下多人游戏功能:
自定义匹配
该游戏实现一个自定义匹配服务。 此服务首先(可选)匹配玩家组成团队,然后将团队和玩家匹配在一起。
专用服务器
玩该游戏的所有行为都是在专用服务器上执行的。 所有流量(包括聊天流量)也是通过这些服务器传输的。
自定义排行榜
游戏服务实现自定义排行榜,这些排行榜包含有关玩家进度的深度信息。
多个游戏模式/设置
该游戏支持多个游戏模式(例如合作与基于团队),并允许玩家配置地图、游戏规模、规则以及针对这些模式的其他设置。
游戏内货币
该游戏向游戏内商店提供可购买(付费)游戏内货币。 通过此货币,玩家可为团队购买道具。 还可为玩家角色购买装饰品。
DLC
可购买的可下载内容包括新地图和其他角色。
游戏服务
此示例中的自定义游戏服务之一是身份验证服务。 此服务用于将一个 Xbox Live(或其他多人游戏网络)帐户与一个游戏特定的玩家帐户进行帐户关联。 当一个玩家首次连接到该服务时,将以无提示方式执行帐户关联并创建一个新的跨网络玩家标识。 对于 Xbox Live,玩家的 XUID 将用作已链接到特定于游戏的帐户的唯一玩家标识符。 XUID 访问在使用前需要批准,并且必须与 DAM 讨论。
游戏特定的帐户具有一个唯一的 ID (GUID),它允许所有游戏服务处理玩家(无论网络源自何处)并且存储与玩家有关的元数据。 在此示例中,多人游戏网络和基本游戏玩家统计数据存储于此帐户中。
游戏服务使用特定于游戏的帐户中的多人游戏网络信息,以便确保多人游戏功能可以限制为仅限 Xbox Live 玩家。
游戏流
对于典型的多人游戏,在玩家进入多人游戏模式时,一个针对跨网络功能的兼容流将首先启动。
在此示例中,该游戏执行以下步骤:
验证权限
在开始多人游戏之前,游戏将验证多人游戏权限(254 和 189)。 如果拒绝该权限,则游戏不会进入多人游戏模式。
该游戏还应检查通信权限 (252),并且相应地结束/禁用语音和文字聊天。
验证跨网络权限
对于此示例,该游戏将跨网络游戏集成到默认的匹配体验中。 当某一玩家进入匹配体验时,该游戏会验证跨网络游戏权限 (185)。 如果拒绝了该权限,则可能仅允许 Xbox Live 内的匹配。
当一个玩家首次置身于跨网络游戏时,该游戏将提供一个通知,指示跨网络游戏处于活动状态。
团队匹配
游戏匹配服务首先基于匹配规则从跨网络玩家中构建一个团队。
创建并加入团队/大厅 MPSD 会话
游戏匹配服务通过对 Xbox Live 的服务到服务调用创建一个 MPSD 大厅会话。 所有 Xbox Live 用户都加入此大厅会话,并且该服务使用自定义属性还提供与会话中的非 Xbox Live 用户有关的提示。 然后客户端逻辑可以使用这些提示在下一步中设置会话状态。
设置团队/大厅 MPSD 会话
Xbox Live 客户端将大厅会话设置为活动会话。 会话可加入性和已关闭状态必须相应设置为跨网络玩家状态。 只要 Xbox Live 玩家保留在跨网络团队中,他们就保留在此会话中。
如果该会话已满(或者在流程中以后会变满),则该服务或大厅仲裁人必须将该会话设置为已关闭。 没有更多玩家时隙的活动会话必须永远是不可加入的。
团队大厅
在团队大厅中,存在的是 Xbox Live 玩家以及来自其他多人游戏平台的玩家。 通过自定义游戏服务在 Xbox Live 玩家之间启用语音聊天。
只有在验证了所有所需隐私和权限检查后,才能启用所有玩家之间(Xbox Live/Xbox Live 和 Xbox Live/非 Xbox Live)的语音聊天。 对于非 Xbox Live 好友关系,该游戏使用非 Xbox Live 网络好友关系数据。
在团队大厅中,Xbox Live 玩家和非 Xbox Live 玩家通过游戏帐户标识来唯一标识。 所有玩家标识符还显示其他多人游戏网络的玩家代号和等效的玩家名称。
大厅 UI 中的玩家名单的示例如下所示。
在大厅 UI 中,团队负责人选择针对下一步骤的匹配属性(如级别或自定义规则)以查找具有其他团队的游戏会话,然后开始此匹配请求。
游戏会话匹配
在此步骤中,将现有的跨网络团队提交到具有团队负责人设置的附加匹配属性的匹配中。 这些属性用于确定最佳匹配,并且导致针对某一匹配的由两个团队构成的一个新组。 此时,该匹配服务还确定针对这两个团队的专用服务器。
创建并加入游戏 MPSD 会话
该异步游戏会话匹配的结果是一个 MPSD 游戏会话,它是由匹配服务或专用服务通过对 Xbox Live 的服务到服务调用来创建的。 所有 Xbox Live 用户都加入此游戏会话,并且该服务使用自定义属性还提供与会话中的非 Xbox Live 用户有关的提示。
然后客户端逻辑可以使用这些提示设置会话状态。
连接到专用服务器
在最后一步,所有客户端都安全地连接到专用服务器并且开始跨网络玩游戏。 必须通过专用服务器路由多人游戏网络之间的所有流量,不允许任何对等连接。
完成游戏
在完成游戏匹配后,团队可以选择:
重播匹配
玩家保持连接到服务器并且处于 MPSD 游戏会话中。 玩家开始新的游戏匹配。
搜索新对手
玩家断开与服务器的连接,并且离开 MPSD 游戏会话。 玩家保留在大厅会话中,并返回到大厅屏幕以便进行下一轮的匹配。
会话管理
为遵从所有 Xbox 要求,该游戏为 Xbox Live 玩家创建两个 MPSD 会话:
大厅会话
匹配服务通过对 Xbox Live 的服务到服务调用创建此会话。 它包含针对创建时一个团队中所有 Xbox Live 玩家的预订。 它是玩家可以为其发送邀请或正在加入的会话。 邀请和正在进行中的加入必须使用 Xbox Live 系统并且无法跨网络。 因此,所有 Xbox Live 玩家都将此会话设置为其活动会话。
游戏会话
匹配服务通过对 Xbox Live 的服务到服务调用创建此会话。 它包含针对一个游戏会话中(跨团队)所有 Xbox Live 玩家的预订。 它用于跟踪 Xbox Live 玩家的多人游戏活动。
非 Xbox Live 玩家并不会在 MPSD 会话中直接表示为会话成员。 该游戏仅会按自定义会话属性跟踪其存在:
{{"name":"jackplayer"},{"name":"johnplayer"},{"name":"joeplayer"}}
可以使用此列表和 Xbox Live 会话成员确定该会话是否已满。 如果会话已满,则 Xbox Live 的邀请和正在进行中的加入功能必须禁用以便获得正确行为。 一个玩家(或服务器)对该会话设置已关闭属性,以便禁用此功能。
用于跟踪游戏中的玩家的 MPSD 会话必须启用 gameplay 功能,以便遵从 Xbox 要求。
玩家通信阻止/举报
在游戏级别上支持游戏中的玩家阻止:
Xbox Live 玩家阻止
该游戏使用 check_multiple_permissions_with_multiple_target_users 来检查多人游戏的权限、与其他 Xbox Live 玩家聊天的权限以及与非 Xbox Live 玩家/非 Xbox Live 好友类别的玩家聊天的权限。 该游戏还通过 ShowProfileCardAsync 提供对其他玩家的档案的访问权限。 可以在玩家的档案 UI 中执行阻止。
非 Xbox Live 玩家阻止
该游戏使用游戏中阻止列表来支持对与非 Xbox Live 玩家的阻止。 在某一游戏服务上维护该列表并且检查多人游戏权限。 默认情况下跨网络聊天不可用。 可以通过自定义游戏 UI 在游戏中阻止一个非 Xbox Live 玩家。
Xbox Live 玩家举报
该游戏还允许玩家举报。 对于 Xbox Live,玩家通过档案 UI 来完成举报。 Xbox Live 执法团队负责处理玩家举报。
非 Xbox Live 玩家举报
对于非 Xbox Live 用户,该游戏提供一个自定义举报 UI 流。 该游戏相应地针对游戏和/或基于其他多人游戏网络的准则处理玩家举报。
卖场
在游戏服务上跟踪 Xbox Live 和其他多人游戏网络上游戏内货币的购买。 该游戏提供共享的虚拟货币电子钱包以及所有游戏版本之间的游戏内物品库存。
对于非 Xbox Live 游戏版本,以下限制适用:
玩家皮肤:
只能通过游戏内货币购买皮肤。 在一个跨所有网络可用的统一的游戏内电子钱包中管理游戏内货币。 所有玩家皮肤在所有游戏版本中都是完全相同的。
易耗品
只能通过游戏内货币购买易耗品。 与货币相似,易耗品也是在一个统一的游戏内库存中管理的。
可下载内容
在 Xbox Live 平台上,通过 Microsoft store 管理可下载内容(新的地图和角色类型)。 来自其他商店的权利不共享。
所有玩家都需要在其相应的商店中具有有效权利,以便一起在同一个地图中玩游戏。 非购买的角色类型是可见的,但不具有匹配权利的玩家无法玩该角色类型。
成就
该游戏具有基于多人游戏操作的多个成就,包括所玩的多人游戏。 针对此成就(和类似成就)的成就进度包括跨网络多人游戏会话。
该游戏不具有任何限制为跨网络游戏的成就。 通过其他游戏版本上的游戏,针对 Xbox One 游戏成就的游戏进度是可行的。
玩家进度
玩家进度在所有游戏版本之间共享。 自定义游戏帐户持有玩家进度部分。
游戏 DVR/广播
该游戏提供对游戏 DVR 和屏幕截图以及跨网络多人游戏比赛中广播的支持。
排行榜
通过提供超越 Xbox Live 排行榜之外的全面的排行榜功能的游戏服务实现游戏的排行榜。 该服务创建多个基础排行榜并且并行更新它们:每个多人游戏网络一个排行榜,以及整合来自所有多人游戏网络的结果的一个合并的排行榜。
在启用了跨网络多人游戏后,将显示该合并的排行榜。 与在多人游戏大厅中相同的方式表示所有玩家。
在某一玩家禁用了跨网络游戏功能后,将显示仅限 Xbox Live 的排行榜。
使用特定于游戏的帐户在内部标识排行榜服务上的所有玩家。 针对 Xbox Live 玩家的外部标识符依赖于查询游戏实例。 在 Xbox Live 游戏实例上,返回该 XUID,并且客户端执行查找以便确定玩家的玩家代号字符串。 在非 Xbox Live 游戏实例上,直接返回该玩家的玩家代号或 DisplayName 字符串。 该服务从对 Xbox Live 的服务到服务调用检索此字符串,并且缓存其最长 4 小时。