服务器上托管的游戏有时会需要搜索额外的玩家。这种情况最常发生在游戏进行过程中一名或多名玩家断开连接时。服务器回填工单允许游戏服务器搜索适合当前正在进行的游戏的额外玩家。
服务器回填工单在多个方面与常规匹配工单不同:
- 匹配
- 回填工单彼此之间不能匹配。
- 回填工单在搜索期间被赋予优先级,可减少玩家群体的碎片化。
- 契约
- 可使用
ServerDetails 字段创建回填工单。这允许服务器指示已匹配的玩家应如何连接到该服务器。
- 可使用团队分配创建回填工单。这允许具有团队机制的游戏保持其团队信息。
- 队列属性
- 所有权
- 回填工单由游戏服务器所有,而非用户。用户无法以任何方式查看或操作回填工单。
先决条件
- 熟悉 PlayFab Multiplayer SDK 的基本知识。有关更多信息,请参阅 Matchmaking SDK 快速入门。
- 在包含匹配头文件之前定义
PFMULTIPLAYER_INCLUDE_SERVER_APIS。例如:
配置服务器回填工单
创建并填充一个 PFMatchmakingServerBackfillTicketConfiguration 结构,包含必要的详细信息:
PFMultiplayerServerDetails::ipv4Address 字段不会被验证,可用于向客户端提供任意的连接字符串信息。
创建服务器回填工单
使用 PFMultiplayerCreateServerBackfillTicket 创建服务器回填工单时,需要传入游戏服务器的实体(作为 PFEntityKey)以及在上一步中创建的回填配置。
检查匹配工单的状态
必须通过调用 PFMultiplayerStartProcessingMatchmakingStateChanges 来接收状态变更,并在处理完这些状态变更后调用 PFMultiplayerFinishProcessingMatchmakingStateChanges,以检查工单的更新。
每当工单状态发生变化时,SDK 会返回 TicketStatusChanged 状态变更;当匹配已完成时,SDK 会返回 TicketCompleted 状态变更。
获取匹配
在收到 PFMatchmakingStateChangeType::TicketCompleted 状态变更后,调用 PFMatchmakingTicketGetMatch 以获取对局的详细信息。这些详细信息包含匹配 ID、已匹配到一起的用户、对局的首选区域,以及与对局关联的大厅编排字符串。
从 PFMatchmakingMatchDetails 结构中检索所需的信息后,应使用 PFMultiplayerDestroyMatchmakingTicket 销毁工单。
取消工单
如果你希望在 PFMatchmakingServerBackfillTicketConfiguration 中设置的超时之前取消匹配过程,请使用工单句柄调用 PFMatchmakingTicketCancel。
调用此 API 并不保证工单被取消。工单可能在取消操作被处理之前已经完成,或者取消请求可能因网络或服务错误而失败。如果希望在继续之前确认工单取消已完成,你仍可以处理匹配状态变更以获取工单的结果。否则,你可以立即调用 PFMultiplayerDestroyMatchmakingTicket。