diff --git a/marketplace/Empostor.Plugins.PlayerChannel.dll b/marketplace/Empostor.Plugins.PlayerChannel.dll index c5f3de2..deabdd2 100644 Binary files a/marketplace/Empostor.Plugins.PlayerChannel.dll and b/marketplace/Empostor.Plugins.PlayerChannel.dll differ diff --git a/marketplace/Empostor.Plugins.Welcome.dll b/marketplace/Empostor.Plugins.Welcome.dll index 127c06b..4003d60 100644 Binary files a/marketplace/Empostor.Plugins.Welcome.dll and b/marketplace/Empostor.Plugins.Welcome.dll differ diff --git a/src/Empostor.Server/Net/State/Game.Data.cs b/src/Empostor.Server/Net/State/Game.Data.cs index 5c47f91..9c21795 100644 --- a/src/Empostor.Server/Net/State/Game.Data.cs +++ b/src/Empostor.Server/Net/State/Game.Data.cs @@ -398,24 +398,18 @@ namespace Empostor.Server.Net.State { await _eventManager.CallAsync(new PlayerSpawnedEvent(this, player, control)); - // arrives before the PlayerControl spawn, so this fires immediately. The deadline is only a safety net for a client that never announces its scene. _ = Task.Run(async () => { try { - var deadline = DateTime.UtcNow.AddSeconds(10); - while (player.Scene != "OnlineGame") - { - if (DateTime.UtcNow > deadline - || !(player.Client.Connection?.IsConnected ?? false) - || GameState == GameStates.Destroyed) - { - return; - } + await Task.Delay(TimeSpan.FromMilliseconds(1500)); - await Task.Delay(100); + if (!(player.Client.Connection?.IsConnected ?? false)) + { + return; } + // From Nmpostor await _eventManager.CallAsync(new PlayerReadyEvent(this, player, control)); } catch (Exception ex)