Esempio n. 1
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
                    );
            }
        }
        private void HandlePlayerConnected(IConnectedPlayer player)
        {
            ExtendedPlayer?exPlayer = _playerManager.GetExtendedPlayer(player);

            if (exPlayer != null)
            {
                _placeManager.SetPlayerPlaceColor(player, exPlayer.playerColor);
            }
        }
        private bool IsPlayerReady(IConnectedPlayer player)
        {
            if (player.HasState("start_primed"))
            {
                return(true);
            }

            // player is not modded: always assume ready
            if (!player.HasState("modded"))
            {
                return(true);
            }

            var extendedPlayer = _extendedPlayerManager.GetExtendedPlayer(player);

            // did not receive mpexVersion from player or the version is too old: assume the player is ready to prevent getting stuck at "Loading..." screen
            if (extendedPlayer == null)
            {
                return(true);
            }
            if (extendedPlayer.mpexVersion == null || extendedPlayer.mpexVersion < _minVersionStartPrimed)
            {
                return(true);
            }

            return(false);
        }
        public override void HandleMenuRpcManagerSelectedGameplayModifiers(string userId, GameplayModifiers gameplayModifiers)
        {
            ExtendedPlayer?player = _playerManager.GetExtendedPlayer(userId);

            if (player != null)
            {
                player.lastModifiers = gameplayModifiers;
            }
            base.HandleMenuRpcManagerSelectedGameplayModifiers(userId, gameplayModifiers);
            if (userId == hostUserId && MPState.FreeModEnabled)
            {
                GameplayModifiers localModifiers = GetPlayerGameplayModifiers(localUserId);
                if (localModifiers.songSpeed != gameplayModifiers.songSpeed)
                {
                    base.SetLocalPlayerGameplayModifiers(localModifiers.CopyWith(songSpeed: gameplayModifiers.songSpeed));
                }
            }
        }