using Filter; using Filter.Database.Account; using Filter.Database.GameFilter; using Filter.Networking.Instances; using Filter.Networking.Login; using Filter.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Runtime.CompilerServices; namespace Filter.Handlers.Login { internal class Login3Handle { public Login3Handle() { } [LoginPacketHandler(Login3TypeClient.Token)] public static void HandleToken(LoginClient ClientSocket, Packet ClientPacket) { string str; if (ClientSocket.IsConnected != 0) { return; } if (!ClientPacket.ReadString(out str, Convert.ToInt32(Program.ConfigValues["Token_Length"]))) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response07); ClientSocket.Disconnect(); return; } if (!Injection.IsOnlyLetterOrDigit(str)) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response07); ClientSocket.Disconnect(); return; } tToken _tToken = ( from sToken in Program.AccountData.tTokens where sToken.sToken == str select sToken).FirstOrDefault(); if (_tToken == null) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response02); ClientSocket.Disconnect(); return; } tAccount _tAccount = ( from nEMID in Program.AccountData.tAccounts where nEMID.nEMID == _tToken.nEMID select nEMID).FirstOrDefault(); if (_tAccount == null) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response02); ClientSocket.Disconnect(); return; } IPAddressBan pAddressBan = ( from IPAddress in Program.GameFilterData.IPAddressBans where IPAddress.IPAddress == ClientSocket.RemoteAddress select IPAddress).FirstOrDefault(); AccountBan accountBan = ( from nEMID in Program.GameFilterData.AccountBans where nEMID.nEMID == _tAccount.nEMID select nEMID).FirstOrDefault(); //tAuth _tAuth = ( // from nAuthID in Program.AccountData.tAuths // where nAuthID.nAuthID == _tAccount.nAuthID // select nAuthID).FirstOrDefault(); //if (pAddressBan != null) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response04); ClientSocket.Disconnect(); return; } if (accountBan != null) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response04); ClientSocket.Disconnect(); return; } //if (_tAuth == null) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response01); ClientSocket.Disconnect(); return; } //if (_tAuth.nLoginable == 0) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response05); ClientSocket.Disconnect(); return; } ClientSocket.AccountID = _tAccount.nEMID; ClientSocket.Server.SendPacket(ClientPacket); } [LoginPacketHandler(Login3TypeServer.Transfer)] public static void HandleTransfer(LoginServer ServerSocket, Packet ServerPacket) { string str; if (ServerSocket.IsConnected != 0) { return; } ServerPacket.ReadBytes(new byte[19], 19); ServerPacket.ReadString(out str, 64); Program.LoginToManagerTransfer.Add(str, ServerSocket.Client.AccountID); ServerSocket.Client.SendPacket(ServerPacket); } [LoginPacketHandler(Login3TypeClient.Version)] public static void HandleVersion(LoginClient ClientSocket, Packet ClientPacket) { short num; short num1; if (ClientSocket.IsConnected != 0) { return; } if (!ClientPacket.ReadInt16(out num) || !ClientPacket.ReadInt16(out num1)) { Login3Handle.SendResponse(ClientSocket, LoginResponse.Response07); ClientSocket.Disconnect(); return; } if (num == 2006 && num1 == 6916) { ClientSocket.Server.SendPacket(ClientPacket); return; } Login3Handle.SendResponse(ClientSocket, LoginResponse.Response07); ClientSocket.Disconnect(); } [LoginPacketHandler(Login3TypeClient.WorldSelect)] public static void HandleWorldSelect(LoginClient ClientSocket, Packet ClientPacket) { byte num; if (ClientSocket.IsConnected != 0) { return; } if (!ClientPacket.ReadByte(out num)) { ClientSocket.Disconnect(); return; } ClientSocket.Server.SendPacket(ClientPacket); } private static void SendResponse(LoginClient ClientSocket, LoginResponse Response) { if (ClientSocket.IsConnected != 0) { return; } Packet packet = new Packet(Login3TypeServer.LoginError); packet.WriteInt16(Convert.ToInt16(Response)); ClientSocket.SendPacket(packet); } } }