Saisonale Bestenlisten
In diesem Tutorial wird das Konzept der Versionsverwaltung für Bestenlisten erläutert. Es gibt mehrere Fälle, in denen wir unterschiedliche Versionen einer bestimmten Bestenliste verwenden möchten. Beispielsweise bleibt in einem Spiel mit einem monatlichen Turniermodus die Struktur der Bestenliste gleich, aber die Spieler ändern sich höchstwahrscheinlich, insbesondere in einem stark umkämpften Spiel.
Wir fahren mit dem Beispiel aus den Einfachen Bestenlisten erstellen fort. Stellen Sie sich vor, dass unser Arcade-Spiel jetzt sehr beliebt ist. Daher wird ein neuer Modus namens "Top of the Mountain" eingeführt. Jeden Monat bietet das Spiel ein Turnier, an dem jeder Spieler teilnehmen kann. Wer auch immer in den Top 100 platziert wird, wird in einer speziellen Bestenliste im Standard Menü angezeigt, damit jeder sehen kann, wer der Beste im Spiel ist.
Erstellen einer Bestenlistendefinition für die Versionsverwaltung
Im vorherigen Beispiel gab es beim Erstellen einer Bestenlistendefinition einen Hinweis zur Wichtigkeit des Parameters für die VersionConfiguration
Versionsverwaltung. Hier erfahren Sie, wie Sie es verwenden und wie es funktioniert.
public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
SizeLimit = 1000,
EntityType = "title_player_account",
VersionConfiguration = new VersionConfiguration()
{
MaxQueryableVersions = 12,
ResetInterval = ResetInterval.Month,
},
Columns = new List<LeaderboardColumn>()
{
new LeaderboardColumn()
{
Name = "arcadeScoreTournament",
SortDirection = LeaderboardSortDirection.Descending,
}
}
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
Der Standard Unterschied in diesem Beispiel zur einfachen Bestenliste ist der VersionConfiguration
Parameter. Mit diesem Parameter können wir eine MaxQueryableVersions
Einstellung definieren, die angibt, wie viele Versionen derselben Bestenliste wir abfragen können. In diesem Fall legen wir die Abfrage auf 12 Versionen fest, sodass die 12 neueren Bestenlisten abfragen können. Der ResetInterval
-Parameter definiert, wie oft der Zurücksetzungsvorgang stattfindet. Diese Aktion umfasst das Erstellen einer Bestenliste mit der gleichen Konfiguration wie zuvor, aber leer, und der Versionsparameter ändert sich wie folgt: N = N + 1, mit N = 0 bei der Erstellung der Bestenlistendefinition.
Angenommen, wir haben eine Bestenliste mit dem Versionsparameter 2 mit hundert Einträgen in der Bestenliste. Wenn wir nun die Version dieser Bestenliste erhöhen, wird das Ergebnis eine neue Bestenliste sein, deren Versionsparameter gleich drei und leer ist. In der Zwischenzeit verbleibt die vorherige Bestenliste im System, um eine Abfrage zu erhalten.
Die ResetInterval
kann auf mehrere Arten funktionieren. In diesem Beispiel ist es monatlich, kann aber entsprechend den Anforderungen des Entwicklers geändert werden. In diesem speziellen Fall bedeutet dies, dass die Bestenliste jeden Monat automatisch zurückgesetzt wird, ab dem Zeitpunkt, zu dem sie konfiguriert wurde. Wir unterstützen die folgenden Zurücksetzungsstrategien:
- Tag
- Stunde
- Manuell
- Monat
- Woche
Weitere Informationen zu allen verfügbaren Konfigurationen finden Sie in der API-Dokumentation: API-Referenz Erstellen einer Bestenliste
Erhöhen der Version einer Bestenliste
Mit dieser neuen Konfiguration können mehrere Versionen der gleichen Bestenliste für den Turniermodus verwendet werden. Aber was passiert, wenn wir die Bestenliste aufgrund eines Problems manuell zurücksetzen und das Turnier neu starten müssen? In solchen Fällen können wir mithilfe der API eine manuelle Zurücksetzung durchführen. Hier sehen Sie ein Beispiel für die Verwendung des SDK:
public static async Task ResetLeaderboards(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
IncrementLeaderboardVersionRequest resetLeaderboardRequest = new IncrementLeaderboardVersionRequest()
{
AuthenticationContext = context,
Name = leaderboardName,
};
PlayFabResult<PlayFab.LeaderboardsModels.IncrementLeaderboardVersionResponse> resetLeaderboardResponse = await leaderboardsAPI.IncrementLeaderboardVersionAsync(resetLeaderboardRequest);
}
Abfragen älterer Versionen
Wenn wir nun eine ältere Version einer Bestenliste abfragen müssen, können wir den Parameter verwenden, der version
für alle GetLeaderboards-APIs verfügbar ist.
Hier sehen Sie ein Beispiel für die Verwendung des SDK:
public static async Task<List<EntityLeaderboardEntry>> GetLeaderboard(PlayFabAuthenticationContext context, string leaderboardName)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
GetEntityLeaderboardRequest getLbRequest = new GetEntityLeaderboardRequest()
{
LeaderboardName = leaderboardName,
StartingPosition = 1,
PageSize = 20,
AuthenticationContext = context,
Version = 1
};
PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
return lbResponse.Result.Rankings;
}
Jetzt sind wir bereit, alle Herausforderungen mit der Versionsverwaltung in Leaderboards zu bewältigen. Ein wichtiger Aspekt ist hierbei, dass die Anzahl der Bestenlistendefinitionen, die als Versionen beibehalten werden sollen, gemessen wird, da speicherintern im Dienst verwendet wird. Weitere Informationen hierzu finden Sie hier:
Schlüsse
In diesem Tutorial haben wir gelernt, wie die folgenden Vorgänge ausgeführt werden:
- Erstellen Sie eine Bestenliste mit der richtigen Zurücksetzungsstrategie.
- Erhöhen Sie die Version einer Bestenliste.
- Fragen Sie ältere Versionen einer Bestenliste ab.