From 70a5a8dba0e6548fc0274c8f97b6f79800abb53c Mon Sep 17 00:00:00 2001 From: Ethan Moffat Date: Thu, 3 Mar 2022 21:33:13 -0800 Subject: [PATCH 1/4] Remove unused number encoder field from LoginRequestGrantedPacketTranslator --- .../Translators/LoginRequestGrantedPacketTranslator.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/EOLib/Net/Translators/LoginRequestGrantedPacketTranslator.cs b/EOLib/Net/Translators/LoginRequestGrantedPacketTranslator.cs index 6f15129ef..fb6a87365 100644 --- a/EOLib/Net/Translators/LoginRequestGrantedPacketTranslator.cs +++ b/EOLib/Net/Translators/LoginRequestGrantedPacketTranslator.cs @@ -4,20 +4,12 @@ using EOLib.Domain.Character; using EOLib.Domain.Login; using EOLib.IO; -using EOLib.IO.Services; namespace EOLib.Net.Translators { [AutoMappedType] public class LoginRequestGrantedPacketTranslator : IPacketTranslator { - private readonly INumberEncoderService _numberEncoderService; - - public LoginRequestGrantedPacketTranslator(INumberEncoderService numberEncoderService) - { - _numberEncoderService = numberEncoderService; - } - public ILoginRequestGrantedData TranslatePacket(IPacket packet) { var reply = (CharacterLoginReply)packet.ReadShort(); From 9e37d658c680aa05188f448ea1a92c9ad87bc363 Mon Sep 17 00:00:00 2001 From: Ethan Moffat Date: Thu, 3 Mar 2022 21:33:36 -0800 Subject: [PATCH 2/4] Fix reading of optional byte when listing characters for character select --- .../Translators/CharacterDisplayPacketTranslator.cs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/EOLib/Net/Translators/CharacterDisplayPacketTranslator.cs b/EOLib/Net/Translators/CharacterDisplayPacketTranslator.cs index bbd0c7bb6..e82d79afc 100644 --- a/EOLib/Net/Translators/CharacterDisplayPacketTranslator.cs +++ b/EOLib/Net/Translators/CharacterDisplayPacketTranslator.cs @@ -24,21 +24,17 @@ protected IEnumerable GetCharacters(IPacket packet) var numberOfCharacters = (int)packet.ReadChar(); - // EOSERV sends this byte unconditionally for CHARACTER_REPLY, but GameServer appears - // to not send it on delete packets - if (packet.PeekByte() == 1) - packet.ReadByte(); + // Optional AddByte call. EOSERV sends either 1 or 2, but GameServer appears + // to not send it on character delete + packet.ReadBreakString(); for (int i = 0; i < numberOfCharacters; ++i) { + characters.Add(GetNextCharacter(packet)); if (packet.ReadByte() != 255) throw new MalformedPacketException($"{packet.Family}_{packet.Action} packet missing character separator byte", packet); - characters.Add(GetNextCharacter(packet)); } - if (packet.ReadByte() != 255) - throw new MalformedPacketException($"{packet.Family}_{packet.Action} packet missing character separator byte", packet); - return characters; } From 44cb872252c7aa1d8e8c5e225761adb535c51cb1 Mon Sep 17 00:00:00 2001 From: Ethan Moffat Date: Thu, 3 Mar 2022 21:43:43 -0800 Subject: [PATCH 3/4] Change game state before showing login busy dialog when logging in. Ensures dialog can be closed. --- EndlessClient/Controllers/LoginController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EndlessClient/Controllers/LoginController.cs b/EndlessClient/Controllers/LoginController.cs index 13d713aff..3ecb32e60 100644 --- a/EndlessClient/Controllers/LoginController.cs +++ b/EndlessClient/Controllers/LoginController.cs @@ -177,8 +177,8 @@ public async Task LoginToCharacter(ICharacter character) { // https://discord.com/channels/723989119503696013/787685796055482368/946634672295784509 // Sausage: 'I have WELCOME_REPLY 3 as returning a "server is busy" message if you send it and then disconnect the client' - _errorDisplayAction.ShowLoginError(LoginReply.Busy); _gameStateActions.ChangeToState(GameStates.Initial); + _errorDisplayAction.ShowLoginError(LoginReply.Busy); return; } From b80ff5ceea98ab0f1517a18f8c7a38e8dab4a280 Mon Sep 17 00:00:00 2001 From: Ethan Moffat Date: Thu, 3 Mar 2022 21:49:24 -0800 Subject: [PATCH 4/4] Fix login for player IDs greater than short.MaxValue due to sign extension --- EOLib/Domain/Login/LoginActions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EOLib/Domain/Login/LoginActions.cs b/EOLib/Domain/Login/LoginActions.cs index f22d6ea09..7c2883a13 100644 --- a/EOLib/Domain/Login/LoginActions.cs +++ b/EOLib/Domain/Login/LoginActions.cs @@ -134,7 +134,7 @@ public async Task RequestCharacterLogin(ICharacter character) public async Task CompleteCharacterLogin() { var packet = new PacketBuilder(PacketFamily.Welcome, PacketAction.Message) - .AddThree(_playerInfoRepository.PlayerID) + .AddThree((ushort)_playerInfoRepository.PlayerID) .AddInt(_characterRepository.MainCharacter.ID) .Build();