question

Muhammad Roshaan Tariq avatar image
Muhammad Roshaan Tariq asked

Edit/Update Player JSON Array/List on cloudscript?

Hi, I am coding some functions in cloudscript and I have a certain requirement to deduct player quantities from the below mentioned JSON

Now I only want to access the second index of this array/list and deduct the quantity by 1 factor from this JSON, Is there any way I can do this on cloudscript? I have already implemented this on client side but I want to shift it from client to server side because this data is sensitive in my game.

Player DataCloudScript
a3e02.png (17.5 KiB)
10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

1 Answer

·
Hernando avatar image
Hernando answered

CloudScript is based on JavaScript V8 engine, so you completely do it in JS way.

First using the following statement to parse the JSON string and construct the JavaScript object:

var myObject= JSON.parse(myJsonString);

Then, deducting the quantity of second index by 1 factor:

myObject.PetFoods[1].quantity--;
3 comments
10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Muhammad Roshaan Tariq avatar image Muhammad Roshaan Tariq commented ·

@Hernando

And how can I assign the value back to player data?

0 Likes 0 ·
Muhammad Roshaan Tariq avatar image Muhammad Roshaan Tariq commented ·

And how can I loop on this JSON Array/List? I have tried this code but it's not working for me

handlers.subtractUserPetTreat = function(args,context){
    var playerOldBackpackData = server.GetUserData({
       PlayFabId: currentPlayerId,
       Keys: ["playerBackpack"]
    });
    
    var playerOldBackpackDataObject = JSON.parse(playerOldBackpackData.Data.playerBackpack.Value);
    
    for(i =0;i<playerOldBackpackData.petFoods.Length;i++){
        if(playerOldBackpackData.petFoods[i].name == args.treatName){
            playerOldBackpackData.petFoods[i].quantity--;
        }
    }
    
    var playerNewBackpackData = JSON.stringify(playerOldBackpackData);
    var updatePlayerBackpack = server.UpdateUserData({
       PlayFabId: currentPlayerId,
       Data: {
           "playerBackpack": playerNewBackpackData
       }
    });
    
    return updatePlayerBackpack;
}

0 Likes 0 ·
Muhammad Roshaan Tariq avatar image Muhammad Roshaan Tariq Muhammad Roshaan Tariq commented ·

The code is now working, there was a variable name mixed up that's why it wasn't working before. The correct and running code is below

handlers.subtractUserPetTreat = function(args,context){
    var playerOldBackpackData = server.GetUserData({
       PlayFabId: currentPlayerId,
       Keys: ["playerBackpack"]
    });
    
    var playerOldBackpackDataObject = JSON.parse(playerOldBackpackData.Data.playerBackpack.Value);
    
    for(var i =0;i<playerOldBackpackDataObject.petFoods.length;i++){
        if(playerOldBackpackDataObject.petFoods[i].name == args.treatName){
            playerOldBackpackDataObject.petFoods[i].quantity = playerOldBackpackDataObject.petFoods[i].quantity-1;
        }
    }
    
    var playerNewBackpackData = JSON.stringify(playerOldBackpackDataObject);
    var updatePlayerBackpack = server.UpdateUserData({
      PlayFabId: currentPlayerId,
      Data: {
          "playerBackpack": playerNewBackpackData
      }
    });
    
    return updatePlayerBackpack;
}

0 Likes 0 ·

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.