上传文件至 /

This commit is contained in:
2025-10-13 18:17:54 +08:00
parent a5cb390129
commit f7a280029f
13 changed files with 1519 additions and 0 deletions

22
App.config Normal file
View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?><configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="mscorlib" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="0Harmony" publicKeyToken="null" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.10.1.0" newVersion="2.10.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

27
BeforeBuild.bat Normal file
View File

@@ -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

6
BuildInfo.cs Normal file
View File

@@ -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";
}
}

5
FodyWeavers.xml Normal file
View File

@@ -0,0 +1,5 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ILMerge>
<IncludeAssemblies>YamlDotNet|EmbedIO</IncludeAssemblies>
</ILMerge>
</Weavers>

111
FodyWeavers.xsd Normal file
View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ILMerge" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:all>
<xs:element name="IncludeAssemblies" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>A regular expression matching the assembly names to include in merging.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ExcludeAssemblies" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>A regular expression matching the assembly names to exclude from merging.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="IncludeResources" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>A regular expression matching the resource names to include in merging.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="ExcludeResources" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>A regular expression matching the resource names to exclude from merging.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="HideImportedTypes" type="xs:boolean" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>A switch to control whether the imported types are hidden (made private) or keep their visibility unchanged. Default is 'true'</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="NamespacePrefix" type="xs:string" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>A string that is used as prefix for the namespace of the imported types.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="FullImport" type="xs:boolean" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>A switch to control whether to import the full assemblies or only the referenced types. Default is 'false'</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CompactMode" type="xs:boolean" minOccurs="0" maxOccurs="1">
<xs:annotation>
<xs:documentation>A switch to enable compacting of the target assembly by skipping properties, events and unused methods. Default is 'false'</xs:documentation>
</xs:annotation>
</xs:element>
</xs:all>
<xs:attribute name="IncludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A regular expression matching the assembly names to include in merging.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExcludeAssemblies" type="xs:string">
<xs:annotation>
<xs:documentation>A regular expression matching the assembly names to exclude from merging.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="IncludeResources" type="xs:string">
<xs:annotation>
<xs:documentation>A regular expression matching the resource names to include in merging.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="ExcludeResources" type="xs:string">
<xs:annotation>
<xs:documentation>A regular expression matching the resource names to exclude from merging.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="HideImportedTypes" type="xs:boolean">
<xs:annotation>
<xs:documentation>A switch to control whether the imported types are hidden (made private) or keep their visibility unchanged. Default is 'true'</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="NamespacePrefix" type="xs:string">
<xs:annotation>
<xs:documentation>A string that is used as prefix for the namespace of the imported types.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="FullImport" type="xs:boolean">
<xs:annotation>
<xs:documentation>A switch to control whether to import the full assemblies or only the referenced types. Default is 'false'</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="CompactMode" type="xs:boolean">
<xs:annotation>
<xs:documentation>A switch to enable compacting of the target assembly by skipping properties, events and unused methods. Default is 'false'</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

359
Main.cs Normal file
View File

@@ -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<MainConfig> _mainConfigManager;
private static ConfigManager<KeyBindConfig> _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<MainConfig>($"./{BuildInfo.Name}/config.yml");
_keyBindConfigManager = new ConfigManager<KeyBindConfig>($"./{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<int> { 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<EnableGameVersionAttribute>();
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<EnableGameVersionAttribute>();
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<EnableGameVersionAttribute>();
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--;
}
}
}
}
}

25
PostBuild.bat Normal file
View File

@@ -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\"

View File

@@ -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)

672
Sinmai-Assist.csproj Normal file
View File

@@ -0,0 +1,672 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{788BC472-59F7-46F6-B760-65C18BA74389}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SinmaiAssist</RootNamespace>
<AssemblyName>Sinmai-Assist</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
<LangVersion>12</LangVersion>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugSymbols>false</DebugSymbols>
<DebugType>None</DebugType>
<Optimize>false</Optimize>
<OutputPath>Output\</OutputPath>
<DefineConstants>
</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>1</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Prefer32Bit>false</Prefer32Bit>
<DebugSymbols>false</DebugSymbols>
<PlatformTarget>x64</PlatformTarget>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<DocumentationFile>
</DocumentationFile>
<RegisterForComInterop>false</RegisterForComInterop>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<Optimize>true</Optimize>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DebugType>pdbonly</DebugType>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM64'">
<OutputPath>bin\ARM64\Release\</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Optimize>true</Optimize>
<DebugType>None</DebugType>
<PlatformTarget>ARM64</PlatformTarget>
<LangVersion>12</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'">
<OutputPath>bin\ARM64\Debug\</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>ARM64</PlatformTarget>
<LangVersion>12</LangVersion>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Optimize>false</Optimize>
<DebugType>None</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>12</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>12</LangVersion>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="0Harmony, Version=2.10.1.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>Libs\0Harmony.dll</HintPath>
</Reference>
<Reference Include="Accessibility">
<HintPath>Output\Accessibility.dll</HintPath>
</Reference>
<Reference Include="AMDaemon.NET">
<HintPath>..\150\Sinmai_Data\Managed\AMDaemon.NET.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp">
<HintPath>..\150\Sinmai_Data\Managed\Assembly-CSharp.dll</HintPath>
</Reference>
<Reference Include="Assembly-CSharp-firstpass">
<HintPath>..\150\Sinmai_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
</Reference>
<Reference Include="AssetRipper.VersionUtilities">
<HintPath>..\150\MelonLoader\net35\AssetRipper.VersionUtilities.dll</HintPath>
</Reference>
<Reference Include="AssetsTools.NET">
<HintPath>..\150\MelonLoader\net35\AssetsTools.NET.dll</HintPath>
</Reference>
<Reference Include="bHapticsLib">
<HintPath>..\150\MelonLoader\net35\bHapticsLib.dll</HintPath>
</Reference>
<Reference Include="ChimeLib.NET">
<HintPath>D:\game\SDGB2025\Package\Sinmai_Data\Managed\ChimeLib.NET.dll</HintPath>
</Reference>
<Reference Include="cscompmgd">
<HintPath>Output\cscompmgd.dll</HintPath>
</Reference>
<Reference Include="CustomMarshalers">
<HintPath>Output\CustomMarshalers.dll</HintPath>
</Reference>
<Reference Include="IndexRange">
<HintPath>..\150\MelonLoader\net35\IndexRange.dll</HintPath>
</Reference>
<Reference Include="MelonLoader, Version=0.6.4.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\150\MelonLoader\net35\MelonLoader.dll</HintPath>
</Reference>
<Reference Include="MelonStartScreen">
<HintPath>..\150\MelonLoader\net35\MelonStartScreen.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp">
<HintPath>Output\Microsoft.CSharp.dll</HintPath>
</Reference>
<Reference Include="Mono.Cecil">
<HintPath>..\150\MelonLoader\net35\Mono.Cecil.dll</HintPath>
</Reference>
<Reference Include="Mono.Cecil.Mdb">
<HintPath>..\150\MelonLoader\net35\Mono.Cecil.Mdb.dll</HintPath>
</Reference>
<Reference Include="Mono.Cecil.Pdb">
<HintPath>..\150\MelonLoader\net35\Mono.Cecil.Pdb.dll</HintPath>
</Reference>
<Reference Include="Mono.Cecil.Rocks">
<HintPath>..\150\MelonLoader\net35\Mono.Cecil.Rocks.dll</HintPath>
</Reference>
<Reference Include="Mono.Posix">
<HintPath>..\150\Sinmai_Data\Managed\Mono.Posix.dll</HintPath>
</Reference>
<Reference Include="Mono.Security">
<HintPath>..\150\Sinmai_Data\Managed\Mono.Security.dll</HintPath>
</Reference>
<Reference Include="MonoMod.RuntimeDetour">
<HintPath>..\150\MelonLoader\net35\MonoMod.RuntimeDetour.dll</HintPath>
</Reference>
<Reference Include="MonoMod.Utils">
<HintPath>..\150\MelonLoader\net35\MonoMod.Utils.dll</HintPath>
</Reference>
<Reference Include="mscorlib">
<HintPath>..\150\Sinmai_Data\Managed\mscorlib.dll</HintPath>
</Reference>
<Reference Include="SMDiagnostics">
<HintPath>Output\SMDiagnostics.dll</HintPath>
</Reference>
<Reference Include="System">
<HintPath>..\150\Sinmai_Data\Managed\System.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.Composition">
<HintPath>Output\System.ComponentModel.Composition.dll</HintPath>
</Reference>
<Reference Include="System.ComponentModel.DataAnnotations">
<HintPath>Output\System.ComponentModel.DataAnnotations.dll</HintPath>
</Reference>
<Reference Include="System.Configuration">
<HintPath>..\150\Sinmai_Data\Managed\System.Configuration.dll</HintPath>
</Reference>
<Reference Include="System.Configuration.Install">
<HintPath>Output\System.Configuration.Install.dll</HintPath>
</Reference>
<Reference Include="System.Core">
<HintPath>..\150\Sinmai_Data\Managed\System.Core.dll</HintPath>
</Reference>
<Reference Include="System.Data">
<HintPath>Output\System.Data.dll</HintPath>
</Reference>
<Reference Include="System.Data.DataSetExtensions">
<HintPath>Output\System.Data.DataSetExtensions.dll</HintPath>
</Reference>
<Reference Include="System.Data.Entity">
<HintPath>Output\System.Data.Entity.dll</HintPath>
</Reference>
<Reference Include="System.Data.Linq">
<HintPath>Output\System.Data.Linq.dll</HintPath>
</Reference>
<Reference Include="System.Data.OracleClient">
<HintPath>Output\System.Data.OracleClient.dll</HintPath>
</Reference>
<Reference Include="System.Data.Services">
<HintPath>Output\System.Data.Services.dll</HintPath>
</Reference>
<Reference Include="System.Data.Services.Client">
<HintPath>Output\System.Data.Services.Client.dll</HintPath>
</Reference>
<Reference Include="System.Design">
<HintPath>Output\System.Design.dll</HintPath>
</Reference>
<Reference Include="System.DirectoryServices">
<HintPath>Output\System.DirectoryServices.dll</HintPath>
</Reference>
<Reference Include="System.DirectoryServices.Protocols">
<HintPath>Output\System.DirectoryServices.Protocols.dll</HintPath>
</Reference>
<Reference Include="System.Drawing">
<HintPath>..\150\Sinmai_Data\Managed\System.Drawing.dll</HintPath>
</Reference>
<Reference Include="System.Drawing.Design">
<HintPath>Output\System.Drawing.Design.dll</HintPath>
</Reference>
<Reference Include="System.EnterpriseServices">
<HintPath>Output\System.EnterpriseServices.dll</HintPath>
</Reference>
<Reference Include="System.IdentityModel">
<HintPath>Output\System.IdentityModel.dll</HintPath>
</Reference>
<Reference Include="System.IdentityModel.Selectors">
<HintPath>Output\System.IdentityModel.Selectors.dll</HintPath>
</Reference>
<Reference Include="System.IO.Compression">
<HintPath>Output\System.IO.Compression.dll</HintPath>
</Reference>
<Reference Include="System.IO.Compression.FileSystem">
<HintPath>Output\System.IO.Compression.FileSystem.dll</HintPath>
</Reference>
<Reference Include="System.Management">
<HintPath>Output\System.Management.dll</HintPath>
</Reference>
<Reference Include="System.Messaging">
<HintPath>Output\System.Messaging.dll</HintPath>
</Reference>
<Reference Include="System.Net">
<HintPath>Output\System.Net.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http">
<HintPath>Output\System.Net.Http.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.WebRequest">
<HintPath>Output\System.Net.Http.WebRequest.dll</HintPath>
</Reference>
<Reference Include="System.Numerics">
<HintPath>Output\System.Numerics.dll</HintPath>
</Reference>
<Reference Include="System.Reflection.Context">
<HintPath>Output\System.Reflection.Context.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Caching">
<HintPath>Output\System.Runtime.Caching.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.DurableInstancing">
<HintPath>Output\System.Runtime.DurableInstancing.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Remoting">
<HintPath>Output\System.Runtime.Remoting.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Serialization">
<HintPath>Output\System.Runtime.Serialization.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Serialization.Formatters.Soap">
<HintPath>Output\System.Runtime.Serialization.Formatters.Soap.dll</HintPath>
</Reference>
<Reference Include="System.Security">
<HintPath>..\150\Sinmai_Data\Managed\System.Security.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel">
<HintPath>Output\System.ServiceModel.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.Activation">
<HintPath>Output\System.ServiceModel.Activation.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.Discovery">
<HintPath>Output\System.ServiceModel.Discovery.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.Internals">
<HintPath>Output\System.ServiceModel.Internals.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.Routing">
<HintPath>Output\System.ServiceModel.Routing.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel.Web">
<HintPath>Output\System.ServiceModel.Web.dll</HintPath>
</Reference>
<Reference Include="System.ServiceProcess">
<HintPath>Output\System.ServiceProcess.dll</HintPath>
</Reference>
<Reference Include="System.Transactions">
<HintPath>Output\System.Transactions.dll</HintPath>
</Reference>
<Reference Include="System.Web">
<HintPath>Output\System.Web.dll</HintPath>
</Reference>
<Reference Include="System.Web.Abstractions">
<HintPath>Output\System.Web.Abstractions.dll</HintPath>
</Reference>
<Reference Include="System.Web.ApplicationServices">
<HintPath>Output\System.Web.ApplicationServices.dll</HintPath>
</Reference>
<Reference Include="System.Web.DynamicData">
<HintPath>Output\System.Web.DynamicData.dll</HintPath>
</Reference>
<Reference Include="System.Web.Extensions">
<HintPath>Output\System.Web.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Web.Extensions.Design">
<HintPath>Output\System.Web.Extensions.Design.dll</HintPath>
</Reference>
<Reference Include="System.Web.RegularExpressions">
<HintPath>Output\System.Web.RegularExpressions.dll</HintPath>
</Reference>
<Reference Include="System.Web.Routing">
<HintPath>Output\System.Web.Routing.dll</HintPath>
</Reference>
<Reference Include="System.Web.Services">
<HintPath>Output\System.Web.Services.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms">
<HintPath>Output\System.Windows.Forms.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms.DataVisualization">
<HintPath>Output\System.Windows.Forms.DataVisualization.dll</HintPath>
</Reference>
<Reference Include="System.Xaml">
<HintPath>Output\System.Xaml.dll</HintPath>
</Reference>
<Reference Include="System.Xml">
<HintPath>..\150\Sinmai_Data\Managed\System.Xml.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq">
<HintPath>Output\System.Xml.Linq.dll</HintPath>
</Reference>
<Reference Include="Tomlet">
<HintPath>..\150\MelonLoader\net35\Tomlet.dll</HintPath>
</Reference>
<Reference Include="Unity.Analytics.DataPrivacy">
<HintPath>..\150\Sinmai_Data\Managed\Unity.Analytics.DataPrivacy.dll</HintPath>
</Reference>
<Reference Include="Unity.TextMeshPro">
<HintPath>..\150\Sinmai_Data\Managed\Unity.TextMeshPro.dll</HintPath>
</Reference>
<Reference Include="UnityEngine">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AccessibilityModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AIModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.AIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AnimationModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.AnimationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ARModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.ARModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AssetBundleModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.AudioModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.AudioModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.BaselibModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.BaselibModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClothModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.ClothModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClusterInputModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.ClusterInputModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ClusterRendererModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.ClusterRendererModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CoreModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.CoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.CrashReportingModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.CrashReportingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.DirectorModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.DirectorModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.FileSystemHttpModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.FileSystemHttpModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.GameCenterModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.GameCenterModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.GridModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.GridModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.HotReloadModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.HotReloadModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ImageConversionModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.ImageConversionModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.IMGUIModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.InputModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.InputModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.JSONSerializeModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.JSONSerializeModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.LocalizationModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.LocalizationModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.Networking">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.Networking.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ParticleSystemModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PerformanceReportingModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.PerformanceReportingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.Physics2DModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.Physics2DModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.PhysicsModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ProfilerModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.ProfilerModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.ScreenCaptureModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.ScreenCaptureModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SharedInternalsModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.SharedInternalsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpatialTracking">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.SpatialTracking.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpriteMaskModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.SpriteMaskModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SpriteShapeModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.SpriteShapeModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.StreamingModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.StreamingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.StyleSheetsModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.StyleSheetsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.SubstanceModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.SubstanceModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TerrainModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.TerrainModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TerrainPhysicsModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.TerrainPhysicsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextCoreModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.TextCoreModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TextRenderingModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TilemapModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.TilemapModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.Timeline">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.Timeline.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TimelineModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.TimelineModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.TLSModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.TLSModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UI">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UI.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIElementsModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UIModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UIModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UmbraModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UmbraModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UNETModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UNETModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityAnalyticsModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UnityAnalyticsModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityConnectModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UnityConnectModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityTestProtocolModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UnityTestProtocolModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestAssetBundleModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestAudioModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestTextureModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.UnityWebRequestWWWModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VehiclesModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.VehiclesModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VFXModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.VFXModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VideoModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.VideoModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.VRModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.VRModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.WindModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.WindModule.dll</HintPath>
</Reference>
<Reference Include="UnityEngine.XRModule">
<HintPath>..\150\Sinmai_Data\Managed\UnityEngine.XRModule.dll</HintPath>
</Reference>
<Reference Include="ValueTupleBridge">
<HintPath>..\150\MelonLoader\net35\ValueTupleBridge.dll</HintPath>
</Reference>
<Reference Include="WebSocketDotNet">
<HintPath>..\150\MelonLoader\net35\WebSocketDotNet.dll</HintPath>
</Reference>
<Reference Include="WindowsBase">
<HintPath>Output\WindowsBase.dll</HintPath>
</Reference>
<Reference Include="zxing.unity">
<HintPath>..\150\Sinmai_Data\Managed\zxing.unity.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Attributes\EnableGameVersionAttribute.cs" />
<Compile Include="BuildInfo.cs" />
<Compile Include="Cheat\AllCollection.cs" />
<Compile Include="Cheat\AutoPlay.cs" />
<Compile Include="Cheat\ChartController.cs" />
<Compile Include="Cheat\FastSkip.cs" />
<Compile Include="Cheat\ForceCurrentIsBest.cs" />
<Compile Include="Cheat\ResetLoginBonusRecord.cs" />
<Compile Include="Cheat\RewriteLoginBonusStamp.cs" />
<Compile Include="Cheat\SetAllCharacterAsSameAndLock.cs" />
<Compile Include="Cheat\UnlockEvent.cs" />
<Compile Include="Cheat\UnlockMaster.cs" />
<Compile Include="Cheat\UnlockMusic.cs" />
<Compile Include="Cheat\UnlockUtage.cs" />
<Compile Include="Common\AutoBackupData.cs" />
<Compile Include="Common\BlockCoin.cs" />
<Compile Include="Common\ChangeDefaultOption.cs" />
<Compile Include="Common\ChangeFadeStyle.cs" />
<Compile Include="Common\CustomCameraId.cs" />
<Compile Include="Common\CustomVersionText.cs" />
<Compile Include="Common\DisableBackground.cs" />
<Compile Include="Common\ChangeGameSettings.cs" />
<Compile Include="Common\DummyChimeLogin.cs" />
<Compile Include="Common\ForceQuickRetry.cs" />
<Compile Include="Common\InfinityTimerLegacy.cs" />
<Compile Include="Common\SkipFade.cs" />
<Compile Include="Common\DisableMask.cs" />
<Compile Include="Common\DummyAimeLogin.cs" />
<Compile Include="Common\ForwardATouchRegionToButton.cs" />
<Compile Include="Common\Graphic.cs" />
<Compile Include="Common\IgnoreAnyGameInformation.cs" />
<Compile Include="Common\InfinityTimer.cs" />
<Compile Include="Common\NetworkLogger.cs" />
<Compile Include="Common\PrintUserData.cs" />
<Compile Include="Common\QuickBoot.cs" />
<Compile Include="Common\ShowFPS.cs" />
<Compile Include="Common\SinglePlayer.cs" />
<Compile Include="Common\SkipWarningScreen.cs" />
<Compile Include="Config\ConfigManager.cs" />
<Compile Include="Config\KeyBindConfig.cs" />
<Compile Include="Config\MainConfig.cs" />
<Compile Include="Fix\DisableIniClear.cs" />
<Compile Include="Fix\ForceAsServer.cs" />
<Compile Include="Fix\RestoreCertificateValidation.cs" />
<Compile Include="Fix\SkipCakeHashCheck.cs" />
<Compile Include="Fix\DisableEncryption.cs" />
<Compile Include="Fix\DisableEnvironmentCheck.cs" />
<Compile Include="Fix\DisableReboot.cs" />
<Compile Include="Fix\FixCheckAuth.cs" />
<Compile Include="Fix\FixDebugInput.cs" />
<Compile Include="Fix\RewriteNoteJudgeTiming.cs" />
<Compile Include="Fix\SkipSpecialNumCheck.cs" />
<Compile Include="Fix\SkipVersionCheck.cs" />
<Compile Include="GUI\AutoPlayPanel.cs" />
<Compile Include="GUI\ChartControllerPanel.cs" />
<Compile Include="GUI\DebugPanel.cs" />
<Compile Include="GUI\DummyLoginPanel.cs" />
<Compile Include="GUI\FastSkipPanel.cs" />
<Compile Include="GUI\GraphicPanel.cs" />
<Compile Include="GUI\MainGUI.cs" />
<Compile Include="GUI\ShowVersionInfo.cs" />
<Compile Include="GUI\Style.cs" />
<Compile Include="GUI\UserDataPanel.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Main.cs" />
<Compile Include="Utils\CipherAES.cs" />
<Compile Include="Common\InputManager.cs" />
<Compile Include="Utils\GameMessageManager.cs" />
<Compile Include="Utils\Keyboard.cs" />
<Compile Include="Utils\Server.cs" />
<Compile Include="Utils\User.cs" />
<Compile Include="Utils\UserLogout.cs" />
<Compile Include="WebServer\Api\ApiController.cs" />
<Compile Include="WebServer\WebServer.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="config - zh_CN.yml" />
<None Include="README.md" />
</ItemGroup>
<ItemGroup>
<None Include="config.yml" />
<Content Include="BeforeBuild.bat" />
<Content Include="FodyWeavers.xml" />
<Content Include="FodyWeavers.xsd" />
<Content Include="PostBuild.bat" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="EmbedIO">
<Version>3.5.2</Version>
</PackageReference>
<PackageReference Include="Fody">
<Version>6.9.2</Version>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="ILMerge.Fody">
<Version>1.24.0</Version>
</PackageReference>
<PackageReference Include="Newtonsoft.Json">
<Version>13.0.3</Version>
</PackageReference>
<PackageReference Include="YamlDotNet">
<Version>16.3.0</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<WCFMetadata Include="Connected Services\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>$(ProjectDir)PostBuild.bat</PostBuildEvent>
</PropertyGroup>
<PropertyGroup>
<PreBuildEvent>$(ProjectDir)BeforeBuild.bat</PreBuildEvent>
</PropertyGroup>
</Project>

37
Sinmai-Assist.sln Normal file
View File

@@ -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

89
config - zh_CN.yml Normal file
View File

@@ -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 # 输出调试日志

89
config.yml Normal file
View File

@@ -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

10
packages.config Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EmbedIO" version="3.5.2" targetFramework="net472" />
<package id="Fody" version="6.9.2" targetFramework="net472" developmentDependency="true" />
<package id="ILMerge.Fody" version="1.24.0" targetFramework="net472" />
<package id="LavaGang.MelonLoader" version="0.6.4" targetFramework="net472" />
<package id="System.ValueTuple" version="4.5.0" targetFramework="net472" />
<package id="Unosquare.Swan.Lite" version="3.1.0" targetFramework="net472" />
<package id="YamlDotNet" version="16.1.0" targetFramework="net472" />
</packages>