From 0d36e73d63c995a6a129a29e559bda527ef96454 Mon Sep 17 00:00:00 2001 From: Auros Nexus <41306347+Auros@users.noreply.github.com> Date: Tue, 5 Jul 2022 17:30:12 -0400 Subject: [PATCH 1/2] Multi Score Submission Disabling & New Locations --- SiraUtil.Suite/Plugin.cs | 2 -- .../Tests/SubmissionTest/DisableSubmission.cs | 2 +- SiraUtil/Installers/SiraMenuInstaller.cs | 1 + ...SiraStandardCampaignMultiplayerInstaller.cs} | 2 +- SiraUtil/Plugin.cs | 2 +- SiraUtil/Submissions/MultiplayerDisplayer.cs | 10 ++++++++++ .../Submissions/SubmissionCompletionInjector.cs | 8 +++++--- SiraUtil/Submissions/SubmissionPatches.cs | 17 +++++++++++++++++ SiraUtil/Zenject/Location.cs | 14 ++++++++++++-- SiraUtil/Zenject/Zenjector.cs | 4 ++++ SiraUtil/manifest.json | 4 ++-- 11 files changed, 54 insertions(+), 12 deletions(-) rename SiraUtil/Installers/{SiraStandardCampaignInstaller.cs => SiraStandardCampaignMultiplayerInstaller.cs} (81%) create mode 100644 SiraUtil/Submissions/MultiplayerDisplayer.cs diff --git a/SiraUtil.Suite/Plugin.cs b/SiraUtil.Suite/Plugin.cs index e52ea0c..176c6cd 100644 --- a/SiraUtil.Suite/Plugin.cs +++ b/SiraUtil.Suite/Plugin.cs @@ -47,8 +47,6 @@ public Plugin(IPALogger logger, Zenjector zenjector) { //Container.RegisterRedecorator(new ConnectedPlayerNoteRegistration(Create)); }); - - //zenjector.Install(Location.StandardPlayer | Location.CampaignPlayer, Container => Container.BindInterfacesTo().AsSingle()); } private GameNoteController Create2(GameNoteController before) diff --git a/SiraUtil.Suite/Tests/SubmissionTest/DisableSubmission.cs b/SiraUtil.Suite/Tests/SubmissionTest/DisableSubmission.cs index f11cd68..e634a3d 100644 --- a/SiraUtil.Suite/Tests/SubmissionTest/DisableSubmission.cs +++ b/SiraUtil.Suite/Tests/SubmissionTest/DisableSubmission.cs @@ -6,7 +6,7 @@ namespace SiraUtil.Suite.Tests.SubmissionTest { - [Bind(Location.StandardPlayer)] + [Bind(Location.StandardPlayer | Location.MultiPlayer)] internal class DisableSubmission : IInitializable { private readonly SiraLog _siraLog; diff --git a/SiraUtil/Installers/SiraMenuInstaller.cs b/SiraUtil/Installers/SiraMenuInstaller.cs index 44cc3f8..e211ebd 100644 --- a/SiraUtil/Installers/SiraMenuInstaller.cs +++ b/SiraUtil/Installers/SiraMenuInstaller.cs @@ -13,6 +13,7 @@ public override void InstallBindings() // Score Submission Container.Bind().FromNewComponentAsViewController().AsSingle(); + Container.BindInterfacesTo().AsSingle(); Container.BindInterfacesTo().AsSingle(); Container.BindInterfacesTo().AsSingle(); } diff --git a/SiraUtil/Installers/SiraStandardCampaignInstaller.cs b/SiraUtil/Installers/SiraStandardCampaignMultiplayerInstaller.cs similarity index 81% rename from SiraUtil/Installers/SiraStandardCampaignInstaller.cs rename to SiraUtil/Installers/SiraStandardCampaignMultiplayerInstaller.cs index afee5d5..d3a93e1 100644 --- a/SiraUtil/Installers/SiraStandardCampaignInstaller.cs +++ b/SiraUtil/Installers/SiraStandardCampaignMultiplayerInstaller.cs @@ -3,7 +3,7 @@ namespace SiraUtil.Installers { - internal class SiraStandardCampaignInstaller : Installer + internal class SiraStandardCampaignMultiplayerInstaller : Installer { public override void InstallBindings() { diff --git a/SiraUtil/Plugin.cs b/SiraUtil/Plugin.cs index e438ce3..43c6dd1 100644 --- a/SiraUtil/Plugin.cs +++ b/SiraUtil/Plugin.cs @@ -40,7 +40,7 @@ public Plugin(Conf conf, IPALogger logger, PluginMetadata pluginMetadata) PluginInitInjector.AddInjector(typeof(Zenjector), ConstructZenjector); Zenjector zenjector = (ConstructZenjector(null!, null!, pluginMetadata) as Zenjector)!; - zenjector.Install(Location.StandardPlayer | Location.CampaignPlayer); + zenjector.Install(Location.StandardPlayer | Location.CampaignPlayer | Location.MultiPlayer); zenjector.Install(Location.App, _zenjectManager, zenjector); zenjector.Install(Location.Menu | Location.Player | Location.Tutorial); zenjector.Install(Location.Player | Location.Tutorial); diff --git a/SiraUtil/Submissions/MultiplayerDisplayer.cs b/SiraUtil/Submissions/MultiplayerDisplayer.cs new file mode 100644 index 0000000..a4b1cef --- /dev/null +++ b/SiraUtil/Submissions/MultiplayerDisplayer.cs @@ -0,0 +1,10 @@ +namespace SiraUtil.Submissions +{ + internal sealed class MultiplayerDisplayer : SubmissionDisplayer + { + public MultiplayerDisplayer(GameServerLobbyFlowCoordinator gameServerLobbyFlowCoordinator, MultiplayerResultsViewController multiplayerResultsViewController) : base(gameServerLobbyFlowCoordinator, multiplayerResultsViewController) + { + + } + } +} \ No newline at end of file diff --git a/SiraUtil/Submissions/SubmissionCompletionInjector.cs b/SiraUtil/Submissions/SubmissionCompletionInjector.cs index 3206f2d..ad24456 100644 --- a/SiraUtil/Submissions/SubmissionCompletionInjector.cs +++ b/SiraUtil/Submissions/SubmissionCompletionInjector.cs @@ -8,27 +8,29 @@ internal class SubmissionCompletionInjector : IAffinity { private readonly bool _inMission; private readonly bool _inStandard; + private readonly bool _inMultiplayer; private readonly Submission _submission; private readonly SubmissionDataContainer _submissionDataContainer; - public SubmissionCompletionInjector(Submission submission, SubmissionDataContainer submissionDataContainer, [InjectOptional] MissionGameplaySceneSetupData missionGameplaySceneSetupData, [InjectOptional] StandardGameplaySceneSetupData standardGameplaySceneSetupData) + public SubmissionCompletionInjector(Submission submission, SubmissionDataContainer submissionDataContainer, [InjectOptional] MissionGameplaySceneSetupData missionGameplaySceneSetupData, [InjectOptional] StandardGameplaySceneSetupData standardGameplaySceneSetupData, [InjectOptional] MultiplayerLevelSceneSetupData multiplayerLevelSceneSetupData) { _submission = submission; _submissionDataContainer = submissionDataContainer; _inMission = missionGameplaySceneSetupData != null; _inStandard = standardGameplaySceneSetupData != null; + _inMultiplayer = multiplayerLevelSceneSetupData != null; _submissionDataContainer.SSS(true); } [AffinityPatch(typeof(PrepareLevelCompletionResults), nameof(PrepareLevelCompletionResults.FillLevelCompletionResults))] private void StandardResultsPrepared(ref LevelCompletionResults __result) { - if (!(_inStandard || _inMission)) + if (!(_inStandard || _inMission || _inMultiplayer)) return; if (_submission.Activated) { - if (_inStandard) + if (_inStandard || _inMultiplayer) { _submissionDataContainer.SSS(false); } diff --git a/SiraUtil/Submissions/SubmissionPatches.cs b/SiraUtil/Submissions/SubmissionPatches.cs index f05507e..d7ae2ee 100644 --- a/SiraUtil/Submissions/SubmissionPatches.cs +++ b/SiraUtil/Submissions/SubmissionPatches.cs @@ -24,6 +24,23 @@ internal static void DynamicFinish(LevelCompletionResults levelCompletionResults } } + + [HarmonyPatch(typeof(MultiplayerLevelCompletionResults), nameof(MultiplayerLevelCompletionResults.hasAnyResults), MethodType.Getter)] + internal class Multi + { + [HarmonyPrefix] + internal static bool DynamicFinish(MultiplayerLevelCompletionResults __instance, ref bool __result) + { + if (__instance.levelCompletionResults is SiraLevelCompletionResults siraLevelCompletionResults && !siraLevelCompletionResults.ShouldSubmitScores) + { + __result = false; + return false; + } + return true; + } + } + + internal static void ForcePracticeIfScoresDisabled(LevelCompletionResults levelCompletionResults, ref bool practice) { if (levelCompletionResults is SiraLevelCompletionResults siraLevelCompletionResults && !siraLevelCompletionResults.ShouldSubmitScores) diff --git a/SiraUtil/Zenject/Location.cs b/SiraUtil/Zenject/Location.cs index 9b3abab..9f5b967 100644 --- a/SiraUtil/Zenject/Location.cs +++ b/SiraUtil/Zenject/Location.cs @@ -34,7 +34,7 @@ public enum Location CampaignPlayer = 8, /// - /// Installs your bindings onto the local multiplayer player. The current backing installer is + /// Installs your bindings onto the local active multi player. Think of this as when the local user is actively playing the song. The current backing installer is /// MultiPlayer = 16, @@ -70,6 +70,16 @@ public enum Location /// /// Installs your bindings onto every connected player in multiplayer. The current backing installer is /// - ConnectedPlayer = 256 + ConnectedPlayer = 256, + + /// + /// Installs your bindings onto the local active player in multiplayer. This is the current local player, no matter if they're spectating or not. The current backing installer is + /// + AlwaysMultiPlayer = 512, + + /// + /// Installs your bindings onto the local inactive player in multiplayer. Think of this as when the local user is spectating in multiplayer. The current backing installer is + /// + InactiveMultiPlayer = 1024, } } \ No newline at end of file diff --git a/SiraUtil/Zenject/Zenjector.cs b/SiraUtil/Zenject/Zenjector.cs index 1066d57..88e70ae 100644 --- a/SiraUtil/Zenject/Zenjector.cs +++ b/SiraUtil/Zenject/Zenjector.cs @@ -130,6 +130,10 @@ private IEnumerable InstallerForLocation(Location location) installerTypes.Add(typeof(MultiplayerCoreInstaller)); if (location.HasFlag(Location.ConnectedPlayer)) installerTypes.Add(typeof(MultiplayerConnectedPlayerInstaller)); + if (location.HasFlag(Location.AlwaysMultiPlayer)) + installerTypes.Add(typeof(MultiplayerLocalPlayerInstaller)); + if (location.HasFlag(Location.InactiveMultiPlayer)) + installerTypes.Add(typeof(MultiplayerLocalInactivePlayerInstaller)); return installerTypes; } diff --git a/SiraUtil/manifest.json b/SiraUtil/manifest.json index 8b6aafb..68c9cbf 100644 --- a/SiraUtil/manifest.json +++ b/SiraUtil/manifest.json @@ -3,10 +3,10 @@ "id": "SiraUtil", "name": "SiraUtil", "author": "Auros", - "version": "3.0.6", + "version": "3.1.0", "icon": "SiraUtil.Resources.logo.png", "description": "A powerful utility mod which expands the capabilities and provides more tools to Beat Saber modders.", - "gameVersion": "1.21.0", + "gameVersion": "1.23.0", "dependsOn": { "BSIPA": "^4.2.1" }, From b851d85ee9681e098c45a2449527516674fa3e52 Mon Sep 17 00:00:00 2001 From: Auros Nexus <41306347+Auros@users.noreply.github.com> Date: Tue, 5 Jul 2022 17:35:15 -0400 Subject: [PATCH 2/2] oh i am very tired --- SiraUtil/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SiraUtil/manifest.json b/SiraUtil/manifest.json index 68c9cbf..61235c2 100644 --- a/SiraUtil/manifest.json +++ b/SiraUtil/manifest.json @@ -6,7 +6,7 @@ "version": "3.1.0", "icon": "SiraUtil.Resources.logo.png", "description": "A powerful utility mod which expands the capabilities and provides more tools to Beat Saber modders.", - "gameVersion": "1.23.0", + "gameVersion": "1.22.1", "dependsOn": { "BSIPA": "^4.2.1" },