question

Turov Kirill avatar image
Turov Kirill asked

Buy character item by user virtual currency

Hi all.

How can i PurchaseItem to character from client API by User Virtual Currency?

I use

PurchaseItemRequest request = new PurchaseItemRequest() { AuthenticationContext = authenticationContext, CharacterId = characterId, ItemId = itemId, VirtualCurrency = currency, Price = price };
            
            PlayFabClientAPI.PurchaseItem(request, 
                (PurchaseItemResult result) => 
                { 
                    if (callback != null) 
                    { 
                        callback(true); 
                    }
                    OnPurchaseItemResult(result); 
                }, 


                (PlayFabError error) => 
                { 
                    if (callback != null) 
                    { 
                        callback(true); 
                    }
                    OnPurchaseItemError(error); 
                });

But my character has not virtual currency, because virtual currency is common.

How can i purchase item for character but by player virtual currency?

Or how can i purchase item for player (it's simple) and then move it to character? )

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

·
Sarah Zhang avatar image
Sarah Zhang answered

>> Or how can i purchase item for player (it's simple) and then move it to character?

If you mean only players can have virtual currency and one player can have multiple characters that share the player’s virtual currency. There is a Server API MoveItemToCharacterFromUsercan move an item from a user's inventory into their character's inventory.

Since all Server API can be accessed by CloudScript. You can construct a CloudScript function to call this API to move the player’s items to the character, then call it via ExecuteCloudScript on clients.

handlers.moveItemToCharacterFromUser = function (args, context) {

    if (args && args.CharacterId && args.ItemInstanceId)
        var request = {
            PlayFabId: currentPlayerId,
            CharacterId: args.CharacterId,
            ItemInstanceId: args.ItemInstanceId
        };
    var moveItemResult = server.MoveItemToCharacterFromUser(request);
    return {
        moveItemResult: moveItemResult
    };
};

When you call ExecuteCloudScript on clients, you should provide the CharacterId, ItemInstanceId K/V pairs as args.

var purchaseRequest = new PurchaseItemRequest {
    ItemId =
        "LegendaryArmor", VirtualCurrency = "GC", Price = 500
};
PlayFabClientAPI.PurchaseItem(purchaseRequest,
    (PurchaseItemResult purchseResult) => {
        Debug.Log(purchseResult.Items[0].ItemInstanceId);
        var moveItemRequest = new ExecuteCloudScriptRequest {
            FunctionName
                = "moveItemToCharacterFromUser",
                FunctionParameter = new Dictionary < string, string > {
                    {
                        "CharacterId",
                        characterId
                    },
                    {
                        "ItemInstanceId",
                        purchseResult.Items[0].ItemInstanceId
                    }
                }
        };
        PlayFabClientAPI.ExecuteCloudScript(moveItemRequest,
            (ExecuteCloudScriptResult executeCloudScriptResult) => {},
            (PlayFabError cloudscriptError) => {});
    },
    (PlayFabError error) => {});

1 comment
10 |1200

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

Turov Kirill avatar image Turov Kirill commented ·

Thanks, i got it.

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.