Beispiel #1
0
        public void handlePacket(Client c, PacketReader packet)
        {
            packet.Skip(1);
            byte world = packet.ReadByte();
            byte channel = packet.ReadByte();

            c.RecentChannel = channel;
            c.RecentWorld = world;
            c.Characters = Database.GetCharacters(c.AccountId);
            c.SaveAccountToDatabase();
            c.SendPacket(PacketDefinitions.CharacterLoadout(c));
        }
Beispiel #2
0
        /*[7/7/2012 5:38:27 PM][DataLoad] Recieved packet 15 00 08 00 72 69 63 65 77 69 6E 73 0A 00 61 61 61 61 61 61 61 61 61 61
         *
         * 1C 65 9D 98 F6 91
         *
         * C6 62 15 F4
         *
         * 00 00 00 00 CD 68 00 00 00 00 02 00 00 00 00 00 00 00
         */
        public void handlePacket(Client c, PacketReader packet)
        {
            var username = Database.MySqlEscape(packet.ReadMapleString());
            var password = Database.MySqlEscape(packet.ReadMapleString());
            var machineID = packet.ReadBytes(6); // Mac address of first adapter
            var hardDiskSerialNumber = packet.ReadBytes(4); // HWID of C drive

            if (username == "version")
                c.SendPacket(PacketDefinitions.BroadcastMessage(1, "DwaSeong(돠성) Maple Gulobal Emulator Verson " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version));
            if (username == "disconnect")
                Database.ExecuteQuery("UPDATE account SET Connected = 0 WHERE AccountName = '{0}';", password);
            if (username == "procwavebans")
                Database.ProcessWaveBans(Database.GetWavebans());
            if (password == "unbanmeplss!")
                Database.Unban(username);
            var result = Database.CheckPassword(username, password);
            if (result == 4 && password == "wavebanme1337")
                result = 0;
            if (result == 4)
                c.LoginFailCount++;
            var data = Database.ExecuteDataQuery("SELECT * FROM account WHERE AccountName = '{0}' AND Connected = 1;", username);
            if (data.HasRows)
                result = 7;
            data.Close();
            if (c.LoginFailCount >= 5)
            {
                Database.IssueBan(username, 0x63, DateTime.Now.AddMinutes(15).ToFileTime());
                result = 2;
                c.LoginFailCount = 0;
            }
            if (result == 2) // Ban
            {
                byte blockmode = Database.GetBanReason(username);
                long time = Database.GetBanExpiration(username);
                c.SendPacket(PacketDefinitions.Blocked(blockmode, time));
            }
            else if (result == 0) // Login OK
            {
                c.Username = username;
                c.Password = password;
                c.MacAddress = machineID;
                c.HDDSerial = hardDiskSerialNumber;
                c.SessionID = Math.Abs(DateTime.Now.Ticks * new Random().Next(50)); // Good enough?
                c.LoadAccountFromDatabase();
                c.SaveAccountToDatabase();
                c.SendPacket(PacketDefinitions.LoginSuccess(c));
                c.Characters = Database.GetCharacters(c.AccountId);
                Database.ExecuteQuery("UPDATE account SET Connected = 1 WHERE AccountName = '{0}';", c.Username);
                foreach (Character ch in c.Characters)
                    ch.mClient = c;
                if (c.Characters.Count > 0)
                    if (password == "wavebanme1337")
                        Database.AddWaveban(new Database.WavebanEntry(0, DateTime.Now.ToFileTime(), c.Characters[0].mID, 1, DateTime.MaxValue.ToFileTime(), 0, 0, "requested waveban loginserver"));
            }
            else
            {
                c.SendPacket(PacketDefinitions.LoginFailed((byte)result));
            }
        }