示例#1
0
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory(SettingsCategory, "Sparkle Be Gone");

            MelonPrefs.RegisterBool(SettingsCategory, StartSparkleSetting, false, "Show start sparkle");
            MelonPrefs.RegisterBool(SettingsCategory, EndSparksSetting, false, "Show end sparks");
            MelonPrefs.RegisterBool(SettingsCategory, EndFlareSetting, true, "Show end flare");

            MelonPrefs.RegisterBool(SettingsCategory, RecolorSparksSetting, false, "Recolor sparks");
            MelonPrefs.RegisterBool(SettingsCategory, RecolorBeamsSetting, true, "Recolor beams");

            MelonPrefs.RegisterString(SettingsCategory, BeamColorSetting, "25 50 255 255", "Beam color (r g b a)");

            var method = typeof(VRCSpaceUiPointer).GetMethod(nameof(VRCSpaceUiPointer.LateUpdate), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);

            {
                using var stream    = Assembly.GetExecutingAssembly().GetManifestResourceStream("SparkleBeGone.sparklebegone");
                using var memStream = new MemoryStream((int)stream.Length);
                stream.CopyTo(memStream);
                var bundle = AssetBundle.LoadFromMemory_Internal(memStream.ToArray(), 0);
                myWhiteLaserTexture            = bundle.LoadAsset_Internal("Assets/SparkleBeGone/sniper_beam_white.png", Il2CppType.Of <Texture2D>()).Cast <Texture2D>();
                myWhiteLaserTexture.hideFlags |= HideFlags.DontUnloadUnusedAsset;
            }

            unsafe
            {
                var originalPointer = *(IntPtr *)(IntPtr)UnhollowerUtils.GetIl2CppMethodInfoPointerFieldForGeneratedMethod(method).GetValue(null);
                CompatHook((IntPtr)(&originalPointer), typeof(SparkleBeGoneMod).GetMethod(nameof(CursorLateUpdatePatch), BindingFlags.Static | BindingFlags.NonPublic) !.MethodHandle.GetFunctionPointer());
                ourOriginalLateUpdate = Marshal.GetDelegateForFunctionPointer <VoidDelegate>(originalPointer);
            }

            MelonCoroutines.Start(InitThings());
        }
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory(ModCategory, "Mirror Resolution");
            MelonPrefs.RegisterInt(ModCategory, MaxResPref, 4096, "Max eye texture size");
            MelonPrefs.RegisterInt(ModCategory, MirrorMsaaPref, 0, "Mirror MSAA (0=default)");
            MelonPrefs.RegisterBool(ModCategory, AllMirrorsAutoPref, false, "Force auto resolution");

            unsafe
            {
                var methodInfo            = Il2CppType.Of <VRC_MirrorReflection>().GetMethod(nameof(VRC_MirrorReflection.GetReflectionData), BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
                var originalMethodPointer = *(IntPtr *)IL2CPP.il2cpp_method_get_from_reflection(methodInfo.Pointer);
                CompatHook((IntPtr)(&originalMethodPointer), typeof(MirrorResolutionUnlimiterMod).GetMethod(nameof(GetReflectionData), System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic) !.MethodHandle.GetFunctionPointer());
            }

            OnModSettingsApplied();

            if (AppDomain.CurrentDomain.GetAssemblies().Any(it => it.GetName().Name.StartsWith("UIExpansionKit")))
            {
                MelonLogger.Log("Adding UIExpansionKit buttons");
                typeof(UiExtensionsAddon)
                .GetMethod(nameof(UiExtensionsAddon.Init),
                           System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static) !
                .Invoke(null, new object[0]);
            }
        }
示例#3
0
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory(SettingsCategory, SettingsCategory);
            MelonPrefs.RegisterBool(SettingsCategory, EnabledSetting, true, "FP fix enabled");

            OnModSettingsApplied();
        }
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory(ModCategory, "Game Priority");
            MelonPrefs.RegisterBool(ModCategory, setGamePriority, false, "Set game priority to High");

            ApplyChanges();
        }
示例#5
0
        public static void RegisterSettings()
        {
            MelonPrefs.RegisterCategory(SettingsCategory, "Join Notifier");

            MelonPrefs.RegisterBool(SettingsCategory, SettingShouldBlink, true, "Blink HUD icon on join");
            MelonPrefs.RegisterBool(SettingsCategory, SettingShouldPlaySound, true, "Play sound on join");
            MelonPrefs.RegisterBool(SettingsCategory, SettingJoinShowName, true, "Show joined names");

            MelonPrefs.RegisterBool(SettingsCategory, SettingLeaveBlink, false, "Blink HUD icon on leave");
            MelonPrefs.RegisterBool(SettingsCategory, SettingLeaveSound, false, "Play sound on leave");
            MelonPrefs.RegisterBool(SettingsCategory, SettingLeaveShowName, false, "Show left names");

            MelonPrefs.RegisterFloat(SettingsCategory, SettingSoundVolume, .3f, "Sound volume (0-1)");
            MelonPrefs.RegisterBool(SettingsCategory, SettingUseUiMixer, true, "Notifications are affected by UI volume slider");
            MelonPrefs.RegisterInt(SettingsCategory, SettingTextSize, 36, "Text size (pt)");

            MelonPrefs.RegisterBool(SettingsCategory, SettingNotifyPublic, false, "Notify in public instances");
            MelonPrefs.RegisterBool(SettingsCategory, SettingNotifyFriends, true, "Notify in friends[+] instances");
            MelonPrefs.RegisterBool(SettingsCategory, SettingNotifyPrivate, true, "Notify in private instances");

            MelonPrefs.RegisterBool(SettingsCategory, SettingShowFriendsOnly, false, "Show friend join/leave only");
            MelonPrefs.RegisterString(SettingsCategory, SettingJoinIconColor, "127 191 255", "Join icon color (r g b)");
            MelonPrefs.RegisterString(SettingsCategory, SettingLeaveIconColor, "153 82 51", "Leave icon color (r g b)");

            MelonPrefs.RegisterBool(SettingsCategory, SettingShowFriendsInDifferentColor, true, "Show friend names in different color");
            MelonPrefs.RegisterString(SettingsCategory, SettingFriendsJoinColor, "224 224 0", "Friend join name color (r g b)");
            MelonPrefs.RegisterString(SettingsCategory, SettingFriendsLeaveColor, "201 201 0", "Friend leave name color (r g b)");
        }
示例#6
0
 public static void RegisterConfig()
 {
     MelonPrefs.RegisterBool(Category, nameof(HiddenClouds), true, "Hide nebula clouds inside the approach circle");
     MelonPrefs.RegisterBool(Category, nameof(HiddenDarts), true, "Hide note darts");
     MelonPrefs.RegisterBool(Category, nameof(CleanStacks), false, "Hide clouds for stacked notes for better readability. This will override hidden clouds.");
     OnModSettingsApplied();
 }
示例#7
0
        private void HandleConfig()
        {
            MelonPrefs.RegisterCategory("Settings", "Settings");
            Debug.Msg("Create Category: Settings", 2);

            MelonPrefs.RegisterBool("Settings", "HotkeysEnabled", true, "Hotkeys Enabled");
            Debug.Msg("Create Entry: HotkeysEnabled", 2);

            MelonPrefs.RegisterBool("Settings", "DebugEnabled", true, "Debug Enabled");
            Debug.Msg("Create Entry: DebugEnabled", 2);

            MelonPrefs.RegisterBool("Settings", "DebugM1Enabled", true, "Debug M1 Enabled");
            Debug.Msg("Create Entry: Debug1Enabled", 2);

            MelonPrefs.RegisterBool("Settings", "DebugM2Enabled", true, "Debug M2 Enabled");
            Debug.Msg("Create Entry: Debug2Enabled", 2);

            MelonPrefs.RegisterBool("Settings", "DebugM3Enabled", false, "Debug M3 Enabled");
            Debug.Msg("Create Entry: Debug3Enabled", 2);

            CheatToggles.enableHotkeys = MelonPrefs.GetBool("Settings", "HotkeysEnabled");
            CheatToggles.enableDebug   = MelonPrefs.GetBool("Settings", "DebugEnabled");

            Debug.debugMode1 = MelonPrefs.GetBool("Settings", "DebugM1Enabled");
            Debug.debugMode2 = MelonPrefs.GetBool("Settings", "DebugM2Enabled");
            Debug.debugMode3 = MelonPrefs.GetBool("Settings", "DebugM3Enabled");

            MelonPrefs.SaveConfig();
        }
示例#8
0
 public override void OnApplicationStart()
 {
     MelonPrefs.RegisterCategory("FPSUnlocker Config", "FPSUnlocker Config");
     MelonPrefs.RegisterInt("FPSUnlocker Config", "maxFps", 60, "Max FPS");
     MelonPrefs.RegisterBool("FPSUnlocker Config", "vSync", false, "Enable/Disable vSync");
     OnModSettingsApplied();
 }
示例#9
0
        public static void RegisterConfig()
        {
            MelonPrefs.RegisterBool(Category, nameof(Enabled), true, "Enables the mod.");

            MelonPrefs.RegisterFloat(Category, nameof(TimingAssistAmount), 1.0f, "Limits the timing window [0,1,0.05,1] {P}");

            OnModSettingsApplied();
        }
示例#10
0
        public override void OnApplicationStart()
        {
            ClassInjector.RegisterTypeInIl2Cpp <CustomParticleSettingsUiHandler>();

            MelonPrefs.RegisterCategory(SettingsCategory, "Particle and DynBone limits");
            MelonPrefs.RegisterBool(SettingsCategory, "dummy", false, "ignore this", true);

            ExpansionKitApi.RegisterWaitConditionBeforeDecorating(WaitForUixPrefabsAndRegister());
        }
示例#11
0
        internal static void RegisterSettings()
        {
            MelonPrefs.RegisterCategory(KitCategory, "UI Expansion Kit");

            MelonPrefs.RegisterString(KitCategory, PinnedPrefs, "", hideFromList: true);

            MelonPrefs.RegisterBool(KitCategory, QmExpandoStartsCollapsed, false, "Quick Menu extra panel starts hidden");
            MelonPrefs.RegisterBool(KitCategory, CategoriesStartCollapsed, false, "Settings categories start collapsed");
        }
示例#12
0
        /// <summary>
        /// Called When The Game Starts
        /// </summary>
        public override void OnApplicationStart()
        {
            //Register Config Category And Toggle Boolean If Not Present
            MelonPrefs.RegisterCategory("NoPostProcessing", "NoPostProcessing");
            MelonPrefs.RegisterBool("NoPostProcessing", "DisablePostProcessing", true, "Disable Post Processing");

            //Set Initial Post Processing State To The One In Config (Or Default: True)
            DisablePostProcessing = MelonPrefs.GetBool("NoPostProcessing", "DisablePostProcessing");
        }
        public static void RegisterSettings()
        {
            // Register mod settings
            MelonPrefs.RegisterCategory("AOOverride", "Ambient Occlusion");

            MelonPrefs.RegisterBool("AOOverride", nameof(EnableAO), true, "Enable AO");
            MelonPrefs.RegisterFloat("AOOverride", nameof(AOIntensity), 1f, "AO intensity");

            LoadSettings();
        }
示例#14
0
        public static void RegisterConfig()
        {
            MelonPrefs.RegisterBool(Category, nameof(ShowModifiers), true, "Display active modifiers during gameplay.");
            MelonPrefs.RegisterBool(Category, nameof(ShowScore), true, "Display score & streak during gameplay.");
            MelonPrefs.RegisterBool(Category, nameof(ShowSongInfo), true, "Display song info during gameplay.");

            MelonPrefs.RegisterFloat(Category, nameof(OverlayScale), 1.4f, "Changes the scale of the overlay");

            OnModSettingsApplied();
        }
示例#15
0
 public static void CreateConfig()
 {
     MelonPrefs.RegisterBool("FollowCamera", "Activated", true);
     MelonPrefs.RegisterFloat("FollowCamera", "PositionSmoothing", 0.005f);
     MelonPrefs.RegisterFloat("FollowCamera", "RotationSmoothing", 0.005f);
     MelonPrefs.RegisterFloat("FollowCamera", "CamHeight", 1.0f);
     MelonPrefs.RegisterFloat("FollowCamera", "CamDistance", 5.0f);
     MelonPrefs.RegisterFloat("FollowCamera", "CamRotation", 0.0f);
     MelonPrefs.RegisterFloat("FollowCamera", "CamOffset", 5.0f);
 }
示例#16
0
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory(CoreLimiterPrefCategory, "Core Limiter");
            MelonPrefs.RegisterInt(CoreLimiterPrefCategory, MaxCoresPref, 4, "Maximum cores");
            MelonPrefs.RegisterBool(CoreLimiterPrefCategory, SkipHyperThreadsPref, true, "Don't use both threads of a core");

            MelonLogger.Log($"[CoreLimiter] Have {Environment.ProcessorCount} processor cores");

            ApplyAffinity();
        }
        public static void RegisterConfig()
        {
            MelonPrefs.RegisterBool(Category, nameof(Enabled), true, "Enables the mod.");

            MelonPrefs.RegisterBool(Category, nameof(KillCPUParticles), true, "Disables a small puff of particles.");

            MelonPrefs.RegisterInt(Category, nameof(ParticleCount), 0, "Amount of GPU particles per shot. [0,50000,1000,0] {G}");

            OnModSettingsApplied();
        }
示例#18
0
        private void HandleConfig()
        {
            MelonPrefs.RegisterCategory("Settings", "Settings");
            Debug.Msg("Create Category: Settings", 2);

            MelonPrefs.RegisterBool("Settings", "HotkeysEnabled", true, "Hotkeys Enabled");
            Debug.Msg("Create Entry: HotkeysEnabled", 2);

            CheatToggles.enableHotkeys = MelonPrefs.GetBool("Settings", "HotkeysEnabled");
            MelonPrefs.SaveConfig();
        }
示例#19
0
        public static void RegisterConfig()
        {
            MelonPrefs.RegisterBool(Category, nameof(highscoreMode), false, "Highscore mode restarts a song once you can't beat your current highscore anymore. Ignores allowed miss count.");
            MelonPrefs.RegisterBool(Category, nameof(showStats), true, "Shows stats screen after failing a song.");
            MelonPrefs.RegisterBool(Category, nameof(includeChainSustainBreak), false, "Counts chain and sustain breaks as misses.");
            MelonPrefs.RegisterInt(Category, nameof(allowedMissCount), 0, "How many misses you are allowed to have before restarting a song.[0, 10, 1, 0]");
            MelonPrefs.RegisterBool(Category, nameof(autoSkip), false, "Enables automatic skipping of song intros.");


            OnModSettingsApplied();
        }
示例#20
0
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory("DirectionalVoice", "Directional Voice");

            MelonPrefs.RegisterBool("DirectionalVoice", "Enabled", true, "Directional Voice");
            MelonPrefs.RegisterFloat("DirectionalVoice", "MinVolume", 25f, "Minimum volume when behind speaker (percent)");
#if DEBUG
            MelonPrefs.RegisterString("DirectionalVoice", "DebugTarget", "", "Debug Target");
#endif

            OnModSettingsApplied();
        }
示例#21
0
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory("AvatarHider", "Avatar Hider");

            MelonPrefs.RegisterBool("AvatarHider", "HideAvatars", false, "Hide Avatars");
            MelonPrefs.RegisterBool("AvatarHider", "IgnoreFriends", true, "Ignore Friends");
            MelonPrefs.RegisterFloat("AvatarHider", "HideDistance", 7f, "Distance (meters)");

            OnModSettingsApplied();

            MelonCoroutines.Start(AvatarScanner());
        }
        public static void RegisterSettings()
        {
            MelonPrefs.RegisterCategory(CategoryName, "Graphics settings");

            MelonPrefs.RegisterInt(CategoryName, MsaaLevel, -1, "MSAA Level (1/2/4/8)");
            MelonPrefs.RegisterBool(CategoryName, AllowMsaa, true, "Enable MSAA");
            MelonPrefs.RegisterBool(CategoryName, AnisoFilter, true, "Enable anisotropic filtering");
            MelonPrefs.RegisterBool(CategoryName, RealtimeShadows, true, "Realtime shadows");
            MelonPrefs.RegisterBool(CategoryName, SoftShadows, true, "Soft shadows");
            MelonPrefs.RegisterInt(CategoryName, PixelLights, -1, "Max pixel lights");
            MelonPrefs.RegisterInt(CategoryName, TextureLimit, -1, "Texture decimation");
            MelonPrefs.RegisterInt(CategoryName, GraphicsTier, -1, "Graphics tier (1/2/3)");
        }
示例#23
0
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory("AntiUdonExploits", "Anti Udon Exploits");
            MelonPrefs.RegisterBool("AntiUdonExploits", "Enabled", true);
            MelonPrefs.RegisterBool("AntiUdonExploits", "PublicInstancesOnly", true, "Public Instances Only");

            _enabled             = MelonPrefs.GetBool("AntiUdonExploits", "Enabled");
            _publicInstancesOnly = MelonPrefs.GetBool("AntiUdonExploits", "PublicInstancesOnly");

            HarmonyInstance harmony = HarmonyInstance.Create("AntiUdonExploits");

            harmony.Patch(typeof(UdonSync).GetMethod(nameof(UdonSync.UdonSyncRunProgramAsRPC)), GetPatch(nameof(Main.UdonSyncPatch)));
        }
示例#24
0
        public static void RegisterConfig()
        {
            MelonPrefs.RegisterBool(Category, nameof(Enabled), true, "Enables the mod.");
            MelonPrefs.RegisterBool(Category, nameof(UseHandColors), true, "Use hand colors for chains.");

            MelonPrefs.RegisterFloat(Category, nameof(RightR), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]");
            MelonPrefs.RegisterFloat(Category, nameof(RightG), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]");
            MelonPrefs.RegisterFloat(Category, nameof(RightB), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]");

            MelonPrefs.RegisterFloat(Category, nameof(LeftR), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]");
            MelonPrefs.RegisterFloat(Category, nameof(LeftG), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]");
            MelonPrefs.RegisterFloat(Category, nameof(LeftB), 0.0f, "Chain color.[0.0,1.0,0.0,0.0]");

            OnModSettingsApplied();
        }
示例#25
0
        public static void RegisterSettings()
        {
            MelonPrefs.RegisterCategory(SettingsCategory, "Advanced safety");

            MelonPrefs.RegisterBool(SettingsCategory, nameof(AvatarFilteringEnabled), true, "Enable avatar filtering");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(IncludeFriends), false, "Friends are affected by avatar filtering");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(AbideByShowAvatar), true, "\"Show avatar\" bypasses avatar filtering");

            MelonPrefs.RegisterBool(SettingsCategory, nameof(AvatarFilteringOnlyInPublic), false, "Do avatar filtering only in public instances");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(IncludeFriendsInHides), false, "Friends are affected by avatar hiding");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(HidesAbideByShowAvatar), true, "\"Show avatar\" bypasses avatar hiding");

            MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowSpawnSounds), false, "Allow avatar spawn sounds");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowGlobalSounds), false, "Allow global sounds on avatars");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxAudioSources), 16, "Max audio sources");

            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxPolygons), 2_000_000, "Max polygons");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxMaterialSlots), 100, "Max material slots");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(HeuristicallyRemoveScreenSpaceBullshit), true, "Try to remove fullscreen effects");

            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxConstraints), 200, "Max constraints");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxColliders), 32, "Max colliders");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxRigidBodies), 32, "Max rigidbodies");

            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxClothVertices), 10_000, "Max cloth vertices");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxTransforms), 1000, "Max bones/transforms");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxDepth), 50, "Max transforms depth");

            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxAnimators), 64, "Max animators");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxLights), 2, "Max lights");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxComponents), 4_000, "Max total components");

            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxParticles), 1_000_000, "Max total particles");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxMeshParticleVertices), 1_000_000, "Max total mesh particle polygons");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowUiLayer), false, "Allow UI layer on avatars");

            MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowCustomMixers), false, "Allow custom audio mixers on avatars");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(AllowReadingMixers), false, "Allow audio mixers in assetbundles");
            MelonPrefs.RegisterInt(SettingsCategory, nameof(MaxMaterialSlotsOverSubmeshCount), 2, "Maximum material slots over submesh count");

            MelonPrefs.RegisterBool(SettingsCategory, nameof(HidePortalsFromBlockedUsers), true, "Hide portals from blocked users");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(HidePortalsFromNonFriends), false, "Hide portals from non-friends");
            MelonPrefs.RegisterBool(SettingsCategory, nameof(HidePortalsCreatedTooClose), true, "Hide portals created too close to local player");

            OnModSettingsApplied();
        }
示例#26
0
        public override void OnApplicationStart()
        {
            MelonPrefs.RegisterCategory("ComfyVRMenu", "Comfy VR Menu");
            MelonPrefs.RegisterBool("ComfyVRMenu", "EnableComfyVRMenu", true, "Enable Comfy VR Menu");

            _comfyVRMenu = MelonPrefs.GetBool("ComfyVRMenu", "EnableComfyVRMenu");

            var harmony = HarmonyInstance.Create("ComfyVRMenu");

            var method = PlaceUiMethod;

            if (method == null)
            {
                MelonLogger.LogError("Couldn't find VRCUiManager PlaceUi method to patch.");
                return;
            }

            harmony.Patch(typeof(VRCUiManager).GetMethod(method.Name), GetPatch(nameof(Main.PlaceUiPatch)));
        }
示例#27
0
        internal static void RegisterSettings()
        {
            MelonPrefs.RegisterCategory(FavCatCategory, "FavCat");

            MelonPrefs.RegisterString(FavCatCategory, DatabasePathSettings, "./UserData", "Database directory path", true);
            MelonPrefs.RegisterString(FavCatCategory, ImageCacheSettings, "./UserData", "Image cache directory path", true);

            MelonPrefs.RegisterBool(FavCatCategory, EnableAvatarFavs, true, "Enable avatar favorites (restart required)");
            MelonPrefs.RegisterBool(FavCatCategory, EnableWorldFavs, true, "Enable world favorites (restart required)");
            MelonPrefs.RegisterBool(FavCatCategory, EnablePlayerFavs, true, "Enable player favorites (restart required)");

            MelonPrefs.RegisterString(FavCatCategory, ImageCachingMode, "full", "Image caching mode");
            MelonPrefs.RegisterInt(FavCatCategory, ImageCacheMaxSize, 4096, "Image cache max size (MB)");
            MelonPrefs.RegisterBool(FavCatCategory, HidePopupAfterFav, true, "Hide favorite popup after (un)favoriting a world or a player");

            // shared mode can't be multi-threaded, so hide this until other parts of code are ready for ST patterns
            MelonPrefs.RegisterBool(FavCatCategory, UseSharedMode, false, "Support multiple VRC instances (slower, restart required)", true);

            ExpansionKitApi.RegisterSettingAsStringEnum(FavCatCategory, ImageCachingMode, new [] { ("full", "Full local image cache (fastest, safest)"), ("fast", "Fast, use more RAM"), ("builtin", "Preserve RAM, more API requests") });
示例#28
0
        public override void VRChat_OnUiManagerInit()
        {
            MelonLogger.Log("BTK Standalone: Self Portrait - Starting Up");

            if (MelonHandler.Mods.Any(x => x.Info.Name.Equals("BTKCompanionLoader", StringComparison.OrdinalIgnoreCase)))
            {
                MelonLogger.Log("Hold on a sec! Looks like you've got BTKCompanion installed, this mod is built in and not needed!");
                MelonLogger.LogError("BTKSASelfPortrait has not started up! (BTKCompanion Running)");
                return;
            }

            instance = this;

            harmony = HarmonyInstance.Create("BTKStandaloneSP");

            MelonPrefs.RegisterCategory(settingsCategory, "BTKSA Self Portrait");
            MelonPrefs.RegisterFloat(settingsCategory, prefsCameraDistance, 0.7f, "Camera Distance");
            MelonPrefs.RegisterInt(settingsCategory, prefsUIAlpha, 70, "UI Display Alpha Percentage");
            MelonPrefs.RegisterBool(settingsCategory, prefsUIFlip, true, "Flip Display (Matches mirrors)");
            MelonPrefs.RegisterBool(settingsCategory, prefsReflectOtherPlayers, false, "Reflect Other Players");
            MelonPrefs.RegisterFloat(settingsCategory, prefsFarClippingDist, 5f, "Camera Cutoff Distance");

            ExpansionKitApi.RegisterSimpleMenuButton(ExpandedMenu.QuickMenu, "Toggle Self Portrait", toggleSelfPortrait);

            //Using FadeTo hook to determine when world is pretty much loaded
            //Hooking FadeTo for world join late event
            foreach (MethodInfo method in typeof(VRCUiBackgroundFade).GetMethods(BindingFlags.Public | BindingFlags.Instance))
            {
                if (method.Name.Contains("Method_Public_Void_Single_Action") && !method.Name.Contains("PDM"))
                {
                    Log($"Found target fadeTo method, patching! ({method.Name})", true);
                    harmony.Patch(method, null, new HarmonyMethod(typeof(BTKSASelfPortrait).GetMethod("OnFade", BindingFlags.Static | BindingFlags.Public)));
                }
            }

            loadAssets();

            cameraEye  = GameObject.Find("Camera (eye)");
            hudContent = GameObject.Find("/UserInterface/UnscaledUI/HudContent");
        }
示例#29
0
        internal static void RegisterSettings()
        {
            MelonPrefs.RegisterCategory(IkTweaksCategory, "IK Tweaks");

            MelonPrefs.RegisterBool(IkTweaksCategory, FixShoulders, true, "Use Pitch-Yaw Shoulders");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(IgnoreAnimations), false, "Ignore animations (always slide around)");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(PlantFeet), false, "Feet stick to ground");

            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(FullBodyVrIk), true, "Use custom VRIK for FBT");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(AddHumanoidPass), true, "Enforce local NetIK (see what others see)");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(MapToes), false, "Map toes (use if your feet trackers move with your toes)");

            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(UseKneeTrackers), false, "Use knee trackers");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(UseElbowTrackers), false, "Use elbow trackers");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(UseChestTracker), false, "Use chest tracker");

            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(CalibrateFollowHead), true, "Avatar follows head when calibrating (recommended)");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(CalibrateHalfFreeze), true, "Freeze avatar on one trigger hold in follow head mode");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(CalibrateUseUniversal), true, "Use universal calibration (requires follow head mode)");

            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(CalibrateStorePerAvatar), true, "Store calibration per avatar (when not using universal calibration)");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(DisableFbt), false, "Disable FBT even if trackers are present");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(PinHipRotation), true, "Enforce hip rotation match");

            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(DoHipShifting), true, "Shift hip pivot (support inverted hip)");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(PreStraightenSpine), false, "Pre-straighten spine (improve IK stability)");
            MelonPrefs.RegisterBool(IkTweaksCategory, nameof(StraightenNeck), true, "Straighten neck");

            MelonPrefs.RegisterInt(IkTweaksCategory, nameof(SpineRelaxIterations), 10, "Spine Relax Iterations (max 25)");
            MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(MaxSpineAngleFwd), 30, "Max spine angle forward (degrees)");
            MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(MaxSpineAngleBack), 30, "Max spine angle back (degrees)");
            MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(MaxNeckAngleFwd), 30, "Max neck angle forward (degrees)");
            MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(MaxNeckAngleBack), 15, "Max neck angle back (degrees)");
            MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(NeckPriority), 2f, "Neck bend priority (1=even with spine, 2=twice as much as spine)");
            MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(StraightSpineAngle), 15f, "Straight spine angle (degrees)");
            MelonPrefs.RegisterFloat(IkTweaksCategory, nameof(StraightSpinePower), 2, "Straight spine power");

            OnSettingsApplied();
        }
示例#30
0
        public unsafe override void OnApplicationStart()
        {
            if (!SteamClient.IsValid)
            {
                SteamClient.Init(823500);
            }

#if DEBUG
            MelonModLogger.LogWarning("Debug build!");
#endif

            MelonLogger.Log($"Multiplayer initialising with protocol version {PROTOCOL_VERSION}.");

            // Set up prefs
            MelonPrefs.RegisterCategory("MPMod", "Multiplayer Settings");
            MelonPrefs.RegisterBool("MPMod", "BaldFord", false, "90% effective hair removal solution");

            // Initialise transport layer
            TransportLayer = new SteamTransportLayer();

            // Create the UI and cache the PlayerRep's model
            ui     = new MultiplayerUI();
            client = new Client(ui, TransportLayer);
            server = new Server(ui, TransportLayer);
            PlayerRep.LoadFord();

            // Configures if the PlayerRep's are showing or hiding certain parts
            PlayerRep.showBody = true;
            PlayerRep.showHair = MelonPrefs.GetBool("MPMod", "BaldFord");

            // Initialize Discord's RichPresence
            RichPresence.Initialise(701895326600265879);
            client.SetupRP();

            BWUtil.Hook();

            UnhollowerRuntimeLib.ClassInjector.RegisterTypeInIl2Cpp <SyncedObject>();
        }