diff --git a/EOLib.Config/ConfigDefaults.cs b/EOLib.Config/ConfigDefaults.cs index cbb949a63..e2ebf8795 100644 --- a/EOLib.Config/ConfigDefaults.cs +++ b/EOLib.Config/ConfigDefaults.cs @@ -11,5 +11,7 @@ public static class ConfigDefaults public const int NPCDropProtectionSeconds = 30; public const int PlayerDropProtectionSeconds = 5; + + public const int AccountCreateTimeout = 2000; } } diff --git a/EOLib.Config/ConfigFileLoadActions.cs b/EOLib.Config/ConfigFileLoadActions.cs index dafaed210..847ded1a7 100644 --- a/EOLib.Config/ConfigFileLoadActions.cs +++ b/EOLib.Config/ConfigFileLoadActions.cs @@ -1,4 +1,5 @@ using AutomaticTypeMapper; +using System; namespace EOLib.Config { @@ -61,6 +62,10 @@ public void LoadConfigFile() _configRepository.LogChatToFile = configFile.GetValue(ConfigStrings.Chat, ConfigStrings.LogChat, out tempBool) && tempBool; _configRepository.MainCloneCompat = configFile.GetValue(ConfigStrings.Custom, ConfigStrings.MainCloneCompat, out tempBool) && tempBool; + _configRepository.AccountCreateTimeout = TimeSpan.FromMilliseconds( + configFile.GetValue(ConfigStrings.Custom, ConfigStrings.AccountCreateTimeout, out tempInt) + ? tempInt + : ConfigDefaults.AccountCreateTimeout); string host; _configRepository.Host = configFile.GetValue(ConfigStrings.Connection, ConfigStrings.Host, out host) ? host : ConfigDefaults.Host; diff --git a/EOLib.Config/ConfigStrings.cs b/EOLib.Config/ConfigStrings.cs index 58f551657..64f700f29 100644 --- a/EOLib.Config/ConfigStrings.cs +++ b/EOLib.Config/ConfigStrings.cs @@ -28,6 +28,7 @@ public static class ConfigStrings public const string NPCDropProtectTime = "NPCDropProtectTime"; public const string PlayerDropProtectTime = "PlayerDropProtectTime"; public const string MainCloneCompat = nameof(MainCloneCompat); + public const string AccountCreateTimeout = nameof(AccountCreateTimeout); public const string LANGUAGE = "LANGUAGE"; public const string Language = "Language"; diff --git a/EOLib.Config/IConfigurationRepository.cs b/EOLib.Config/IConfigurationRepository.cs index d522d78b3..13a1d9a66 100644 --- a/EOLib.Config/IConfigurationRepository.cs +++ b/EOLib.Config/IConfigurationRepository.cs @@ -1,4 +1,5 @@ using AutomaticTypeMapper; +using System; namespace EOLib.Config { @@ -31,6 +32,8 @@ public interface IConfigurationRepository bool MainCloneCompat { get; set; } + TimeSpan AccountCreateTimeout { get; set; } + bool EnableLog { get; set; } } @@ -63,6 +66,8 @@ public interface IConfigurationProvider bool MainCloneCompat { get; } + TimeSpan AccountCreateTimeout { get; } + bool EnableLog { get; } } @@ -96,6 +101,8 @@ public class ConfigurationRepository : IConfigurationRepository, IConfigurationP public bool MainCloneCompat { get; set; } + public TimeSpan AccountCreateTimeout { get; set; } + public bool EnableLog { get; set; } } } diff --git a/EndlessClient/Dialogs/Factories/CreateAccountProgressDialogFactory.cs b/EndlessClient/Dialogs/Factories/CreateAccountProgressDialogFactory.cs index a9c6adf3c..5bd8e664e 100644 --- a/EndlessClient/Dialogs/Factories/CreateAccountProgressDialogFactory.cs +++ b/EndlessClient/Dialogs/Factories/CreateAccountProgressDialogFactory.cs @@ -1,6 +1,7 @@ using AutomaticTypeMapper; using EndlessClient.Dialogs.Services; using EndlessClient.GameExecution; +using EOLib.Config; using EOLib.Graphics; using EOLib.Localization; using XNAControls; @@ -12,16 +13,19 @@ public class CreateAccountProgressDialogFactory : ICreateAccountProgressDialogFa { private readonly INativeGraphicsManager _nativeGraphicsManager; private readonly IGameStateProvider _gameStateProvider; + private readonly IConfigurationProvider _configProvider; private readonly ILocalizedStringFinder _localizedStringFinder; private readonly IEODialogButtonService _eoDialogButtonService; public CreateAccountProgressDialogFactory(INativeGraphicsManager nativeGraphicsManager, IGameStateProvider gameStateProvider, + IConfigurationProvider configProvider, ILocalizedStringFinder localizedStringFinder, IEODialogButtonService eoDialogButtonService) { _nativeGraphicsManager = nativeGraphicsManager; _gameStateProvider = gameStateProvider; + _configProvider = configProvider; _localizedStringFinder = localizedStringFinder; _eoDialogButtonService = eoDialogButtonService; } @@ -33,6 +37,7 @@ public IXNADialog BuildCreateAccountProgressDialog() return new ProgressDialog(_nativeGraphicsManager, _gameStateProvider, + _configProvider, _eoDialogButtonService, message, caption); } diff --git a/EndlessClient/Dialogs/ProgressDialog.cs b/EndlessClient/Dialogs/ProgressDialog.cs index f04feef6b..68c1bf8a3 100644 --- a/EndlessClient/Dialogs/ProgressDialog.cs +++ b/EndlessClient/Dialogs/ProgressDialog.cs @@ -3,6 +3,7 @@ using EndlessClient.Dialogs.Services; using EndlessClient.GameExecution; using EOLib; +using EOLib.Config; using EOLib.Graphics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; @@ -12,6 +13,8 @@ namespace EndlessClient.Dialogs { public class ProgressDialog : BaseEODialog { + private readonly IConfigurationProvider _configurationProvider; + private readonly IXNALabel _messageLabel, _captionLabel; private readonly IXNAButton _cancelButton; @@ -21,11 +24,14 @@ public class ProgressDialog : BaseEODialog public ProgressDialog(INativeGraphicsManager nativeGraphicsManager, IGameStateProvider gameStateProvider, + IConfigurationProvider configurationProvider, IEODialogButtonService eoDialogButtonService, string messageText, string captionText) : base(gameStateProvider) { + _configurationProvider = configurationProvider; + BackgroundTexture = nativeGraphicsManager.TextureFromResource(GFXTypes.PreLoginUI, 18); _messageLabel = new XNALabel(Constants.FontSize10) @@ -79,8 +85,7 @@ protected override void OnUpdateControl(GameTime gt) if (timeOpened == null) timeOpened = gt.TotalGameTime; - const double SECONDS_FOR_CREATE = 2.0; - var pbPercent = (int)((gt.TotalGameTime.TotalSeconds - timeOpened.Value.TotalSeconds) / SECONDS_FOR_CREATE * 100); + var pbPercent = (int)((gt.TotalGameTime.TotalSeconds - timeOpened.Value.TotalSeconds) / _configurationProvider.AccountCreateTimeout.TotalSeconds * 100); _pbWidth = (int)Math.Round(pbPercent / 100.0f * _pbBackgroundTexture.Width); if (pbPercent >= 100) diff --git a/EndlessClient/GameExecution/GameRunnerBase.cs b/EndlessClient/GameExecution/GameRunnerBase.cs index 4e49bc28f..9a8b6052f 100644 --- a/EndlessClient/GameExecution/GameRunnerBase.cs +++ b/EndlessClient/GameExecution/GameRunnerBase.cs @@ -5,6 +5,7 @@ using EOLib.Config; using EOLib.Graphics; using EOLib.Localization; +using System; #if !LINUX using System.Windows.Forms; @@ -95,6 +96,21 @@ public virtual bool SetupDependencies() i++; } + else if (string.Equals(arg, "--account_delay_ms") && i < _args.Length - 1) + { + var accountCreateTimeStr = _args[i + 1]; + if (!int.TryParse(accountCreateTimeStr, out var accountCreateTime) || accountCreateTime < 2000) + { + Debug.WriteLine($"Account create timeout must be greater than or equal to 2000ms."); + } + else + { + _registry.Resolve() + .AccountCreateTimeout = TimeSpan.FromMilliseconds(accountCreateTime); + } + + i++; + } else { Debug.WriteLine($"Unrecognized argument: {arg}. Will be ignored.");