Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
        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);
            }
        }