diff --git a/AquaMai.Config/Config.cs b/AquaMai.Config/Config.cs index 9e445c2d..5a92eebc 100644 --- a/AquaMai.Config/Config.cs +++ b/AquaMai.Config/Config.cs @@ -35,7 +35,17 @@ public class Config : IConfig foreach (var section in reflectionManager.SectionValues) { - InitializeSection(section); + try + { + InitializeSection(section); + } + catch (Exception ex) + { + Utility.Log($"Failed to initialize config section {section.Path}"); +#if DEBUG + Utility.Log(ex.ToString()); +#endif + } } } diff --git a/AquaMai.Core/AquaMai.Core.csproj b/AquaMai.Core/AquaMai.Core.csproj index 25ce5926..8ebaaee3 100644 --- a/AquaMai.Core/AquaMai.Core.csproj +++ b/AquaMai.Core/AquaMai.Core.csproj @@ -36,7 +36,10 @@ - + + ../Libs/mscorlib.dll + False + diff --git a/AquaMai.Core/Extensions.cs b/AquaMai.Core/Extensions.cs new file mode 100644 index 00000000..8b1a16f1 --- /dev/null +++ b/AquaMai.Core/Extensions.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; + +namespace AquaMai.Core; + +// Unity 2017 兼容 +public static class Extensions +{ + public static TValue GetValueOrDefault(this Dictionary dic, TKey key, TValue defaultValue = default) + { + return dic.TryGetValue(key, out var value) ? value : defaultValue; + } + + public static void Deconstruct(this KeyValuePair kvp, out TKey key, out TValue value) + { + key = kvp.Key; + value = kvp.Value; + } +} \ No newline at end of file diff --git a/AquaMai.Core/Helpers/EnableConditionHelper.cs b/AquaMai.Core/Helpers/EnableConditionHelper.cs index 475c24ae..16501d17 100644 --- a/AquaMai.Core/Helpers/EnableConditionHelper.cs +++ b/AquaMai.Core/Helpers/EnableConditionHelper.cs @@ -55,6 +55,17 @@ public class EnableConditionHelper # endif return true; } + return ShouldSkipMethodOrClassByGameVersion(getCustomAttribute, type, displayName); + } + + public static bool ShouldSkipClassByGameVersion(Type type) + { + return ShouldSkipMethodOrClassByGameVersion(type.GetCustomAttribute, type); + } + + private static bool ShouldSkipMethodOrClassByGameVersion(Func getCustomAttribute, Type type, string methodName = "") + { + var displayName = type.FullName + (string.IsNullOrEmpty(methodName) ? "" : $".{methodName}"); var enableGameVersion = (EnableGameVersionAttribute)getCustomAttribute(typeof(EnableGameVersionAttribute)); if (enableGameVersion != null && !enableGameVersion.ShouldEnable(GameInfo.GameVersion)) { diff --git a/AquaMai.Core/Helpers/MessageHelper.cs b/AquaMai.Core/Helpers/MessageHelper.cs index 6de142da..cf0001da 100644 --- a/AquaMai.Core/Helpers/MessageHelper.cs +++ b/AquaMai.Core/Helpers/MessageHelper.cs @@ -18,7 +18,16 @@ public class MessageHelper _genericManager = genericManager; } - public static void ShowMessage(string message, WindowSizeID size = WindowSizeID.Middle, string title = null, Sprite sprite = null, bool retain = false) + public delegate void ShowMessageDelegate(string message, WindowSizeID size = WindowSizeID.Middle, string title = null, Sprite sprite = null, bool retain = false); + + public static ShowMessageDelegate ShowMessage = GameInfo.GameVersion > 22000 + ? _ShowMessage + : (string message, WindowSizeID size = WindowSizeID.Middle, string title = null, Sprite sprite = null, bool retain = false) => + { + MelonLogger.Warning($"[MessageHelper] ShowMessage is not supported in this game version. {title}: {message}"); + }; + + private static void _ShowMessage(string message, WindowSizeID size = WindowSizeID.Middle, string title = null, Sprite sprite = null, bool retain = false) { if (_genericManager is null) { diff --git a/AquaMai.Core/Startup.cs b/AquaMai.Core/Startup.cs index 89667d4a..1ce9f3c6 100644 --- a/AquaMai.Core/Startup.cs +++ b/AquaMai.Core/Startup.cs @@ -84,6 +84,11 @@ public class Startup private static void CollectWantedPatches(List wantedPatches, Type type) { + if (EnableConditionHelper.ShouldSkipClassByGameVersion(type)) + { + return; + } + InvokeLifecycleMethod(type, ModLifecycleMethod.OnBeforeEnableCheck); if (EnableConditionHelper.ShouldSkipClass(type)) diff --git a/AquaMai.Mods/AquaMai.Mods.csproj b/AquaMai.Mods/AquaMai.Mods.csproj index 05cc17de..5545a6da 100644 --- a/AquaMai.Mods/AquaMai.Mods.csproj +++ b/AquaMai.Mods/AquaMai.Mods.csproj @@ -37,7 +37,10 @@ - + + ../Libs/mscorlib.dll + False + diff --git a/AquaMai.Mods/Enhancement/ServerAnnouncement.cs b/AquaMai.Mods/Enhancement/ServerAnnouncement.cs index 20ab399e..de045d35 100644 --- a/AquaMai.Mods/Enhancement/ServerAnnouncement.cs +++ b/AquaMai.Mods/Enhancement/ServerAnnouncement.cs @@ -1,6 +1,7 @@ using System.Collections; using System.Linq; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using AquaMai.Mods.Types; using DB; @@ -25,6 +26,7 @@ namespace AquaMai.Mods.Enhancement; 显示来自兼容服务端的公告 (对其他服务器无副作用,不会发出额外请求) """)] +[EnableGameVersion(23000)] public static class ServerAnnouncement { private class ServerAnnouncementEntry : ConditionalMessage diff --git a/AquaMai.Mods/Enhancement/ServerNotice.cs b/AquaMai.Mods/Enhancement/ServerNotice.cs index 8c9b0766..3ef10911 100644 --- a/AquaMai.Mods/Enhancement/ServerNotice.cs +++ b/AquaMai.Mods/Enhancement/ServerNotice.cs @@ -1,5 +1,6 @@ using System.Linq; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using AquaMai.Mods.Types; using JetBrains.Annotations; @@ -19,6 +20,7 @@ namespace AquaMai.Mods.Enhancement; 在用户登录之类的时候,显示来自兼容服务器的额外信息 (对其他服务器无副作用,不会发出额外请求) """)] +[EnableGameVersion(23000)] public class ServerNotice { private const string FieldName = "_aquaMaiServerNotice"; diff --git a/AquaMai.Mods/Enhancement/ServerResources.cs b/AquaMai.Mods/Enhancement/ServerResources.cs index 62008cff..89bf5c44 100644 --- a/AquaMai.Mods/Enhancement/ServerResources.cs +++ b/AquaMai.Mods/Enhancement/ServerResources.cs @@ -7,6 +7,7 @@ using System.Linq; using System.Reflection; using System.Security.Cryptography; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using AquaMai.Mods.Types; using HarmonyLib; @@ -24,6 +25,7 @@ namespace AquaMai.Mods.Enhancement; defaultOn: true, exampleHidden: true, zh: "加载服务器下发的资源(如果支持)")] +[EnableGameVersion(23000)] public class ServerResources { [ConfigEntry] diff --git a/AquaMai.Mods/Fancy/CustomTrackStartDiff.cs b/AquaMai.Mods/Fancy/CustomTrackStartDiff.cs index 097d4774..2bb8e26f 100644 --- a/AquaMai.Mods/Fancy/CustomTrackStartDiff.cs +++ b/AquaMai.Mods/Fancy/CustomTrackStartDiff.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using Monitor; using UI; @@ -20,6 +21,7 @@ namespace AquaMai.Mods.Fancy; 需要启用自定义皮肤功能 会通过自定义皮肤加载四个图片资源: musicBase, musicTab, musicLvBase, musicLvText """)] +[EnableGameVersion(23000)] public class CustomTrackStartDiff { // 自定义在歌曲开始界面上显示的难度 (并不是真的自定义难度) diff --git a/AquaMai.Mods/Fancy/GamePlay/CustomNoteTypes/CustomNoteTypes.cs b/AquaMai.Mods/Fancy/GamePlay/CustomNoteTypes/CustomNoteTypes.cs index 2aa0b838..7f03aa46 100644 --- a/AquaMai.Mods/Fancy/GamePlay/CustomNoteTypes/CustomNoteTypes.cs +++ b/AquaMai.Mods/Fancy/GamePlay/CustomNoteTypes/CustomNoteTypes.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Reflection; using System.Reflection.Emit; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using DB; using HarmonyLib; using MAI2.Util; @@ -20,6 +21,7 @@ namespace AquaMai.Mods.Fancy.GamePlay.CustomNoteTypes; name: "自定义 Note 类型", en: "Custom Note Types." )] +[EnableGameVersion(23000)] public class CustomNoteTypes { /* diff --git a/AquaMai.Mods/Fancy/GamePlay/DisableTrackStartTabs.cs b/AquaMai.Mods/Fancy/GamePlay/DisableTrackStartTabs.cs index 4f0e75b4..b70b8f81 100644 --- a/AquaMai.Mods/Fancy/GamePlay/DisableTrackStartTabs.cs +++ b/AquaMai.Mods/Fancy/GamePlay/DisableTrackStartTabs.cs @@ -1,4 +1,5 @@ using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using Monitor; using TMPro; @@ -17,6 +18,7 @@ namespace AquaMai.Mods.Fancy.GamePlay; 在歌曲开始界面, 把 TRACK X 字样, DX/标准谱面的显示框, 以及画面下方的滴蜡熊隐藏掉 录制谱面确认用 """)] +[EnableGameVersion(23000)] public class DisableTrackStartTabs { // 在歌曲开始界面, 把 TRACK X 字样, DX/标准谱面的显示框, 以及画面下方的滴蜡熊隐藏掉, 让他看起来不那么 sinmai, 更像是 majdata diff --git a/AquaMai.Mods/Fancy/GamePlay/FixJudgeTouchHoldInNormalArea.cs b/AquaMai.Mods/Fancy/GamePlay/FixJudgeTouchHoldInNormalArea.cs index 76365ac9..773bcd48 100644 --- a/AquaMai.Mods/Fancy/GamePlay/FixJudgeTouchHoldInNormalArea.cs +++ b/AquaMai.Mods/Fancy/GamePlay/FixJudgeTouchHoldInNormalArea.cs @@ -16,7 +16,7 @@ namespace AquaMai.Mods.Fancy.GamePlay; en: "Enable the game to correctly judge Touch Hold outside the C zone. Experimental implementation, reported to be unstable", zh: "使游戏可以正常判定非 C 区的 Touch Hold。实验性实现,据反馈不稳定" )] -[EnableGameVersion(maxVersion: 25699)] +[EnableGameVersion(23000, 25699)] public class FixJudgeTouchHoldInNormalArea { // This patch fixes the issue in GameVersion <= 1.56 where Touch Hold could appear in any zone but were only judged in C zone diff --git a/AquaMai.Mods/Fancy/GamePlay/SlideArrowAnimation.cs b/AquaMai.Mods/Fancy/GamePlay/SlideArrowAnimation.cs index 474e386d..e3297b1a 100644 --- a/AquaMai.Mods/Fancy/GamePlay/SlideArrowAnimation.cs +++ b/AquaMai.Mods/Fancy/GamePlay/SlideArrowAnimation.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using Manager; using Monitor; @@ -13,6 +14,7 @@ namespace AquaMai.Mods.Fancy.GamePlay; name: "星星缩入动画", en: "Make the Slide Track disappear with an inward-shrinking animation, similar to AstroDX.", zh: "使 Slide Track 消失时有类似 AstroDX 一样的向内缩入的动画")] +[EnableGameVersion(23000)] public class SlideArrowAnimation { private static List _animatingSpriteRenderers = []; diff --git a/AquaMai.Mods/Fancy/GamePlay/SlideFadeInTweak.cs b/AquaMai.Mods/Fancy/GamePlay/SlideFadeInTweak.cs index ef6b0436..a4e64321 100644 --- a/AquaMai.Mods/Fancy/GamePlay/SlideFadeInTweak.cs +++ b/AquaMai.Mods/Fancy/GamePlay/SlideFadeInTweak.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using MAI2.Util; using Manager; @@ -13,6 +14,7 @@ namespace AquaMai.Mods.Fancy.GamePlay; name: "星星渐入", zh: "让星星在启动拍等待期间从 50% 透明度渐入为 100%,取代原本在击打星星头时就完成渐入", en: "Slides will fade in instead of instantly appearing.")] +[EnableGameVersion(23000)] public class SlideFadeInTweak { [HarmonyPrefix] diff --git a/AquaMai.Mods/Fancy/GamePlay/SlideLayerReverse.cs b/AquaMai.Mods/Fancy/GamePlay/SlideLayerReverse.cs index 9b888b37..02e1990f 100644 --- a/AquaMai.Mods/Fancy/GamePlay/SlideLayerReverse.cs +++ b/AquaMai.Mods/Fancy/GamePlay/SlideLayerReverse.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using Monitor; using UnityEngine; @@ -16,6 +17,7 @@ namespace AquaMai.Mods.Fancy.GamePlay; 反转 Slide 层级, 使新出现的 Slide 像旧框一样显示在上层 启用以支持通过叠加多个星星达成的变色效果 """)] +[EnableGameVersion(23000)] public class SlideLayerReverse { [HarmonyPostfix] diff --git a/AquaMai.Mods/Fancy/IgnoreCommercialTimeout.cs b/AquaMai.Mods/Fancy/IgnoreCommercialTimeout.cs index 32a68129..bf791af5 100644 --- a/AquaMai.Mods/Fancy/IgnoreCommercialTimeout.cs +++ b/AquaMai.Mods/Fancy/IgnoreCommercialTimeout.cs @@ -1,4 +1,5 @@ using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using Process.AdvertiseCommercial; @@ -9,6 +10,7 @@ namespace AquaMai.Mods.Fancy; defaultOn: true, en: "Ignores 5 mins total timeout on commercial screen.", zh: "忽略闲置时的视频广告画面的5分钟总时长限制")] +[EnableGameVersion(23000)] public class IgnoreCommercialTimeout { [HarmonyPrefix] diff --git a/AquaMai.Mods/Fancy/TrackCamouflage.cs b/AquaMai.Mods/Fancy/TrackCamouflage.cs index 6dbee52b..4f01ffdd 100644 --- a/AquaMai.Mods/Fancy/TrackCamouflage.cs +++ b/AquaMai.Mods/Fancy/TrackCamouflage.cs @@ -15,6 +15,7 @@ using System.IO; using System.Linq; using System.Reflection; using System.Reflection.Emit; +using AquaMai.Core.Attributes; using Tomlet; using Tomlet.Attributes; using UI.DaisyChainList; @@ -27,6 +28,7 @@ namespace AquaMai.Mods.Fancy; "曲目伪装术", en: "Mimicking KoP final song's hidden track information feature, better paired with custom intro cinematic feature", zh: "仿 KoP 决赛曲揭晓时的曲目信息隐藏特性,配合自定义乐曲开场视频功能使用效果更佳")] +[EnableGameVersion(23000)] public class TrackCamouflage { [ConfigEntry( diff --git a/AquaMai.Mods/Fix/FixLevelDisplay.cs b/AquaMai.Mods/Fix/FixLevelDisplay.cs index fec9215c..c6958a68 100644 --- a/AquaMai.Mods/Fix/FixLevelDisplay.cs +++ b/AquaMai.Mods/Fix/FixLevelDisplay.cs @@ -10,7 +10,7 @@ using UnityEngine; namespace AquaMai.Mods.Fix; -[EnableGameVersion(24000)] +[EnableGameVersion(25000)] [ConfigSection(exampleHidden: true, defaultOn: true)] public class FixLevelDisplay { @@ -28,7 +28,7 @@ public class FixLevelDisplay GameObject ____difficultyUtageQuesionMarkDoubleDigit) { // 在 KLD 表门和里门不应用修改 - if (GameInfo.GameVersion >= 25500 && GameManager.IsKaleidxScopeMode) + if (GameManager.IsKaleidxScopeMode) { if (Singleton.Instance.gateId == 8 || Singleton.Instance.gateId == 10) diff --git a/AquaMai.Mods/Fix/Stability/FixMissingCharaCrash.cs b/AquaMai.Mods/Fix/Stability/FixMissingCharaCrash.cs index 916fb1d4..b0a6efa5 100644 --- a/AquaMai.Mods/Fix/Stability/FixMissingCharaCrash.cs +++ b/AquaMai.Mods/Fix/Stability/FixMissingCharaCrash.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using AquaMai.Config.Attributes; +using AquaMai.Core; using HarmonyLib; using Manager; using Manager.MaiStudio; diff --git a/AquaMai.Mods/GameSystem/Assets/Fonts.cs b/AquaMai.Mods/GameSystem/Assets/Fonts.cs index 18cf2248..3a704fb3 100644 --- a/AquaMai.Mods/GameSystem/Assets/Fonts.cs +++ b/AquaMai.Mods/GameSystem/Assets/Fonts.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Linq; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using HarmonyLib; using MelonLoader; @@ -15,6 +16,7 @@ namespace AquaMai.Mods.GameSystem.Assets; en: "Use custom font(s) as fallback or fully replace the original game font.", zh: "使用自定义字体作为回退(解决中文字形缺失问题),或完全替换游戏原字体", defaultOn: true)] +[EnableGameVersion(23000)] public class Fonts { [ConfigEntry( diff --git a/AquaMai.Mods/GameSystem/Assets/LoadLocalImages.cs b/AquaMai.Mods/GameSystem/Assets/LoadLocalImages.cs index c9c839a2..ac87d3a9 100644 --- a/AquaMai.Mods/GameSystem/Assets/LoadLocalImages.cs +++ b/AquaMai.Mods/GameSystem/Assets/LoadLocalImages.cs @@ -10,6 +10,7 @@ using Manager; using MelonLoader; using Monitor; using AquaMai.Config.Attributes; +using AquaMai.Core; using AquaMai.Core.Helpers; namespace AquaMai.Mods.GameSystem.Assets; diff --git a/AquaMai.Mods/GameSystem/Assets/MovieLoader.cs b/AquaMai.Mods/GameSystem/Assets/MovieLoader.cs index a2d24242..5f50f7af 100644 --- a/AquaMai.Mods/GameSystem/Assets/MovieLoader.cs +++ b/AquaMai.Mods/GameSystem/Assets/MovieLoader.cs @@ -20,6 +20,7 @@ namespace AquaMai.Mods.GameSystem.Assets; en: "Custom Play Song Background\nPriority: game source PV > local mp4 PV > jacket", zh: "自定义歌曲游玩界面背景\n优先级: 首先读游戏自带 PV, 然后读本地 mp4 格式 PV, 最后读封面", defaultOn: true)] +[EnableGameVersion(23000)] public class MovieLoader { [ConfigEntry( diff --git a/AquaMai.Mods/GameSystem/CustomCameraId.cs b/AquaMai.Mods/GameSystem/CustomCameraId.cs index 017b6120..7fa5dcfa 100644 --- a/AquaMai.Mods/GameSystem/CustomCameraId.cs +++ b/AquaMai.Mods/GameSystem/CustomCameraId.cs @@ -7,6 +7,7 @@ using Manager; using MelonLoader; using UnityEngine; using AquaMai.Config.Attributes; +using AquaMai.Core; using AquaMai.Core.Helpers; using AquaMai.Core.Resources; @@ -124,6 +125,28 @@ public class CustomCameraId yield break; } + private static CameraParameter _gameCameraParam; + private static CameraParameter _qrCameraParam; + + [HarmonyPostfix] + [HarmonyPatch(typeof(CameraManager), "Initialize")] + public static void SetCameraResolution(CameraManager __instance) + { + WebCamDevice qrDevice = WebCamTexture.devices[Enum.TryParse("Chime", out _) ? chimeCamera : leftQrCamera]; + WebCamTexture qrTexture = new WebCamTexture(qrDevice.name); + qrTexture.Play(); + _qrCameraParam = new CameraParameter(qrTexture.width, qrTexture.height, (int)qrTexture.requestedFPS); + AccessTools.Field(typeof(CameraManager), "QrCameraParam").SetValue(__instance, _qrCameraParam); + qrTexture.Stop(); + + WebCamDevice gameDevice = WebCamTexture.devices[photoCamera]; + WebCamTexture gameTexture = new WebCamTexture(gameDevice.name); + gameTexture.Play(); + _gameCameraParam = new CameraParameter(gameTexture.width, gameTexture.height, (int)gameTexture.requestedFPS); + AccessTools.Field(typeof(CameraManager), "GameCameraParam").SetValue(__instance, _gameCameraParam); + gameTexture.Stop(); + } + public static void OnBeforePatch() { if (!printCameraList) diff --git a/AquaMai.Mods/GameSystem/DisableTimeout.cs b/AquaMai.Mods/GameSystem/DisableTimeout.cs index e45f94c5..3699d17e 100644 --- a/AquaMai.Mods/GameSystem/DisableTimeout.cs +++ b/AquaMai.Mods/GameSystem/DisableTimeout.cs @@ -16,6 +16,7 @@ namespace AquaMai.Mods.GameSystem; name: "去除倒计时", en: "Disable timers (hidden and set to 65535 seconds).", zh: "去除并隐藏游戏中的倒计时")] +[EnableGameVersion(23000)] public class DisableTimeout { [ConfigEntry( diff --git a/AquaMai.Mods/GameSystem/SinglePlayer.cs b/AquaMai.Mods/GameSystem/SinglePlayer.cs index bda70d69..42160248 100644 --- a/AquaMai.Mods/GameSystem/SinglePlayer.cs +++ b/AquaMai.Mods/GameSystem/SinglePlayer.cs @@ -70,7 +70,7 @@ public partial class SinglePlayer zh: "单人模式下刷卡登录直接进入下一个界面,无需跳过倒计时")] public static bool autoSkip = false; - [EnableGameVersion(21500, noWarn: true)] + [EnableGameVersion(23000, noWarn: true)] [EnableIf(nameof(autoSkip))] [HarmonyPostfix] [HarmonyPatch(typeof(EntryMonitor), "DecideEntry")] diff --git a/AquaMai.Mods/GameSystem/Unlock.cs b/AquaMai.Mods/GameSystem/Unlock.cs index 853ba655..a975ff84 100644 --- a/AquaMai.Mods/GameSystem/Unlock.cs +++ b/AquaMai.Mods/GameSystem/Unlock.cs @@ -14,6 +14,7 @@ using Net.VO.Mai2; using Process; using Util; using System.Runtime.CompilerServices; +using AquaMai.Core; namespace AquaMai.Mods.GameSystem; @@ -29,6 +30,7 @@ namespace AquaMai.Mods.GameSystem; 由本 Mod 解锁的内容(除了被你升级过的角色以外)不会上传到你的账户 游玩时仍会像未开启解锁一样「获得」那些乐曲/收藏品/段位 """)] +[EnableGameVersion(23000)] public class Unlock { public static void OnBeforeEnableCheck() diff --git a/AquaMai.Mods/GameSystem/Window.cs b/AquaMai.Mods/GameSystem/Window.cs index 5bb2681e..cda069c6 100644 --- a/AquaMai.Mods/GameSystem/Window.cs +++ b/AquaMai.Mods/GameSystem/Window.cs @@ -2,6 +2,7 @@ using System.Runtime.InteropServices; using System.Threading.Tasks; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using UnityEngine; namespace AquaMai.Mods.GameSystem; @@ -10,6 +11,7 @@ namespace AquaMai.Mods.GameSystem; name: "图形设置", en: "Resolution Settings / Windowed Mode.", zh: "分辨率设置 / 窗口化")] +[EnableGameVersion(23000)] public class Window { [ConfigEntry( diff --git a/AquaMai.Mods/Tweaks/TimeSaving/EntryToMusicSelection.cs b/AquaMai.Mods/Tweaks/TimeSaving/EntryToMusicSelection.cs index 9eb8237b..87d9d0c3 100644 --- a/AquaMai.Mods/Tweaks/TimeSaving/EntryToMusicSelection.cs +++ b/AquaMai.Mods/Tweaks/TimeSaving/EntryToMusicSelection.cs @@ -19,6 +19,7 @@ namespace AquaMai.Mods.Tweaks.TimeSaving; name: "登录后直接选歌", en: "Directly enter the song selection screen after login.", zh: "登录完成后直接进入选歌界面")] +[EnableGameVersion(23000)] public class EntryToMusicSelection { [ConfigEntry(name: "仅游客模式", zh: "仅在游客模式启用", en: "Enable only in Guest Mode")] diff --git a/AquaMai.Mods/Tweaks/TimeSaving/SkipEventInfo.cs b/AquaMai.Mods/Tweaks/TimeSaving/SkipEventInfo.cs index 78da96c9..2d871189 100644 --- a/AquaMai.Mods/Tweaks/TimeSaving/SkipEventInfo.cs +++ b/AquaMai.Mods/Tweaks/TimeSaving/SkipEventInfo.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using Process; using Process.Information; @@ -10,6 +11,7 @@ namespace AquaMai.Mods.Tweaks.TimeSaving; name: "跳过活动提示", en: "Skip possible prompts like \"New area discovered\", \"New songs added\", \"There are events\" during game login/registration.", zh: "跳过登录 / 注册游戏时候可能的 “发现了新的区域哟” “乐曲增加” “有活动哟” 之类的提示")] +[EnableGameVersion(23000)] public class SkipEventInfo { [HarmonyPostfix] diff --git a/AquaMai.Mods/UX/DontRuinMyAccount.cs b/AquaMai.Mods/UX/DontRuinMyAccount.cs index b88f6d13..a8b3c986 100644 --- a/AquaMai.Mods/UX/DontRuinMyAccount.cs +++ b/AquaMai.Mods/UX/DontRuinMyAccount.cs @@ -20,6 +20,7 @@ namespace AquaMai.Mods.UX; name: "AutoPlay 时不保存成绩", en: "Do not save scores when AutoPlay is used", defaultOn: true)] +[EnableGameVersion(25500)] // 收编自 https://github.com/Starrah/DontRuinMyAccount/blob/master/Core.cs public class DontRuinMyAccount { diff --git a/AquaMai.Mods/UX/FixTrackNumDisplay.cs b/AquaMai.Mods/UX/FixTrackNumDisplay.cs index d5be46db..1bd2ee7a 100644 --- a/AquaMai.Mods/UX/FixTrackNumDisplay.cs +++ b/AquaMai.Mods/UX/FixTrackNumDisplay.cs @@ -1,5 +1,6 @@ using System; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using Manager; using MelonLoader; @@ -13,6 +14,7 @@ namespace AquaMai.Mods.UX; name: "两位数曲目修复", en: "Make track number in top right corner display two digits (in Normal mode)", zh: "让右上角的当前曲目数字可以显示两位数(在普通模式中)")] +[EnableGameVersion(25500)] public class FixTrackNumDisplay { private static Sprite[] customSprites; diff --git a/AquaMai.Mods/UX/GrantFinalGateKey.cs b/AquaMai.Mods/UX/GrantFinalGateKey.cs index 0bd94e56..8eb872ae 100644 --- a/AquaMai.Mods/UX/GrantFinalGateKey.cs +++ b/AquaMai.Mods/UX/GrantFinalGateKey.cs @@ -4,6 +4,7 @@ using System; using MelonLoader; using Manager; using System.Reflection; +using AquaMai.Core.Attributes; using MAI2.Util; using UnityEngine; @@ -15,6 +16,7 @@ namespace AquaMai.Mods.UX; zh: "按 Enter 键获得 KLD 里门的钥匙 (DXPASS)", defaultOn: true )] +[EnableGameVersion(25500)] public class GrantFinalGateKey { [HarmonyPostfix] diff --git a/AquaMai.Mods/UX/Hide1879.cs b/AquaMai.Mods/UX/Hide1879.cs index 52f035a9..5ea6c19e 100644 --- a/AquaMai.Mods/UX/Hide1879.cs +++ b/AquaMai.Mods/UX/Hide1879.cs @@ -3,6 +3,7 @@ using AquaMai.Config.Attributes; using System; using System.Diagnostics; using System.Linq; +using AquaMai.Core.Attributes; using MelonLoader; using Manager; @@ -14,6 +15,7 @@ namespace AquaMai.Mods.UX; zh: "在正常模式中,隐藏乱码曲 Xaleid◆scopiX", defaultOn: true )] +[EnableGameVersion(25500)] public class Hide1879 { [HarmonyPostfix] diff --git a/AquaMai.Mods/UX/ImmediateSave.cs b/AquaMai.Mods/UX/ImmediateSave.cs index 055486fe..62224b17 100644 --- a/AquaMai.Mods/UX/ImmediateSave.cs +++ b/AquaMai.Mods/UX/ImmediateSave.cs @@ -28,6 +28,7 @@ namespace AquaMai.Mods.UX; en: "Save immediate after playing a song.", zh: "打完一首歌的时候立即向服务器保存成绩", defaultOn: true)] +[EnableGameVersion(23000)] public class ImmediateSave { [ConfigEntry(name: "显示保存中提示")] diff --git a/AquaMai.Mods/UX/JudgeAccuracyInfo.cs b/AquaMai.Mods/UX/JudgeAccuracyInfo.cs index e470a309..3cfd3adb 100644 --- a/AquaMai.Mods/UX/JudgeAccuracyInfo.cs +++ b/AquaMai.Mods/UX/JudgeAccuracyInfo.cs @@ -5,6 +5,7 @@ using System.IO; using System.Linq; using System.Reflection; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using HarmonyLib; using MAI2.Util; using Manager; @@ -21,6 +22,7 @@ namespace AquaMai.Mods.UX; name: "判定详情统计", zh: "在游戏总结的计分板中显示击打误差的详细信息(以帧为单位)", en: "Show detailed accuracy info in the score board.")] +[EnableGameVersion(23000)] public class JudgeAccuracyInfo { public class AccuracyEntryList diff --git a/AquaMai.Mods/UX/OneKeyEntryEnd.cs b/AquaMai.Mods/UX/OneKeyEntryEnd.cs index 0e6c430b..4b93081c 100644 --- a/AquaMai.Mods/UX/OneKeyEntryEnd.cs +++ b/AquaMai.Mods/UX/OneKeyEntryEnd.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using AquaMai.Config.Attributes; using AquaMai.Config.Types; using AquaMai.Core; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using AquaMai.Mods.Tweaks.TimeSaving; using HarmonyLib; @@ -18,6 +19,7 @@ namespace AquaMai.Mods.UX; name: "一键登录与登出", en: "One key to proceed to music select (during entry) or end current PC (during music select).", zh: "一键跳过登录过程直接进入选歌界面,或在选歌界面直接结束本局游戏")] +[EnableGameVersion(23000)] public class OneKeyEntryEnd { [ConfigEntry(name: "按键")] diff --git a/AquaMai.Mods/UX/OneKeyRetrySkip.cs b/AquaMai.Mods/UX/OneKeyRetrySkip.cs index 5f37fb96..102d2751 100644 --- a/AquaMai.Mods/UX/OneKeyRetrySkip.cs +++ b/AquaMai.Mods/UX/OneKeyRetrySkip.cs @@ -1,5 +1,6 @@ using AquaMai.Config.Attributes; using AquaMai.Config.Types; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using HarmonyLib; using MAI2.Util; @@ -11,8 +12,9 @@ namespace AquaMai.Mods.UX; [ConfigSection( name: "一键重开和跳过", - en: "One key to retry (1.30+) or skip current chart in gameplay.", - zh: "在游戏中途一键重试(1.30+)或跳过当前谱面")] + en: "One key to retry or skip current chart in gameplay.", + zh: "在游戏中途一键重试或跳过当前谱面")] +[EnableGameVersion(23000)] public class OneKeyRetrySkip { [ConfigEntry("重开按键")] diff --git a/AquaMai.Mods/UX/PracticeMode/PracticeMode.cs b/AquaMai.Mods/UX/PracticeMode/PracticeMode.cs index ca2b5fb7..ebc51cf7 100644 --- a/AquaMai.Mods/UX/PracticeMode/PracticeMode.cs +++ b/AquaMai.Mods/UX/PracticeMode/PracticeMode.cs @@ -15,6 +15,7 @@ using Process; using UnityEngine; using AquaMai.Config.Attributes; using AquaMai.Config.Types; +using AquaMai.Core.Attributes; using MelonLoader; namespace AquaMai.Mods.UX.PracticeMode; @@ -23,6 +24,7 @@ namespace AquaMai.Mods.UX.PracticeMode; [ConfigSection( en: "Practice Mode.", name: "练习模式")] +[EnableGameVersion(23000)] public class PracticeMode { [ConfigEntry( diff --git a/AquaMai.Mods/Utils/DisplayTouchInGame.cs b/AquaMai.Mods/Utils/DisplayTouchInGame.cs index 76b410c4..06f116da 100644 --- a/AquaMai.Mods/Utils/DisplayTouchInGame.cs +++ b/AquaMai.Mods/Utils/DisplayTouchInGame.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using AquaMai.Config.Attributes; using AquaMai.Config.Types; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using AquaMai.Core.Resources; using AquaMai.Mods.UX.PracticeMode; @@ -20,6 +21,7 @@ namespace AquaMai.Mods.Utils; [ConfigSection( name: "实时触摸显示", zh: "在游戏过程中在副屏显示触摸输入,可用于调试吃和蹭的问题")] +[EnableGameVersion(23000)] public static class DisplayTouchInGame { private static GameObject prefab; diff --git a/AquaMai.Mods/Utils/MoveAnswerSound.cs b/AquaMai.Mods/Utils/MoveAnswerSound.cs index c9caedec..eeb34506 100644 --- a/AquaMai.Mods/Utils/MoveAnswerSound.cs +++ b/AquaMai.Mods/Utils/MoveAnswerSound.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Reflection; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using AquaMai.Core.Resources; using AquaMai.Core.Types; @@ -21,6 +22,7 @@ namespace AquaMai.Mods.Utils; [ConfigSection( name: "移动正解音", en: "Move answer sound")] +[EnableGameVersion(23000)] public class MoveAnswerSound : IPlayerSettingsItem { [ConfigEntry( diff --git a/AquaMai.Mods/Utils/ShowErrorLog.cs b/AquaMai.Mods/Utils/ShowErrorLog.cs index c766a07e..2a070309 100644 --- a/AquaMai.Mods/Utils/ShowErrorLog.cs +++ b/AquaMai.Mods/Utils/ShowErrorLog.cs @@ -6,6 +6,7 @@ using System.IO.Compression; using System.Text.RegularExpressions; using System.Threading; using AquaMai.Config.Attributes; +using AquaMai.Core.Attributes; using AquaMai.Core.Helpers; using HarmonyLib; using Main; @@ -20,6 +21,7 @@ namespace AquaMai.Mods.Utils; en: "Show error log in the game.", zh: "在游戏中显示错误日志窗口而不是关闭游戏进程", defaultOn: true)] +[EnableGameVersion(23000)] public class ShowErrorLog { private static Ui _errorUi; diff --git a/AquaMai/AssemblyLoader.cs b/AquaMai/AssemblyLoader.cs index 85513061..89b84c27 100644 --- a/AquaMai/AssemblyLoader.cs +++ b/AquaMai/AssemblyLoader.cs @@ -30,12 +30,12 @@ public static class AssemblyLoader public static void LoadAssemblies() { - foreach (var (assemblyName, assemblyFileName) in Assemblies) + foreach (var assembly in Assemblies) { # if DEBUG - MelonLoader.MelonLogger.Msg($"Loading assembly \"{assemblyFileName}\"..."); + MelonLoader.MelonLogger.Msg($"Loading assembly \"{assembly.Key}\"..."); # endif - LoadedAssemblies[assemblyName] = LoadAssemblyFromResource(assemblyFileName); + LoadedAssemblies[assembly.Key] = LoadAssemblyFromResource(assembly.Value); } } diff --git a/Libs/mscorlib.dll b/Libs/mscorlib.dll index 42a26818..b4162119 100644 Binary files a/Libs/mscorlib.dll and b/Libs/mscorlib.dll differ