'JavaScript handlers. in PlayFab CloudScript code
I have never programmed JavaScript and I am now facing a code requirement for the game I working on. The code below is an example for PlayFab CloudScript.
I am trying to wrap my head around and fully understand this piece of the script:
handlers.TakePlayerTurn = function (args: PlayerTurnArgs) {
var getRequest: PlayFabServerModels.GetSharedGroupDataRequest = { SharedGroupId: args.sharedGroupId, GetMembers: true, Keys: MY_GAME_GROUP_KEYS };
var gameData: PlayFabServerModels.GetSharedGroupDataResult = server.GetSharedGroupData(getRequest);
CheckValidPlayer(currentPlayerId, args.sharedGroupId, gameData.Members, gameData.Data["currentPlayerTurn"].Value, args.nextPlayerTurn);
var newGameStateJson = UpdateGameState(args.turnData, gameData.Data["gameState"].Value);
var updateRequest: PlayFabServerModels.UpdateSharedGroupDataRequest = {
SharedGroupId: args.sharedGroupId,
Data: {
"gameState": newGameStateJson,
"currentPlayerTurn": args.nextPlayerTurn
}
};
server.UpdateSharedGroupData(updateRequest);
}
I have been trying to find valid explanation by google but still not fully understand it either then it is an event handler.
Could someone please help me to understand this code?
Here is the full script:
// CloudScript/Javascript
const MY_GAME_GROUP_KEYS: Array<string> = ["gameState", "currentPlayerTurn"];
interface PlayerTurnArgs {
sharedGroupId: string;
nextPlayerTurn: string;
turnData: any;
}
handlers.TakePlayerTurn = function (args: PlayerTurnArgs) {
var getRequest: PlayFabServerModels.GetSharedGroupDataRequest = { SharedGroupId: args.sharedGroupId, GetMembers: true, Keys: MY_GAME_GROUP_KEYS };
var gameData: PlayFabServerModels.GetSharedGroupDataResult = server.GetSharedGroupData(getRequest);
CheckValidPlayer(currentPlayerId, args.sharedGroupId, gameData.Members, gameData.Data["currentPlayerTurn"].Value, args.nextPlayerTurn);
var newGameStateJson = UpdateGameState(args.turnData, gameData.Data["gameState"].Value);
var updateRequest: PlayFabServerModels.UpdateSharedGroupDataRequest = {
SharedGroupId: args.sharedGroupId,
Data: {
"gameState": newGameStateJson,
"currentPlayerTurn": args.nextPlayerTurn
}
};
server.UpdateSharedGroupData(updateRequest);
}
function CheckValidPlayer(playFabId: string, sharedGroupId: string, members: Array<string>, currentPlayerTurn: string, nextPlayerTurn: string): void {
var validCurPlayer = false;
var validNextPlayer = false;
for (var m = 0; m < members.length; m++) {
if (members[m] === playFabId)
validCurPlayer = true;
if (members[m] === nextPlayerTurn)
validNextPlayer = true;
}
if (!validCurPlayer || !validNextPlayer) // Take extreme action against a player trying to cheat
{
server.BanUsers({ Bans: [{ PlayFabId: playFabId, Reason: "Trying to play a game you don't belong to: " + sharedGroupId }] });
throw "You have been banned";
}
if (playFabId !== currentPlayerTurn)
// May wish to additionally implement a spam-counter here and potentially take more extreme action for high-spam count
throw "Not your turn";
}
function UpdateGameState(turnData: any, currentState: string): string {
// PSEUDO-CODE-STUB: Update the turn-based game state according to the rules of this game
return JSON.stringify({});
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
