Freigeben über


Manuelle Ebenen mit Bestenlisten

In diesem Tutorial erfahren Sie, wie Sie einige Eigenschaften innerhalb des Bestenlistendiensts anwenden, um ein Ebenensystem für Spieler zu erstellen. Um zu verstehen, wie Sie ein manuelles Ebenensystem basierend auf den Diensteigenschaften erstellen, beginnen wir mit einem Beispiel. Stellen Sie sich vor, wir haben ein Zombie-Tötungsspiel, bei dem die Spieler eine begrenzte Zeit haben, um so viele Punkte wie möglich zu erzielen. Es können verschiedene Strategien verwendet werden, um mehr Punkte zu gewinnen, und es gibt auch Punkte, um keinen Schaden zu erhalten.

In diesem Beispiel sammeln Die Spieler Erfahrungspunkte basierend auf ihrer Leistung in jedem Spiel. Wir möchten ein Ebenensystem erstellen, um den Top-Spieler mit dem Rang "Saviors" zu identifizieren, während der Rest der Spieler auf verschiedene Ränge wie Bronze, Silber, Gold, Platin und Diamant verteilt wird.

Erstellen einer Bestenliste

Der erste Schritt besteht darin, eine Bestenlistendefinition zu erstellen, die die Standard-Elemente für Rangfolgespieler enthält. Für unser Zombie-Spiel verwenden wir mehrere Punkte. Das folgende Beispiel zeigt, wie Sie die Bestenlistendefinition mithilfe des C#-SDK erstellen.

public static async Task CreateLeaderboardDefinitionAsync(PlayFabAuthenticationContext context, string leaderboardName)
{
    PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
    CreateLeaderboardDefinitionRequest leaderboardDefinitionRequest = new CreateLeaderboardDefinitionRequest()
    {
        AuthenticationContext = context,
        Name = leaderboardName,
        SizeLimit = 10000,
        EntityType = "title_player_account",
        VersionConfiguration = new VersionConfiguration()
        {
            MaxQueryableVersions = 1,
            ResetInterval = ResetInterval.Manual,
        },
        Columns = new List<LeaderboardColumn>()
        {
            new LeaderboardColumn()
            {
                Name = "Eliminations",
                SortDirection = LeaderboardSortDirection.Descending,
            },
            new LeaderboardColumn()
            {
                Name = "SkillPoints",
                SortDirection = LeaderboardSortDirection.Descending,
            }
            new LeaderboardColumn()
            {
                Name = "Deaths",
                SortDirection = LeaderboardSortDirection.Ascending,
            }         
        }
    };

    PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}

Hier haben wir unsere Bestenliste mit drei verschiedenen Bewertungen definiert. Weitere Informationen zum Erstellen von Bestenlisten oder zur Funktionsweise von Tiebreaks finden Sie im folgenden Leitfaden: Mehr Mit Bestenlisten arbeiten.

Manuelles Tiering

Nachdem die Bestenliste ordnungsgemäß erstellt wurde, können wir nun definieren, wie wir unsere Ebenen erstellen möchten. Zunächst müssen wir definieren, wie wir die Spielerpopulation aufteilen möchten. Je höher der Rang ist, desto weniger Spieler. Unter Berücksichtigung dieses Konzepts definieren wir unsere Ebenen.

  • Bronze: 0 - 35% der Spieler.
  • Silber: 35% - 60% der Spieler.
  • Gold: 60% - 80% der Spieler.
  • Platin: 80% - 90% der Spieler.
  • Diamant: 90% - 99,5% der Spieler.
  • Retter: Top 0,05% der Spieler.

Da es sich bei diesem Prozess um einen manuellen Ansatz für ein Ebenensystem handelt, muss die Verteilung der Spieler in jeder Weise gespeichert werden, die der Entwickler für geeignet halten.

Um Daten abzurufen, verwenden wir das folgende Beispiel:

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,
    };

    PlayFabResult<GetEntityLeaderboardResponse> lbResponse = await leaderboardsAPI.GetLeaderboardAsync(getLbRequest);
    
    return lbResponse.Result;
}

Dieses Beispiel ist eine unserer verschiedenen Methoden zum Abrufen von Daten aus der Bestenliste. In der Result-Eigenschaft der Antwort suchen wir eine Eigenschaft namens EntryCount , die uns angibt, wie viele Zeilen die Bestenliste derzeit enthält. Diese Zahl unterscheidet sich von SizeLimit der, die die maximale Anzahl von Zeilen in der Bestenliste darstellt.

Um die Ebene eines Spielers zu bestimmen, nehmen wir seine Position innerhalb der Bestenliste ein und dividieren sie durch die EntryCount -Eigenschaft, um zu sehen, wo sie in die definierten Ebenen passen.

Kurze Beispiele:

  • Unterer Spieler: Ein Spieler, der bei 8500 von 10.000 positioniert ist, liegt innerhalb der 85% der Bevölkerung und fällt in die Bronze-Ebene.
  • Mittlerer Spieler: Ein Spieler, der bei 3500 von 10.000 positioniert ist, liegt innerhalb der top 35% der Spieler und fällt in den Gold-Tarif.
  • Top-Spieler: Ein Spieler, der bei 50 von 10.000 positioniert ist, liegt innerhalb der top 0,5% der Spieler und wird zum "Erlöser".

Schlüsse

In diesem Tutorial haben wir gelernt, wie die folgenden Vorgänge ausgeführt werden:

  • Erstellen Sie eine Bestenliste.
  • Erfahren Sie, wie Sie Daten aus einer Bestenliste abfragen.
  • Erfahren Sie, wie Sie eine manuelle Ebenenverteilung basierend auf Perzentilen erstellen.
  • Erfahren Sie, wie Sie das Ergebnis der Position eines Spielers einer tatsächlichen Ebene zuordnen.

Weitere Informationen