On GameSparks, there are scripts that have player context and scripts that don't have player context. In this article, we'll run through both types and talk a little about why player context is important.


Scripts with and Scripts without Player Context

Scripts with Player Context

Scripts that have player context are:

  • LogEventRequests and LogChallengeEventRequests Cloud Code Scripts (when the event is sent from the client).
  • User Message Cloud Code Scripts
  • A Callback URL script can have player context if a playerId is part of the url. See our guide on Callbacks here for more details.
  • Scheduled Module Cloud Code Scripts
  • Player Connected System Cloud Code Script
  • Player Disconnected System Cloud Code Script


Scripts without Player Context

Scripts that don't have player context include:

  • System Cloud Code Scripts not specified above.
    • Every day
    • Every Minute
    • Every Hour
    • Game Published
  • Global Message Cloud Code Scripts (see here for the difference between Global and User messages)


Typical Use Cases using Player Context

Player context in a script is useful because it allows the script to make use of the SparkPlayer API. Access to this API serves some very typical use cases:

  • Performing Additional Checks in Logic
  • Using the Player Object's scriptData and privateData
  • Accessing Stored Player Data


Additional Checks in Logic


With player context, you can add some additional checks in your logic. For example:


//check if the user has 3 or more of the vgood type gold
var vgCheck = Spark.getPlayer().hasVGood("gold")

if(vgCheck >= 3){
    //do this
}

//check if a user has this achievement
var achCheck = Spark.getPlayer().hasAchievement("achievement")

if (achCheck == true){
    //do this
}



Using the Player Object's scriptData and privateData


Having player context in a script will also let you make use of the player object's scriptData and privateData fields:


//scriptData
//set some scriptdata to the player
Spark.getPlayer().setScriptData("myScriptData", "value")

//get the scriptData value
Spark.getPlayer().getScriptData("myScriptData")


//privateData
//set some privateData to the player
Spark.getPlayer().setPrivateData("myPrivateData", "value")

//get the privateData value
Spark.getPlayer().setPrivateData("myPrivateData")



Accessing Stored Player Data


When storing player data in a data type, it's a good idea to use playerId as the id for the document that you are storing. Doing this will allow you to easily access the document in Cloud Code and you'll know the id is unique to that player:


//Get Game Service Data API

var API = Spark.getGameDataService();

//create a document using the player id as the id
var entry = API.createItem("player", Spark.getPlayer().getPlayerId() );

//create some test data to add
var data = {"test":"data"}

//persist the data
entry.persistor().persist()


If you need to store multiple documents for a player, then you could use the playerId field as one of your indexed fields and query by that indexed field to return the documents. See here for details on how to set up your game data types.