From c0cab3ecf54bca74dd79ecb36e3b5f014d33eb75 Mon Sep 17 00:00:00 2001 From: Ray Koopa Date: Sun, 13 Jan 2019 02:09:04 +0100 Subject: [PATCH] Release 1.0.0 of Mgame launcher. --- src/Syroot.Worms.Mgame.Launcher/Config.cs | 2 +- src/Syroot.Worms.Mgame.Launcher/Program.cs | 3 + .../Resources/Icon.ico | Bin 4286 -> 15086 bytes .../{ => Resources}/app.manifest | 0 .../Syroot.Worms.Mgame.Launcher.csproj | 4 +- src/Syroot.Worms.Mgame/LaunchConfig.cs | 52 +++++++----------- 6 files changed, 26 insertions(+), 35 deletions(-) rename src/Syroot.Worms.Mgame.Launcher/{ => Resources}/app.manifest (100%) diff --git a/src/Syroot.Worms.Mgame.Launcher/Config.cs b/src/Syroot.Worms.Mgame.Launcher/Config.cs index 9945f09..0af6d33 100644 --- a/src/Syroot.Worms.Mgame.Launcher/Config.cs +++ b/src/Syroot.Worms.Mgame.Launcher/Config.cs @@ -12,7 +12,7 @@ namespace Syroot.Worms.Mgame.Launcher public string UserName { get; set; } public string Password { get; set; } - public uint PasswordKey { get; set; } + public int PasswordKey { get; set; } public string ExecutablePaths { get; set; } = "DWait.exe;Main.exe"; public string ExecutableArgs { get; set; } diff --git a/src/Syroot.Worms.Mgame.Launcher/Program.cs b/src/Syroot.Worms.Mgame.Launcher/Program.cs index ff75cbc..1da7599 100644 --- a/src/Syroot.Worms.Mgame.Launcher/Program.cs +++ b/src/Syroot.Worms.Mgame.Launcher/Program.cs @@ -7,6 +7,9 @@ using Microsoft.Extensions.Configuration; namespace Syroot.Worms.Mgame.Launcher { + /// + /// Represents the main class of the application containing the program entry point. + /// internal class Program { // ---- METHODS (PRIVATE) -------------------------------------------------------------------------------------- diff --git a/src/Syroot.Worms.Mgame.Launcher/Resources/Icon.ico b/src/Syroot.Worms.Mgame.Launcher/Resources/Icon.ico index 67e55e9e27b0263b61ab7c7b7d2f1389767b9700..be19f0c5ccf806ad3a397a205aabfa3c6b07d3b7 100644 GIT binary patch literal 15086 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 RO8Lsu_5ZT}3;a?2{{^wyG%)}G diff --git a/src/Syroot.Worms.Mgame.Launcher/app.manifest b/src/Syroot.Worms.Mgame.Launcher/Resources/app.manifest similarity index 100% rename from src/Syroot.Worms.Mgame.Launcher/app.manifest rename to src/Syroot.Worms.Mgame.Launcher/Resources/app.manifest diff --git a/src/Syroot.Worms.Mgame.Launcher/Syroot.Worms.Mgame.Launcher.csproj b/src/Syroot.Worms.Mgame.Launcher/Syroot.Worms.Mgame.Launcher.csproj index 450e88e..7716aef 100644 --- a/src/Syroot.Worms.Mgame.Launcher/Syroot.Worms.Mgame.Launcher.csproj +++ b/src/Syroot.Worms.Mgame.Launcher/Syroot.Worms.Mgame.Launcher.csproj @@ -2,6 +2,7 @@ false Resources\Icon.ico + Resources\app.manifest Launcher Mgame Worms Launcher Syroot @@ -11,8 +12,7 @@ WinExe Online Worms Launcher net461 - 0.5.0 - app.manifest + 1.0.0 diff --git a/src/Syroot.Worms.Mgame/LaunchConfig.cs b/src/Syroot.Worms.Mgame/LaunchConfig.cs index dffda12..b5cf698 100644 --- a/src/Syroot.Worms.Mgame/LaunchConfig.cs +++ b/src/Syroot.Worms.Mgame/LaunchConfig.cs @@ -14,34 +14,29 @@ namespace Syroot.Worms.Mgame { // ---- FIELDS ------------------------------------------------------------------------------------------------- - private static readonly char[] _invalidUserNameChars = { '=', '&', ' ' }; - - private string _userName; private string _passwordString; // ---- PROPERTIES --------------------------------------------------------------------------------------------- + /// + /// Gets or sets the name of the publisher providing the launch configuration. Must not exceed 15 characters. + /// + public string Publisher { get; set; } = "MGAME"; + + /// + /// Gets or sets an unknown value. Must not exceed 19 characters. + /// + public string Unknown { get; set; } + /// /// Gets or sets the address of the game server. /// public IPEndPoint ServerEndPoint { get; set; } /// - /// Gets or sets the initially entered user name. + /// Gets or sets the initially entered user name. Must not exceed 250 characters. /// - public string UserName - { - get => _userName; - set - { - // 251 bytes is the space between "UID=" and the server IP, minus a terminating 0. - if (Encodings.Win949.GetBytes(value).Length > 251) - throw new ArgumentException("User name must not exceed 251 bytes."); - if (value.IndexOfAny(_invalidUserNameChars) != -1) - throw new ArgumentException("User name contains invalid characters."); - _userName = value; - } - } + public string UserName { get; set; } // ---- METHODS (PUBLIC) --------------------------------------------------------------------------------------- @@ -57,19 +52,12 @@ namespace Syroot.Worms.Mgame using (BinaryStream stream = new BinaryStream(mappedFile.CreateViewStream(), encoding: Encodings.Win949, stringCoding: StringCoding.ZeroTerminated)) { - stream.WriteString("MGAME", 16); - - stream.Position = 36; - stream.Write(_passwordString); - - stream.Position = 66; - stream.Write("UID=", StringCoding.Raw); - stream.Write(Encodings.Win949.GetBytes(UserName)); - - stream.Position = 322; - stream.Write(ServerEndPoint.Address.ToString()); - stream.Position = 352; - stream.Write(ServerEndPoint.Port.ToString()); + stream.WriteString(Publisher, 16); + stream.WriteString(Unknown, 20); + stream.WriteString(_passwordString, 30); + stream.WriteString($"UID={UserName}", 256); + stream.WriteString(ServerEndPoint.Address.ToString(), 30); + stream.WriteString(ServerEndPoint.Port.ToString(), 914); } return mappedFile; } @@ -92,9 +80,9 @@ namespace Syroot.Worms.Mgame /// /// The password to store encrypted. /// The key to encrypt with. - public void SetPassword(string password, uint key = 1000) + public void SetPassword(string password, int key = 1000) { - _passwordString = $";{PasswordCrypto.Encrypt(password, key)};{key}"; + _passwordString = $";{PasswordCrypto.Encrypt(password, (uint)key)};{key}"; } } }