From f7a280029f63ae37fac022e78d56a8e43153261c Mon Sep 17 00:00:00 2001 From: xiaoxin <2932869213@qq.com> Date: Mon, 13 Oct 2025 18:17:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.config | 22 ++ BeforeBuild.bat | 27 ++ BuildInfo.cs | 6 + FodyWeavers.xml | 5 + FodyWeavers.xsd | 111 +++++++ Main.cs | 359 +++++++++++++++++++++++ PostBuild.bat | 25 ++ README.md | 67 +++++ Sinmai-Assist.csproj | 672 +++++++++++++++++++++++++++++++++++++++++++ Sinmai-Assist.sln | 37 +++ config - zh_CN.yml | 89 ++++++ config.yml | 89 ++++++ packages.config | 10 + 13 files changed, 1519 insertions(+) create mode 100644 App.config create mode 100644 BeforeBuild.bat create mode 100644 BuildInfo.cs create mode 100644 FodyWeavers.xml create mode 100644 FodyWeavers.xsd create mode 100644 Main.cs create mode 100644 PostBuild.bat create mode 100644 Sinmai-Assist.csproj create mode 100644 Sinmai-Assist.sln create mode 100644 config - zh_CN.yml create mode 100644 config.yml create mode 100644 packages.config diff --git a/App.config b/App.config new file mode 100644 index 0000000..e29e846 --- /dev/null +++ b/App.config @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/BeforeBuild.bat b/BeforeBuild.bat new file mode 100644 index 0000000..fedf52c --- /dev/null +++ b/BeforeBuild.bat @@ -0,0 +1,27 @@ +@echo off +setlocal + +echo Before Building Action... +where git >nul 2>nul +if errorlevel 1 ( + echo Git is not installed. Using default commit hash. + set COMMIT_HASH="NOT SET" +) else ( + for /f "tokens=1" %%i in ('git rev-parse --short HEAD') do set COMMIT_HASH=%%i +) + +for /f "usebackq delims=" %%t in (`powershell -Command "(Get-Date -Format 'o')"`) do ( + set TIMESTAMP=%%t +) + +echo CommitHash="%COMMIT_HASH%" +echo BuildDate="%TIMESTAMP%" + +echo namespace SinmaiAssist { > ..\BuildInfo.cs +echo public static partial class BuildInfo { >> ..\BuildInfo.cs +echo public const string CommitHash = "%COMMIT_HASH%"; >> ..\BuildInfo.cs +echo public const string BuildDate = "%TIMESTAMP%"; >> ..\BuildInfo.cs +echo } >> ..\BuildInfo.cs +echo } >> ..\BuildInfo.cs + +endlocal diff --git a/BuildInfo.cs b/BuildInfo.cs new file mode 100644 index 0000000..022385a --- /dev/null +++ b/BuildInfo.cs @@ -0,0 +1,6 @@ +namespace SinmaiAssist { + public static partial class BuildInfo { + public const string CommitHash = ""; + public const string BuildDate = "2025-09-01T20:28:07.9918439+08:00"; + } +} diff --git a/FodyWeavers.xml b/FodyWeavers.xml new file mode 100644 index 0000000..625c929 --- /dev/null +++ b/FodyWeavers.xml @@ -0,0 +1,5 @@ + + + YamlDotNet|EmbedIO + + \ No newline at end of file diff --git a/FodyWeavers.xsd b/FodyWeavers.xsd new file mode 100644 index 0000000..968f9b5 --- /dev/null +++ b/FodyWeavers.xsd @@ -0,0 +1,111 @@ + + + + + + + + + + + + A regular expression matching the assembly names to include in merging. + + + + + A regular expression matching the assembly names to exclude from merging. + + + + + A regular expression matching the resource names to include in merging. + + + + + A regular expression matching the resource names to exclude from merging. + + + + + A switch to control whether the imported types are hidden (made private) or keep their visibility unchanged. Default is 'true' + + + + + A string that is used as prefix for the namespace of the imported types. + + + + + A switch to control whether to import the full assemblies or only the referenced types. Default is 'false' + + + + + A switch to enable compacting of the target assembly by skipping properties, events and unused methods. Default is 'false' + + + + + + A regular expression matching the assembly names to include in merging. + + + + + A regular expression matching the assembly names to exclude from merging. + + + + + A regular expression matching the resource names to include in merging. + + + + + A regular expression matching the resource names to exclude from merging. + + + + + A switch to control whether the imported types are hidden (made private) or keep their visibility unchanged. Default is 'true' + + + + + A string that is used as prefix for the namespace of the imported types. + + + + + A switch to control whether to import the full assemblies or only the referenced types. Default is 'false' + + + + + A switch to enable compacting of the target assembly by skipping properties, events and unused methods. Default is 'false' + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/Main.cs b/Main.cs new file mode 100644 index 0000000..a062c34 --- /dev/null +++ b/Main.cs @@ -0,0 +1,359 @@ +using MAI2System; +using MelonLoader; +using System; +using System.Collections; +using System.IO; +using System.Reflection; +using HarmonyLib; +using SinmaiAssist.Attributes; +using SinmaiAssist.Cheat; +using SinmaiAssist.Common; +using SinmaiAssist.Config; +using SinmaiAssist.Fix; +using SinmaiAssist.GUI; +using SinmaiAssist.Utils; +using UnityEngine; +using Path = System.IO.Path; + +namespace SinmaiAssist +{ + public static partial class BuildInfo + { + public const string Name = "Sinmai-Assist"; + public const string Description = "SlimMod Melon Version For Sinmai"; + public const string Author = "x"; + public const string Company = "Nya~"; + public const string Version = "2.0.0"; + public const string DownloadLink = null; + } + + public class SinmaiAssist : MelonMod + { + private MainGUI _mainGUI; + private static bool _isPatchFailed = false; + private static ConfigManager _mainConfigManager; + private static ConfigManager _keyBindConfigManager; + private static WebServer.WebServer _webServer; + public static MainConfig MainConfig; + public static KeyBindConfig KeyBindConfig; + public static string GameID = "Unknown"; + public static uint GameVersion = 00000; + + public override void OnInitializeMelon() + { + if(!Directory.Exists($"./{BuildInfo.Name}")) Directory.CreateDirectory($"./{BuildInfo.Name}"); + + // 初始化UnityLogger + if(File.Exists($"./{BuildInfo.Name}/Unity.log")) File.Delete($"{BuildInfo.Name}/Unity.log"); + File.WriteAllText($"./{BuildInfo.Name}/Unity.log", ""); + Application.logMessageReceived += OnLogMessageReceived; + + PrintLogo(); + _mainGUI = new MainGUI(); + + // 加载配置文件 + try + { + var keyBindCoverter = new KeyBindConfig.Converter(); + _mainConfigManager = new ConfigManager($"./{BuildInfo.Name}/config.yml"); + _keyBindConfigManager = new ConfigManager($"./{BuildInfo.Name}/keybind.yml", keyBindCoverter); + MainConfig = _mainConfigManager.GetConfig(); + KeyBindConfig = _keyBindConfigManager.GetConfig(); + DummyLoginPanel.DummyUserId = MainConfig.Common.DummyLogin.DefaultUserId.ToString(); + DebugPanel.UnityLogger = MainConfig.Common.UnityLogger.Enable; + MelonLogger.Msg("Config Load Complete."); + } + catch (Exception e) + { + MelonLogger.Error($"Error initializing mod config: \n{e}"); + return; + } + + // 初始化WebServer + if (MainConfig.ModSetting.WebServer.Enable) + { + _webServer = new WebServer.WebServer( + MainConfig.ModSetting.WebServer.Host, + MainConfig.ModSetting.WebServer.Port, + MainConfig.ModSetting.WebServer.Token + ); + _webServer.Start(); + } + + // 输出设备摄像头列表 + File.Delete($"{BuildInfo.Name}/WebCameraList.txt"); + WebCamDevice[] devices = WebCamTexture.devices; + string CameraList = "\nConnected Web Cameras:\n"; + for (int i = 0; i < devices.Length; i++) + { + WebCamDevice webCamDevice = devices[i]; + CameraList = CameraList + "Name: " + webCamDevice.name + "\n"; + CameraList += $"ID: {i}\n"; + WebCamTexture webCamTexture = new WebCamTexture(webCamDevice.name); + webCamTexture.Play(); + CameraList += $"Resolution: {webCamTexture.width}x{webCamTexture.height}\n"; + CameraList += $"FPS: {webCamTexture.requestedFPS}\n"; + webCamTexture.Stop(); + CameraList += "\n"; + } + + File.AppendAllText($"{BuildInfo.Name}/WebCameraList.txt", CameraList); + + try + { + GameID = (string)typeof(ConstParameter).GetField("GameIDStr", + BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy).GetValue(null); + GameVersion = (uint)typeof(ConstParameter).GetField("NowGameVersion", + BindingFlags.Public | BindingFlags.Static | BindingFlags.FlattenHierarchy).GetValue(null); + + if (GameVersion < 24000) + { + MelonLogger.Warning($"Using untested version ({GameVersion}) maybe case some unexcepted problems!"); + } + } + catch (Exception e) + { + MelonLogger.Error("Failed to get GameIDStr and GameVersion"); + MelonLogger.Error(e); + } + + MelonLogger.Msg($"GameInfo: {GameID} {GameVersion} "); + + // 弃用的神秘判断代码 + // var Codes = new List { 83, 68, 71, 66 }; + // var str = string.Concat(Codes.Select(code => (char)code)); + + if (MainConfig.ModSetting.SafeMode) + { + MelonLogger.Warning("Safe mode is enabled, Disable all patch"); + return; + } + + // 加载Patch + Patch(typeof(HarmonyLibPatch),true); + + // DummyLogin + if (MainConfig.Common.DummyLogin.Enable) + { + if (GameID.Equals("SDGB")) + { + Patch(typeof(DummyChimeLogin)); + } + else + { + if (File.Exists("DEVICE/aime.txt")) + DummyLoginPanel.DummyLoginCode = File.ReadAllText("DEVICE/aime.txt").Trim(); + Patch(typeof(DummyAimeLogin)); + } + } + + if (MainConfig.Common.CustomCameraId.Enable) + { + if (MainConfig.Common.DummyLogin.Enable) + { + MelonLogger.Warning("DummyLogin enabled, CustomCameraId has been automatically disabled."); + } + else + { + Patch(typeof(CustomCameraId)); + } + } + + // Common + if (MainConfig.Common.AutoBackupData) Patch(typeof(AutoBackupData)); + if (MainConfig.Common.InfinityTimer) Patch(typeof(InfinityTimer)); + if (MainConfig.Common.InfinityTimerLegacy) Patch(typeof(InfinityTimerLegacy)); + if (MainConfig.Common.DisableBackground) Patch(typeof(DisableBackground)); + if (MainConfig.Common.DisableMask) Patch(typeof(DisableMask)); + if (MainConfig.Common.SinglePlayer.Enable) Patch(typeof(SinglePlayer)); + if (MainConfig.Common.ForceQuickRetry) Patch(typeof(ForceQuickRetry)); + if (MainConfig.Common.ForwardATouchRegionToButton) Patch(typeof(ForwardATouchRegionToButton)); + // 存在资源加载问题,现已禁用 + // if (MainConfig.Common.QuickBoot) Patch(typeof(QuickBoot)); + if (MainConfig.Common.BlockCoin) Patch(typeof(BlockCoin)); + if (MainConfig.Common.SkipWarningScreen) Patch(typeof(SkipWarningScreen)); + if (MainConfig.Common.SkipFade) Patch(typeof(SkipFade)); + if (MainConfig.Common.NetworkLogger.Enable) Patch(typeof(NetworkLogger)); + if (MainConfig.Common.CustomVersionText.Enable) Patch(typeof(CustomVersionText)); + if (MainConfig.Common.IgnoreAnyGameInformation) Patch(typeof(IgnoreAnyGameInformation)); + if (MainConfig.Common.ChangeDefaultOption) Patch(typeof(ChangeDefaultOption)); + if (MainConfig.Common.ChangeFadeStyle) Patch(typeof(ChangeFadeStyle)); + if (MainConfig.Common.ChangeGameSettings.Enable) Patch(typeof(ChangeGameSettings)); + + //Fix + if (MainConfig.Fix.DisableEnvironmentCheck) Patch(typeof(DisableEnvironmentCheck)); + if (MainConfig.Fix.DisableEncryption) Patch(typeof(DisableEncryption)); + if (MainConfig.Fix.DisableReboot) Patch(typeof(DisableReboot)); + if (MainConfig.Fix.DisableIniClear) Patch(typeof(DisableIniClear)); + if (MainConfig.Fix.FixDebugInput) Patch(typeof(FixDebugInput)); + if (MainConfig.Fix.FixCheckAuth) Patch(typeof(FixCheckAuth)); + if (MainConfig.Fix.ForceAsServer) Patch(typeof(ForceAsServer)); + if (MainConfig.Fix.SkipCakeHashCheck) Patch(typeof(SkipCakeHashCheck)); + if (MainConfig.Fix.SkipSpecialNumCheck) Patch(typeof(SkipSpecialNumCheck)); + if (MainConfig.Fix.SkipVersionCheck) Patch(typeof(SkipVersionCheck)); + if (MainConfig.Fix.RestoreCertificateValidation) Patch(typeof(RestoreCertificateValidation)); + if (MainConfig.Fix.RewriteNoteJudgeTiming.Enable) Patch(typeof(RewriteNoteJudgeTiming)); + + //Cheat + if (MainConfig.Cheat.AutoPlay) Patch(typeof(AutoPlay)); + if (MainConfig.Cheat.FastSkip) Patch(typeof(FastSkip)); + if (MainConfig.Cheat.ChartController) Patch(typeof(ChartController)); + if (MainConfig.Cheat.AllCollection) Patch(typeof(AllCollection)); + if (MainConfig.Cheat.UnlockMusic) Patch(typeof(UnlockMusic)); + if (MainConfig.Cheat.UnlockMaster) Patch(typeof(UnlockMaster)); + if (MainConfig.Cheat.UnlockUtage.Enable) Patch(typeof(UnlockUtage)); + if (MainConfig.Cheat.UnlockEvent) Patch(typeof(UnlockEvent)); + if (MainConfig.Cheat.ResetLoginBonusRecord) Patch(typeof(ResetLoginBonusRecord)); + if (MainConfig.Cheat.ForceCurrentIsBest) Patch(typeof(ForceCurrentIsBest)); + if (MainConfig.Cheat.SetAllCharacterAsSameAndLock) Patch(typeof(SetAllCharacterAsSameAndLock)); + if (MainConfig.Cheat.RewriteLoginBonusStamp.Enable) Patch(typeof(RewriteLoginBonusStamp)); + + // 默认加载项 + Patch(typeof(PrintUserData)); + Patch(typeof(InputManager)); + Patch(typeof(GameMessageManager)); + + if(_isPatchFailed) PatchFailedWarn(); + MelonLogger.Msg("Loading completed"); + } + public override void OnApplicationQuit() + { + if (MainConfig.ModSetting.WebServer.Enable && _webServer.IsRunning()) _webServer.Stop(); + } + + public override void OnGUI() + { + _mainGUI.OnGUI(); + if (MainConfig.Common.ShowFPS) ShowFPS.OnGUI(); + if (MainConfig.ModSetting.ShowInfo) ShowVersionInfo.OnGUI(); + } + + private void OnLogMessageReceived(string condition, string stackTrace, LogType type) + { + string logString = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}] [{type}] {condition}\n{stackTrace}"; + + if (MainConfig.Common.UnityLogger.Enable) File.AppendAllText(Path.Combine($"{BuildInfo.Name}/Unity.log"),logString + "\n"); + if (MainConfig.Common.UnityLogger.Enable && MainConfig.Common.UnityLogger.PrintToConsole) + { + switch (type) + { + case LogType.Error: + case LogType.Exception: + MelonLogger.Error($"[UnityLogger] [{type}]: {condition}\n{stackTrace}"); + break; + case LogType.Warning: + MelonLogger.Warning($"[UnityLogger] [{type}]: {condition}\n{stackTrace}"); + break; + case LogType.Assert: + case LogType.Log: + default: + MelonLogger.Msg($"[UnityLogger] [{type}]: {condition}\n{stackTrace}"); + break; + } + } + } + + private static bool Patch(Type type, bool noLoggerPrint = false) + { + try + { + var enableGameVersion = type.GetCustomAttribute(); + if (enableGameVersion != null && !enableGameVersion.ShouldEnable()) + { + MelonLogger.Warning( + $"Patch: {type} skipped ,Game version need Min {enableGameVersion.MinGameVersion} Max {enableGameVersion.MaxGameVersion}"); + return false; + } + + if (!noLoggerPrint) MelonLogger.Msg($"> Patch: {type}"); + HarmonyLib.Harmony.CreateAndPatchAll(type); + return true; + } + catch (Exception e) + { + MelonLogger.Error($"Patch: {type} failed."); + MelonLogger.Error(e.Message); + MelonLogger.Error(e.Source); + MelonLogger.Error(e.TargetSite); + MelonLogger.Error(e.InnerException); + MelonLogger.Error(e.StackTrace); + _isPatchFailed = true; + return false; + } + } + + private static void PrintLogo() + { + MelonLogger.Msg("\n" + + "\r\n _____ _ __ ___ _ ___ _ __ " + + "\r\n / ___/(_)___ / |/ /___ _(_) / | __________(_)____/ /_" + + "\r\n \\__ \\/ / __ \\/ /|_/ / __ `/ /_____/ /| | / ___/ ___/ / ___/ __/" + + "\r\n ___/ / / / / / / / / /_/ / /_____/ ___ |(__ |__ ) (__ ) /_ " + + "\r\n/____/_/_/ /_/_/ /_/\\__,_/_/ /_/ |_/____/____/_/____/\\__/ " + + "\r\n " + + "\r\n=================================================================" + + $"\r\n Version: {BuildInfo.Version} ({BuildInfo.CommitHash}) Build Date: {BuildInfo.BuildDate}" + + $"\r\n Author: {BuildInfo.Author}"); + MelonLogger.Warning("\n" + + "\r\n=================================================================" + + "\r\n这是一个作弊Mod,后果自负,Mod仅限测试使用,禁止用于其他操作!" + + "\r\nThis is a cheat mod. Use at your own risk!" + + "\r\n这是一个免费的开源Mod项目,禁止倒卖!" + + "\r\nThis is a free and open-source mod. Resale is strictly prohibited." + + "\r\n如果你花了钱买了这个Mod,那你很愚蠢。" + + "\r\nIf you paid for this mod, you are stupid." + + "\r\n=================================================================" + ); + } + + private static void PatchFailedWarn() + { + MelonLogger.Warning("\r\n=================================================================" + + "\r\nFailed to patch some methods." + + "\r\nPlease ensure that you are using an unmodified version of Assembly-CSharp.dll with a version greater than 1.40.0," + + "\r\nas modifications or lower versions can cause function mismatches, preventing the required functions from being found." + + "\r\nCheck for conflicting mods, or enabled incompatible options." + + "\r\nIf you believe this is an error, please report the issue to the mod author." + + "\r\n================================================================="); + } + } + public class HarmonyLibPatch + { + [HarmonyPostfix] + [HarmonyPatch("HarmonyLib.PatchTools", "GetPatchMethod")] + public static void GetPatchMethod(ref MethodInfo __result) + { + if (__result != null) + { + var enableGameVersion = __result.GetCustomAttribute(); + if (enableGameVersion != null && !enableGameVersion.ShouldEnable()) + { +#if DEBUG + MelonLogger.Warning($" Patch: {__result.ReflectedType}.{__result.Name} skipped, Game version need Min {enableGameVersion.MinGameVersion} Max {enableGameVersion.MaxGameVersion}"); +#endif + __result = null; + } + } + } + + [HarmonyPostfix] + [HarmonyPatch("HarmonyLib.PatchTools", "GetPatchMethods")] + public static void GetPatchMethods(ref IList __result) + { + for (int i = 0; i < __result.Count; i++) + { + var harmonyMethod = Traverse.Create(__result[i]).Field("info").GetValue() as HarmonyMethod; + var method = harmonyMethod.method; + var enableGameVersion = method.GetCustomAttribute(); + if (enableGameVersion != null && !enableGameVersion.ShouldEnable()) + { +#if DEBUG + MelonLogger.Warning($" Patch: {method.ReflectedType}.{method.Name} skipped, Game version need Min {enableGameVersion.MinGameVersion} Max {enableGameVersion.MaxGameVersion}"); +#endif + __result.RemoveAt(i); + i--; + } + } + } + } +} diff --git a/PostBuild.bat b/PostBuild.bat new file mode 100644 index 0000000..0476426 --- /dev/null +++ b/PostBuild.bat @@ -0,0 +1,25 @@ +@echo off + +where git >nul 2>nul +if errorlevel 1 ( + echo Git is not installed. Using default commit hash. + set COMMIT_HASH="NOT SET" +) else ( + for /f "tokens=1" %%i in ('git rev-parse --short HEAD') do set COMMIT_HASH=%%i +) + +for /f "usebackq delims=" %%t in (`powershell -Command "( Get-Date -Format 'yyyyMMddHHmmss')"`) do ( + set TIMESTAMP=%%t +) + +echo CommitHash="%COMMIT_HASH%" +echo BuildDate="%TIMESTAMP%" + +copy /y ".\Sinmai-Assist.dll" "..\Out\Mods\" +@REM copy /y ".\YamlDotNet.dll" "..\Out\UserLibs\" +copy /y "..\config - zh_CN.yml" "..\Out\Sinmai-Assist\config.yml" +@REM 7z a -tzip "..\PostBuilds\Sinmai-Assist_%COMMIT_HASH%_%TIMESTAMP%".zip "..\Out\*" +@REM +@REM set GamePath="G:\maimai\maimai2024\Package\" +@REM copy /y ".\Sinmai-Assist.dll" "%GamePath%Mods\" +@REM copy /y ".\YamlDotNet.dll" "%GamePath%UserLibs\" \ No newline at end of file diff --git a/README.md b/README.md index af250ab..2646af9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,69 @@ # Sinmai-Assist +Mods for maimai DX (Sinmai.exe). Patch with MelonLoader. +This is a cheat Mod, using by your own risk. + +> [!WARNING] +> Please use MelonLoader version 0.6.4 or lower. +> Higher versions will crash. + +## Feature +- Cheat + - Auto Play + - Fast Skip + - Chart Controller + - Unlock Music + - Unlock Master + - Unlock Event + - Unlock Utage + - Force Unlock Double Player Utage + - Force Current ls Best + - Reset Login Bonus Record + - Set All Character As Same And Lock +- Common + - Dummy Login + - Custom Camera ID + - Block Coin + - Custom Version Text + - Disable Mask + - Disable Background + - Forward Touch Region To Button + - Force Quick Retry + - Network Logger + - Print User Information + - Export User Data + - Quick Boot + - Show FPS + - Single Player Mode + - Skip Warning Screen + - Skip Fade + - Ignore Information + - Change Default Option + - Change Game Settings +- Fix + - Disable Environment Check(For versions after 1.50) + - Disable Encryption + - Disable Ini Clear + - Disable Reboot + - Fix Check Auth + - Fix DebugInput + - Force As Server + - Restore Certificate Validation + - Rewrite Judge Timing + - Skip Version Check + - Skip Cake Hash Check + - Skip SpecialNum Check + + +## Development + +1. Install [.NET Framework 4.7.2 Developer Pack](https://dotnet.microsoft.com/download/dotnet-framework/net472) +2. Configure library. (tips: Please use SDGB version library) +3. Build the solution. +4. Copy `Sinmai-Assist.dll` to `Mods` folder. + + +## Relevant Links + +* [MelonLoader Wiki](https://melonwiki.xyz/#/modders/quickstart) +* [Harmony Docs](https://harmony.pardeike.net/articles/patching-prefix.html) diff --git a/Sinmai-Assist.csproj b/Sinmai-Assist.csproj new file mode 100644 index 0000000..ba7fb1d --- /dev/null +++ b/Sinmai-Assist.csproj @@ -0,0 +1,672 @@ + + + + + Release + AnyCPU + {788BC472-59F7-46F6-B760-65C18BA74389} + Library + Properties + SinmaiAssist + Sinmai-Assist + v4.7.2 + 512 + true + + 12 + + + + + false + None + false + Output\ + + + prompt + 1 + true + false + false + x64 + Auto + + + false + + + bin\Debug\ + DEBUG + true + true + pdbonly + false + + + false + + + bin\ARM64\Release\ + true + true + None + ARM64 + 12 + prompt + false + + + bin\ARM64\Debug\ + DEBUG + true + true + pdbonly + ARM64 + 12 + false + + + bin\x64\Release\ + true + false + None + x64 + 12 + prompt + false + + + bin\x64\Debug\ + DEBUG + true + true + pdbonly + x64 + 12 + false + + + + False + Libs\0Harmony.dll + + + Output\Accessibility.dll + + + ..\150\Sinmai_Data\Managed\AMDaemon.NET.dll + + + ..\150\Sinmai_Data\Managed\Assembly-CSharp.dll + + + ..\150\Sinmai_Data\Managed\Assembly-CSharp-firstpass.dll + + + ..\150\MelonLoader\net35\AssetRipper.VersionUtilities.dll + + + ..\150\MelonLoader\net35\AssetsTools.NET.dll + + + ..\150\MelonLoader\net35\bHapticsLib.dll + + + D:\game\SDGB2025\Package\Sinmai_Data\Managed\ChimeLib.NET.dll + + + Output\cscompmgd.dll + + + Output\CustomMarshalers.dll + + + ..\150\MelonLoader\net35\IndexRange.dll + + + False + ..\150\MelonLoader\net35\MelonLoader.dll + + + ..\150\MelonLoader\net35\MelonStartScreen.dll + + + Output\Microsoft.CSharp.dll + + + ..\150\MelonLoader\net35\Mono.Cecil.dll + + + ..\150\MelonLoader\net35\Mono.Cecil.Mdb.dll + + + ..\150\MelonLoader\net35\Mono.Cecil.Pdb.dll + + + ..\150\MelonLoader\net35\Mono.Cecil.Rocks.dll + + + ..\150\Sinmai_Data\Managed\Mono.Posix.dll + + + ..\150\Sinmai_Data\Managed\Mono.Security.dll + + + ..\150\MelonLoader\net35\MonoMod.RuntimeDetour.dll + + + ..\150\MelonLoader\net35\MonoMod.Utils.dll + + + ..\150\Sinmai_Data\Managed\mscorlib.dll + + + Output\SMDiagnostics.dll + + + ..\150\Sinmai_Data\Managed\System.dll + + + Output\System.ComponentModel.Composition.dll + + + Output\System.ComponentModel.DataAnnotations.dll + + + ..\150\Sinmai_Data\Managed\System.Configuration.dll + + + Output\System.Configuration.Install.dll + + + ..\150\Sinmai_Data\Managed\System.Core.dll + + + Output\System.Data.dll + + + Output\System.Data.DataSetExtensions.dll + + + Output\System.Data.Entity.dll + + + Output\System.Data.Linq.dll + + + Output\System.Data.OracleClient.dll + + + Output\System.Data.Services.dll + + + Output\System.Data.Services.Client.dll + + + Output\System.Design.dll + + + Output\System.DirectoryServices.dll + + + Output\System.DirectoryServices.Protocols.dll + + + ..\150\Sinmai_Data\Managed\System.Drawing.dll + + + Output\System.Drawing.Design.dll + + + Output\System.EnterpriseServices.dll + + + Output\System.IdentityModel.dll + + + Output\System.IdentityModel.Selectors.dll + + + Output\System.IO.Compression.dll + + + Output\System.IO.Compression.FileSystem.dll + + + Output\System.Management.dll + + + Output\System.Messaging.dll + + + Output\System.Net.dll + + + Output\System.Net.Http.dll + + + Output\System.Net.Http.WebRequest.dll + + + Output\System.Numerics.dll + + + Output\System.Reflection.Context.dll + + + Output\System.Runtime.Caching.dll + + + Output\System.Runtime.DurableInstancing.dll + + + Output\System.Runtime.Remoting.dll + + + Output\System.Runtime.Serialization.dll + + + Output\System.Runtime.Serialization.Formatters.Soap.dll + + + ..\150\Sinmai_Data\Managed\System.Security.dll + + + Output\System.ServiceModel.dll + + + Output\System.ServiceModel.Activation.dll + + + Output\System.ServiceModel.Discovery.dll + + + Output\System.ServiceModel.Internals.dll + + + Output\System.ServiceModel.Routing.dll + + + Output\System.ServiceModel.Web.dll + + + Output\System.ServiceProcess.dll + + + Output\System.Transactions.dll + + + Output\System.Web.dll + + + Output\System.Web.Abstractions.dll + + + Output\System.Web.ApplicationServices.dll + + + Output\System.Web.DynamicData.dll + + + Output\System.Web.Extensions.dll + + + Output\System.Web.Extensions.Design.dll + + + Output\System.Web.RegularExpressions.dll + + + Output\System.Web.Routing.dll + + + Output\System.Web.Services.dll + + + Output\System.Windows.Forms.dll + + + Output\System.Windows.Forms.DataVisualization.dll + + + Output\System.Xaml.dll + + + ..\150\Sinmai_Data\Managed\System.Xml.dll + + + Output\System.Xml.Linq.dll + + + ..\150\MelonLoader\net35\Tomlet.dll + + + ..\150\Sinmai_Data\Managed\Unity.Analytics.DataPrivacy.dll + + + ..\150\Sinmai_Data\Managed\Unity.TextMeshPro.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.AccessibilityModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.AIModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.AnimationModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.ARModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.AssetBundleModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.AudioModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.BaselibModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.ClothModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.ClusterInputModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.ClusterRendererModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.CoreModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.CrashReportingModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.DirectorModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.FileSystemHttpModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.GameCenterModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.GridModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.HotReloadModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.ImageConversionModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.IMGUIModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.InputModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.JSONSerializeModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.LocalizationModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.Networking.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.ParticleSystemModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.PerformanceReportingModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.Physics2DModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.PhysicsModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.ProfilerModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.ScreenCaptureModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.SharedInternalsModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.SpatialTracking.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.SpriteMaskModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.SpriteShapeModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.StreamingModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.StyleSheetsModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.SubstanceModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.TerrainModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.TerrainPhysicsModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.TextCoreModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.TextRenderingModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.TilemapModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.Timeline.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.TimelineModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.TLSModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UI.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UIElementsModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UIModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UmbraModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UNETModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UnityAnalyticsModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UnityConnectModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UnityTestProtocolModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.VehiclesModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.VFXModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.VideoModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.VRModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.WindModule.dll + + + ..\150\Sinmai_Data\Managed\UnityEngine.XRModule.dll + + + ..\150\MelonLoader\net35\ValueTupleBridge.dll + + + ..\150\MelonLoader\net35\WebSocketDotNet.dll + + + Output\WindowsBase.dll + + + ..\150\Sinmai_Data\Managed\zxing.unity.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3.5.2 + + + 6.9.2 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + 1.24.0 + + + 13.0.3 + + + 16.3.0 + + + + + + + + $(ProjectDir)PostBuild.bat + + + $(ProjectDir)BeforeBuild.bat + + \ No newline at end of file diff --git a/Sinmai-Assist.sln b/Sinmai-Assist.sln new file mode 100644 index 0000000..ba567df --- /dev/null +++ b/Sinmai-Assist.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33815.320 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sinmai-Assist", "Sinmai-Assist.csproj", "{788BC472-59F7-46F6-B760-65C18BA74389}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {788BC472-59F7-46F6-B760-65C18BA74389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Debug|Any CPU.Build.0 = Debug|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Debug|ARM64.Build.0 = Debug|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Debug|x64.ActiveCfg = Debug|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Debug|x64.Build.0 = Debug|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Release|Any CPU.ActiveCfg = Release|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Release|Any CPU.Build.0 = Release|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Release|ARM64.ActiveCfg = Release|x64 + {788BC472-59F7-46F6-B760-65C18BA74389}.Release|ARM64.Build.0 = Release|x64 + {788BC472-59F7-46F6-B760-65C18BA74389}.Release|x64.ActiveCfg = Release|Any CPU + {788BC472-59F7-46F6-B760-65C18BA74389}.Release|x64.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {DDF15A6C-2A44-4EBE-BD85-F3EE61DCD8BF} + EndGlobalSection +EndGlobal diff --git a/config - zh_CN.yml b/config - zh_CN.yml new file mode 100644 index 0000000..44632d2 --- /dev/null +++ b/config - zh_CN.yml @@ -0,0 +1,89 @@ +common: + autoBackupData: false # 自动备份玩家数据 + infinityTimer: false # 无限计时器 + infinityTimerLegacy: false # 无限计时器(传统方案) + disableMask: false # 禁用遮罩 + disableBackground: false # 禁用背景 + showFPS: false # 显示FPS + singlePlayer: # 单人模式 + enable: false # 是否启用 + hideSubMonitor: false # 隐藏副屏 + forceQuickRetry: false # 强制开启Freedom模式的快速重试功能 + forwardATouchRegionToButton: false # 将触摸区域的操作转发到按钮 + skipFade: false # 跳过过场动画 + skipWarningScreen: false # 跳过警告界面 + quickBoot: false # 快速启动 + blockCoin: false # 禁用点数消耗 + ignoreAnyGameInformation: false # 忽略之后所有的游戏公告信息提示 + changeDefaultOption: false # 覆写游客模式默认设置 + changeFadeStyle: false # 切换过场动画的样式(例如BUDDiES开启此选项后会使用BUDDiES PLUS的过场动画,BUDDiES PLUS开启此选项后会使用BUDDiES的过场动画) + networkLogger: # 网络日志 + enable: false # 是否启用 + printToConsole: false # 是否输出到控制台 + customVersionText: # 自定义版本文本 + enable: false # 是否启用 + versionText: "" # 版本文本 + dummyLogin: # 虚拟登录 + enable: false # 是否启用 + defaultUserId: 0 # 默认用户ID + customCameraId: # 自定义摄像头ID + enable: false # 是否启用 + chimeCameraId: 0 # Chime摄像头ID + leftQrCameraId: 0 # 左侧二维码识别摄像头ID + rightQrCameraId: 0 # 右侧二维码识别摄像头ID + photoCameraId: 0 # 玩家摄像头ID + changeGameSettings: # 覆盖游戏的设置 + enable: false # 是否启用 + codeRead: false # 是否启用二维码识别(DX Pass) + iconPhoto: false # 是否启用拍摄头像功能 + uploadPhoto: false # 是否启用拍摄纪念照上传 + charaSelect: false # 是否启用角色选择界面 + +cheat: + autoPlay: false # 自动游玩 + fastSkip: false # 快速跳过 + chartController: false # 铺面控制器(歌曲进度控制) + allCollection: false # 解锁全部收藏品 + unlockEvent: false # 解锁全部活动 + unlockMusic: false # 解锁全部歌曲 + unlockMaster: false # 解锁全部歌曲Master和ReMaster难度 + unlockUtage: # 解锁宴会场 + enable: false # 是否启用 + unlockDoublePlayerMusic: false # 强制解锁宴会场双人模式歌曲 + saveUnlockMusic: false # 保存unlockMusic解锁的歌曲到用户存档 + saveUnlockMaster: false # 保存unlockMaster解锁的歌曲难度到用户存档 + resetLoginBonusRecord: false # 重置登录奖励记录 + forceCurrentIsBest: false # 强制当前游玩成绩为新成绩(可能会对Best50造成改动) + setAllCharacterAsSameAndLock: false # 允许你设置5个相同的旅行伙伴并锁定设置(以队长为准) + rewriteLoginBonusStamp: # 重写每日登录奖励记录 + enable: false # 是否启用 + point: 0 # 登录奖励点数 + +fix: + disableEnvironmentCheck: false # 禁用运行环境检查 + disableEncryption: false # 禁用加密 + disableReboot: false # 禁用自动重启 + disableIniClear: false # 禁止程序清除ini配置文件文件 + fixDebugInput: false # 修复DebugInput + fixCheckAuth: false # 修复CheckAuth + forceAsServer: false # 强制以服务器模式运行 + skipCakeHashCheck: false # 跳过Cake.dll Hash检查 + skipSpecialNumCheck: false # 跳过特殊数字检查 + skipVersionCheck: false # 登录时跳过版本检查 + restoreCertificateValidation: false # 恢复证书验证 + rewriteNoteJudgeTiming: # 重写覆盖游戏音符判定 (如填10,则游戏内+1.0) + enable: false # 是否启用 + adjustTiming: 0.0 # 音频延迟(单位:ms) + judgeTiming: 0.0 # 判定延迟(单位:帧) + +modSetting: + safeMode: false # 启用安全模式 + showInfo: false # 显示信息 + showPanel: false # 显示面板 + logUnity: false # 显示Unity日志到控制台 + webServer: # Web服务 + enable: false # 是否启用 + host: "0.0.0.0" # 地址 + port: 8080 # 端口 + token: "" # token + printDebugLog: false # 输出调试日志 diff --git a/config.yml b/config.yml new file mode 100644 index 0000000..89405da --- /dev/null +++ b/config.yml @@ -0,0 +1,89 @@ +common: + autoBackupData: false + infinityTimer: false + infinityTimerLegacy: false + disableMask: false + disableBackground: false + showFPS: false + singlePlayer: + enable: false + hideSubMonitor: false + forceQuickRetry: false + forwardATouchRegionToButton: false + skipFade: false + skipWarningScreen: false + quickBoot: false + blockCoin: false + ignoreAnyGameInformation: false + changeDefaultOption: false + changeFadeStyle: false + networkLogger: + enable: false + printToConsole: false + customVersionText: + enable: false + versionText: "" + dummyLogin: + enable: false + defaultUserId: 0 + customCameraId: + enable: false + chimeCameraId: 0 + leftQrCameraId: 0 + rightQrCameraId: 0 + photoCameraId: 0 + changeGameSettings: + enable: false + codeRead: false + iconPhoto: false + uploadPhoto: false + charaSelect: false + +cheat: + autoPlay: false + fastSkip: false + chartController: false + allCollection: false + unlockEvent: false + unlockMusic: false + unlockMaster: false + unlockUtage: + enable: false + unlockDoublePlayerMusic: false + saveUnlockMusic: false + saveUnlockMaster: false + resetLoginBonusRecord: false + forceCurrentIsBest: false + setAllCharacterAsSameAndLock: false + rewriteLoginBonusStamp: + enable: false + point: 0 + +fix: + disableEnvironmentCheck: false + disableEncryption: false + disableReboot: false + disableIniClear: false + fixDebugInput: false + fixCheckAuth: false + forceAsServer: false + skipCakeHashCheck: false + skipSpecialNumCheck: false + skipVersionCheck: false + restoreCertificateValidation: false + rewriteNoteJudgeTiming: + enable: false + adjustTiming: 0.0 + judgeTiming: 0.0 + +modSetting: + safeMode: false + showInfo: false + showPanel: false + logUnity: false + webServer: + enable: false + host: "0.0.0.0" + port: 8080 + token: "" + printDebugLog: false diff --git a/packages.config b/packages.config new file mode 100644 index 0000000..2b5a9a3 --- /dev/null +++ b/packages.config @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file