internal static void Postfix(ref GameplayCoreInstaller __instance)
        {
            var  mib              = __instance as MonoInstallerBase;
            var  Container        = SiraUtil.Accessors.GetDiContainer(ref mib);
            bool isNotMultiplayer = !Container.HasBinding <MultiplayerLevelSceneSetupData>();

            if (isNotMultiplayer)
            {
                var config    = Container.Resolve <Config>();
                var submit    = Container.Resolve <Submission>();
                var setupData = Container.Resolve <GameplayCoreSceneSetupData>();
                var spawnControllerInitData = Container.Resolve <BeatmapObjectSpawnController.InitData>();
                if (config.Tweaks.Any(x => x.LevelInfo.Equals(setupData.difficultyBeatmap, Plugin.lastSelectedMode) && x.Selected))
                {
                    var tweak = config.Tweaks.Where(x => x.LevelInfo.Equals(setupData.difficultyBeatmap, Plugin.lastSelectedMode) && x.Selected).FirstOrDefault();

                    if (tweak.NJS != setupData.difficultyBeatmap.noteJumpMovementSpeed)
                    {
                        submit.DisableScoreSubmission("LevelTweaks", "Different NJS");
                    }
                    spawnControllerInitData.SetField("noteJumpMovementSpeed", tweak.NJS);
                    spawnControllerInitData.SetField("noteJumpStartBeatOffset", tweak.Offset);
                }
            }
        }
Пример #2
0
        internal static void Prefix(ref GameplayCoreInstaller __instance, ref IConnectedPlayer ____connectedPlayer, ref GameplayCoreSceneSetupData ____sceneSetupData)
        {
            var mib       = __instance as MonoInstallerBase;
            var Container = SiraUtil.Accessors.GetDiContainer(ref mib);

            ExtendedPlayerManager exPlayerManager = Container.Resolve <ExtendedPlayerManager>();
            ExtendedPlayer?       exPlayer        = exPlayerManager.GetExtendedPlayer(____connectedPlayer);
            ExtendedPlayer?       hostPlayer      = exPlayerManager.GetExtendedPlayer(Container.Resolve <IMultiplayerSessionManager>().connectionOwner);

            GameplayModifiers?newModifiers;

            if (____connectedPlayer.HasState("modded") && MPState.FreeModEnabled && exPlayer?.mpexVersion >= _minVersionFreeMod)
            {
                newModifiers = exPlayer.lastModifiers;
            }
            else
            {
                newModifiers = hostPlayer?.lastModifiers;
            }

            if (newModifiers != null)
            {
                ____sceneSetupData = new GameplayCoreSceneSetupData(
                    ____sceneSetupData.difficultyBeatmap,
                    ____sceneSetupData.previewBeatmapLevel,
                    newModifiers,
                    ____sceneSetupData.playerSpecificSettings,
                    ____sceneSetupData.practiceSettings,
                    ____sceneSetupData.useTestNoteCutSoundEffects,
                    ____sceneSetupData.environmentInfo,
                    ____sceneSetupData.colorScheme
                    );
            }
        }
        internal static void Prefix(GameplayCoreInstaller __instance, ref GameplayCoreSceneSetupData ____sceneSetupData)
        {
            var mib       = __instance as MonoInstallerBase;
            var Container = Accessors.GetDiContainer(ref mib);

            Container.BindInterfacesAndSelfTo <Submission>().AsSingle();
        }
Пример #4
0
        private static DiContainer GetContainer(GameplayCoreInstaller gameplayCoreInstaller)
        {
            MonoInstallerBase monoInstaller = gameplayCoreInstaller;
            DiContainer       container     = GetDiContainer(ref monoInstaller);

            return(container);
        }
Пример #5
0
        internal static void Prefix(ref GameplayCoreInstaller __instance, ref GameplayCoreSceneSetupData ____sceneSetupData)
        {
            var container = GetContainer(__instance);
            var settings  = container.Resolve <MiscSettings>();

            if (settings.BPMFixEnabled)
            {
                bool actually360            = false;
                var  data                   = ____sceneSetupData.difficultyBeatmap.beatmapData.beatmapEventsData;
                var  spawnRotationProcessor = new SpawnRotationProcessor();
                for (int i = 0; i < data.Count; i++)
                {
                    var bmEvent = data[i];
                    if (bmEvent.type == BeatmapEventType.Event14 || bmEvent.type == BeatmapEventType.Event15)
                    {
                        if (spawnRotationProcessor.RotationForEventValue(bmEvent.value) != 0)
                        {
                            actually360 = true;
                        }
                    }
                }
                if (!actually360)
                {
                    var beatmapData = ____sceneSetupData.difficultyBeatmap.beatmapData;
                    SetRotationCount(ref beatmapData, 0);
                }
            }
        }
Пример #6
0
        internal static void Postfix(ref GameplayCoreInstaller __instance, ref GameplayCoreSceneSetupData ____sceneSetupData)
        {
            var container = GetContainer(__instance);
            var settings  = container.Resolve <MiscSettings>();

            if (settings.BPMFixEnabled)
            {
                bool actually360 = false;
                foreach (var item in ____sceneSetupData.transformedBeatmapData.allBeatmapDataItems)
                {
                    if (item is SpawnRotationBeatmapEventData rotation)
                    {
                        if (rotation.rotation != 0)
                        {
                            actually360 = true;
                            break;
                        }
                    }
                }
                if (!actually360)
                {
                    container.Unbind <BeatLineManager>();
                }
            }
        }
Пример #7
0
        internal static void Prefix(GameplayCoreInstaller __instance)
        {
            var mib       = __instance as MonoInstallerBase;
            var Container = Accessors.GetDiContainer(ref mib);

            if (!Container.HasBinding <Submission>())
            {
                Container.BindInterfacesAndSelfTo <Submission>().AsSingle();
            }
        }
Пример #8
0
        ////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////

        /// <summary>
        /// Prefix
        /// </summary>
        /// <param name="__instance">GameplayCoreInstaller instance</param>
        internal static void Prefix(ref GameplayCoreInstaller __instance, ref GameplayCoreSceneSetupData ____sceneSetupData)
        {
            if (!(Config.GameTweaker.Enabled && Config.GameTweaker.NoFake360HUD))
            {
                return;
            }

            IDifficultyBeatmap l_IDifficultyBeatmap                   = ____sceneSetupData.difficultyBeatmap;
            IReadOnlyList <BeatmapEventData> l_BeatmapEventData       = l_IDifficultyBeatmap.beatmapData.beatmapEventsData;
            SpawnRotationProcessor           l_SpawnRotationProcessor = new SpawnRotationProcessor();
            bool l_Is360 = false;

            foreach (BeatmapEventData l_CurrentEvent in l_BeatmapEventData)
            {
                if (!(l_CurrentEvent.type == BeatmapEventType.Event14 || l_CurrentEvent.type == BeatmapEventType.Event15))
                {
                    continue;
                }

                if (l_SpawnRotationProcessor.RotationForEventValue(l_CurrentEvent.value) != 0)
                {
                    l_Is360 = true;
                    break;
                }
            }

            if (!l_Is360)
            {
                /// Backup data
                m_BeatMapToRestore      = l_IDifficultyBeatmap.beatmapData;
                m_BeatMapToRestoreValue = l_IDifficultyBeatmap.beatmapData.spawnRotationEventsCount;

                /// Add on scene change event callback
                SDK.Game.Logic.OnSceneChange += Game_OnSceneChange;

                /// Update rotation count
                IPA.Utilities.ReflectionUtil.SetProperty <BeatmapData, int>(l_IDifficultyBeatmap.beatmapData, "spawnRotationEventsCount", 0);
            }
        }