Erstellen durchsuchbarer Lobbies
In diesem Artikel wird erläutert, wie Sie durchsuchbare Lobbies erstellen.
Damit ein Wartebereich durchsuchbar ist, muss die Zugriffsrichtlinie entweder öffentlich oder Freunde sein. Lobbies mit einer Richtlinie für privaten Zugriff können nicht über Suchabfragen verknüpft werden und müssen über Einladungen verknüpft werden. Es ist üblich, diese Zugriffsrichtlinie beim anfänglichen Erstellen des Wartebereichs zu konfigurieren.
Sobald die Zugriffsrichtlinie einer Lobby richtig festgelegt ist, können andere Spieler mithilfe von Suchlobbys danach suchen.
Darüber hinaus kann der Besitzer des Wartebereichs benutzerdefinierte Sucheigenschaften definieren, die andere Spieler bei der Suche nach Lobbies verwenden können, um spezifischere Ergebnisse zu finden.
Weitere Informationen finden Sie unter Suchen von Lobbies und Beitreten zu Lobbies.
Beispiel für das Festlegen von Sucheigenschaften mit dem Lobby- und Matchmaking-SDK
In diesem Beispiel sind für den erstellten Wartebereich die folgenden benutzerdefinierten Sucheigenschaften definiert.
- Spielmodus = "DeathMatch"
- Wettbewerbsstil = "Rangfolge"
- Qualifikationsstufe = Qualifikationsstufe der Person, die den Wartebereich erstellt hat
static PFMultiplayerHandle g_pfmHandle; // initialized elsewhere
#define PFLOBBY_SEARCH_KEY_GAME_MODE "string_key1"
#define PFLOBBY_SEARCH_KEY_COMPETITION_STYLE "string_key2"
#define PFLOBBY_SEARCH_KEY_SKILL "number_key1"
#define GAME_MODE_DEATH_MATCH "DeathMatch"
#define COMPETITION_STYLE_RANKED "Ranked"
PFEntityKey m_localUser;
namespace MyGame {
uint32_t GetPlayerSkill(); // defined elsewhere
}
void CreateLobbyWithSearchProperties()
{
// Initialize the lobby configuration with search properties
std::string playerSkill = std::to_string(MyGame::GetPlayerSkill());
const char* searchPropertyKeys[] = {
PFLOBBY_SEARCH_KEY_GAME_MODE,
PFLOBBY_SEARCH_KEY_COMPETITION_STYLE,
PFLOBBY_SEARCH_KEY_SKILL,
};
const char* searchPropertyValues[_countof(searchPropertyKeys)] = {
GAME_MODE_DEATH_MATCH,
COMPETITION_STYLE_RANKED,
playerSkill.c_str(),
};
PFLobbyCreateConfiguration lobbyConfiguration{};
lobbyConfiguration.maxMemberCount = 16;
lobbyConfiguration.searchPropertyCount = _countof(searchPropertyKeys);
lobbyConfiguration.searchPropertyKeys = searchPropertyKeys;
lobbyConfiguration.searchPropertyValues = searchPropertyValues;
// Initialize an empty join configuration. This can be optionally initialized with the creator's member properties
PFLobbyJoinConfiguration creatorMemberConfiguration{};
creatorMemberConfiguration.memberPropertyCount = 0;
// Create and join the lobby
PFLobbyHandle lobby;
HRESULT hr = PFMultiplayerCreateAndJoinLobby(
g_pfmHandle,
&m_localUser,
&lobbyConfiguration,
&creatorMemberConfiguration,
nullptr,
&lobby);
}