private void LoadUserInfoScreen() { // Refresh Button VRCEUiButton btnRefresh = new VRCEUiButton("refresh", new Vector2(0f, 0f), "Refresh"); btnRefresh.OnClick += () => { if (string.IsNullOrEmpty(PageUserInfo.userIdOfLastUserPageInfoViewed)) { return; } string id = PageUserInfo.userIdOfLastUserPageInfoViewed; ApiCache.Invalidate <APIUser>(id); APIUser.FetchUser(id, user => { PageUserInfo pageUserInfo = VRCEUi.UserInfoScreen.GetComponent <PageUserInfo>(); if (pageUserInfo != null) { pageUserInfo.SetupUserInfo(user); } }, error => VRCModLogger.LogError($"Failed to fetch user of id {id}: {error}")); }; VRCMenuUtilsAPI.AddUserInfoButton(btnRefresh); }
public static DownloadInfo CreateUserPageDownloadInfo( ApiWorld ApiWorld, string InstanceIDTags, DownloadType DownloadType, PageUserInfo PageUserInfo) { return(new DownloadInfo(ApiWorld, InstanceIDTags, DownloadType, PageUserInfo)); }
private static IEnumerator UpdateUserFromPage(PageUserInfo pageUserInfo) { yield return(new WaitForSeconds(.5f)); ourHideAuthorTextSink( AvatarHiding.ourBlockedAvatarAuthors.ContainsKey(pageUserInfo.field_Private_APIUser_0?.id ?? "") ? "Unhide all avatars by this author" : "Hide all avatars by this author"); }
public void LoadModuleLandingPage() { try { switch (currMODULE) { case APP_MODULES.ADMIN: pageADMIN = new pageADMINLanding(); this.Controls.Add(pageADMIN); pageADMIN.Dock = DockStyle.Fill; break; case APP_MODULES.CRM: pageCRM = new pageCRMLanding(); this.Controls.Add(pageCRM); pageCRM.Dock = DockStyle.Fill; break; case APP_MODULES.PMC: pagePMC = new pagePMC(); this.Controls.Add(pagePMC); pagePMC.Dock = DockStyle.Fill; break; case APP_MODULES.MASTERS: pageMASTER = new pageMASTERS(); this.Controls.Add(pageMASTER); pageMASTER.Dock = DockStyle.Fill; break; case APP_MODULES.HR: pageHR = new pageHRLanding(); this.Controls.Add(pageHR); pageHR.Dock = DockStyle.Fill; break; case APP_MODULES.USER_INFO: pageMY_INFO = new PageUserInfo(); this.Controls.Add(pageMY_INFO); pageMY_INFO.Dock = DockStyle.Fill; break; } } catch (Exception ex) { string errMessage = ex.Message; if (ex.InnerException != null) { errMessage += string.Format("\n{0}", ex.InnerException.Message); } MessageBox.Show(errMessage, "frmMODULE::LoadModuleLandingPage", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private static void OnPageShown(VRCUiPage obj) { var userPage = obj.TryCast <PageUserInfo>(); if (userPage == null) { return; } ourUserInfoPage = userPage; MelonCoroutines.Start(UpdateUserFromPage(userPage)); }
private void SendInvite_Tick() { PageUserInfo pageUserInfo = (PageUserInfo)VRCUiManagerWrappers.Instance.GetPage("UserInterface/MenuContent/Screens/UserInfo"); if (pageUserInfo != null && pageUserInfo.GetShown()) { Button button = GetInviteButton(pageUserInfo); if (button != null) { button.interactable = true; } } }
private static void SetupUserInfo(PageUserInfo __instance) { SelectedAPI = __instance.user; ExtendedUser eUser = ExtendedServer.Users.FirstOrDefault(a => a.UniqueID == SelectedAPI.id); VRCExtended.ToggleUserInfoMore(false); VRCEUi.InternalUserInfoScreen.Moderator.gameObject.SetActive(false); if (APIUser.CurrentUser.id == __instance.user.id) { VRCExtended.UserInfoLastLogin.Text.text = ""; VRCExtended.UserInfoMore.Button.interactable = false; } else { APIUser.FetchUser(__instance.user.id, (APIUser user) => { if (string.IsNullOrEmpty(user.last_login)) { return; } DateTime dt = DateTime.Parse(user.last_login); if (ModPrefs.GetBool("vrcextended", "useDTFormat")) { VRCExtended.UserInfoLastLogin.Text.text = "Last login: "******"MM.dd.yyyy hh:mm tt"); } else { VRCExtended.UserInfoLastLogin.Text.text = "Last login: "******"dd.MM.yyyy hh:mm"); } }, (string error) => { ExtendedLogger.LogError(error); }); VRCExtended.UserInfoMore.Button.interactable = true; if (eUser != null) { VRCExtended.UserInfoColliderControl.Button.interactable = true; VRCExtended.UserInfoColliderControl.Text.text = (eUser.HasColliders ? "Disable colliders" : "Enable colliders"); } else { VRCExtended.UserInfoColliderControl.Button.interactable = false; VRCExtended.UserInfoColliderControl.Text.text = "Not in world!"; } } }
Button GetInviteButton(PageUserInfo pageUserInfo) { if (m_inviteButton == null) { List <VRCUiButton> componentsInChildren = pageUserInfo.GetComponentsInChildren <VRCUiButton>().ToList(); VRCUiButton vrcuiButton = componentsInChildren.Where((button, val) => button.GetComponentInChildren <Button>().GetComponentInChildren <Text>().text == "Invite" || button.GetComponentInChildren <Button>().GetComponentInChildren <Text>().text == "Invite Sent" ).FirstOrDefault <VRCUiButton>(); m_inviteButton = vrcuiButton.GetComponent <Button>(); } return(m_inviteButton); }
public DownloadInfo( ApiWorld ApiWorld, string InstanceIDTags, DownloadType DownloadType, PageUserInfo PageUserInfo = null, PageWorldInfo PageWorldInfo = null, Notification Notification = null) { this.ApiWorld = ApiWorld; this.InstanceIDTags = InstanceIDTags; this.DownloadType = DownloadType; this.PageUserInfo = PageUserInfo; if (PageUserInfo != null) { this.APIUser = PageUserInfo.field_Public_APIUser_0; } this.PageWorldInfo = PageWorldInfo; this.Notification = Notification; }
public void OnUiManagerInit() { AssetsHandler.Load(); try { if (FavCatSettings.EnableAvatarFavs.Value) { AvatarModule = new AvatarModule(); } } catch (Exception ex) { MelonLogger.Error($"Exception in avatar module init: {ex}"); } try { if (FavCatSettings.EnableWorldFavs.Value) { WorldsModule = new WorldsModule(); } } catch (Exception ex) { MelonLogger.Error($"Exception in world module init: {ex}"); } try { if (FavCatSettings.EnablePlayerFavs.Value) { PlayerModule = new PlayersModule(); } } catch (Exception ex) { MelonLogger.Error($"Exception in player module init: {ex}"); } PageUserInfo = GameObject.Find("UserInterface/MenuContent/Screens/UserInfo").GetComponent <PageUserInfo>(); MelonLogger.Msg("Initialized!"); }
private void AddUserInfoButtons() { if (VRCEUi.UserInfoScreen == null) { ExtendedLogger.LogError("Failed to find UserInfo screen!"); return; } Transform btnPlaylists = VRCEUi.InternalUserInfoScreen.PlaylistsButton; Transform btnFavorite = VRCEUi.InternalUserInfoScreen.FavoriteButton; Transform btnReport = VRCEUi.InternalUserInfoScreen.ReportButton; if (btnPlaylists == null || btnFavorite == null || btnReport == null) { ExtendedLogger.LogError("Failed to get required button!"); return; } Vector3 pos = btnPlaylists.GetComponent <RectTransform>().localPosition; UserInfoLastLogin = new VRCEUiText("LastLoginText", new Vector2(-470f, -130f), "", VRCEUi.UserInfoScreen.transform); UserInfoLastLogin.Text.fontSize -= 20; UserInfoMore = new VRCEUiButton("More", new Vector2(pos.x, pos.y + 75f), "More", VRCEUi.InternalUserInfoScreen.UserPanel); UserInfoMore.Button.onClick.AddListener(() => { if (Patch_PageUserInfo.SelectedAPI == null) { return; } ToggleUserInfoMore(UserInfoMore.Text.text == "More"); }); UserInfoColliderControl = new VRCEUiButton("ColliderControl", new Vector2(pos.x, pos.y - 75f), "Not in world!", VRCEUi.InternalUserInfoScreen.UserPanel); UserInfoColliderControl.Control.gameObject.SetActive(false); UserInfoColliderControl.Button.onClick.AddListener(() => { if (Patch_PageUserInfo.SelectedAPI == null) { return; } ExtendedUser user = ExtendedServer.Users.FirstOrDefault(a => a.APIUser.id == Patch_PageUserInfo.SelectedAPI.id); if (user == null) { return; } user.HasColliders = !user.HasColliders; UserInfoColliderControl.Text.text = (user.HasColliders ? "Disable colliders" : "Enable colliders"); }); UserInfoRefresh = new VRCEUiButton("Refresh", new Vector2(pos.x, pos.y), "Refresh", VRCEUi.InternalUserInfoScreen.UserPanel); UserInfoRefresh.Control.gameObject.SetActive(false); UserInfoRefresh.Button.onClick.AddListener(() => { if (Patch_PageUserInfo.SelectedAPI == null) { return; } ApiCache.Invalidate <APIUser>(Patch_PageUserInfo.SelectedAPI.id); APIUser.FetchUser(Patch_PageUserInfo.SelectedAPI.id, (APIUser user) => { PageUserInfo pageUserInfo = VRCEUi.UserInfoScreen.GetComponent <PageUserInfo>(); if (pageUserInfo != null) { pageUserInfo.SetupUserInfo(user); } }, (string error) => { ExtendedLogger.LogError(error); }); }); ExtendedLogger.Log("Setup PageUserInfo!"); }
public static void LoadUser(this PageUserInfo pageUserInfo, APIUser apiUser) { Delegates.GetLoadUserDelegate(pageUserInfo, apiUser); }
public static void UiInit() { menuController = QuickMenu.prop_QuickMenu_0.field_Public_MenuController_0; worldInfo = GameObject.Find("UserInterface/MenuContent/Screens/WorldInfo").GetComponent <PageWorldInfo>(); userInfo = GameObject.Find("UserInterface/MenuContent/Screens/UserInfo").GetComponent <PageUserInfo>(); }
public PlayersModule() : base(ExpandedMenu.SocialMenu, FavCatMod.Database.PlayerFavorites, GetListsParent(), false) { ExpansionKitApi.GetExpandedMenu(ExpandedMenu.UserDetailsMenu).AddSimpleButton("Local Favorite", ShowFavMenu); PageUserInfo = GameObject.Find("UserInterface/MenuContent/Screens/UserInfo").GetComponent <PageUserInfo>(); }
private static IEnumerator UpdateUserFromPage(PageUserInfo pageUserInfo) { yield return(new WaitForSeconds(.5f)); ourBigMenuHideText.text = AvatarHiding.ourBlockedAvatarAuthors.ContainsKey(pageUserInfo.user?.id ?? "") ? "Unhide all avatars by this author" : "Hide all avatars by this author"; }
public override void VRChat_OnUiManagerInit() { string DoubleStandards = "emmVRC can be obfuscated but this can't be? Thats a bit shitty."; baseButton = Sub.GetUiObject("/Avatar/Stats Button"); GameObject listObj = Sub.CreateObjectFrom(Sub.GetUiObject("/Avatar").transform.Find("Vertical Scroll View/Viewport/Content").transform.Find("Favorite Avatar List").gameObject); listObj.transform.Find("Button").GetComponentInChildren <Text>().text = "Public Avatar List"; listObj.transform.SetSiblingIndex(0); listObj.SetActive(false); UiAvatarList listListObj = listObj.GetComponent <UiAvatarList>(); listListObj.category = (UiAvatarList.EnumNPublicSealedvaInPuMiFaSpClPuLi9vUnique) 4; listListObj.StopAllCoroutines(); Sub.CreateAvatarButton("Get Public Avatars", -(baseButton.GetComponent <RectTransform>().sizeDelta.x) - 10f, 0f, delegate() { Log("Get Public Avatars button (Avatar Menu) clicked!", true); ApiAvatar currentAvatar = listListObj.avatarPedestal.field_Internal_ApiAvatar_0; System.Collections.Generic.List <ApiAvatar> avatars = Sub.GetPublicAvatars(currentAvatar.authorId); MelonModLogger.Log("Got " + avatars.Count.ToString() + " Public Avatars for user " + currentAvatar.authorName); listObj.transform.Find("Button").GetComponentInChildren <Text>().text = "Public Avatars for user " + currentAvatar.authorName; listObj.SetActive(true); listListObj.field_Private_Dictionary_2_String_ApiAvatar_0.Clear(); string[] arr = (from avatar in avatars select avatar.id).ToArray(); foreach (ApiAvatar avatar in avatars) { listListObj.field_Private_Dictionary_2_String_ApiAvatar_0.Add(avatar.id, avatar); } listListObj.specificListIds = arr; listListObj.Method_Protected_Abstract_Virtual_New_Void_Int32_0(0); }, false, "/Avatar/Favorite Button", 300f); Sub.CreateAvatarButton("Random Public Avatar", -(baseButton.GetComponent <RectTransform>().sizeDelta.x) - 10f, 80f, delegate() { Log("Random Public Avatar button clicked!", true); Sub.SwitchPedestalToRandomPublicAvatar(); }, false, "/Avatar/Favorite Button", 300f); Button SocialAvatarButton = new Button(); // Placehold GameObject SocialAvatarObj; (SocialAvatarButton, SocialAvatarObj) = Sub.CreateSocialButton("Get Public Avatars", 215f, 19f, delegate() { Log("Get Public Avatars button (Social Menu) clicked!", true); PageUserInfo userInfo = GameObject.Find("Screens").transform.Find("UserInfo").transform.GetComponentInChildren <PageUserInfo>(); System.Collections.Generic.List <ApiAvatar> avatars = Sub.GetPublicAvatars(userInfo.user.id); MelonModLogger.Log("Got " + avatars.Count.ToString() + " Public Avatars for user " + userInfo.user.displayName); if (avatars.Count == 0) { Sub.DoErrorPopup("Public Avatars for " + userInfo.user.displayName, "No public avatars were found for " + userInfo.user.displayName); return; } listObj.transform.Find("Button").GetComponentInChildren <Text>().text = "Public Avatars for user " + userInfo.user.displayName; listObj.SetActive(true); listListObj.field_Private_Dictionary_2_String_ApiAvatar_0.Clear(); string[] arr = (from avatar in avatars select avatar.id).ToArray(); foreach (ApiAvatar avatar in avatars) { listListObj.field_Private_Dictionary_2_String_ApiAvatar_0.Add(avatar.id, avatar); } listListObj.specificListIds = arr; listListObj.Method_Protected_Abstract_Virtual_New_Void_Int32_0(0); // Switch to avatar page VRCUiManager.prop_VRCUiManager_0.Method_Public_VRCUiPage_VRCUiPage_0(Sub.GetUiObject("/Avatar").gameObject.GetComponentInChildren <VRCUiPage>()); }, xsize: 200f); Sub.CreateSlider(Sub.GetUiObject("/Avatar/Stats Button").transform.parent, baseButton.transform.localPosition.x, baseButton.transform.localPosition.y + (80f * 3), baseButton.GetComponent <RectTransform>().sizeDelta.x, 0f, 360f, delegate(float val) { Log("Slider value changed to " + val.ToString(), true); try { Transform tf = GameObject.Find("Screens").transform.Find("Avatar").GetComponent <PageAvatar>().avatar.field_Private_GameObject_0.transform; tf.localRotation = Quaternion.Euler(new Vector3(0, tf.localRotation.eulerAngles.y + (val - lastVal), 0)); lastVal = val; skipRotationFix = true; } catch (Exception e) { WarnLog("Failed to change avatar preview rotation.", true); } }, 180f); emmCheck = true; }
public DownloadInfo( ApiWorld ApiWorld, string InstanceIDTags, DownloadType DownloadType, PageUserInfo PageUserInfo = null !,