diff --git a/Projects/Server/Buffers/CircularBufferWriter.cs b/Projects/Server/Buffers/CircularBufferWriter.cs index 2b017732d..8850ad5f8 100644 --- a/Projects/Server/Buffers/CircularBufferWriter.cs +++ b/Projects/Server/Buffers/CircularBufferWriter.cs @@ -17,7 +17,6 @@ using System.Buffers.Binary; using System.IO; using System.Runtime.CompilerServices; using System.Text; -using Server; using Server.Network; using Server.Text; diff --git a/Projects/Server/Buffers/SpanWriter.cs b/Projects/Server/Buffers/SpanWriter.cs index 21460a427..36666271e 100644 --- a/Projects/Server/Buffers/SpanWriter.cs +++ b/Projects/Server/Buffers/SpanWriter.cs @@ -20,7 +20,6 @@ using System.IO; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Text; -using Server; using Server.Network; using Server.Text; diff --git a/Projects/Server/Gumps/Gump.cs b/Projects/Server/Gumps/Gump.cs index 8f45e531c..126cd306d 100644 --- a/Projects/Server/Gumps/Gump.cs +++ b/Projects/Server/Gumps/Gump.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Text; using Server.Network; using Server.Text; diff --git a/Projects/Server/Mobiles/Mobile.cs b/Projects/Server/Mobiles/Mobile.cs index 6c2d7d829..c81daced5 100644 --- a/Projects/Server/Mobiles/Mobile.cs +++ b/Projects/Server/Mobiles/Mobile.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Runtime.CompilerServices; using System.Runtime.Serialization; diff --git a/Projects/Server/Network/PacketHandler.cs b/Projects/Server/Network/PacketHandler.cs index 2d1d38b15..664119b30 100644 --- a/Projects/Server/Network/PacketHandler.cs +++ b/Projects/Server/Network/PacketHandler.cs @@ -1,5 +1,3 @@ -using System; - namespace Server.Network { public delegate void OnPacketReceive(NetState state, CircularBufferReader reader, ref int packetLength); diff --git a/Projects/Server/Network/Packets/IncomingAccountPackets.cs b/Projects/Server/Network/Packets/IncomingAccountPackets.cs index 383fac056..3041ec8f4 100644 --- a/Projects/Server/Network/Packets/IncomingAccountPackets.cs +++ b/Projects/Server/Network/Packets/IncomingAccountPackets.cs @@ -57,9 +57,12 @@ namespace Server.Network public static void CreateCharacter(NetState state, CircularBufferReader reader, ref int packetLength) { + reader.Seek(9, SeekOrigin.Current); + /* var unk1 = reader.ReadInt32(); var unk2 = reader.ReadInt32(); int unk3 = reader.ReadByte(); + */ var name = reader.ReadAscii(30); reader.Seek(2, SeekOrigin.Current); @@ -113,8 +116,11 @@ namespace Server.Network int hairHuef = reader.ReadInt16(); reader.ReadByte(); int cityIndex = reader.ReadByte(); + reader.Seek(8, SeekOrigin.Current); + /* var charSlot = reader.ReadInt32(); var clientIP = reader.ReadInt32(); + */ int shirtHue = reader.ReadInt16(); int pantsHue = reader.ReadInt16(); @@ -141,64 +147,63 @@ namespace Server.Network if (info == null || a == null || cityIndex < 0 || cityIndex >= info.Length) { state.Disconnect("Invalid city selected during character creation."); + return; + } + + // Check if anyone is using this account + for (var i = 0; i < a.Length; ++i) + { + var check = a[i]; + + if (check != null && check.Map != Map.Internal) + { + state.WriteConsole("Account in use"); + state.SendPopupMessage(PMMessage.CharInWorld); + return; + } + } + + state.Flags = (ClientFlags)flags; + + var args = new CharacterCreatedEventArgs( + state, + a, + name, + female, + hue, + str, + dex, + intl, + info[cityIndex], + skills, + shirtHue, + pantsHue, + hairVal, + hairHue, + hairValf, + hairHuef, + prof, + race + ); + + state.SendClientVersionRequest(); + + state.BlockAllPackets = true; + + EventSink.InvokeCharacterCreated(args); + + var m = args.Mobile; + + if (m != null) + { + state.Mobile = m; + m.NetState = state; + new LoginTimer(state, m).Start(); } else { - // Check if anyone is using this account - for (var i = 0; i < a.Length; ++i) - { - var check = a[i]; - - if (check != null && check.Map != Map.Internal) - { - state.WriteConsole("Account in use"); - state.SendPopupMessage(PMMessage.CharInWorld); - return; - } - } - - state.Flags = (ClientFlags)flags; - - var args = new CharacterCreatedEventArgs( - state, - a, - name, - female, - hue, - str, - dex, - intl, - info[cityIndex], - skills, - shirtHue, - pantsHue, - hairVal, - hairHue, - hairValf, - hairHuef, - prof, - race - ); - - state.SendClientVersionRequest(); - - state.BlockAllPackets = true; - - EventSink.InvokeCharacterCreated(args); - - var m = args.Mobile; - - if (m != null) - { - state.Mobile = m; - m.NetState = state; - new LoginTimer(state, m).Start(); - } - else - { - state.BlockAllPackets = false; - state.Disconnect("Character creation blocked."); - } + state.BlockAllPackets = false; + state.Disconnect("Character creation blocked."); } } @@ -239,9 +244,9 @@ namespace Server.Network public static void PlayCharacter(NetState state, CircularBufferReader reader, ref int packetLength) { - reader.ReadInt32(); // 0xEDEDEDED + reader.Seek(4, SeekOrigin.Current); // 0xEDEDEDED - var name = reader.ReadAscii(30); + reader.Seek(30, SeekOrigin.Current); // var name = reader.ReadAscii(30); reader.Seek(2, SeekOrigin.Current); @@ -250,50 +255,49 @@ namespace Server.Network reader.Seek(24, SeekOrigin.Current); var charSlot = reader.ReadInt32(); - var clientIP = reader.ReadInt32(); + reader.Seek(4, SeekOrigin.Current); // var clientIP = reader.ReadInt32(); var a = state.Account; if (a == null || charSlot < 0 || charSlot >= a.Length) { state.Disconnect("Invalid character slot selected."); + return; } - else + + var m = a[charSlot]; + + // Check if anyone is using this account + for (var i = 0; i < a.Length; ++i) { - var m = a[charSlot]; + var check = a[i]; - // Check if anyone is using this account - for (var i = 0; i < a.Length; ++i) + if (check != null && check.Map != Map.Internal && check != m) { - var check = a[i]; - - if (check != null && check.Map != Map.Internal && check != m) - { - state.WriteConsole("Account in use"); - state.SendPopupMessage(PMMessage.CharInWorld); - return; - } - } - - if (m == null) - { - state.Disconnect("Empty character slot selected."); + state.WriteConsole("Account in use"); + state.SendPopupMessage(PMMessage.CharInWorld); return; } - - m.NetState?.Disconnect("Character selected for a player already logged in."); - - state.SendClientVersionRequest(); - - state.BlockAllPackets = true; - - state.Flags = (ClientFlags)flags; - - state.Mobile = m; - m.NetState = state; - - new LoginTimer(state, m).Start(); } + + if (m == null) + { + state.Disconnect("Empty character slot selected."); + return; + } + + m.NetState?.Disconnect("Character selected for a player already logged in."); + + state.SendClientVersionRequest(); + + state.BlockAllPackets = true; + + state.Flags = (ClientFlags)flags; + + state.Mobile = m; + m.NetState = state; + + new LoginTimer(state, m).Start(); } public static void DoLogin(this NetState state, Mobile m) @@ -523,29 +527,39 @@ namespace Server.Network private class LoginTimer : Timer { - private readonly Mobile m_Mobile; - private readonly NetState m_State; + private readonly Mobile _mobile; + private readonly NetState _state; public LoginTimer(NetState state, Mobile m) : base(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.0)) { - m_State = state; - m_Mobile = m; + _state = state; + _mobile = m; } protected override void OnTick() { - if (m_State == null) + if (_state != null) { - Stop(); - return; + if (_state.Account == null) + { + _state.Disconnect("Account was deleted during the login process."); + } + else if (_mobile == null) + { + _state.Disconnect("Player was deleted during the login process."); + } + else if (_state.Version != null) + { + _state.BlockAllPackets = false; + DoLogin(_state, _mobile); + } + else // Waiting to receive the client version before we continue the login process + { + return; + } } - if (m_State.Version != null) - { - m_State.BlockAllPackets = false; - DoLogin(m_State, m_Mobile); - Stop(); - } + Stop(); } } } diff --git a/Projects/Server/Network/Packets/IncomingPackets.cs b/Projects/Server/Network/Packets/IncomingPackets.cs index 67f4f29fa..a99a86053 100644 --- a/Projects/Server/Network/Packets/IncomingPackets.cs +++ b/Projects/Server/Network/Packets/IncomingPackets.cs @@ -13,7 +13,6 @@ * along with this program. If not, see . * *************************************************************************/ -using System; using System.Collections.Generic; using System.Runtime.CompilerServices; diff --git a/Projects/Server/Network/TcpServer.cs b/Projects/Server/Network/TcpServer.cs index 12ab2a709..dc44702d5 100644 --- a/Projects/Server/Network/TcpServer.cs +++ b/Projects/Server/Network/TcpServer.cs @@ -20,7 +20,6 @@ using System.Linq; using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; -using Server.Exceptions; namespace Server.Network { diff --git a/Projects/Server/Skills.cs b/Projects/Server/Skills.cs index c685f0765..f6c6f329e 100644 --- a/Projects/Server/Skills.cs +++ b/Projects/Server/Skills.cs @@ -1,6 +1,4 @@ using System; -using System.Collections; -using System.Collections.Generic; using System.Runtime.CompilerServices; using Server.Network; diff --git a/Projects/Server/Timer/Timer.cs b/Projects/Server/Timer/Timer.cs index a9c23aab5..33e959420 100644 --- a/Projects/Server/Timer/Timer.cs +++ b/Projects/Server/Timer/Timer.cs @@ -17,7 +17,6 @@ using System; using System.Collections.Generic; using System.IO; using System.Threading; -using System.Threading.Tasks; using Server.Diagnostics; namespace Server diff --git a/Projects/UOContent.Tests/Tests/Multis/Boats/Packets.cs b/Projects/UOContent.Tests/Tests/Multis/Boats/Packets.cs index 730d40650..32fd230f9 100644 --- a/Projects/UOContent.Tests/Tests/Multis/Boats/Packets.cs +++ b/Projects/UOContent.Tests/Tests/Multis/Boats/Packets.cs @@ -1,8 +1,6 @@ using System.Collections.Generic; using System.IO; -using System.Linq; using Server; -using Server.Collections; using Server.Items; using Server.Multis; using Server.Network; diff --git a/Projects/UOContent/Accounting/AccountHandler.cs b/Projects/UOContent/Accounting/AccountHandler.cs index 85fc714ed..b2d8c6caa 100644 --- a/Projects/UOContent/Accounting/AccountHandler.cs +++ b/Projects/UOContent/Accounting/AccountHandler.cs @@ -403,10 +403,8 @@ namespace Server.Misc Console.WriteLine("Login: {0}: Past IP limit threshold", e.State); - using (var op = new StreamWriter("ipLimits.log", true)) - { - op.WriteLine("{0}\tPast IP limit threshold\t{1}", e.State, DateTime.UtcNow); - } + using var op = new StreamWriter("ipLimits.log", true); + op.WriteLine("{0}\tPast IP limit threshold\t{1}", e.State, DateTime.UtcNow); return; } @@ -414,7 +412,7 @@ namespace Server.Misc var un = e.Username; var pw = e.Password; - if (!(Accounts.GetAccount(un) is Account acct)) + if (Accounts.GetAccount(un) is not Account acct) { e.Accepted = false; } diff --git a/Projects/UOContent/Accounting/Security/SHA2PasswordProtection.cs b/Projects/UOContent/Accounting/Security/SHA2PasswordProtection.cs index a7f5cedb2..02d333aa2 100644 --- a/Projects/UOContent/Accounting/Security/SHA2PasswordProtection.cs +++ b/Projects/UOContent/Accounting/Security/SHA2PasswordProtection.cs @@ -15,7 +15,6 @@ using System; using System.Security.Cryptography; -using System.Text; using Server.Text; namespace Server.Accounting.Security diff --git a/Projects/UOContent/Items/Books/BookPackets.cs b/Projects/UOContent/Items/Books/BookPackets.cs index 21b1d66f1..ef6b0ae66 100644 --- a/Projects/UOContent/Items/Books/BookPackets.cs +++ b/Projects/UOContent/Items/Books/BookPackets.cs @@ -13,7 +13,6 @@ * along with this program. If not, see . * *************************************************************************/ -using System; using System.Buffers; using System.IO; using Server.Network; diff --git a/Projects/UOContent/Items/Misc/Corpses/Corpse.cs b/Projects/UOContent/Items/Misc/Corpses/Corpse.cs index e4c91c05f..46bdf6f09 100644 --- a/Projects/UOContent/Items/Misc/Corpses/Corpse.cs +++ b/Projects/UOContent/Items/Misc/Corpses/Corpse.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Runtime.CompilerServices; using Server.ContextMenus; using Server.Engines.PartySystem; using Server.Engines.Quests.Doom; diff --git a/Projects/UOContent/Items/Weapons/Abilities/FrenziedWhirlwind.cs b/Projects/UOContent/Items/Weapons/Abilities/FrenziedWhirlwind.cs index a9072f8f7..c36ff89b2 100644 --- a/Projects/UOContent/Items/Weapons/Abilities/FrenziedWhirlwind.cs +++ b/Projects/UOContent/Items/Weapons/Abilities/FrenziedWhirlwind.cs @@ -1,7 +1,5 @@ using System; using System.Collections.Generic; -using System.Linq; -using Server.Mobiles; using Server.Spells; namespace Server.Items diff --git a/Projects/UOContent/Misc/PacketThrottles.cs b/Projects/UOContent/Misc/PacketThrottles.cs index c4b226b14..40293221b 100644 --- a/Projects/UOContent/Misc/PacketThrottles.cs +++ b/Projects/UOContent/Misc/PacketThrottles.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Globalization; using System.IO; using Server.Json; using Server.Mobiles; diff --git a/Projects/UOContent/Multis/Boats/BaseBoat.cs b/Projects/UOContent/Multis/Boats/BaseBoat.cs index 6e64cac73..e339342b3 100644 --- a/Projects/UOContent/Multis/Boats/BaseBoat.cs +++ b/Projects/UOContent/Multis/Boats/BaseBoat.cs @@ -1,9 +1,7 @@ using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; -using Server.Collections; using Server.Items; using Server.Multis.Boats; using Server.Network;