Exemple #1
0
 public static void SendHandshake(int ClientIndex)
 {
     PacketWriter writer = new PacketWriter();
     writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_HANDSHAKE);
     writer.AppendByte(1);//NO HANDSHAKE
     ServerSocket.Send(writer.getWorkspace(), ClientIndex);
 }
Exemple #2
0
        private static void SendLauncherInfo(int ClientIndex)
        {
            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_PATCH_INFO);
            writer.AppendDword(0x04000101);
            writer.AppendByte(0xA1);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_LAUNCHER);
            writer.AppendByte(0x00);

            writer.AppendByte(DatabaseCore.News.NumberOfNews);
            for (int i = 0; i < DatabaseCore.News.NumberOfNews; i++)
            {

                writer.AppendWord((ushort)DatabaseCore.News.Head[i].Length);
                writer.AppendString(false,DatabaseCore.News.Head[i]);

                writer.AppendWord((ushort)DatabaseCore.News.Text[i].Length);
                writer.AppendString(false, DatabaseCore.News.Text[i]);

                writer.AppendWord(0x07D8);

                writer.AppendByte(DatabaseCore.News.Month[i]);
                writer.AppendByte(0x00);

                writer.AppendByte(DatabaseCore.News.Day[i]);
                writer.AppendByte(0x00);

                writer.AppendDword(0x0025000B);
                writer.AppendDword(0xAFC00012);
                writer.AppendWord(0x35D2);

            }
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);
        }
Exemple #3
0
        private static void SendServerList(int ClientIndex)
        {
            PacketWriter writer = new PacketWriter();

            string name = "SRO_Global_TestBed";
            ushort namelen = (ushort)name.Length;

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_LIST);

            writer.AppendByte(0x01);
            writer.AppendByte(0x15);

            writer.AppendWord(namelen);
            writer.AppendString(false, name);
            writer.AppendByte(0x00);

            for (int i = 1; i < DatabaseCore.Server.NumberOfServer; i++)
            {
                writer.AppendByte(0x01);
                writer.AppendWord(DatabaseCore.Server.ServerId[i]);
                writer.AppendWord((ushort)(DatabaseCore.Server.ServerName[i].Length+1));
                writer.AppendByte(0x31); // flag xD usa
                writer.AppendString(false, DatabaseCore.Server.ServerName[i]);
                writer.AppendWord(DatabaseCore.Server.CurUser[i]);
                writer.AppendWord(DatabaseCore.Server.MaxUser[i]);
                writer.AppendByte(DatabaseCore.Server.ServerState[i]);
            }
            writer.AppendByte(0x00);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);
        }
Exemple #4
0
        private static void SendServerInfo(int ClientIndex)
        {
            string name = "GatewayServer";
            ushort namelen = (ushort)name.Length;

            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_INFO);
            writer.AppendWord(namelen);
            writer.AppendString(false, name);
            writer.AppendByte(0x00);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);
        }
Exemple #5
0
        private static void SendPatchInfo(int ClientIndex)
        {
            PacketWriter writer = new PacketWriter();

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_PATCH_INFO);
            writer.AppendDword(0x05000101);
            writer.AppendByte(0x20);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_PATCH_INFO);
            writer.AppendDword(0x01000100);
            writer.AppendDword(0x00050628);
            writer.AppendWord(0x00);
            writer.AppendByte(0x02);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_PATCH_INFO);
            writer.AppendDword(0x05000101);
            writer.AppendByte(0x60);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_PATCH_INFO);
            writer.AppendDword(0x02000300);
            writer.AppendWord(0x0200);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_PATCH_INFO);
            writer.AppendDword(0x00000101);
            writer.AppendByte(0xA1);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);

            writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_PATCH_INFO);
            writer.AppendWord(0x0100);
            ServerSocket.Send(writer.getWorkspace(), ClientIndex);
        }
Exemple #6
0
        private static void SendLogin(byte[] buffer, int ClientIndex)
        {
            /*
            16 00 L
            02 61 Opcode
            00 00 Secu

            12 Leng_total
            07 00 Leng_String
            63 61 72 6C 6F 73 78 = carlosx
            07 00 Leng_String
            63 61 72 6C 6F 73 78 = carlosx

            FF unk
            03 ServerID
            */
            PacketWriter writer = new PacketWriter();
            PacketReader reader = new PacketReader(buffer, buffer.Length);
            reader.ModifyIndex(7);

            ushort userlen = reader.ReadWord();
            string user = reader.ReadString(false, userlen);

            ushort passlen = reader.ReadWord();
            string pass = reader.ReadString(false, passlen);

            reader.ReadByte();
            ushort serverid = reader.ReadByte();

            Console.WriteLine("User:{0} - Password:{1} - ServerId:{2}",user,pass,serverid);

            int UserIndex = DatabaseCore.User.GetIndexByName(user);

            if (DatabaseCore.User.Banned[UserIndex])
            {
                ServerSocket.DisconnectSocket(ClientIndex);
                return;
            }
            else if (DatabaseCore.User.Online[UserIndex])
            {
                writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO);
                writer.AppendWord(0x302);
                ServerSocket.Send(writer.getWorkspace(), ClientIndex);
                ServerSocket.DisconnectSocket(ClientIndex);
            }
            else if (DatabaseCore.User.User[UserIndex] != user || DatabaseCore.User.Password[UserIndex] != pass)
            {
                writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO);

                DatabaseCore.User.FailedLogins[UserIndex]++;
                DatabaseCore.WriteQuery("UPDATE user SET failed_logins = '{0}' WHERE id = '{1}'", DatabaseCore.User.FailedLogins[UserIndex], DatabaseCore.User.User[UserIndex]);

                writer.AppendWord(0x0102);
                writer.AppendByte(DatabaseCore.User.FailedLogins[UserIndex]);
                writer.AppendDword(0x03000000);
                writer.AppendWord(0x00);
                writer.AppendByte(0x00);

                ServerSocket.Send(writer.getWorkspace(), ClientIndex);

                if (DatabaseCore.User.FailedLogins[UserIndex] == 3)
                {
                    DatabaseCore.User.FailedLogins[UserIndex] = 0;
                    DatabaseCore.WriteQuery("UPDATE user SET failed_logins = '{0}' WHERE id = '{1}'", DatabaseCore.User.FailedLogins[UserIndex], DatabaseCore.User.User[UserIndex]);

                    ServerSocket.DisconnectSocket(ClientIndex);
                }
            }
            else
            {
                int ServerIndex = DatabaseCore.Server.GetIndexById(serverid);

                if (DatabaseCore.Server.MaxUser[ServerIndex] <= DatabaseCore.Server.CurUser[ServerIndex])
                {
                    writer.SetOpcode(0xA103);
                    writer.AppendWord(0x402);
                    ServerSocket.Send(writer.getWorkspace(), ClientIndex);
                    return;
                }
                else
                {
                    writer.SetOpcode(SERVER_OPCODES.LOGIN_SERVER_AUTH_INFO);
                    writer.AppendByte(0x01);
                    writer.AppendDword(0x1234);

                    ushort leng_ip = (ushort)DatabaseCore.Server.ServerIp[ServerIndex].Length;
                    string str_ip = DatabaseCore.Server.ServerIp[ServerIndex];
                    ushort port = DatabaseCore.Server.ServerPort[ServerIndex];

                    writer.AppendWord(leng_ip);
                    writer.AppendString(false, str_ip);
                    writer.AppendWord(port);
                    ServerSocket.Send(writer.getWorkspace(), ClientIndex);
                    Console.WriteLine("Lengip:{0} - Ip:{1} - Port:{2}",leng_ip,str_ip,port);

                    //DatabaseCore.Server.CurUser[ServerIndex]++;
                    //DatabaseCore.WriteQuery("UPDATE server SET users_current = '{0}' WHERE name = '{1}'", DatabaseCore.Server.CurUser[ServerIndex], DatabaseCore.Server.ServerName[ServerIndex]);
                }
            }
        }