using UnityEngine; using System.Collections; using PlayFab; using PlayFab.ClientModels; using System; using UnityEngine.SceneManagement; using Facebook.Unity; using System.Collections.Generic; using ExitGames.Client.Photon.Chat; using ExitGames.Client.Photon; using UnityEngine.UI; using System.Text.RegularExpressions; using AssemblyCSharp; using System.Globalization; public class PlayFabManager : Photon.PunBehaviour, IChatClientListener { private Sprite[] avatarSprites; public string PlayFabId; public string authToken; public bool multiGame = true; public bool roomOwner = false; private FacebookManager fbManager; public GameObject fbButton; private FacebookFriendsMenu facebookFriendsMenu; public ChatClient chatClient; private bool alreadyGotFriends = false; public GameObject menuCanvas; public GameObject MatchPlayersCanvas; public GameObject splashCanvas; public bool opponentReady = false; public bool imReady = false; public GameObject playerAvatar; public GameObject playerName; public GameObject backButtonMatchPlayers; public GameObject loginEmail; public GameObject loginPassword; public GameObject loginInvalidEmailorPassword; public GameObject loginCanvas; public GameObject regiterEmail; public GameObject registerPassword; public GameObject registerNickname; public GameObject registerInvalidInput; public GameObject registerCanvas; public GameObject resetPasswordEmail; public GameObject resetPasswordInformationText; public bool isInLobby = false; public bool isInMaster = false; private void Awake() { Debug.Log("Playfab awake"); //PlayerPrefs.DeleteAll(); PhotonNetwork.PhotonServerSettings.HostType = ServerSettings.HostingOption.PhotonCloud; PhotonNetwork.PhotonServerSettings.PreferredRegion = CloudRegionCode.eu; // PhotonNetwork.PhotonServerSettings.HostType = ServerSettings.HostingOption.BestRegion; // PhotonNetwork.PhotonServerSettings.AppID = StaticStrings.PhotonAppID; #if UNITY_IOS PhotonNetwork.PhotonServerSettings.Protocol = ConnectionProtocol.Tcp; #else PhotonNetwork.PhotonServerSettings.Protocol = ConnectionProtocol.Udp; #endif Debug.Log("PORT: " + PhotonNetwork.PhotonServerSettings.ServerPort); PlayFabSettings.TitleId = StaticStrings.PlayFabTitleID; PhotonNetwork.OnEventCall += this.OnEvent; DontDestroyOnLoad(transform.gameObject); } private void OnDestroy() { PhotonNetwork.OnEventCall -= this.OnEvent; } public void destroy() { if (this.gameObject != null) DestroyImmediate(this.gameObject); } // Use this for initialization private void Start() { Debug.Log("Playfab start"); PhotonNetwork.BackgroundTimeout = StaticStrings.photonDisconnectTimeoutLong; ; GameManager.Instance.playfabManager = this; fbManager = GameObject.Find("FacebookManager").GetComponent(); facebookFriendsMenu = GameManager.Instance.facebookFriendsMenu; avatarSprites = GameObject.Find("StaticGameVariablesContainer").GetComponent().avatars; } private void Update() { if (chatClient != null) { chatClient.Service(); } } // handle events: private void OnEvent(byte eventcode, object content, int senderid) { Debug.Log("Received event: " + (int)eventcode + " Sender ID: " + senderid); if (eventcode == (int)EnumPhoton.BeginPrivateGame) { //StartGame(); LoadGameScene(); } else if (eventcode == (int)EnumPhoton.StartWithBots && senderid != PhotonNetwork.player.ID) { LoadBots(); } else if (eventcode == (int)EnumPhoton.StartGame) { //Invoke("LoadGameWithDelay", UnityEngine.Random.Range(1.0f, 5.0f)); //PhotonNetwork.LeaveRoom(); LoadGameScene(); } else if (eventcode == (int)EnumPhoton.ReadyToPlay) { GameManager.Instance.readyPlayersCount++; //LoadGameScene(); } } public void LoadGameWithDelay() { LoadGameScene(); } public override void OnMasterClientSwitched(PhotonPlayer newMasterClient) { if (GameManager.Instance.controlAvatars != null && GameManager.Instance.type == MyGameType.Private) { PhotonNetwork.LeaveRoom(); GameManager.Instance.controlAvatars.ShowJoinFailed("Room closed"); } else { if (newMasterClient.NickName == PhotonNetwork.player.NickName) { Debug.Log("Im new master client"); WaitForNewPlayer(); } } } public void StartGame() { // while (!opponentReady || !imReady /*|| (!GameManager.Instance.roomOwner && !GameManager.Instance.receivedInitPositions)*/) // { // yield return 0; // } PhotonNetwork.room.IsOpen = false; PhotonNetwork.room.IsVisible = false; CancelInvoke("StartGameWithBots"); Invoke("startGameScene", 3.0f); //startGameScene(); } private IEnumerator waitAndStartGame() { // while (!opponentReady || !imReady /*|| (!GameManager.Instance.roomOwner && !GameManager.Instance.receivedInitPositions)*/) // { // yield return 0; // } while (GameManager.Instance.readyPlayers < GameManager.Instance.requiredPlayers - 1 || !imReady /*|| (!GameManager.Instance.roomOwner && !GameManager.Instance.receivedInitPositions)*/) { yield return 0; } startGameScene(); GameManager.Instance.readyPlayers = 0; opponentReady = false; imReady = false; } public void startGameScene() { if (GameManager.Instance.currentPlayersCount >= GameManager.Instance.requiredPlayers || GameManager.Instance.type == MyGameType.Private) { LoadGameScene(); if (GameManager.Instance.type == MyGameType.Private) { PhotonNetwork.RaiseEvent((int)EnumPhoton.BeginPrivateGame, null, true, null); } else { PhotonNetwork.RaiseEvent((int)EnumPhoton.StartGame, null, true, null); } } else { if (PhotonNetwork.isMasterClient) WaitForNewPlayer(); } } public void LoadGameScene() { GameManager.Instance.GameScene = "GameScene"; if (!GameManager.Instance.gameSceneStarted) { AdsManager.instance.HideBanner(); SceneManager.LoadScene(GameManager.Instance.GameScene); GameManager.Instance.gameSceneStarted = true; } } public void WaitForNewPlayer() { if (PhotonNetwork.isMasterClient && GameManager.Instance.type != MyGameType.Private) { AdsManager.instance.ShowBanner(); Debug.Log("START INVOKE"); CancelInvoke("StartGameWithBots"); Invoke("StartGameWithBots", StaticStrings.WaitTimeUntilStartWithBots); } } public void StartGameWithBots() { if (PhotonNetwork.isMasterClient) { if (PhotonNetwork.room.PlayerCount < GameManager.Instance.requiredPlayers) { Debug.Log("Master Client"); // PhotonNetwork.RaiseEvent((int)EnumPhoton.StartWithBots, null, true, null); LoadBots(); } } else { Debug.Log("Not Master client"); } } public void LoadBots() { Debug.Log("Close room - add bots"); PhotonNetwork.room.IsOpen = false; PhotonNetwork.room.IsVisible = false; if (PhotonNetwork.isMasterClient) { Invoke("AddBots", 3.0f); } else { AddBots(); } } public void AddBots() { // Add Bots here Debug.Log("Add Bots with delay"); if (PhotonNetwork.room.PlayerCount < GameManager.Instance.requiredPlayers) { if (PhotonNetwork.isMasterClient) { PhotonNetwork.RaiseEvent((int)EnumPhoton.StartWithBots, null, true, null); } for (int i = 0; i < GameManager.Instance.requiredPlayers - 1; i++) { if (GameManager.Instance.opponentsIDs[i] == null) { StartCoroutine(AddBot(i)); } } } } public IEnumerator AddBot(int i) { yield return new WaitForSeconds(i + UnityEngine.Random.Range(0.0f, 0.9f)); GameManager.Instance.opponentsAvatars[i] = avatarSprites[UnityEngine.Random.Range(0, avatarSprites.Length - 1)]; GameManager.Instance.opponentsIDs[i] = "_BOT" + i; GameManager.Instance.opponentsNames[i] = "Guest" + UnityEngine.Random.Range(100000, 999999); Debug.Log("Name: " + GameManager.Instance.opponentsNames[i]); GameManager.Instance.controlAvatars.PlayerJoined(i, "_BOT" + i); } public void resetPassword() { resetPasswordInformationText.SetActive(false); SendAccountRecoveryEmailRequest request = new SendAccountRecoveryEmailRequest() { TitleId = PlayFabSettings.TitleId, Email = resetPasswordEmail.GetComponent().text }; PlayFabClientAPI.SendAccountRecoveryEmail(request, (result) => { resetPasswordInformationText.SetActive(true); resetPasswordInformationText.GetComponent().text = "Email sent to your address. Check your inbox"; }, (error) => { resetPasswordInformationText.SetActive(true); resetPasswordInformationText.GetComponent().text = "Account with specified email doesn't exist"; }); } public void setInitNewAccountData(bool fb) { Dictionary data = MyPlayerData.InitialUserData(fb); GameManager.Instance.myPlayerData.UpdateUserData(data); } public void updateBoughtChats(int index) { Dictionary data = new Dictionary(); data.Add(MyPlayerData.ChatsKey, GameManager.Instance.myPlayerData.GetChats() + ";'" + index + "'"); GameManager.Instance.myPlayerData.UpdateUserData(data); } public void UpdateBoughtEmojis(int index) { Dictionary data = new Dictionary(); data.Add(MyPlayerData.EmojiKey, GameManager.Instance.myPlayerData.GetEmoji() + ";'" + index + "'"); GameManager.Instance.myPlayerData.UpdateUserData(data); } public void addCoinsRequest(int count) { Dictionary data = new Dictionary(); data.Add(MyPlayerData.CoinsKey, "" + (GameManager.Instance.myPlayerData.GetCoins() + count)); GameManager.Instance.myPlayerData.UpdateUserData(data); } public void getPlayerDataRequest() { Debug.Log("Get player data request!!"); GetUserDataRequest getdatarequest = new GetUserDataRequest() { PlayFabId = GameManager.Instance.playfabManager.PlayFabId, }; PlayFabClientAPI.GetUserData(getdatarequest, (result) => { Dictionary data = result.Data; GameManager.Instance.myPlayerData = new MyPlayerData(data, true); Debug.Log("Get player data request finish!!"); StartCoroutine(loadSceneMenu()); }, (error) => { Debug.Log("Data updated error " + error.ErrorMessage); }, null); } private IEnumerator loadSceneMenu() { yield return new WaitForSeconds(0.1f); if (isInMaster && isInLobby) { SceneManager.LoadScene("MenuScene"); } else { StartCoroutine(loadSceneMenu()); } } public void RegisterNewAccountWithID() { string email = regiterEmail.GetComponent().text; string password = registerPassword.GetComponent().text; string nickname = registerNickname.GetComponent().text; registerInvalidInput.SetActive(false); if (Regex.IsMatch(email, @"^(?("")("".+?(?= 6 && nickname.Length > 0) { RegisterPlayFabUserRequest request = new RegisterPlayFabUserRequest() { TitleId = PlayFabSettings.TitleId, Email = email, Password = password, RequireBothUsernameAndEmail = false }; PlayFabClientAPI.RegisterPlayFabUser(request, (result) => { PlayFabId = result.PlayFabId; Debug.Log("Got PlayFabID: " + PlayFabId); registerCanvas.SetActive(false); PlayerPrefs.SetString("email_account", email); PlayerPrefs.SetString("password", password); PlayerPrefs.SetString("LoggedType", "EmailAccount"); PlayerPrefs.Save(); GameManager.Instance.nameMy = nickname; setInitNewAccountData(false); UpdateUserTitleDisplayNameRequest displayNameRequest = new UpdateUserTitleDisplayNameRequest() { DisplayName = GameManager.Instance.playfabManager.PlayFabId }; PlayFabClientAPI.UpdateUserTitleDisplayName(displayNameRequest, (response) => { Debug.Log("Title Display name updated successfully"); }, (error) => { Debug.Log("Title Display name updated error: " + error.Error); }, null); Dictionary data = new Dictionary(); data.Add("LoggedType", "EmailAccount"); data.Add("PlayerName", GameManager.Instance.nameMy); GameManager.Instance.myPlayerData.UpdateUserData(data); fbManager.showLoadingCanvas(); GetPhotonToken(); }, (error) => { registerInvalidInput.SetActive(true); registerInvalidInput.GetComponent().text = error.ErrorMessage; Debug.Log("Error registering new account with email: " + error.ErrorMessage + "\n" + error.ErrorDetails); }); } else { registerInvalidInput.SetActive(true); registerInvalidInput.GetComponent().text = "Invalid input specified"; } } public void LinkFacebookAccount() { LinkFacebookAccountRequest request = new LinkFacebookAccountRequest() { AccessToken = Facebook.Unity.AccessToken.CurrentAccessToken.TokenString, ForceLink = true }; PlayFabClientAPI.LinkFacebookAccount(request, (result) => { Dictionary data = new Dictionary(); data.Add("LoggedType", "Facebook"); data.Add("FacebookID", Facebook.Unity.AccessToken.CurrentAccessToken.UserId); data.Add("PlayerAvatarUrl", GameManager.Instance.avatarMyUrl); data.Add(MyPlayerData.PlayerName, GameManager.Instance.nameMy); data.Add(MyPlayerData.AvatarIndexKey, "fb"); data.Add(MyPlayerData.CoinsKey, (GameManager.Instance.myPlayerData.GetCoins() + StaticStrings.CoinsForLinkToFacebook).ToString()); GameManager.Instance.myAvatarGameObject.GetComponent().sprite = GameManager.Instance.facebookAvatar; GameManager.Instance.myNameGameObject.GetComponent().text = GameManager.Instance.nameMy; GameManager.Instance.myPlayerData.UpdateUserData(data); GameManager.Instance.FacebookLinkButton.SetActive(false); }, (error) => { Debug.Log("Error linking facebook account: " + error.ErrorMessage + "\n" + error.ErrorDetails); GameManager.Instance.connectionLost.showDialog(); }); } public void LoginWithFacebook() { LoginWithFacebookRequest request = new LoginWithFacebookRequest() { TitleId = PlayFabSettings.TitleId, CreateAccount = true, AccessToken = Facebook.Unity.AccessToken.CurrentAccessToken.TokenString }; PlayFabClientAPI.LoginWithFacebook(request, (result) => { PlayFabId = result.PlayFabId; Debug.Log("Got PlayFabID: " + PlayFabId); if (result.NewlyCreated) { Debug.Log("(new account)"); setInitNewAccountData(true); Dictionary data1 = new Dictionary(); data1.Add(MyPlayerData.AvatarIndexKey, "fb"); GameManager.Instance.myPlayerData.UpdateUserData(data1); } else { CheckIfFirstTitleLogin(PlayFabId, true); Debug.Log("(existing account)"); } UpdateUserTitleDisplayNameRequest displayNameRequest = new UpdateUserTitleDisplayNameRequest() { DisplayName = GameManager.Instance.playfabManager.PlayFabId }; PlayFabClientAPI.UpdateUserTitleDisplayName(displayNameRequest, (response) => { Debug.Log("Title Display name updated successfully"); }, (error) => { Debug.Log("Title Display name updated error: " + error.Error); }, null); Dictionary data = new Dictionary(); data.Add("LoggedType", "Facebook"); data.Add("FacebookID", Facebook.Unity.AccessToken.CurrentAccessToken.UserId); if (result.NewlyCreated) data.Add("PlayerName", GameManager.Instance.nameMy); else { GetUserDataRequest getdatarequest = new GetUserDataRequest() { PlayFabId = result.PlayFabId, }; PlayFabClientAPI.GetUserData(getdatarequest, (result2) => { Dictionary data2 = result2.Data; if (data2.ContainsKey("PlayerName")) { GameManager.Instance.nameMy = data2["PlayerName"].Value; } else { Dictionary data5 = new Dictionary(); data5.Add("PlayerName", GameManager.Instance.nameMy); data5.Add(MyPlayerData.AvatarIndexKey, "fb"); GameManager.Instance.myPlayerData.UpdateUserData(data5); } }, (error) => { Debug.Log("Data updated error " + error.ErrorMessage); }, null); } data.Add("PlayerAvatarUrl", GameManager.Instance.avatarMyUrl); GameManager.Instance.myPlayerData.UpdateUserData(data); GetPhotonToken(); }, (error) => { Debug.Log("Error logging in player with custom ID: " + error.ErrorMessage + "\n" + error.ErrorDetails); GameManager.Instance.connectionLost.showDialog(); }); } public void CheckIfFirstTitleLogin(string id, bool fb) { GetUserDataRequest getdatarequest = new GetUserDataRequest() { PlayFabId = id, }; PlayFabClientAPI.GetUserData(getdatarequest, (result) => { Dictionary data = result.Data; if (!data.ContainsKey(MyPlayerData.TitleFirstLoginKey)) { Debug.Log("First login for this title. Set initial data"); setInitNewAccountData(fb); } }, (error) => { Debug.Log("Data updated error " + error.ErrorMessage); }, null); } private string androidUnique() { AndroidJavaClass androidUnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject unityPlayerActivity = androidUnityPlayer.GetStatic("currentActivity"); AndroidJavaObject unityPlayerResolver = unityPlayerActivity.Call("getContentResolver"); AndroidJavaClass androidSettingsSecure = new AndroidJavaClass("android.provider.Settings$Secure"); return androidSettingsSecure.CallStatic("getString", unityPlayerResolver, "android_id"); } public void LoginWithEmailAccount() { loginInvalidEmailorPassword.SetActive(false); string email = ""; string password = ""; if (PlayerPrefs.HasKey("email_account")) { email = PlayerPrefs.GetString("email_account"); password = PlayerPrefs.GetString("password"); } else { email = loginEmail.GetComponent().text; password = loginPassword.GetComponent().text; } LoginWithEmailAddressRequest request = new LoginWithEmailAddressRequest() { TitleId = PlayFabSettings.TitleId, Email = email, Password = password }; PlayFabClientAPI.LoginWithEmailAddress(request, (result) => { PlayFabId = result.PlayFabId; Debug.Log("Got PlayFabID: " + PlayFabId); Dictionary data = new Dictionary(); loginCanvas.SetActive(false); PlayerPrefs.SetString("email_account", email); PlayerPrefs.SetString("password", password); PlayerPrefs.SetString("LoggedType", "EmailAccount"); PlayerPrefs.Save(); if (result.NewlyCreated) { Debug.Log("(new account)"); setInitNewAccountData(false); //addCoinsRequest(StaticStrings.initCoinsCount); } else { CheckIfFirstTitleLogin(PlayFabId, false); Debug.Log("(existing account)"); } GetUserDataRequest getdatarequest = new GetUserDataRequest() { PlayFabId = result.PlayFabId, }; PlayFabClientAPI.GetUserData(getdatarequest, (result2) => { Dictionary data2 = result2.Data; if (data2.ContainsKey("PlayerName")) { GameManager.Instance.nameMy = data2["PlayerName"].Value; } else { Dictionary data5 = new Dictionary(); data5.Add("PlayerName", GameManager.Instance.nameMy); GameManager.Instance.myPlayerData.UpdateUserData(data5); } GameManager.Instance.nameMy = data2["PlayerName"].Value; }, (error) => { Debug.Log("Data updated error " + error.ErrorMessage); }, null); fbManager.showLoadingCanvas(); GetPhotonToken(); }, (error) => { loginInvalidEmailorPassword.SetActive(true); Debug.Log("Error logging in player with custom ID: " + error.ErrorMessage); //Debug.Log(error.ErrorMessage); //GameManager.Instance.connectionLost.showDialog(); }); } public void Login() { string customId = ""; if (PlayerPrefs.HasKey("unique_identifier")) { customId = PlayerPrefs.GetString("unique_identifier"); } else { customId = System.Guid.NewGuid().ToString(); PlayerPrefs.SetString("unique_identifier", customId); } Debug.Log("UNIQUE IDENTIFIER: " + customId); LoginWithCustomIDRequest request = new LoginWithCustomIDRequest() { TitleId = PlayFabSettings.TitleId, CreateAccount = true, CustomId = customId //SystemInfo.deviceUniqueIdentifier }; PlayFabClientAPI.LoginWithCustomID(request, (result) => { PlayFabId = result.PlayFabId; Debug.Log("Got PlayFabID: " + PlayFabId); Dictionary data = new Dictionary(); if (result.NewlyCreated) { Debug.Log("(new account)"); setInitNewAccountData(false); string name = result.PlayFabId; name = "Guest"; for (int i = 0; i < 6; i++) { name += UnityEngine.Random.Range(0, 9); } data.Add("PlayerName", name); //addCoinsRequest(StaticStrings.initCoinsCount); } else { CheckIfFirstTitleLogin(PlayFabId, false); Debug.Log("(existing account)"); } // string name = result.PlayFabId; // if (PlayerPrefs.HasKey("GuestPlayerName")) // { // //name = PlayerPrefs.GetString("GuestPlayerName"); // } // else // { // name = "Guest"; // for (int i = 0; i < 6; i++) // { // name += UnityEngine.Random.Range(0, 9); // } // PlayerPrefs.SetString("GuestPlayerName", name); // PlayerPrefs.Save(); // data.Add("PlayerName", name); // } data.Add("LoggedType", "Guest"); UpdateUserTitleDisplayNameRequest displayNameRequest = new UpdateUserTitleDisplayNameRequest() { //DisplayName = name, DisplayName = GameManager.Instance.playfabManager.PlayFabId }; PlayFabClientAPI.UpdateUserTitleDisplayName(displayNameRequest, (response) => { Debug.Log("Title Display name updated successfully"); }, (error) => { Debug.Log("Title Display name updated error: " + error.Error); }, null); GameManager.Instance.myPlayerData.UpdateUserData(data); GameManager.Instance.nameMy = name; PlayerPrefs.SetString("LoggedType", "Guest"); PlayerPrefs.Save(); fbManager.showLoadingCanvas(); GetPhotonToken(); }, (error) => { Debug.Log("Error logging in player with custom ID:"); Debug.Log(error.ErrorMessage); GameManager.Instance.connectionLost.showDialog(); }); } public void GetPlayfabFriends() { if (alreadyGotFriends) { Debug.Log("show firneds FFFF"); if (PlayerPrefs.GetString("LoggedType").Equals("Facebook")) { fbManager.getFacebookInvitableFriends(); } else { facebookFriendsMenu.showFriends(null, null, null); } } else { Debug.Log("IND"); GetFriendsListRequest request = new GetFriendsListRequest(); request.IncludeFacebookFriends = true; PlayFabClientAPI.GetFriendsList(request, (result) => { Debug.Log("Friends list Playfab: " + result.Friends.Count); var friends = result.Friends; List playfabFriends = new List(); List playfabFriendsName = new List(); List playfabFriendsFacebookId = new List(); chatClient.RemoveFriends(GameManager.Instance.friendsIDForStatus.ToArray()); List friendsToStatus = new List(); int index = 0; foreach (var friend in friends) { playfabFriends.Add(friend.FriendPlayFabId); Debug.Log("Title: " + friend.TitleDisplayName); GetUserDataRequest getdatarequest = new GetUserDataRequest() { PlayFabId = friend.TitleDisplayName, }; int ind2 = index; PlayFabClientAPI.GetUserData(getdatarequest, (result2) => { Dictionary data2 = result2.Data; playfabFriendsName[ind2] = data2["PlayerName"].Value; Debug.Log("Added " + data2["PlayerName"].Value); GameManager.Instance.facebookFriendsMenu.updateName(ind2, data2["PlayerName"].Value, friend.TitleDisplayName); }, (error) => { Debug.Log("Data updated error " + error.ErrorMessage); }, null); playfabFriendsName.Add(""); friendsToStatus.Add(friend.FriendPlayFabId); index++; } GameManager.Instance.friendsIDForStatus = friendsToStatus; chatClient.AddFriends(friendsToStatus.ToArray()); GameManager.Instance.facebookFriendsMenu.addPlayFabFriends(playfabFriends, playfabFriendsName, playfabFriendsFacebookId); if (PlayerPrefs.GetString("LoggedType").Equals("Facebook")) { fbManager.getFacebookInvitableFriends(); } else { GameManager.Instance.facebookFriendsMenu.showFriends(null, null, null); } }, OnPlayFabError); } } private void OnPlayFabError(PlayFabError error) { Debug.Log("Playfab Error: " + error.ErrorMessage); } // ####################### PHOTON ########################## private void GetPhotonToken() { GetPhotonAuthenticationTokenRequest request = new GetPhotonAuthenticationTokenRequest(); request.PhotonApplicationId = StaticStrings.PhotonAppID.Trim(); PlayFabClientAPI.GetPhotonAuthenticationToken(request, OnPhotonAuthenticationSuccess, OnPlayFabError); } private void OnPhotonAuthenticationSuccess(GetPhotonAuthenticationTokenResult result) { string photonToken = result.PhotonCustomAuthenticationToken; Debug.Log(string.Format("Yay, logged in session token: {0}", photonToken)); PhotonNetwork.AuthValues = new AuthenticationValues(); PhotonNetwork.AuthValues.AuthType = CustomAuthenticationType.Custom; PhotonNetwork.AuthValues.AddAuthParameter("username", this.PlayFabId); PhotonNetwork.AuthValues.AddAuthParameter("Token", result.PhotonCustomAuthenticationToken); PhotonNetwork.AuthValues.UserId = this.PlayFabId; PhotonNetwork.ConnectUsingSettings("1.4"); PhotonNetwork.playerName = this.PlayFabId; authToken = result.PhotonCustomAuthenticationToken; getPlayerDataRequest(); connectToChat(); } public void connectToChat() { chatClient = new ChatClient(this); GameManager.Instance.chatClient = chatClient; ExitGames.Client.Photon.Chat.AuthenticationValues authValues = new ExitGames.Client.Photon.Chat.AuthenticationValues(); authValues.UserId = this.PlayFabId; authValues.AuthType = ExitGames.Client.Photon.Chat.CustomAuthenticationType.Custom; authValues.AddAuthParameter("username", this.PlayFabId); authValues.AddAuthParameter("Token", authToken); chatClient.Connect(StaticStrings.PhotonChatID, "1.4", authValues); } public override void OnPhotonCustomRoomPropertiesChanged(ExitGames.Client.Photon.Hashtable propertiesThatChanged) { Debug.Log("Custom properties changed: " + DateTime.Now.ToString()); } public void OnConnected() { Debug.Log("Photon Chat connected!!!"); chatClient.Subscribe(new string[] { "invitationsChannel" }); } public override void OnPhotonPlayerDisconnected(PhotonPlayer player) { GameManager.Instance.opponentDisconnected = true; GameManager.Instance.invitationID = ""; if (GameManager.Instance.controlAvatars != null) { Debug.Log("PLAYER DISCONNECTED " + player.NickName); if (PhotonNetwork.room.PlayerCount > 1) { GameManager.Instance.controlAvatars.startButtonPrivate.GetComponent