public static void Login(LoginClient pClient, Packet pPacket) { // Initialize DB DatabaseClient dbClient = Program.DatabaseManager.GetClient(); // Define packet lengths, as these may change with client updates int packetLength = 316; int loginLength = 17 + 1; int passwordLength = 32 + 1; string md5 = pPacket.ReadStringForLogin(packetLength); char[] md5Char = md5.ToCharArray(); string username = ""; string clientPassword = ""; // Read from 0 --> 17 for (int i = 0; i < loginLength; i++) username += md5Char[i].ToString().Replace("\0", ""); // Read from 260 --> 292 for (int i = 260; i < 260 + passwordLength; i++) clientPassword += md5Char[i].ToString().Replace("\0", ""); Log.WriteLine(LogLevel.Debug, "{0} tries to login.", username); DataTable loginData = null; using (dbClient) loginData = dbClient.ReadDataTable("SELECT * FROM accounts WHERE Username= '******'"); // Auto account creation if no username found if (loginData.Rows.Count == 0) { dbClient.ExecuteQuery("INSERT INTO accounts (username, password) VALUES ('" + username + "','" + clientPassword + "')"); using (dbClient) loginData = dbClient.ReadDataTable("SELECT * FROM accounts WHERE Username= '******'"); } if (loginData != null) { if (loginData.Rows.Count > 0) { foreach (DataRow row in loginData.Rows) { string uIsername = (string)row["username"]; string password = (string)row["password"]; bool banned = Database.DataStore.ReadMethods.EnumToBool(row["banned"].ToString()); if (clientPassword == password) { if (banned) { SendFailedLogin(pClient, ServerError.Blocked); Log.WriteLine(LogLevel.Debug, "Banned user - {0} tries to login.", username); } else if (ClientManager.Instance.IsLoggedIn(uIsername)) { Log.WriteLine(LogLevel.Warn, "{0} is trying dual login. Disconnecting.", uIsername); pClient.Disconnect(); break; } else { pClient.Username = uIsername; pClient.IsAuthenticated = true; pClient.Admin = 0; /*(byte)row["Admin"];*/ pClient.AccountID = int.Parse(row["id"].ToString()); WorldList(pClient, false); } } else SendFailedLogin(pClient, ServerError.InvalidCredentials); } } } }