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 67e55e9..be19f0c 100644 Binary files a/src/Syroot.Worms.Mgame.Launcher/Resources/Icon.ico and b/src/Syroot.Worms.Mgame.Launcher/Resources/Icon.ico differ 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}"; } } }