Esempio n. 1
0
        private void OnMenuSceneLoadedFresh(ScenesTransitionSetupDataSO data)
        {
            Log.Info("OnMenuSceneLoadedFresh()");

            Songs = new GameObject("SongDataCore_BeatStar").AddComponent <BeatStarDatabase>();
            UnityEngine.Object.DontDestroyOnLoad(Songs.gameObject);

            // Force false, always load the database here.
            DatabasesLoaded = false;
            LoadDatabases();
        }
Esempio n. 2
0
        private async Task <string> FindBridge()
        {
            log.Info("Searching for bridge...");
            var overrideIP = prefs.GetString("HueSaber", "overrideIP");

            if (overrideIP != "")
            {
                log.Info("Using IP address override.");
                return(overrideIP);
            }
            else
            {
                return((await new HttpBridgeLocator().LocateBridgesAsync(TimeSpan.FromSeconds(5))).FirstOrDefault()?.IpAddress);
            }
        }
        public void Init(IPA.Logging.Logger log)
        {
            if (_init)
            {
                return;
            }
            _init = true;

            logger = log;

            harmonyInstance = HarmonyInstance.Create("slaynash.discordpresence");

            gameObject = Resources.FindObjectsOfTypeAll <MonoBehaviour>().First(c => c.GetType().Name == "PluginComponent");

            try
            {
                logger.Info("Initializing");

                logger.Info("Starting Discord RichPresence");
                var handlers = new DiscordRpc.EventHandlers();
                DiscordRpc.Initialize(DiscordAppID, ref handlers, false, string.Empty);

                logger.Info("Fetching nonpublic fields");
                _gameplayCoreSceneSetupDataField = typeof(SceneSetup <GameplayCoreSceneSetupData>).GetField("_sceneSetupData", BindingFlags.NonPublic | BindingFlags.Instance);
                _oneColorBeatmapCharacteristic   = typeof(GameplayCoreSceneSetup).GetField("_oneColorBeatmapCharacteristic", BindingFlags.NonPublic | BindingFlags.Instance);
#if DEBUG
                logger.Debug("Discord Presence - Field SceneSetup<GameplayCoreSceneSetupData>._sceneSetupData: " + _gameplayCoreSceneSetupDataField);
#endif
                if (_gameplayCoreSceneSetupDataField == null)
                {
                    logger.Error("Unable to fetch SceneSetup<GameplayCoreSceneSetupData>._sceneSetupData");
                    return;
                }

                logger.Info("Init done !");
            }
            catch (Exception e)
            {
                logger.Error("Unable to initialize plugin:\n" + e);
            }
        }
        public void OnApplicationStart()
        {
            logger.Info("Looking for BeatSaberMultiplayer");
            PluginLoader.PluginInfo beatsabermultiplayer = PluginManager.GetPluginFromId("BeatSaberMultiplayer");
            if (beatsabermultiplayer != null)
            {
                Type multiplayerClientType = beatsabermultiplayer.Metadata.Assembly.GetType("BeatSaberMultiplayer.Client");
                if (multiplayerClientType != null)
                {
                    clientInstanceField       = multiplayerClientType.GetField("instance", (BindingFlags)(-1));
                    clientInstanceInroomField = multiplayerClientType.GetField("inRoom", (BindingFlags)(-1));
                    logger.Info("BeatSaberMultiplayer found and linked.");
                }
                else
                {
                    logger.Warn("Found BeatSaberMultiplayer, but not type BeatSaberMultiplayer.Client. Multiplayer won't be shown on discord.");
                }
            }
            logger.Info("Looking for YURFit (IPA)");
#pragma warning disable CS0618
            IPlugin yurfit = PluginManager.Plugins.FirstOrDefault((IPlugin x) => x.Name == "YURfitMod");
            if (yurfit != null)
            {
                Type yurpresence = yurfit.GetType().Assembly.GetType("YURfitMod.RPC.YURpresence");
                if (yurpresence != null)
                {
                    harmonyInstance.Patch(yurpresence.GetMethod("Awake", (BindingFlags)(-1)), GetVoidPatch(), null, null);
                    harmonyInstance.Patch(yurpresence.GetMethod("Menu", (BindingFlags)(-1)), GetVoidPatch(), null, null);
                    logger.Info("YURFit found as IPA Plugin and patched.");
                }
                else
                {
                    logger.Warn("Found YURFit as IPA Plugin, but not type YURfitMod.RPC.YURpresence. There may be some conflivts between the two mods.");
                }
            }
#pragma warning restore CS0618
        }