Verwenden von Spielerherausgeberdaten zum Gewähren einer Belohnung für das Spielen mehrerer Titel
Belohnungen beziehen sich in der Regel auf andere Systeme außerhalb der Spielerdaten, sodass in diesem Beispiel der Einfachheit halber die Vergabe virtueller Währungen veranschaulicht wird.
Voraussetzungen
- Ein PlayFab-Entwicklerkonto.
- Ein Spieler muss sich bei beiden Titeln mit den gleichen Anmeldeinformationen anmelden. Ein Ansatz besteht darin, wiederherstellbare Anmeldeinformationen zu verwenden, wie in unserem Tutorial zu Anmeldegrundlagen und bewährten Methoden beschrieben. Informationen zum Hinzufügen einer wiederherstellbaren Anmeldung zu einem anonymen Konto finden Sie in unserem Tutorial zur Kontoverknüpfung .
- In diesem Beispiel sind kenntnisse über CloudScript erforderlich:
- In unserem Beispiel wird die grundlegende Datensicherheit veranschaulicht, um Spielerbetrug zu vermeiden. Man könnte auch die Server-API auf einem benutzerdefinierten Spieleserver verwenden, wenn der Titel sie verwendet.
- Belohnungen, die über PlayFab ausgelöst werden, erfordern die Nutzung der entsprechenden PlayFab-Features. PlayFab Rewards kann in Form von virtueller Währung, Inventarelementen, benutzerdefinierten Spielerdaten, Statistiken usw. vorliegen. Das Verteilen von Belohnungen außerhalb von PlayFab-Systemen ist ein erweitertes Thema und wird in diesem Tutorial nicht behandelt.
Außerdem wird empfohlen, dass Entwickler eine gute Fehlerbehandlung für alle Server-API-Aufrufe von CloudScript verwenden.
Jedes Spiel meldet eine Anmeldung für Herausgeberdaten.
Jedes Spiel muss melden, dass eine Anmeldung aufgetreten ist. Der Einfachheit halber bietet unser Beispiel nur eine Belohnung für jeden Titel, für jeden anderen gespielten Herausgebertitel.
Sie können die Idee mit Indikatoren, Zeitstempeln oder anderen Mechanismen erweitern, um progressive oder sequenzielle Belohnungen bereitzustellen.
Das folgende CloudScript muss in jedem Spiel in Ihrem Studio vorhanden sein.
// CloudScript/Javascript
var PUBLISHER_USED_TITLES_KEY = "playedTitleIds";
handlers.TrackTitleUsage = function () {
// Get the User Publisher Data for this player, and convert it into our expected format
var getRequest = { Keys: [PUBLISHER_USED_TITLES_KEY], PlayFabId: currentPlayerId };
var getResult = server.GetUserPublisherInternalData(getRequest);
var playedTitlesList = JSON.parse(getResult.Data[PUBLISHER_USED_TITLES_KEY].Value); // format is arbitrary, but this example assumes Array<string>
if (!playedTitlesList)
playedTitlesList = [];
// Check if we've played this title already
var alreadyPlayed = false;
for (var i = 0; i < playedTitlesList.length; i++)
alreadyPlayed = alreadyPlayed || playedTitlesList[i] === script.titleId;
if (alreadyPlayed)
return; // Nothing to do
// Update the list of played titles, and re-save
playedTitlesList.push(script.titleId);
var setRequest = { PlayFabId: currentPlayerId, Data: { PUBLISHER_USED_TITLES_KEY: JSON.stringify(playedTitlesList) } };
server.UpdateUserPublisherInternalData(setRequest);
}
In diesem Beispiel wird insbesondere folgendes veranschaulicht:
- Server. GetUserPublisherInternalData
- Server. UpdateUserPublisherInternalData.
Jedes Spiel sucht nach einlösbaren Belohnungen.
Nachdem Sie nachverfolgt haben, welche Titel gespielt werden, müssen Sie die Belohnungen nachverfolgen und gewähren. Diese CloudScript-Funktion überprüft und gewährt verfügbare Belohnungen, basierend darauf, dass andere Titel gespielt wurden.
// CloudScript/Javascript
var PUBLISHER_REDEEMED_TITLES_KEY = "redeemedTitleIds";
var MY_CROSS_TITLE_REWARDS = { "AU": 10 };
handlers.CheckCrossTitleRewards = function () {
// Get the publisher data concerning cross-title rewards for this player
var getRequest = { Keys: [PUBLISHER_USED_TITLES_KEY, PUBLISHER_REDEEMED_TITLES_KEY], PlayFabId: currentPlayerId };
var getResult = server.GetUserPublisherInternalData(getRequest);
var redeemedTitleRewards = JSON.parse(getResult.Data[PUBLISHER_REDEEMED_TITLES_KEY].Value); // format is arbitrary, but this example assumes { [key: string]: Array<string> }
if (!redeemedTitleRewards)
redeemedTitleRewards = {};
var playedTitlesList = JSON.parse(getResult.Data[PUBLISHER_USED_TITLES_KEY].Value); // format is arbitrary, but this example assumes Array<string>
if (!playedTitlesList)
playedTitlesList = [];
// Determine which titles are un-redeemed
var unredeemedTitleIds = [];
for (var i = 0; i < playedTitlesList.length; i++) {
if (!redeemedTitleRewards.hasOwnProperty(playedTitlesList[i]) && playedTitlesList[i] !== script.titleId)
unredeemedTitleIds.push(playedTitlesList[i]);
}
if (unredeemedTitleIds.length === 0)
return null; // Nothing to redeem
// Give the cross title rewards
var multiplier = unredeemedTitleIds.length;
var actualRewards = {}; // MY_CROSS_TITLE_REWARDS is a global constant, so don't modify it or you'll mess up future calls
// Please note that the number of API calls that may be made from CloudScript, as well as the total available processing time is limited,
// and so the number of rewards should be as small as possible (only one VC, in this case)
for (var eachKey in MY_CROSS_TITLE_REWARDS) {
actualRewards[eachKey] = MY_CROSS_TITLE_REWARDS[eachKey] * multiplier;
server.AddUserVirtualCurrency({ PlayFabId: currentPlayerId, VirtualCurrency: eachKey, Amount: MY_CROSS_TITLE_REWARDS[eachKey] }); // Can only add 1 VC at a time
}
// Save the Publisher data indicating rewards are claimed
redeemedTitleRewards[script.titleId] = playedTitlesList;
var setRequest = { PlayFabId: currentPlayerId, Data: { PUBLISHER_REDEEMED_TITLES_KEY: JSON.stringify(redeemedTitleRewards) } };
server.UpdateUserPublisherInternalData(setRequest);
// Tell the client the reward
return actualRewards;
};
Notiz
In diesem speziellen Beispiel wird die Verwendung des Servers veranschaulicht. GetUserPublisherInternalData (mehrere Schlüssel anfordern), Server. UpdateUserPublisherInternalData und server. AddUserVirtualCurrency.
Die Codeblöcke stellen die folgenden Schritte dar:
- Abrufen der Daten aus PlayFab und Analysieren der Daten in lokalen Datenstrukturen (Aufrufen von GetUserPublisherInternalData).
- Untersuchen sie die Daten, und suchen Sie nach nicht belohnten Titel-IDs.
- Gewähren der Belohnungen (Aufruf von AddUserVirtualCurrency).
- Aktualisieren der beanspruchten Belohnungen (Aufruf von UpdateUserPublisherInternalData).
- Bereitstellen des belohnten Betrags für den Client (über return-Anweisung von CloudScript).
Abschluss
Spielerherausgeberdaten und Spielerdaten sind strukturell identisch.
Spielerdaten sollten titelspezifisch sein, während Spielerherausgeberdaten nur Informationen enthalten sollten, die für alle Ihre Titel relevant sind.
Weitere Informationen
Einfache In-Game Cross Promotion: Belohnen Sie Spieler, die an mehr als einem Ihrer Spiele teilnehmen.