//Send server list (based on packet capture) private static void Handle_05(ArcheAgeConnection net, PacketReader reader) { net.SendAsyncHex(new NP_PasswordCorrect(1)); }
/// <summary> /// для версии2014 года /// </summary> /// <param name="net"></param> /// <param name="reader"></param> private static void Handle_CARequestAuth_0X04(ArcheAgeConnection net, PacketReader reader) { //3F00 0400 0A000000 0700000000 08000000000000000000 0600 616174657374200031E34F2B72D93BB25D5F27BE8A94C47800000000000000000000000000000000 //3F00 0400 0A000000 0700000000 08000000000000000000 0600 616174657374200031E34F2B72D93BB25D5F27BE8A94C47800000000000000000000000000000000 reader.Offset += 19; //скипаем 19 байт int m_RUidLength = reader.ReadLEInt16(); //длина строки string m_Uid = reader.ReadString(m_RUidLength); //считываем ID //long accId = Convert.ToInt64(m_Uid); int m_RtokenLength = reader.ReadLEInt16(); // длина строки string m_RToken = reader.ReadHexString(m_RtokenLength); //считываем токен Account n_Current = AccountHolder.AccountList.FirstOrDefault(n => n.Name == m_Uid); if (n_Current != null) { Logger.Trace("Account ID: " + n_Current.AccountId + " & Account Name: " + n_Current.Name + " is landing"); //account numberexist if (n_Current.Token.ToLower() == m_RToken.ToLower()) { net.CurrentAccount = n_Current; if (GameServerController.AuthorizedAccounts.ContainsKey(net.CurrentAccount.AccountId)) { //Удалим результаты предыдущего коннекта для нормального реконнекта GameServerController.AuthorizedAccounts.Remove(net.CurrentAccount.AccountId); } //Write account number information Write Online account list GameServerController.AuthorizedAccounts.Add(net.CurrentAccount.AccountId, net.CurrentAccount); Logger.Trace("Account ID: " + n_Current.AccountId + " & Account Name: " + n_Current.Name + " landing success"); //net.SendAsyncHex(new NP_Hex("0C00000000000300000000000000")); net.SendAsync(new AcJoinResponse_0X00(clientVersion)); //net.SendAsyncHex(new NP_Hex("280003005833000020003236393631326537613630393431313862623735303764626334326261353934")); net.SendAsync(new AcAuthResponse_0X03(clientVersion, net)); //net.SendAsyncHex(new NP_Hex("0C00000000000300000000000000")); //net.SendAsyncHex(new NP_Hex("0C00000000000600000000000000")); // 000000000600000000000000 //0C00000000000300000000000000 //03005833000020003236393631326537613630393431313862623735303764626334326261353934 return; } Logger.Trace("Account ID: " + n_Current.AccountId + " & Account Name: " + n_Current.Name + " token verification failed:" + m_RToken.ToLower()); } else { Logger.Trace("Client try to login to a nonexistent account: " + m_Uid); //Make New Temporary if (Settings.Default.Account_AutoCreation) { Logger.Trace("Create new account: " + m_Uid); Account m_New = new Account { AccountId = AccountHolder.AccountList.Count + 1, LastEnteredTime = Utility.CurrentTimeMilliseconds(), AccessLevel = 1, LastIp = net.ToString(), Membership = 1, Name = m_Uid, Password = "******", Token = m_RToken, Characters = 0 }; net.CurrentAccount = m_New; AccountHolder.InsertOrUpdate(m_New); //Write account number information Write Online account list GameServerController.AuthorizedAccounts.Add(net.CurrentAccount.AccountId, net.CurrentAccount); Logger.Trace("Account ID: " + net.CurrentAccount.AccountId + " & Account Name: " + net.CurrentAccount.Name + " landing success"); net.SendAsyncHex(new NP_Hex("0C00000000000300000000000000")); //net.SendAsync(new AcJoinResponse_0X00(clientVersion)); net.SendAsyncHex(new NP_Hex("280003005833000020003236393631326537613630393431313862623735303764626334326261353934")); //net.SendAsync(new AcAuthResponse_0X03(clientVersion, net)); return; } net.CurrentAccount = null; Logger.Trace("Сan not create account: " + m_Uid); } //If the front did not terminate, then the account number failed to log in net.SendAsync(new NP_ACLoginDenied_0x0C()); }