Gruppen-Bestenlisten
In diesem Tutorial erfahren Sie, wie Sie Gruppenentitäten in einer Bestenliste verwenden. Um dieses Konzept zu verstehen, beginnen wir mit einem Beispiel für ein "RPG"-Spiel, das sich auf Terraforming-Planeten konzentriert. Als Spieler musst du Strukturen auf jedem Planeten aufbauen und entwickeln, Ressourcen sammeln, deine eigenen Schiffe erstellen und auch Verteidigungen einrichten, da andere Spieler dich angreifen könnten, um deine Dinge zu stehlen. Jetzt ist ein wichtiger Aspekt dieses Spiels, dass Spieler Allianzen mit dem Ziel beginnen können, ein Team zu schaffen und andere Spieler als Gruppe anzugreifen.
In diesem Zusammenhang wollen wir eine Bestenliste für Allianzen erstellen, damit wir wissen können, welches die stärkere Allianz im gesamten Universum ist.
Einige wichtige Aspekte, die Sie berücksichtigen sollten, bevor Sie sich eingehender mit der Funktionsweise von Gruppen-Bestenlisten befassen:
- Weitere Informationen zum Entity Programming Model finden Sie hier: Entity Programming Model.
- Hier erfahren Sie, wie Gruppen funktionieren: Gruppen.
Erstellen einer Bestenliste
Abhängig vom Spiel und der Art der Szenarien, die Sie haben werden, erstellen Sie höchstwahrscheinlich mehrere Bestenlisten. In diesem speziellen Kontext möchten wir verschiedenen Szenarien für dieses Spiel zeigen und zeigen, wie der Dienst verwendet wird, um jedes dieser Szenarien zu behandeln.
Spieler-Bestenlisten
In diesem Beispiel haben wir Spieler, die Planeten terraformingen, und sie sammeln Erfahrungspunkte, indem sie bestimmte Aktionen im Spiel ausführen.
Wir werden also eine Bestenliste für die Nachverfolgung dieser Erfahrung auf Spielerebene haben. Dieser Prozess folgt demselben Verhalten wie in anderen Tutorials wie der Einfachen Bestenliste erstellen. Der wichtigste Aspekt hierbei ist, dass der EntityType-Parameter so sein "title_player_account"
muss, dass er nur für Spieler gilt.
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 = 1,
ResetInterval = ResetInterval.Manual,
},
Columns = new List<LeaderboardColumn>()
{
new LeaderboardColumn()
{
Name = "XP",
SortDirection = LeaderboardSortDirection.Descending,
}
}
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
Gruppen-Bestenlisten
Lassen Sie uns nun auf den Aspekt des Spiels eingehen, der im Beispiel angegeben wurde: Allianzen. So können wir mit der "group"
Entität Allianzen in PlayFab erstellen. Diese Gruppenentität ermöglicht es uns, eine Struktur zu haben, der spieler beitreten kann, sie verfügt auch über Rollen und andere interessante Features, die diese Art von Szenarien in Spielen ermöglichen. Für die Erstellung der Bestenliste müssen zwei Dinge klar sein.
- Der EntityType-Parameter muss sein
"group"
. - Diese Bestenliste ist unabhängig. Das Hinzufügen einer Punktzahl für eine Allianz ist also ein manueller Prozess, der von der Bestenliste der Spieler getrennt ist. Dieses Verhalten ermöglicht verschiedene Möglichkeiten, wie die Ergebnisse mit den Spielern zusammenhängen, oder es könnte eine neue Metrik sein, die nur für Gruppen gilt.
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 = "group",
VersionConfiguration = new VersionConfiguration()
{
MaxQueryableVersions = 1,
ResetInterval = ResetInterval.Manual,
},
Columns = new List<LeaderboardColumn>()
{
new LeaderboardColumn()
{
Name = "Group XP",
SortDirection = LeaderboardSortDirection.Descending,
}
}
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> createLbDefinitionResult = await leaderboardsAPI.CreateLeaderboardDefinitionAsync(leaderboardDefinitionRequest);
}
Hinzufügen von Daten zur Bestenliste
Nachdem wir beide Bestenlisten erstellt haben, müssen wir sehen, wie wir ihnen Daten hinzufügen können. Wie bereits im vorherigen Beispiel erwähnt, sind diese Bestenlisten unabhängig voneinander. Dies gibt dem Entwickler die Möglichkeit, benutzerdefinierte Logik darauf anzuwenden, wie Bewertungen für Allianzen (Gruppen) funktionieren.
public static async Task UpdateLeaderboardForPlayer(PlayFabAuthenticationContext context, string leaderboardName, string entityId, int score)
{
PlayFabProgressionInstanceAPI leaderboardsAPI = new PlayFabProgressionInstanceAPI(context);
UpdateLeaderboardEntriesRequest updateLeaderboardRequest = new UpdateLeaderboardEntriesRequest()
{
Entries = new List<LeaderboardEntryUpdate>()
{
new LeaderboardEntryUpdate()
{
EntityId = entityId,
Scores = new List<string> { score.ToString()}
}
},
AuthenticationContext = context,
LeaderboardName = leaderboardName,
};
PlayFabResult<PlayFab.LeaderboardsModels.EmptyResponse> updateResult = await leaderboardsAPI.UpdateLeaderboardEntriesAsync(updateLeaderboardRequest);
}
Der Code zum Hinzufügen von Einträgen zur Bestenliste der Spieler oder der Gruppen-Bestenliste ist in diesem Szenario identisch. Dieses Verhalten trifft jedoch nicht immer zu, da wir eine Bestenliste mit fünf Spalten für Spieler haben könnten. Aber dann könnten wir eine weitere Bestenliste für Gruppen mit nur einer Spalte haben. Weitere Informationen zur mehrspaltigen Bestenliste finden Sie in diesem Tutorial: Mehr Nutzen von Bestenlisten.
Was Sie immer beachten sollten, ist, dass Sie den richtigen EntityId
für den Dienst bereitstellen müssen. Wenn Sie über eine Bestenliste mit Spielern verfügen, sind "title_player_account"
die Entitäten, wenn die Bestenliste aus Gruppen besteht, müssen Sie Entitäten angeben, die sind "group
.
Abrufen von Daten aus der Bestenliste
Um nun die Daten der Bestenliste zu erhalten, haben wir alle optionen, die hier beschrieben sind : Mehr mit Bestenlisten machen mit Ausnahme der GetFriendLeaderboard-API.
Anzeigename für Gruppen-Bestenlisten
Schließlich ist ein weiteres Detail, das wir mit Gruppen-Bestenlisten durchführen können, das Festlegen des Anzeigenamens mit dem Gruppennamen der Entität.
Wenn Sie also über eine Allianz namens "Raiders" verfügen, wird dieser Gruppenname der Entität mit der DisplayName
-Eigenschaft zugeordnet.
public static async Task<CreateGroupResponse> CreateGroup(string groupName, PlayFabAuthenticationContext context)
{
var request = new CreateGroupRequest
{
GroupName = groupName,
AuthenticationContext = context
};
var response = await PlayFabGroupsAPI.CreateGroupAsync(request);
SetDisplayNameRequest displayRequest = new SetDisplayNameRequest()
{
AuthenticationContext = context,
DisplayName = groupName,
Entity = new PlayFab.ProfilesModels.EntityKey()
{
Id = response.Result.Group.Id,
Type = "group",
},
};
PlayFabResult<SetDisplayNameResponse> updateNameResult = await PlayFabProfilesAPI.SetDisplayNameAsync(displayRequest);
return response.Result;
}
In diesem Beispiel. wir eine Gruppe erstellen, indem wir die CreateGroupAsync
-Methode aufrufen. Der erste Schritt dieser Ausführung besteht darin, das Group-Objekt zurückzugeben, das zum Festlegen des Anzeigenamens verwendet wird. Bei diesem Vorgang wird der Gruppenname der Entität zugeordnet, indem wir das SetDisplayNameRequest
-Objekt verwenden und dann die PlayFabProfilesAPI.SetDisplayNameAsync
-Methode ausführen.
Schlüsse
In diesem Tutorial haben wir gelernt, wie die folgenden Vorgänge ausgeführt werden:
- Erstellen Sie eine Gruppen-Bestenliste.
- Erfahren Sie, wie Sie Daten in diese Bestenliste einspeisen.
- Rufen Sie die Bestenliste ab.
- Ändern Sie displayName, damit der Gruppenname angezeigt werden kann.