API Call Results { "code": 200, "status": "OK", "data": { "Trade": { "Status": "Open", "TradeId": "B4AFB68C4CA85DFF", "OfferingPlayerId": "FBA03846D482A778", "OfferedInventoryInstanceIds": [ "7141375AF4A7038A" ], "OfferedCatalogItemIds": [ "girl-hair-02" ], "AllowedPlayerIds": [ "FBA03846D482A778", "7E7095808E3218BC" ], "OpenedAt": "2017-08-23T17:36:51.907Z" } }, "CallBackTimeMS": 470 }
TitleID: EFA2
TradeID: B4AFB68C4CA85DFF
Player who opened trade: FBA03846D482A778
Send to player: 7E7095808E3218BC
How?
We use normal "OpenTrade", like so:
OpenTradeRequest requesti = new OpenTradeRequest(); List<string> items = new List<string>(); esineet.Add(lahja); (iteminstanceID) List<string> TradePersons = new List<string>(); TradePersons.Add(FBMana.pf_uid); (playfabID for player who is sending item) TradePersons.Add(kaveri_id); (playfabID for player who receives item) requesti.OfferedInventoryInstanceIds = items; requesti.AllowedPlayerIds = TradePersons; PlayFabClientAPI.OpenTrade(requesti, Onnistunut, OnPlayFabError);
After that I launch cloud script function as follow:
handlers.LisaaTradi = function(args) { var str = args; var pid = str.split(":")[0]; var GetUserData = server.GetUserData ({ PlayFabId: pid, Keys: ["Trading_Lista"] }); var TradingID = GetUserData.Data["Trading_Lista"].Value; if (TradingID.length < 4) { var updateUserDataResult = server.UpdateUserData({ PlayFabId: pid, Data: { Trading_Lista: str.split(":")[1]} }); } else { var updateUserDataResult = server.UpdateUserData({ PlayFabId: pid, Data: { Trading_Lista: TradingID+","+str.split(":")[1]} }); } };
In short, we save TradeID to receiving player UserData in field "Trading_Lista", if list has nothing, we use black magic to correct so that first TradeID is always in correct format (this works, even if me explaining does not).
Then we player (who is receiving these items) wants to check in-game, we call simple function
string tradetukset = result.Data["Trading_Lista"].Value; string[] splittaa = tradetukset.Split(','); for (int t = 0; t < splittaa.Length; t++) { GameObject paita = Instantiate(Resources.Load("TavaraLahja") as GameObject); Debug.Log(splittaa[t]); paita.transform.SetParent(LahjatGrid.transform); paita.GetComponent<TavaraDetails>().vaihtoID = splittaa[t]; paita.transform.name = splittaa[t]; paita.transform.localScale = new Vector3(1, 1, 1); }
In short, this turns UserData field "Trading_Lista" into single Trading ID's for us to loop, such as
1) 9722405FBA39A518,31EE04F1DB4A0CE0
2) AAD79A8604313835,F866068A2D270DEC
3) 5A3FD4E9BD2E15F2
etc...
All the trading ID's are correct, made sure by using https://api.playfab.com/documentation/client/method/GetTradeStatus and "try api", all sends "Ok" status.
After user clicks gift icon, we launch yet another function
public void HyvaksyLahja (string TradeID_ToApprove) { AcceptTradeRequest approved_trade = new AcceptTradeRequest(); approved_trade.TradeId = TradeID_ToApprove; PlayFabClientAPI.AcceptTrade(approved_trade TradeConfirm, OnPlayFabError); }
but with last function, we get always error "TradeDoesNotExist".
1) TradeID and player PlayFabID's are correct.
2) Correct items (and ItemID) are send, as they are removed from player inventory as they should.
3) I can see trade I opened fine.
4) I can successfully loop opentrades for players who is receiving them, with correct TradingID's.
5) Player who is supposed to receive my gift, cant open them due to "TradeDoesNotExist" error.
Hopefully any of this made sense.