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