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)); } } }