交易快速入门

注意

本快速入门假设您已熟悉目录和物品栏物品。 示例玩家必须已拥有其希望交易的物品栏物品。

第一步是调用 OpenTrade API,使得其他玩家可以参与交易。 您需要一个 playfabId 来识别礼品接收人以及当前在其物品栏中拥有此物品的玩家的 ItemInstanceID

secondPlayerId:这是标识礼品收件人 (PlayFabId) 的唯一字符串。

myItemInstanceId:这是标识当前玩家拥有的物品实例 (InstanceID) 的唯一字符串。

void GiveItemTo(string secondPlayerId, string myItemInstanceId) {
    PlayFabClientAPI.OpenTrade(new OpenTradeRequest {
        AllowedPlayerIds = new List<string> { secondPlayerId }, // PlayFab ID for the friend who will receive your gift
        OfferedInventoryInstanceIds = new List<string> { myItemInstanceId } // The item instanceId fetched from GetUserInventory()
    }, LogSuccess, LogFailure);
}

注意

所有交易都是公开信息。 任何玩家都可以查看另一位玩家尚未结束的交易,以及另一位玩家的交易历史记录(如果他们知道此玩家的 playFabId)。

在此代码段中,LogSuccess 回调还必须评估 result.Trade.TradeId,并将 firstPlayFabIdtradeId 传递给第二位玩家。 如果未保存,第二位玩家将无法进行评估或接受交易。

注意

在当前预览版中,您需要确保交易对于并发操作是线程安全的。 线程安全选项包括通过 CloudScript 对外部数据库/系统自定义游戏服务器和 Webhook 调用。 可以使用 CloudScript(可直接修改玩家数据键)构建线程安全选项。 后一种选项存在并发问题 - 可能无法正确处理对交易列表的同步更新。

第一位玩家创建交易并将其 playFabIdtradeId 传递给第二位玩家后,第二位玩家可以通过发出 GetTradeStatus 请求来检查交易要求(验证是否为礼品)。

注意

最相关的 TradeStatus 值是 OpenFilledCanceled。 所有其他状态都是中间状态。 在多个调用之间,交易可能会在这些中间状态下停留较长时间。 新近修改的交易可能无法立即获取。

void ExamineTrade(string firstPlayFabId, string tradeId) {
    PlayFabClientAPI.GetTradeStatus(new GetTradeStatusRequest {
        OfferingPlayerId = firstPlayFabId,
        TradeId = tradeId
    }, LogSuccess, LogFailure);
}

If the requirements of that trade are acceptable, the gift can be accepted using AcceptTrade
C# snip
void AcceptGiftFrom(string firstPlayFabId, string tradeId) {
    PlayFabClientAPI.AcceptTrade(new AcceptTradeRequest {
        OfferingPlayerId = firstPlayFabId,
        TradeId = tradeId
    }, LogSuccess, LogFailure);
}

完成后,上面的 AcceptGiftFrom 函数会将赠予物品从第一位玩家的物品栏转移到第二位玩家的物品栏。