工单创建时的错误
工单创建可能因多种原因失败。在大多数情况下,PlayFab 错误代码会指出提交请求中存在问题的地方。修正后即可成功提交。错误
MatchmakingAttributeInvalid 和 MatchmakingPlayerAttributesInvalid 表示属性格式存在问题。有关如何在工单中传递属性的详细信息,请参阅指定工单属性一节。MatchmakingRateLimitExceeded- 表示你提交工单过于频繁。有关更多详细信息,请参阅下方章节。MatchmakingTicketMembershipLimitExceeded- 表示用户已在另一个活跃工单中。用户被限制不能同时在一个队列内的多个工单中,因为他们无法同时进行两场游戏。有关纠正此情况的详细内容,请参阅下方章节。
调用返回 MatchmakingRateLimitExceeded
与其他 PlayFab 功能类似,PlayFab 匹配会根据 Game Manager 中配置的限制来限制你所进行的调用数量。收到MatchmakingRateLimitExceeded 错误表明该游戏已超过此调用类型的限制。
在匹配中,这最常发生在轮询 GetMatchmakingTicket 以查看工单是否已匹配时。
为避免此错误,可以增加你的限制,或降低调用频率。
尽管响应的 HTTP 状态代码为 429,但请求本身是有效的,仍可以重试。
创建或加入工单返回 MatchmakingTicketMembershipLimitExceeded
在 PlayFab 匹配中,用户在每个队列中同时只能位于一个工单中,以避免用户进入两场对局并需要决定采纳哪张工单的情况。未被采纳的对局将缺少一名玩家,其玩家可能会被迫重新进入匹配。如果用户已在一张未取消或未匹配的工单中,却尝试创建或加入另一张工单,则会返回错误MatchmakingTicketMembershipLimitExceeded。
然而,有时游戏或服务器可能因崩溃、重启或其他不可预见的错误而丢失对工单的跟踪。发生这种情况时,会留下一张既非用户也非游戏所知的活跃工单。
这个丢失的工单会阻止将来为该用户提交任何工单,直到它过期。如果发生这种情况,有两种可用选项来解决此问题:
选项 1:从匹配中清除工单
取消用户的所有现有工单。调用 CancelAllMatchmakingTicketsForPlayer 可完成此任务。此后,匹配中不再有正在进行的工单,可以创建新工单。选项 2:找到丢失的工单
找到用户的现有工单并继续使用。调用 ListMatchmakingTicketsForPlayer 会返回该用户作为成员的所有匹配工单 ID。对提供的每个 ticketId 调用 GetMatchmakingTicket 可以检索其状态,并继续监视它直到找到对局。并非所有玩家都加入了多用户工单
创建多用户工单时,某位受邀玩家可能未能或拒绝加入。在这种情况下,创建的工单将保持在 WaitingForPlayers 状态,直到过期。游戏应预期这种情况偶尔发生,并在 UI 内设置相当短的超时。 超时后,游戏应取消该工单,并检查所有玩家是否仍同意一起玩游戏。GetMatch 返回未找到
对局创建后,对局会存在一段时间并最终失效。如果没有及时检索对局,这些用户需要重新提交工单才能再次匹配。可以通过确保及时检索对局(即在几分钟内)来避免这种情况。 如果你按此处所述将 Matchmaking 与 Lobby 一同使用,则在对局在此处超时之后,lobbyArrangementString 仍可能在一段时间内有效。请务必在其过期之前检索并使用 GetMatch 中的信息。工单被取消
工单可能因多种原因被取消。最常见的情形是用户取消和工单过期,但服务器也可能取消工单。如果你调用GetMatchmakingTicket 并发现你的工单已被取消,原因将列在 CancellationReason 字段中。可能的 CancellationReason 响应及可能的解决方案如下所示。
取消工单返回错误
取消工单不保证成功。虽然大多数错误不言自明,但错误MatchmakingTicketAlreadyCompleted 表示两种可能情况之一:
- 工单已被取消。
- 工单已被匹配。
