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