/* * Find the entity group for the player's wish list, or create one if does not exist * * @param player_entityKeyId: the entity ID of the player; for a title entity the ID should be; * in most cases, this can be found in LoginResult.EntityToken.Entity.Id * @param player_entityKeyType: the entity type of the player whose wish list we are searching * for; should be title_player_account entity in most cases * */ public static void FindOrCreateWishList(string player_entityKeyId, string player_entityKeyType) { PlayFab.DataModels.EntityKey ent = new PlayFab.DataModels.EntityKey { Id = player_entityKeyId, Type = player_entityKeyType }; var req = new PlayFab.DataModels.GetObjectsRequest { Entity = ent }; PlayFabDataAPI.GetObjects(req, result => { if (!result.Objects.ContainsKey("wishlist")) { // Empty so need to create CreateEntityWishList(); } else { string wl = (string)result.Objects["wishlist"].DataObject; // Exists so can set up store StoreSetup.SetUpStore(wl, false); } }, error => { Debug.LogError(error.GenerateErrorReport()); }); }
/* * * Execute a PlayFab Cloud Script function to update the group entity object data to the * updated CSV. Title-level data should not be changed directly from the client. * * @param dataobj: the updated CSV; the Cloud Script function sets the entity group object data to * this value. * @param item_id: ItemID of the item that was either added or removed * */ private void UpdateObject(string dataobj, bool adding_item, string item_id) { PlayFab.DataModels.EntityKey entity = new PlayFab.DataModels.EntityKey { Id = LoginClass.getPlayerEntityKeyId(), Type = LoginClass.getPlayerEntityKeyType() }; List <PlayFab.DataModels.SetObject> ObjList = new List <PlayFab.DataModels.SetObject>(); ObjList.Add( new PlayFab.DataModels.SetObject { ObjectName = "wishlist", DataObject = dataobj } ); var request = new PlayFab.DataModels.SetObjectsRequest { Entity = entity, Objects = ObjList }; PlayFabDataAPI.SetObjects(request, result => { if (adding_item) { StoreSetup.SetUpStore(item_id, false); } else { StoreSetup.SetUpStore(item_id, true); } }, error => { Debug.LogError(error.GenerateErrorReport()); }); }
//UTILS //Retruns a new GetObjectsRequest with with EscapedDataObject set private static GetObjectsRequest CreateGetCharacterObjectRequestEscaped(PlayFab.DataModels.EntityKey characterEntityKey) { return(new GetObjectsRequest { Entity = characterEntityKey, EscapeObject = true }); }
/* * * If the item is on the wish list, remove it. If the item is not on the wish list, add it. * * @param item_id: ItemID of the item to be added to or remove from the wishlist * * This function gets the "wishlist" object from the entity group data. If the item is on the wish list, * this function updates the CSV by removing it. If the item is not on the wish list, this function * updates the CSV by adding it. It then calls UpdateGroupObject, which updates the actual entity group data. * */ public void UpdateWishlist(string item_id) { /* Create entity key and request to get object data from group. */ PlayFab.DataModels.EntityKey group_ek = new PlayFab.DataModels.EntityKey { Id = WishList.group_entityKeyId, Type = WishList.group_entityKeyType }; GetObjectsRequest getObjectsRequest = new GetObjectsRequest { Entity = group_ek }; /* GetObjects to get the wish list in CSV form. */ PlayFabDataAPI.GetObjects(getObjectsRequest, objectResult => { string wl; bool adding_item; // This tells us whether we are adding or removing an item from the wish list if (!string.IsNullOrEmpty((string)objectResult.Objects["wishlist"].DataObject)) { wl = (string)objectResult.Objects["wishlist"].DataObject; // string of the CSV of items on the wish list if (!WishlistContainsItem(wl, item_id)) { /* Wish list does not contain the item, so we must add it. */ wl = AddItemToCSV(wl, item_id); adding_item = true; } else { /* Wish list contains item, so we must remove it. */ wl = RemoveItemFromCSV(wl, item_id); adding_item = false; } } else { wl = item_id; adding_item = true; } /* UpdateGroupObject is where the entity group data is actually updated */ UpdateGroupObject(wl, adding_item, item_id); }, error => { Debug.LogError(error.GenerateErrorReport()); }); }
void RetrieveCharacterData(ushort ConnectedClientID, string characterID) { PlayFab.DataModels.EntityKey characterEntityKey = CreateKeyForEntity(characterID, "character"); GetObjectsRequest getObjectsRequest = CreateGetCharacterObjectRequestEscaped(characterEntityKey); PlayFabDataAPI.GetObjects(getObjectsRequest, result => { PlayFabCharacterData characterData = PlayFabSimpleJson.DeserializeObject <PlayFabCharacterData>(result.Objects["CharacterData"].EscapedDataObject); Debug.Log($"character position for retrieved character: {characterData.WorldPositionX}, {characterData.WorldPositionY}, {characterData.WorldPositionZ}"); characterData.SetWorldPosition(characterData.WorldPositionX, characterData.WorldPositionY, characterData.WorldPositionZ); Debug.Log($"character position AS VECTOR 3 for retrieved character: {characterData.WorldPosition.ToString()}"); SetCurrentCharacterDataForConnectedClient(ConnectedClientID, characterData); }, error => { Debug.Log("Error setting player info from PlayFab result object"); Debug.Log(error.ErrorMessage); }); }
void SaveCharacterData(PlayFabCharacterData characterData) { var dataList = new List <SetObject>(); dataList.Add(ReturnNewSetObject("CharacterData", SetCharacterInfoData(characterData))); PlayFab.DataModels.EntityKey characterEntityKey = CreateKeyForEntity(characterData.CharacterID, "character"); SetObjectsRequest setCharacterObjectDataRequest = new SetObjectsRequest() { Entity = characterEntityKey, Objects = dataList }; PlayFabDataAPI.SetObjects(setCharacterObjectDataRequest, result => { if (characterData.IsInitialCharacterData) { ushort clientID = ReturnClientConnectionByPlayFabCharacterID(characterData); if (clientID != 9999) { ServerManager.Instance.SendToClient(clientID, Tags.RegisterNewCharacterResponse, new RegisterNewCharacterResponseData(true)); } else { ServerManager.Instance.SendToClient(clientID, Tags.RegisterNewCharacterResponse, new RegisterNewCharacterResponseData(false)); } } }, error => { Debug.Log($"Failed to save character state data"); Debug.Log(error.ErrorMessage); Debug.Log(error.ErrorDetails); }); }
/* * * If the wish list does not exist, we create an entity object for the player. * */ private static void CreateEntityWishList() { PlayFab.DataModels.EntityKey entity = new PlayFab.DataModels.EntityKey { Id = LoginClass.getPlayerEntityKeyId(), Type = LoginClass.getPlayerEntityKeyType() }; /* SetObjects takes in a list of type SetObject. These will contain the objects that we want to set. */ List <PlayFab.DataModels.SetObject> ObjList = new List <PlayFab.DataModels.SetObject>(); /* * We will add an object of type wishlist. The DataObject is empty because we are initializing the entity object, * as it does not exist. We do not have any ItemId's to add to the wish list yet. */ ObjList.Add( new PlayFab.DataModels.SetObject { ObjectName = "wishlist", DataObject = "" } ); var request = new PlayFab.DataModels.SetObjectsRequest { Entity = entity, Objects = ObjList }; /* Call PlayFab SetObjects to set the object data for the player entity. */ PlayFabDataAPI.SetObjects(request, result => { /* The title player now has a wishlist object. */ Debug.Log("Set object successful"); }, error => { Debug.LogError(error.GenerateErrorReport()); }); }
/* * Find the entity group for the player's wish list, or create one if does not exist * * @param player_entityKeyId: the entity ID of the player; for a title entity the ID should be; * in most cases, this can be found in LoginResult.EntityToken.Entity.Id * @param player_entityKeyType: the entity type of the player whose wish list we are searching * for; should be title_player_account entity in most cases * * Upon login, this function examines all entity groups that the player belongs to. For each group, * the group name is compared to the nomenclature for wish list groups. If the group is not found, * then one is created */ public static void FindOrCreateWishList(string player_entityKeyId, string player_entityKeyType) { /* Create entity key for the ListMembership request */ PlayFab.GroupsModels.EntityKey entity = new PlayFab.GroupsModels.EntityKey { Id = player_entityKeyId, Type = player_entityKeyType }; var request = new ListMembershipRequest { Entity = entity }; PlayFabGroupsAPI.ListMembership(request, membershipResult => { bool found = false; // Will tell us whether the wish list entity group exists /* * Iterate through all groups the player belongs to. If the wish list entity group exists, * it should be one of these groups */ for (int i = 0; i < membershipResult.Groups.Count; i++) { string group_name = LoginClass.getPlayerEntityKeyId() + "wishlist"; /* Compare the name of the group to the nomenclature the wish list entity group name will follow */ if (membershipResult.Groups[i].GroupName.Equals(group_name)) { found = true; // If the name matches, we found the wish list entity group /* Set the wish list group's entity ID and entity type so we can access the group in other functions */ WishList.group_entityKeyId = membershipResult.Groups[i].Group.Id; WishList.group_entityKeyType = membershipResult.Groups[i].Group.Type; PlayFab.DataModels.EntityKey group_ek = new PlayFab.DataModels.EntityKey { Id = membershipResult.Groups[i].Group.Id, Type = membershipResult.Groups[i].Group.Type }; GetObjectsRequest getObjectsRequest = new GetObjectsRequest { Entity = group_ek }; /* This is the wish list entity group. To get the wish list CSV, we need to get the object in that entity * group with the "wishlist" key */ PlayFabDataAPI.GetObjects(getObjectsRequest, objectResult => { if (!string.IsNullOrEmpty((string)objectResult.Objects["wishlist"].DataObject)) { string wl = (string)objectResult.Objects["wishlist"].DataObject; /* Set up the Unity game store. Specifically, change colors and button text if an item is on the wishlist */ StoreSetup.SetUpStore(wl, false); } }, error => { Debug.LogError(error.GenerateErrorReport()); }); } } // AddPlayFabIdToGroup(); // Where should this go? /* Wish list entity group does not exist, so create one */ if (!found) { /* * Wish list entity groups should follow the following nomenclature: * [PlayFab title ID] + "wishlist. * * This nomenclature allows us to find the group by name in the future. */ string group_name = LoginClass.getPlayerEntityKeyId() + "wishlist"; CreateWishlist(group_name); } }, error => { Debug.LogError(error.GenerateErrorReport()); }); }
public override void OnStartLocalPlayer() { if (LoginManager.instance.isGuest) { isGuest = true; CmdSetupPlayer("guest " + NetworkClient.connection.identity.netId, new Color(1f, 1f, 1f), Random.ColorHSV()); CmdSendLoginMessage(); return; } var userDataRequest = new GetUserDataRequest() { Keys = new List <string> { "rights" } }; PlayFabClientAPI.GetUserData(userDataRequest, result => { if (result.Data == null) { return; } if (result.Data.ContainsKey("rights")) { rights = Int16.Parse(result.Data["rights"].Value); } }, (error) => { Debug.Log("Got error retrieving user data:"); Debug.Log(error.GenerateErrorReport()); }); Color nameColor; Color matColor = Random.ColorHSV(); string playerUserName; string email = String.IsNullOrEmpty(LoginManager.instance.emailField.text) ? PlayerPrefs.GetString("email") : LoginManager.instance.emailField.text; var accInfoRequest = new PlayFab.ClientModels.GetAccountInfoRequest { Email = email }; PlayFabClientAPI.GetAccountInfo(accInfoRequest, (getResult) => { playerUserName = getResult.AccountInfo.Username; if (rights > 1) { nameColor = new Color(255f, 174f, 0f); } else { nameColor = new Color(1f, 1f, 1f); } CmdSetupPlayer(playerUserName, nameColor, matColor); CmdSendLoginMessage(); }, (error) => { Debug.LogError(error); NetworkManager.singleton.StopClient(); }); playerEntity = LoginManager.instance.playerEntity; }