Beispiel #1
0
        public void SendServerList(ClientSession cs)
        {
            try
            {
                Database db = new Database();
                db.OpenDB();

                MySqlDataReader sReader = db.Query("SELECT id, name, ip, port, description FROM servers");
                Log.SqlQuerys(db.dbcmd.CommandText);
                DataTable dt = new DataTable();

                dt.Load(sReader);
                sReader.Close();
                db.dbconn.Close();

                int nServers = dt.Rows.Count;

                PayloadWriter pWriter = new PayloadWriter();

                byte[] plContent  = { 0x00, 0x00, 0x01, 0x43, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
                byte[] plContent1 = { 0x00, 0x00, 0x00, 0x00 };

                pWriter.WriteData(nServers); // Number of servers

                int    serverNumber;
                string serverName;
                string serverIP;
                short  serverPort;
                string serverDesc;

                foreach (DataRow row in dt.Rows)
                {
                    serverNumber = (int)row[0];
                    serverName   = (string)row[1];
                    serverIP     = (string)row[2];
                    serverPort   = (short)row[3];
                    serverDesc   = (string)row[4];

                    // Server info
                    pWriter.WriteData(serverNumber); // Server number
                    pWriter.WriteData(serverNumber); // Server number?
                    pWriter.WriteData(serverName.Length * 2);
                    pWriter.WriteUnicodeString(serverName);
                    pWriter.WriteData(serverIP.Length);
                    pWriter.WriteData(serverIP);
                    pWriter.WriteData(serverPort);
                    pWriter.WriteData(0);               // Atualmente curtiu?
                    pWriter.WriteData(500);             // Likes máximos?
                    pWriter.WriteData(plContent);
                    pWriter.WriteData(serverIP.Length); // Send IP again
                    pWriter.WriteData(serverIP);
                    pWriter.WriteData(serverDesc.Length * 2);
                    pWriter.WriteUnicodeString(serverDesc);
                    pWriter.WriteData(plContent1);
                }

                OutPacket oPacket = new OutPacket(pWriter.GetPayload(CenterOpcodes.ENU_SERVER_LIST_NOT),
                                                  cs._CryptoHandler, cs._AuthHandler, cs.Prefix, ++cs.Count);

                cs.Send(oPacket);
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
Beispiel #2
0
        public void NotifyContentInfo(ClientSession cs)
        {
            try
            {
                PayloadWriter pWriter = new PayloadWriter();

                byte[] plContent0 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
                                      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 };
                pWriter.WriteData(plContent0);

                byte[] plContent1 = { 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,
                                      0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 };
                pWriter.WriteData(plContent1);

                pWriter.WriteData(InitLoading.Length);

                pWriter.WriteData(InitLoading[0].Length * 2);
                pWriter.WriteUnicodeString(InitLoading[0]);

                pWriter.WriteData(InitLoading[1].Length * 2);
                pWriter.WriteUnicodeString(InitLoading[1]);

                pWriter.WriteData(InitLoading[2].Length * 2);
                pWriter.WriteUnicodeString(InitLoading[2]);

                pWriter.WriteData(InitLoading[3].Length * 2);
                pWriter.WriteUnicodeString(InitLoading[3]);

                byte[] plContent2 = { 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
                                      0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00 };
                pWriter.WriteData(plContent2);

                pWriter.WriteData(MatchLoading.Length);

                pWriter.WriteData(MatchLoading[0].Length * 2);
                pWriter.WriteUnicodeString(MatchLoading[0]);

                pWriter.WriteData(MatchLoading[1].Length * 2);
                pWriter.WriteUnicodeString(MatchLoading[1]);

                pWriter.WriteData(MatchLoading[2].Length * 2);
                pWriter.WriteUnicodeString(MatchLoading[2]);
                pWriter.WriteData(0);

                pWriter.WriteData(SquareLoading.Length);
                pWriter.WriteData(0);

                pWriter.WriteData(SquareLoading[0].Length * 2);
                pWriter.WriteUnicodeString(SquareLoading[0]);

                pWriter.WriteData(1);
                pWriter.WriteData(SquareLoading[1].Length * 2);
                pWriter.WriteUnicodeString(SquareLoading[1]);

                pWriter.WriteData(2);
                pWriter.WriteData(SquareLoading[2].Length * 2);
                pWriter.WriteUnicodeString(SquareLoading[2]);

                byte[] plContent3 = { 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                                      0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00 };
                pWriter.WriteData(plContent3);

                // HackList
                pWriter.WriteData(HackList.Length);
                for (int i = 0; i <= HackList.Length - 1; i++)
                {
                    pWriter.WriteData(HackList[i].Length * 2);
                    pWriter.WriteUnicodeString(HackList[i]);
                }

                OutPacket oPacket = new OutPacket(pWriter.GetCompressedPayload(CenterOpcodes.ENU_CLIENT_CONTENTS_FIRST_INIT_INFO_ACK),
                                                  cs._CryptoHandler, cs._AuthHandler, cs.Prefix, ++cs.Count);

                cs.Send(oPacket);
            }
            catch
            {
            }
        }
Beispiel #3
0
        public void OnLogin(ClientSession cs, InPacket ip)
        {
            PayloadReader pReader = new PayloadReader(ip.Payload);

            Database db = new Database();

            pReader.Skip(7);
            byte IDLength = pReader.ReadByte();

            UID = pReader.ReadString(IDLength);

            pReader.Skip(3);

            byte PWLength = pReader.ReadByte();

            UPW = pReader.ReadString(PWLength);

            if (db.OpenDB())
            {
                try
                {
                    MySqlDataReader sReader = db.Query("SELECT * FROM users WHERE LOGIN = @0 AND PASS = @1", UID, UPW);
                    Log.SqlQuerys(db.dbcmd.CommandText);

                    if (!sReader.HasRows)
                    {
                        Log.Inform("Falha no login. Usuário: {0}", UID);

                        try
                        {
                            PayloadWriter pWriter = new PayloadWriter();

                            byte[] plContent = { 0x00, 0x00, 0x00, 0x14 };
                            pWriter.WriteData(plContent);

                            pWriter.WriteData(IDLength * 2);
                            pWriter.WriteUnicodeString(UID);

                            byte[] plContent1 = { 0x00, 0x00, 0x00, 0x00, 0x00 };
                            pWriter.WriteData(plContent1);

                            OutPacket oPacket = new OutPacket(pWriter.GetCompressedPayload(CenterOpcodes.ENU_VERIFY_ACCOUNT_ACK),
                                                              cs._CryptoHandler, cs._AuthHandler, cs.Prefix, ++cs.Count);

                            cs.Send(oPacket);
                        }
                        catch (Exception ex)
                        {
                            Log.Error(ex.Message);
                            while (true)
                            {
                                ;
                            }
                        }
                    }
                    else
                    {
                        // Successful login.
                        Log.Inform("Novo login. Usuário: {0}", UID);

                        // Send server list first.
                        Log.Inform("Enviando a lista de servidores.");
                        SendServerList(cs);
                        SendChannelNews(cs);
                        SendShop(cs);
                        SendClientContentOpen(cs);
                        SendSocketTableInfo(cs);
                        SendCashbackRatio(cs);

                        //Log.Inform("로그인 성공 메시지를 전송합니다.", ID);

                        PayloadWriter pWritter = new PayloadWriter();

                        byte[] plContent = { 0x00, 0x00, 0x00, 0x00 };
                        pWritter.WriteData(plContent);
                        pWritter.WriteData(IDLength * 2);
                        pWritter.WriteUnicodeString(UID);
                        pWritter.WriteData(PWLength);
                        pWritter.WriteData(UPW);

                        byte[] plContent2 = Util.StringToByteArray("00 00 00 00 14 00 8E A7 C5 01 00 00 00 00 00 00 02 4B 52 00 05 A3 BD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 00 00 00 00 00");
                        pWritter.WriteData(plContent2);

                        pWritter.WriteData(cs.MyLoading.GuildMarkURL.Length * 2);
                        pWritter.WriteUnicodeString(cs.MyLoading.GuildMarkURL);

                        byte[] plContent3 = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
                        pWritter.WriteData(plContent3);

                        int SHAi = cs.MyLoading.SHAFileList.Length;
                        pWritter.WriteData(SHAi);

                        for (int i = 0; i <= cs.MyLoading.SHAFileList.Length - 1; i++)
                        {
                            pWritter.WriteData(cs.MyLoading.SHAFileList[i].Length * 2);
                            pWritter.WriteUnicodeString(cs.MyLoading.SHAFileList[i]);
                            pWritter.WriteData(true);
                        }

                        byte[] plContent4 = Util.StringToByteArray("00 00 00 01 00 00 00 03 00 00 00 00 00 00 00 00 64 01 00 00 00 00 00 00 00 64 02 00 00 00 00 00 00 00 64 01 BF 80 00 00 FC 04 97 FF 00 00 00 00 00 00 00 00 00 00 00 00");
                        pWritter.WriteData(plContent4);

                        OutPacket oPacket = new OutPacket(pWritter.GetCompressedPayload(CenterOpcodes.ENU_VERIFY_ACCOUNT_ACK),
                                                          cs._CryptoHandler, cs._AuthHandler, cs.Prefix, ++cs.Count);

                        cs.Send(oPacket);
                    }

                    sReader.Close();
                    db.dbconn.Close();
                }
                catch (MySql.Data.MySqlClient.MySqlException ex)
                {
                    Log.Sql(ex.Message);
                    while (true)
                    {
                        ;
                    }
                }
            }
        }