diff --git a/Mo3RegUI/Constants.cs b/Mo3RegUI/Constants.cs index 04971e4..802320c 100644 --- a/Mo3RegUI/Constants.cs +++ b/Mo3RegUI/Constants.cs @@ -2,43 +2,74 @@ { public static class Constants { - public const string GameName = "心灵终结 3.3.6"; - public const string EnglishGameName = "Mental Omega 3.3.6"; + public const string GameName = "Tiberium Crisis 2"; + public const string EnglishGameName = "Tiberium Crisis 2"; public const string AppName = GameName + " 注册机"; public const string EnglishAppName = "Register for " + EnglishGameName; - public const string Version = "v2.4.1"; - public const string AssemblyVersion = "2.4.1.0"; + public const string Version = "v2.4.2"; + public const string AssemblyVersion = "2.4.2.0"; public const string CopyrightYearFrom = "2019"; - public const string CopyrightYearTo = "2023"; + public const string CopyrightYearTo = "2025"; public const string AuthorName = "伤心的笔"; // You are not supposed to remove the name here. Append your name if you have made significant changes. - public const string EnglishAuthorName = "Sad Pencil"; // You are not supposed to remove the name here. Append your name if you have made significant changes. + public const string EnglishAuthorName = "SadPencil"; // You are not supposed to remove the name here. Append your name if you have made significant changes. public const string RepoUri = "https://github.com/SadPencil/Mo3RegUI"; // Change to your repo if you have forked it. Note: this is REQUIRED by GPLv3. public const string NeutralResourcesLanguage = "zh-CN"; - public const string GameConfigIniName = "RA2MO.ini"; - public const string LauncherExeName = "MentalOmegaClient.exe"; + public const string GameConfigIniName = "RA2MD.ini"; + public const string LauncherExeName = "TiberiumCrisis.exe"; public const string GameExeName = "gamemd.exe"; - public const string SecondaryGameExeName = "Syringe.exe"; + public const string SecondaryGameExeName = "GotoTC.exe"; public static readonly string[] VulnerableAvExes = new string[] { - "cncnet5.dll", - "cncnet5mo.dll", - "ares.dll", + LauncherExeName, + //GameExeName, + SecondaryGameExeName, + "Ares.dll", + "Ares.dll.inj", + "AxionGear.ext", + "cncnet5.ext", + "Crisis.ext", + "Crisis.ext.inc", + "GScript.ext", + "Phobos.ext", + "d3dx9_29.ext", + "ra2md.csf", + "stringtable02.csf", + "stringtable03.csf", + "Resources/d3d9.ext", + "Resources/mainexecutable.exe", + "Resources/mainexecutable2.exe", + "Resources/mainexecutable3.exe", + "Resources/cnc_ddraw.dll", + "Resources/clientdx.exe", + "Resources/clientxna.exe", + "Resources/clientogl.exe", + "GameShaders/BaseShared/tchelper/tchelper.exe", + "GameShaders/BaseShared/tchelper/TCHelper.dll", + "gamemd.exe", + "BINKW32.dll", "Blowfish.dll", - "Syringe.exe", - "Map Editor/FinalAlert2MO.exe", - "Map Editor/Syringe.exe", - "Resources/ddraw_dxwnd.dll", }; - public const bool CheckDirectXRuntime = false; - public const string CnCDDrawDllName = "cnc-ddraw.dll"; - public const string CnCDDrawIniName = "cnc-ddraw.ini"; - public const bool LauncherExeDpiUnaware = true; + public const bool DirectXRuntimeTaskEnabled = true; + public const bool ChinaNetworkTaskEnabled = false; + public const bool RendererTaskEnabled = false; + public const bool ResolutionTaskEnabled = false; + public const bool FirstRunTaskEnabled = false; + public const bool UserNameTaskEnabled = false; + + public const string CnCDDrawSectionName = "CNC_DDRAW"; + public const string CnCDDrawDllName = "cnc_ddraw.dll"; + public const string CnCDDrawIniName = "cnc_ddraw.ini"; + + public const bool LauncherExeDpiUnaware = false; + + public const bool DetectDotNet35 = false; + public const bool DetectXna40 = false; } } diff --git a/Mo3RegUI/MainWindow.xaml b/Mo3RegUI/MainWindow.xaml index 778afd8..7047c97 100644 --- a/Mo3RegUI/MainWindow.xaml +++ b/Mo3RegUI/MainWindow.xaml @@ -31,7 +31,7 @@ - + diff --git a/Mo3RegUI/MainWindow.xaml.cs b/Mo3RegUI/MainWindow.xaml.cs index 785fa95..e90b84f 100644 --- a/Mo3RegUI/MainWindow.xaml.cs +++ b/Mo3RegUI/MainWindow.xaml.cs @@ -64,23 +64,42 @@ private void Window_Initialized(object sender, EventArgs e) new TaskInstance(){Task = new FirstRunTask(), Parameter = new FirstRunTaskParameter(){ GameDir = gameDir}}, new TaskInstance(){Task = new UserNameTask(), Parameter = new UserNameTaskParameter(){ GameDir = gameDir}}, new TaskInstance(){Task = new ResolutionTask(), Parameter = new ResolutionTaskParameter(){ GameDir = gameDir}}, - new TaskInstance(){Task = new RendererTask(), Parameter = new RendererTaskParameter(){ GameDir = gameDir}}, + //new TaskInstance(){Task = new RendererTask(), Parameter = new RendererTaskParameter(){ GameDir = gameDir}}, new TaskInstance(){Task = new SpeakerNumTask(), Parameter = new SpeakerNumTaskParameter()}, new TaskInstance(){Task = new DDrawDLLTask(), Parameter = new DDrawDLLTaskParameter()}, new TaskInstance(){Task = new RemoveObsoleteFilesTask(), Parameter = new RemoveObsoleteFilesTaskParameter(){ GameDir = gameDir}}, - new TaskInstance(){Task = new XboxGameBarTask(), Parameter = new XboxGameBarTaskParameter()}, + //new TaskInstance(){Task = new XboxGameBarTask(), Parameter = new XboxGameBarTaskParameter()}, new TaskInstance(){Task = new ForegroundLockTimeoutTask(), Parameter = new ForegroundLockTimeoutTaskParameter()}, new TaskInstance(){Task = new CompatibilitySettingTask(), Parameter = new CompatibilitySettingTaskParameter(){ GameDir = gameDir}}, - new TaskInstance(){Task = new ChinaNetworkTask(), Parameter = new ChinaNetworkTaskParameter(){ GameDir = gameDir}}, new TaskInstance(){Task = new AffinityTask(), Parameter = new AffinityTaskParameter(){ GameDir = gameDir}}, new TaskInstance(){Task = new NetworkInterfaceTask(), Parameter = new NetworkInterfaceTaskParameter()}, new TaskInstance(){Task = new FalsePositiveTask(), Parameter = new FalsePositiveTaskParameter(){ GameDir = gameDir}}, }; - if (Constants.CheckDirectXRuntime) + if (Constants.DirectXRuntimeTaskEnabled) { tasks.Add(new TaskInstance() { Task = new DirectXRuntimeTask(), Parameter = new DirectXRuntimeTaskParameter() }); } + if (Constants.FirstRunTaskEnabled) + { + tasks.Add(new TaskInstance() { Task = new FirstRunTask(), Parameter = new FirstRunTaskParameter() { GameDir = gameDir } }); + } + if (Constants.ChinaNetworkTaskEnabled) + { + tasks.Add(new TaskInstance() { Task = new ChinaNetworkTask(), Parameter = new ChinaNetworkTaskParameter() { GameDir = gameDir } }); + } + if (Constants.RendererTaskEnabled) + { + tasks.Add(new TaskInstance() { Task = new RendererTask(), Parameter = new RendererTaskParameter() { GameDir = gameDir } }); + } + if (Constants.ResolutionTaskEnabled) + { + tasks.Add(new TaskInstance() { Task = new ResolutionTask(), Parameter = new ResolutionTaskParameter() { GameDir = gameDir } }); + } + if (Constants.UserNameTaskEnabled) + { + tasks.Add(new TaskInstance() { Task = new UserNameTask(), Parameter = new UserNameTaskParameter() { GameDir = gameDir } }); + } this.mainTaskManager = new TaskManager(tasks); this.mainTaskManager.ReportMessage += (task_sender, task_e) => diff --git a/Mo3RegUI/Mo3RegUI.csproj b/Mo3RegUI/Mo3RegUI.csproj index b324029..df01032 100644 --- a/Mo3RegUI/Mo3RegUI.csproj +++ b/Mo3RegUI/Mo3RegUI.csproj @@ -77,6 +77,7 @@ + diff --git a/Mo3RegUI/NativeConstants.cs b/Mo3RegUI/NativeConstants.cs new file mode 100644 index 0000000..96ea744 --- /dev/null +++ b/Mo3RegUI/NativeConstants.cs @@ -0,0 +1,11 @@ +namespace Mo3RegUI +{ + public class NativeConstants + { + /// SM_CXSCREEN -> 0 + public const int SM_CXSCREEN = 0; + + /// SM_CYSCREEN -> 1 + public const int SM_CYSCREEN = 1; + } +} diff --git a/Mo3RegUI/NativeMethods.cs b/Mo3RegUI/NativeMethods.cs index 8a81a3f..61ab75d 100644 --- a/Mo3RegUI/NativeMethods.cs +++ b/Mo3RegUI/NativeMethods.cs @@ -1,42 +1,18 @@ namespace Mo3RegUI { - public partial class NativeMethods { /// Return Type: int ///nIndex: int - [System.Runtime.InteropServices.DllImportAttribute("user32.dll", EntryPoint = "GetSystemMetrics")] + [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "GetSystemMetrics")] public static extern int GetSystemMetrics(int nIndex); - } - - public partial class NativeConstants - { - /// SM_CXSCREEN -> 0 - public const int SM_CXSCREEN = 0; - } - - public partial class NativeConstants - { - /// SM_CYSCREEN -> 1 - public const int SM_CYSCREEN = 1; - } - - public partial class NativeMethods - { /// Return Type: UINT->unsigned int - [System.Runtime.InteropServices.DllImportAttribute("kernel32.dll", EntryPoint = "GetACP")] + [System.Runtime.InteropServices.DllImport("kernel32.dll", EntryPoint = "GetACP")] public static extern uint GetACP(); - } - - public partial class NativeMethods - { - /// Return Type: UINT->unsigned int - [System.Runtime.InteropServices.DllImportAttribute("winmm.dll", EntryPoint = "waveOutGetNumDevs")] + [System.Runtime.InteropServices.DllImport("winmm.dll", EntryPoint = "waveOutGetNumDevs")] public static extern uint waveOutGetNumDevs(); - } - } diff --git a/Mo3RegUI/Tasks/RendererTask.cs b/Mo3RegUI/Tasks/RendererTask.cs index b016794..93dbd02 100644 --- a/Mo3RegUI/Tasks/RendererTask.cs +++ b/Mo3RegUI/Tasks/RendererTask.cs @@ -55,7 +55,7 @@ private void _DoWork(RendererTaskParameter p) MyIniParserHelper.EditIniFile(Path.Combine(p.GameDir, Constants.GameConfigIniName), ini => { var section = MyIniParserHelper.GetSectionOrNew(ini, "Compatibility"); - section["Renderer"] = "CnC_DDraw"; + section["Renderer"] = Constants.CnCDDrawSectionName; }); } } diff --git a/Mo3RegUI/Tasks/ResolutionTask.cs b/Mo3RegUI/Tasks/ResolutionTask.cs index 0060ae6..ad5b9a8 100644 --- a/Mo3RegUI/Tasks/ResolutionTask.cs +++ b/Mo3RegUI/Tasks/ResolutionTask.cs @@ -30,8 +30,8 @@ private void _DoWork(ResolutionTaskParameter p) MyIniParserHelper.EditIniFile(Path.Combine(p.GameDir, Constants.GameConfigIniName), ini => { var videoSection = MyIniParserHelper.GetSectionOrNew(ini, "Video"); - videoSection["ScreenWidth"] = Resolution.Width.ToString(CultureInfo.InvariantCulture); - videoSection["ScreenHeight"] = Resolution.Height.ToString(CultureInfo.InvariantCulture); + videoSection["FakeScreenWidth"] = Resolution.Width.ToString(CultureInfo.InvariantCulture); + videoSection["FakeScreenHeight"] = Resolution.Height.ToString(CultureInfo.InvariantCulture); }); } ReportMessage(this, new TaskMessageEventArgs() { Level = MessageLevel.Info, Text = "设置游戏分辨率为 " + Resolution.Width.ToString() + "×" + Resolution.Height.ToString() + "。" }); diff --git a/Mo3RegUI/Tasks/RuntimeComponentTask.cs b/Mo3RegUI/Tasks/RuntimeComponentTask.cs index abc1b2b..c38b30d 100644 --- a/Mo3RegUI/Tasks/RuntimeComponentTask.cs +++ b/Mo3RegUI/Tasks/RuntimeComponentTask.cs @@ -35,23 +35,26 @@ public void DoWork(ITaskParameter p) private void _DoWork(RuntimeComponentTaskParameter p) { - // Future: Remove .NET 3.5 check for MO 3.3.7 - string net35 = GetInstalledNetFramework35VersionString(); - if (net35 is null) + if (Constants.DetectDotNet35) { - ReportMessage(this, new TaskMessageEventArgs() + // Future: Remove .NET 3.5 check for MO 3.3.7 + string net35 = GetInstalledNetFramework35VersionString(); + if (net35 is null) { - Level = MessageLevel.Info, - Text = ".NET Framework 3.5 未安装。", // don't treat this as an error - }); - } - else - { - ReportMessage(this, new TaskMessageEventArgs() + ReportMessage(this, new TaskMessageEventArgs() + { + Level = MessageLevel.Info, + Text = ".NET Framework 3.5 未安装。", // don't treat this as an error + }); + } + else { - Level = MessageLevel.Info, - Text = ".NET Framework " + net35 + " 已安装。", - }); + ReportMessage(this, new TaskMessageEventArgs() + { + Level = MessageLevel.Info, + Text = ".NET Framework " + net35 + " 已安装。", + }); + } } string net4 = GetInstalledNetFramework4VersionString(); @@ -72,54 +75,57 @@ private void _DoWork(RuntimeComponentTaskParameter p) }); } - int? net45plus = GetInstalledNetFramework45VersionNumber(); - bool isDotNet45Installed = net45plus.GetValueOrDefault() >= NET_FRAMEWORK_4_5_RELEASE_KEY; - // Future: Remove .NET 4.5 check for MO 3.3.7 - if (!isDotNet45Installed && Environment.OSVersion.Version.Major < 6) + int? net46plus = GetInstalledNetFramework46VersionNumber(); + bool isDotNet46Installed = net46plus.GetValueOrDefault() >= NET_FRAMEWORK_4_6_RELEASE_KEY; + + if (!isDotNet46Installed && Environment.OSVersion.Version.Major < 6) { ReportMessage(this, new TaskMessageEventArgs() { Level = MessageLevel.Error, - Text = "当前 .NET Framework 4 的版本号低于 4.5。", + Text = "当前 .NET Framework 4 的版本号低于 4.6。", }); } - // Future: Always require .NET 4.7.1 for MO 3.3.7 + // Future: Always require .NET 4.7.1 for MO 3.3.7 Launcher // Future: Always require .NET 7 for MO 3.3.7 - bool isXna4Installed = IsXNAFramework4Installed(); - if (isXna4Installed) + if (Constants.DetectXna40) { - ReportMessage(this, new TaskMessageEventArgs() + bool isXna4Installed = IsXNAFramework4Installed(); + if (isXna4Installed) { - Level = MessageLevel.Info, - Text = "XNA Framework 4.0 已安装。", - }); - } - else - { - ReportMessage(this, new TaskMessageEventArgs() - { - Level = (Environment.OSVersion.Version.Major < 6) ? MessageLevel.Error : MessageLevel.Info, // Future: Always prompt as Info for MO 3.3.7 - Text = "XNA Framework 4.0 未安装。", - }); - } - - if (Environment.OSVersion.Version.Major < 6) // Future: Remove this part for MO 3.3.7 - { - if (!isXna4Installed && !isDotNet45Installed) + ReportMessage(this, new TaskMessageEventArgs() + { + Level = MessageLevel.Info, + Text = "XNA Framework 4.0 已安装。", + }); + } + else { ReportMessage(this, new TaskMessageEventArgs() { - Level = MessageLevel.Error, - Text = "当前 .NET Framework 4 的版本号低于 4.5,且 XNA Framework 4.0 未安装。客户端可能无法正常运行。", + Level = (Environment.OSVersion.Version.Major < 6) ? MessageLevel.Error : MessageLevel.Info, // Future: Always prompt as Info for MO 3.3.7 + Text = "XNA Framework 4.0 未安装。", }); } } + + //if (Environment.OSVersion.Version.Major < 6) // Future: Remove this part for MO 3.3.7 + //{ + // if (!isXna4Installed && !isDotNet45Installed) + // { + // ReportMessage(this, new TaskMessageEventArgs() + // { + // Level = MessageLevel.Error, + // Text = "当前 .NET Framework 4 的版本号低于 4.5,且 XNA Framework 4.0 未安装。客户端可能无法正常运行。", + // }); + // } + //} } - private static int? GetInstalledNetFramework45VersionNumber() + private static int? GetInstalledNetFramework46VersionNumber() { try { diff --git a/Mo3RegUI/tc2icon.png b/Mo3RegUI/tc2icon.png new file mode 100644 index 0000000..b77273f Binary files /dev/null and b/Mo3RegUI/tc2icon.png differ