コード例 #1
0
        public static void ToggleUserInfoMore(bool enabled)
        {
            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;
            }

            if (enabled)
            {
                UserInfoRefresh.Control.gameObject.SetActive(true);
                UserInfoColliderControl.Control.gameObject.SetActive(true);

                btnPlaylists.gameObject.SetActive(false);
                btnFavorite.gameObject.SetActive(false);
                btnReport.gameObject.SetActive(false);
                UserInfoMore.Text.text = "Less";
            }
            else
            {
                UserInfoRefresh.Control.gameObject.SetActive(false);
                UserInfoColliderControl.Control.gameObject.SetActive(false);

                btnPlaylists.gameObject.SetActive(true);
                btnFavorite.gameObject.SetActive(true);
                btnReport.gameObject.SetActive(true);
                UserInfoMore.Text.text = "More";
            }
        }
コード例 #2
0
        private IEnumerator LoadShaderBlacklist()
        {
            using (UnityWebRequest request = UnityWebRequest.Get("https://raw.githubusercontent.com/AtiLion/VRCExtended/master/ShaderBlacklist.txt"))
            {
                yield return(request.SendWebRequest());

                if (!request.isNetworkError)
                {
                    List <string> blockedShaders = new List <string>();

                    blockedShaders.AddRange(AntiCrasherConfig.Instance.BlacklistedShaders);
                    foreach (string shader in request.downloadHandler.text.Split('\n'))
                    {
                        if (!string.IsNullOrEmpty(shader) && !blockedShaders.Contains(shader))
                        {
                            blockedShaders.Add(shader);
                        }
                    }
                    AntiCrasherConfig.Instance.BlacklistedShaders = blockedShaders.ToArray();
                    ExtendedLogger.Log("Downloaded shader blacklist!");
                }
                else
                {
                    ExtendedLogger.LogError("Failed to get shader blacklist! " + request.error);
                }
            }
        }
コード例 #3
0
ファイル: VolumeControl.cs プロジェクト: g3tright/VRCExtended
        public static void Setup()
        {
            if (!File.Exists("volumes.json"))
            {
                return;
            }

            try
            {
                _volumes = JObject.Parse(File.ReadAllText("volumes.json"));

                foreach (JProperty property in _volumes.Properties())
                {
                    float[] volumes = new float[2] {
                        1f, 1f
                    };                                         // 0 = User, 1 = Avatar
                    JArray jaVol = property.Value as JArray;

                    Volumes.Add(property.Name, volumes);
                    volumes[0] = (float)jaVol[0];
                    volumes[1] = (float)jaVol[1];
                }
                ExtendedLogger.Log("Successfully parsed volumes.json!");
            }
            catch (Exception ex)
            {
                ExtendedLogger.LogError("Failed to parse JSON volumes.json!", ex);
                return;
            }
        }
コード例 #4
0
 void OnApplicationQuit()
 {
     if (ModManager.Mods.Count(a => a.Name == "QuitFix" && a.Author == "Herp Derpinstine") > 1)
     {
         return;
     }
     if (!File.Exists("antiCrash.json"))
     {
         File.WriteAllText("antiCrash.json", JsonConvert.SerializeObject(AntiCrasherConfig.Instance, Formatting.Indented));
         ExtendedLogger.Log("Saved AntiCrasher config!");
     }
 }
コード例 #5
0
        private void AddUserSpecificVolume()
        {
            if (!ModPrefs.GetBool("vrcextended", "userSpecificVolume"))
            {
                return;
            }
            if (VRCEUi.UserInfoScreen == null)
            {
                ExtendedLogger.LogError("Failed to find UserInfo screen!");
                return;
            }

            // -550 - 250f, 230f - 280f
            volVoice  = new VRCEUiVolumeControl("volumeVoice", new Vector2(-620f, -230f), "Voice", 1f, VRCEUi.UserInfoScreen.transform);
            volAvatar = new VRCEUiVolumeControl("volumeAvatar", new Vector2(-290f, -230f), "Avatar", 1f, VRCEUi.UserInfoScreen.transform);
            if (!volVoice.Success || !volAvatar.Success)
            {
                ExtendedLogger.LogError("Failed to create volume sliders on UserInfo!");
                return;
            }

            // Setup volume events
            volVoice.Slider.onValueChanged.AddListener(delegate(float volume)
            {
                if (Patch_PageUserInfo.SelectedAPI == null)
                {
                    return;
                }
                ExtendedUser user = ExtendedServer.Users.FirstOrDefault(a => a.APIUser.id == Patch_PageUserInfo.SelectedAPI.id);

                if (user == null)
                {
                    return;
                }
                user.VolumeVoice = volume;
            });

            /*volAvatar.Slider.onValueChanged.AddListener(delegate (float volume)
             * {
             *  if (Patch_PageUserInfo.SelectedUser == null)
             *      return;
             *  Patch_PageUserInfo.SelectedUser.VolumeAvatar = volume;
             * });*/
        }
コード例 #6
0
        void OnLevelWasLoaded(int level) // Level 0 = Loading Screen, Level 1 = Login Screen, Level -1 = Game
        {
            if (level == 0)
            {
                return;
            }

            if (level == 1 && !_initialized)
            {
                // Setup FPS manager
                FrameRate = Application.targetFrameRate;
                ExtendedLogger.Log("Captured default FPS: " + FrameRate);
                if (ModPrefs.GetBool("vrcextended", "unlimitedFPS"))
                {
                    Application.targetFrameRate = 0;
                }

                // Setup systems
                VRCPlayerManager.Setup();
                VRCEPlayer.Setup();

                VRCPlayerManager.OnPlayerJoined += delegate(VRCEPlayer player)
                {
                    ExtendedServer.Users.Add(new ExtendedUser(player));
                    ExtendedLogger.Log("Player joined: " + player.APIUser.displayName);
                };
                VRCPlayerManager.OnPlayerLeft += delegate(VRCEPlayer player)
                {
                    ExtendedServer.Users.Remove(new ExtendedUser(player));
                    ExtendedLogger.Log("Player left: " + player.APIUser.displayName);
                };

                _initialized = true;
                return;
            }
            ExtendedServer.Users.Clear();
        }
コード例 #7
0
        private void AddSocialRefresh()
        {
            if (VRCEUi.SocialScreen == null)
            {
                return;
            }
            Transform     currentStatus = VRCEUi.SocialScreen.transform.Find("Current Status");
            Transform     btnStatus     = currentStatus.Find("StatusButton");
            RectTransform rt_btnStatus  = btnStatus.GetComponent <RectTransform>();
            Transform     icnStatus     = currentStatus.Find("StatusIcon");
            RectTransform rt_icnStatus  = icnStatus.GetComponent <RectTransform>();
            Transform     txtStatus     = currentStatus.Find("StatusText");
            RectTransform rt_txtStatus  = txtStatus.GetComponent <RectTransform>();

            VRCEUiButton  btnRefresh    = new VRCEUiButton("Refresh", new Vector2(rt_btnStatus.localPosition.x - 20f, rt_btnStatus.localPosition.y), "Refresh", currentStatus);
            RectTransform rt_btnRefresh = btnRefresh.Control.GetComponent <RectTransform>();

            rt_btnStatus.localPosition += new Vector3(210f, 0f, 0f);
            rt_icnStatus.localPosition += new Vector3(210f, 0f, 0f);
            rt_txtStatus.localPosition += new Vector3(210f, 0f, 0f);
            rt_btnRefresh.sizeDelta    -= new Vector2(5f, 10f);

            btnRefresh.Button.onClick.AddListener(() =>
            {
                UiUserList[] userLists = VRCEUi.SocialScreen.GetComponentsInChildren <UiUserList>(true);

                foreach (UiUserList userList in userLists)
                {
                    userList.ClearAll();
                    userList.Refresh();
                    userList.FetchAndRenderElementsForCurrentPage();
                    userList.RefreshData();
                }
                ExtendedLogger.Log("Refreshed social lists!");
            });
        }
コード例 #8
0
        void OnApplicationStart()
        {
            ExtendedLogger.Log("Loading VRCExtended...");

            // Setup config
            ModPrefs.RegisterCategory("vrcextended", "VRCExtended");

            // VRCExtended
            ModPrefs.RegisterPrefBool("vrcextended", "useDTFormat", false, "Use American format");
            ModPrefs.RegisterPrefBool("vrcextended", "fpsManagement", false, "FPS management");
            ModPrefs.RegisterPrefBool("vrcextended", "unlimitedFPS", false, "Unlimited FPS");

            // Exploits
            ModPrefs.RegisterPrefBool("vrcextended", "askUsePortal", true, "Ask to use portal");
            ModPrefs.RegisterPrefBool("vrcextended", "disablePortal", false, "Disable portals");
            ModPrefs.RegisterPrefBool("vrcextended", "antiCrasher", false, "Prevent crashers");
#if DEBUG
            ModPrefs.RegisterPrefBool("vrcextended", "avatarLimiter", false, "Avatar limiter"); // TODO
#else
            ModPrefs.RegisterPrefBool("vrcextended", "avatarLimiter", false, "Avatar limiter", true);
#endif

            // Avatar
            ModPrefs.RegisterPrefBool("vrcextended", "localColliders", false, "Local colliders");
            ModPrefs.RegisterPrefBool("vrcextended", "multiLocalColliders", false, "Others have local colliders");
            ModPrefs.RegisterPrefBool("vrcextended", "selfLocalColliders", true, "Others can touch you");
            ModPrefs.RegisterPrefBool("vrcextended", "targetHandColliders", true, "Target only hand colliders");
            ModPrefs.RegisterPrefBool("vrcextended", "fakeColliders", false, "Add fake colliders to self");
            ModPrefs.RegisterPrefBool("vrcextended", "fakeCollidersOthers", false, "Add fake colliders to others");
            ModPrefs.RegisterPrefBool("vrcextended", "ignoreInsideColliders", true, "Ignore pull colliders");
#if DEBUG
            ModPrefs.RegisterPrefBool("vrcextended", "smartColliders", false, "Use smart colliders"); // TODO
#else
            ModPrefs.RegisterPrefBool("vrcextended", "smartColliders", false, "Use smart colliders", true);
#endif

            // Players
#if DEBUG
            ModPrefs.RegisterPrefBool("vrcextended", "userSpecificVolume", false, "User specific volumes");
#else
            ModPrefs.RegisterPrefBool("vrcextended", "userSpecificVolume", false, "User specific volumes", true); // Can't get this shit to work
#endif

            // Grab the previous data
            p_anticrash             = ModPrefs.GetBool("vrcextended", "antiCrasher");
            p_localcolliders        = ModPrefs.GetBool("vrcextended", "localColliders");
            p_multilocalcolliders   = ModPrefs.GetBool("vrcextended", "multiLocalColliders");
            p_selflocalcolliders    = ModPrefs.GetBool("vrcextended", "selfLocalColliders");
            p_targetHandColliders   = ModPrefs.GetBool("vrcextended", "targetHandColliders");
            p_fakeColliders         = ModPrefs.GetBool("vrcextended", "fakeColliders");
            p_fakeCollidersOthers   = ModPrefs.GetBool("vrcextended", "fakeCollidersOthers");
            p_smartColliders        = ModPrefs.GetBool("vrcextended", "smartColliders");
            p_ignoreInsideColliders = ModPrefs.GetBool("vrcextended", "ignoreInsideColliders");
            p_unlimitedFPS          = ModPrefs.GetBool("vrcextended", "unlimitedFPS");

            // Add scripts
            ScriptObject = new GameObject();
            ScriptObject.AddComponent <PauseDetection>();
            GameObject.DontDestroyOnLoad(ScriptObject);

            // Get AntiCrasher config
            if (File.Exists("antiCrash.json"))
            {
                try
                {
                    if (JsonConvert.DeserializeObject <AntiCrasherConfig>(File.ReadAllText("antiCrash.json")).CheckBackwardsCompatibility())
                    {
                        File.WriteAllText("antiCrash.json", JsonConvert.SerializeObject(AntiCrasherConfig.Instance, Formatting.Indented));
                        ExtendedLogger.Log("Saved AntiCrasher config!");
                    }
                    ExtendedLogger.Log("Loaded AntiCrasher config!");
                }
                catch (Exception ex)
                {
                    ExtendedLogger.LogError("Failed to read/parse AntiCrasher config! Using default values...", ex);

                    AntiCrasherConfig.CreateDefault();
                }
            }
            else
            {
                AntiCrasherConfig.CreateDefault();
                ExtendedLogger.Log("Loaded default AntiCrasher config!");
            }
            if (ModManager.Mods.Any(a => a.Name == "QuitFix" && a.Author == "Herp Derpinstine") && !File.Exists("antiCrash.json"))
            {
                File.WriteAllText("antiCrash.json", JsonConvert.SerializeObject(AntiCrasherConfig.Instance, Formatting.Indented));
                ExtendedLogger.Log("Saved AntiCrasher config!");
            }

            // Get VolumeControl config
            VolumeControl.Setup();

            // Run patches
            Patch_PortalInternal.Setup();
            Patch_PageUserInfo.Setup();

            // Run coroutines
            ModManager.StartCoroutine(WaitForUIManager());
            if (ModPrefs.GetBool("vrcextended", "antiCrasher") && AntiCrasherConfig.Instance.UseOnlineBlacklist == true)
            {
                ModManager.StartCoroutine(LoadShaderBlacklist());
            }

            ExtendedLogger.Log("Loaded VRCExtended!");
        }
コード例 #9
0
        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!");
        }
コード例 #10
0
        void OnLateUpdate()
        {
            if (p_anticrash != ModPrefs.GetBool("vrcextended", "antiCrasher"))
            {
                if (ModPrefs.GetBool("vrcextended", "antiCrasher"))
                {
                    foreach (ExtendedUser user in ExtendedServer.Users)
                    {
                        if (user == null || user.Avatar == null)
                        {
                            continue;
                        }

                        try
                        {
                            user.RemoveCrashShaders();
                            user.LimitParticles();
                            user.RemoveCrashMesh();
                        }
                        catch (Exception ex)
                        {
                            ExtendedLogger.LogError("Error enabeling anti-crasher for user " + user.APIUser.displayName, ex);
                        }
                    }
                    ExtendedLogger.Log("Enabled anti crasher!");
                }
                else
                {
                    foreach (ExtendedUser user in ExtendedServer.Users)
                    {
                        if (user == null || user.Avatar == null || user.APIUser == null)
                        {
                            continue;
                        }

                        try
                        {
                            user.RestoreCrashShaders();
                            user.RestoreParticleLimits();
                            user.RestoreCrashMesh();
                        }
                        catch (Exception ex)
                        {
                            ExtendedLogger.LogError("Error disabling anti-crasher for user " + user.APIUser.displayName, ex);
                        }
                    }
                    ExtendedLogger.Log("Disabled anti crasher!");
                }

                p_anticrash = ModPrefs.GetBool("vrcextended", "antiCrasher");
            }
            else if (p_localcolliders != ModPrefs.GetBool("vrcextended", "localColliders") ||
                     p_multilocalcolliders != ModPrefs.GetBool("vrcextended", "multiLocalColliders") ||
                     p_selflocalcolliders != ModPrefs.GetBool("vrcextended", "selfLocalColliders") ||
                     p_fakeColliders != ModPrefs.GetBool("vrcextended", "fakeColliders") ||
                     p_fakeCollidersOthers != ModPrefs.GetBool("vrcextended", "fakeCollidersOthers") ||
                     p_smartColliders != ModPrefs.GetBool("vrcextended", "smartColliders") ||
                     p_targetHandColliders != ModPrefs.GetBool("vrcextended", "targetHandColliders") ||
                     p_ignoreInsideColliders != ModPrefs.GetBool("vrcextended", "ignoreInsideColliders"))
            {
                // Clear colliders
                foreach (ExtendedUser user in ExtendedServer.Users)
                {
                    if (user != null && user.Avatar != null)
                    {
                        user.RemoveLocalColliders();
                    }
                }
                // Add them back settings based
                foreach (ExtendedUser user in ExtendedServer.Users)
                {
                    if (user != null && user.Avatar != null)
                    {
                        user.OnAvatarCreated();
                    }
                }

                p_localcolliders        = ModPrefs.GetBool("vrcextended", "localColliders");
                p_multilocalcolliders   = ModPrefs.GetBool("vrcextended", "multiLocalColliders");
                p_selflocalcolliders    = ModPrefs.GetBool("vrcextended", "selfLocalColliders");
                p_fakeColliders         = ModPrefs.GetBool("vrcextended", "fakeColliders");
                p_fakeCollidersOthers   = ModPrefs.GetBool("vrcextended", "fakeCollidersOthers");
                p_smartColliders        = ModPrefs.GetBool("vrcextended", "smartColliders");
                p_targetHandColliders   = ModPrefs.GetBool("vrcextended", "targetHandColliders");
                p_ignoreInsideColliders = ModPrefs.GetBool("vrcextended", "ignoreInsideColliders");
                ExtendedLogger.Log("Reloaded local colliders!");
            }
            else if (p_unlimitedFPS != ModPrefs.GetBool("vrcextended", "unlimitedFPS"))
            {
                if (ModPrefs.GetBool("vrcextended", "unlimitedFPS"))
                {
                    Application.targetFrameRate = 0;
                }
                else
                {
                    Application.targetFrameRate = FrameRate;
                }
                p_unlimitedFPS = ModPrefs.GetBool("vrcextended", "unlimitedFPS");
            }
        }