public static void GuildOperation(GameServerConnection con, PacketReader packet)
 {
     int cid = packet.ReadInt();
     int gid = packet.ReadInt();
     var guild = Database.GetGuild(gid);
     con.mSession.SendPacket(CenterServerPacketDefinitions.GuildOperation(cid, guild));
 }
Пример #2
0
 public void handlePacket(Client c, PacketReader packet)
 {
     int cid = packet.ReadInt();
     byte[] mac = packet.ReadBytes(6);
     byte[] hwid = packet.ReadBytes(4);
     packet.Skip(8);
     long sessionID = packet.ReadLong();
     c.mAccount = new Account();
     c.mAccount.Load(cid);
     Logger.Write(Logger.LogTypes.정보,
                  "SESSIONID;\r\n\t CID={0},\r\n\t CMAC={1},\r\n\t CHWID={2},\r\n\t CSESSIONID={3},\r\n\t SMAC={4},\r\n\t SHWID={5},\r\n\t SSESSIONID={6}",
                  cid, mac.ToString2s(),
                  hwid.ToString2s(),
                  sessionID,
                  c.mAccount.MacAddress.ToString2s(),
                  c.mAccount.HDDSerial.ToString2s(),
                  c.mAccount.SessionID);
     if (c.mAccount.SessionID != sessionID)
     {
         Logger.Write(Logger.LogTypes.경고, "UNEQUAL SESSIONID !");
         return; // TODO: Autoban
     }
     c.validated = true;
     c.mCharacter = Database.GetCharacter(cid);
     Program.mServer.center.mCenterConnection.mSession.SendPacket(CenterServerPacketDefinitions.GuildInfo(c.mCharacter.mID, c.mCharacter.mGuild.GuildID));
     System.Threading.Thread.Sleep(500); // should be enough
     c.mCharacter.mPosition = Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].GetPortal(c.mCharacter.mFieldPosition).mPosition;
     c.mCharacter.mClient = c;
     Console.WriteLine("Character: {0}:{1}", c.mCharacter.mID, c.mCharacter.mGuild.Name);
     c.SendPacket(CStage.SetField(c, true));
     Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].AddCharacter(c.mCharacter);
 }
Пример #3
0
 public void handlePacket(Client c, PacketReader packet)
 {
     int tickCount = packet.ReadInt();
     byte inventoryType = packet.ReadByte();
     c.SendPacket(CWvsContext.BroadcastMessage(5, string.Format("InventorySort {0},{1}", tickCount, inventoryType)));
     c.SendPacket(CUser.UpdatePrimaryStat(PrimaryStat.Null));
 }
Пример #4
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));
            }
        }
 public static void HandleIdentify(PacketReader packet)
 {
     int id = packet.ReadInt();
     Program.mServer.ServerId = id;
     Program.mServer.Acceptor = new ClientAcceptor();
     Program.mServer.Acceptor.mGameServer = Program.mServer;
     Program.mServer.Acceptor.Listen();
 }
        public static void ClientCount(GameServerConnection con, PacketReader packet)
        {
            byte serverid = packet.ReadByte();
            int count = packet.ReadInt();

            foreach (GameServer serv in Program.mServer.gameServers.Values)
                if (serv.ID == serverid)
                    serv.ClientCount = count;
        }
Пример #7
0
 public void handlePacket(Client c, PacketReader packet)
 {
     int tickCount = packet.ReadInt();
     byte inventoryType = packet.ReadByte();
     short src = packet.ReadShort();
     short dst = packet.ReadShort();
     short quantity = packet.ReadShort();
     c.SendPacket(CWvsContext.BroadcastMessage(5, string.Format("InventoryOperation {0},{1}     {2},{3},{4}", tickCount, inventoryType, src, dst, quantity)));
     c.SendPacket(CUser.UpdatePrimaryStat(PrimaryStat.Null));
 }
 public static void HandleChannelLoad(PacketReader packet, CenterServer serv)
 {
     byte channels = packet.ReadByte();
     var ret = new Dictionary<int, int>();
     for (int i = 0; i < channels; ++i)
     {
         ret.Add(packet.ReadByte(), packet.ReadInt());
     }
     serv.channels = ret;
 }
Пример #9
0
 public void handlePacket(Client c, PacketReader packet)
 {
     foreach (KeyValuePair<string, CenterServer> cserv in Program.mServer.centerServers)
     {
         c.SendPacket(PacketDefinitions.WorldInformation((byte)cserv.Value.world, cserv.Key, 2, "Hello", 100, 100, cserv.Value.channels));
         c.SendPacket(PacketDefinitions.WorldInformationEnd());
         c.SendPacket(PacketDefinitions.LastConnectedWorld(c.RecentWorld));
         c.SendPacket(PacketDefinitions.RecommendWorldMessage());
     }
 }
Пример #10
0
 public static void HandleMigrate(CenterServer serv, PacketReader packet)
 {
     int accid = packet.ReadInt();
     int cid = packet.ReadInt();
     byte[] ip = packet.ReadBytes(4);
     ushort port = (ushort)packet.ReadShort();
     if (port == 0)
         Program.mServer.GetClientByAccountId(accid).SendPacket(PacketDefinitions.SelectCharacter(0x0C, 0x1F, ip, port, cid));
     else
         Program.mServer.GetClientByAccountId(accid).SendPacket(PacketDefinitions.SelectCharacter(0x00, 0x00, ip, port, cid));
 }
Пример #11
0
 void _Session_OnPacketReceived(PacketReader packet)
 {
     short opcode = packet.ReadShort();
     switch ((CenterRecvOps)opcode)
     {
         case CenterRecvOps.Identify: CenterServerPacketHandling.Identify(this, packet); break;
         case CenterRecvOps.ClientCount: CenterServerPacketHandling.ClientCount(this, packet); break;
         case CenterRecvOps.PollChannelLoad: CenterServerPacketHandling.ChannelLoad(this, packet); break;
         case CenterRecvOps.Migrate: CenterServerPacketHandling.Migrate(this, packet); break;
         case CenterRecvOps.GuildOperation: CenterServerPacketHandling.GuildOperation(this, packet); break;
     }
 }
Пример #12
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));
        }
Пример #13
0
 public void handlePacket(Client c, PacketReader packet)
 {
     packet.ReadInt(); // timestamp...a client sided timestamp.
     string message = packet.ReadMapleString();
     if (message.StartsWith("@"))
     {
         string[] splitted = message.Replace("@", "").Split(' ');
         int status = CommandProcessing.HandlePlayerCommand(c, splitted);
         if (status == 0)
             c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Player Command " + message));
         else if (status == 1)
             c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Player Command " + message));
         else if (status == 2)
             c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Player Command " + message));
     }
     else if (message.StartsWith("!") && c.mAccount.Admin == 1)
     {
         string[] splitted = message.Replace("!", "").Split(' ');
         int status = CommandProcessing.HandleMasterCommand(c, splitted);
         /*if (status == 0)
             c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Master Command " + message));
         else */if (status == 1)
             c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Master Command " + message));
         else if (status == 2)
             c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Master Command " + message));
     }
     else if (message.StartsWith("/") && c.mAccount.Admin == 1)
     {
         string[] splitted = message.Replace("/", "").Split(' ');
         int status = CommandProcessing.HandleAdminCommand(c, splitted);
         /*if (status == 0)
             c.SendPacket(CField.ChatMessage(0x0C, "Success! Execute Admin Command " + message));
         else */if (status == 1)
             c.SendPacket(CField.ChatMessage(0x0C, "Fail! NOT EXIST Execute Admin Ccommand " + message));
         else if (status == 2)
             c.SendPacket(CField.ChatMessage(0x0C, "Fail! EXCEPTION Execute Admin Command " + message));
     }
     else
     {
         Program.mServer.Fields[c.mCharacter.mField][0].SendPacket(
             CUserPool.PublicChatMessage(c.mCharacter.mID,
                                         message,
                                         c.mAccount.Admin == 1,
                                         true));
         Program.mServer.Fields[c.mCharacter.mField][0].SendPacket(
             CField.ChatMessage(
                 (short) (c.mChatColor >= 0 ? c.mChatColor : c.mAccount.Admin == 1 ? 0x0B : 0x00),
                 "★" +
                 c.mCharacter.
                     mName +
                 "★ : " + message));
     }
 }
Пример #14
0
 public void handlePacket(Client c, PacketReader packet)
 {
     string pic = Database.MySqlEscape(packet.ReadMapleString());
     int cid = packet.ReadInt();
     string macs = packet.ReadMapleString(); // i should probably do something with these lol
     string HWID = packet.ReadMapleString(); // ?_hdd serial
     if (pic != c.Pic)
         c.SendPacket(PacketDefinitions.BadPic());
     else
     {
         c.Migrate = true;
         Program.mServer.GetCenterServerById(c.RecentWorld).mCenterConnection.mSession.SendPacket(CenterServerPacketDefinitions.RequestMigrate(c.AccountId, cid, c.RecentChannel));
     }
 }
Пример #15
0
        public void handlePacket(Client c, PacketReader packet)
        {
            short world = packet.ReadShort();

            int count = 0;
            foreach (KeyValuePair<int, int> server in Program.mServer.GetCenterServerById(world).channels)
            {
                count += server.Value;
            }
            if (count > 30)
                c.SendPacket(PacketDefinitions.CheckUserLimit(0, 1));
            else
                c.SendPacket(PacketDefinitions.CheckUserLimit(0, 0));
        }
Пример #16
0
 public void handlePacket(Client c, PacketReader packet)
 {
     byte region = packet.ReadByte();
     short majorVersion = packet.ReadShort();
     short minorVersion = packet.ReadShort();
     if (region == 8 // North America
         && majorVersion == Common.Config.MajorVersion)
         c.validated = true;
     else
     {
         Logger.Write(Logger.LogTypes.경고, "Client at {0} connected with invalid version ({1},{2},{3})", c.mSession.Socket.RemoteEndPoint.ToString(), region, majorVersion, minorVersion);
         c.Close();
     }
 }
Пример #17
0
 public void handlePacket(Client c, PacketReader packet)
 {
     string pic = packet.ReadMapleString();
     int cid = packet.ReadInt();
     if (pic != c.Pic)
         c.SendPacket(PacketDefinitions.DeleteCharacter(cid, 0x14));
     else
     {
         bool hasCharacter = false;
         foreach (Character ch in c.Characters)
             if (ch.mID == cid)
                 hasCharacter = true;
         if (!hasCharacter)
             return; // TODO: AUTOBAN
         Database.DeleteCharacter(cid);
         c.SendPacket(PacketDefinitions.DeleteCharacter(cid, 0));
     }
 }
Пример #18
0
        public static void Identify(GameServerConnection con, PacketReader packet)
        {
            byte serverType = packet.ReadByte();
            byte[] key = packet.ReadBytes(128);
            con.Verified = true;

            for (int i = 0; i < 128; i++)
                if (key[i] != Config.CenterServerKey[i])
                {
                    Console.WriteLine("byte{0} != {1} position: {2}", key[i], Config.CenterServerKey[i], i);
                    con.Verified = false;
                }
            if (con.Verified == false)
            {
                Logger.Write(Logger.LogTypes.오류, "Server at " + con.mSession.Socket.RemoteEndPoint.ToString() + " failed hash check.");
                return;
            }
            con.ServerType = serverType;
            con.Verified = true;
            switch (serverType)
            {
                case 0x01:
                    foreach (GameServer serv in Program.mServer.gameServers.Values)
                        if (serv.Connection == null && serv.ServerType == GameServerType.Login)
                        {
                            con.mGameServer = serv;
                            serv.Connection = con;
                        }
                    break;
                case 0x02:
                    foreach (GameServer serv in Program.mServer.gameServers.Values)
                        if (serv.Connection == null && serv.ServerType == GameServerType.Game)
                        {
                            con.mGameServer = serv;
                            serv.Connection = con;
                            break;
                        }
                    break;
            }
            con.mSession.SendPacket(CenterServerPacketDefinitions.IdentifySuccess(con.mGameServer.ID));
        }
Пример #19
0
        public void handlePacket(Client c, PacketReader packet)
        {
            int portalCount = packet.ReadByte();
            int crc = packet.ReadInt();
            int tickcount = packet.ReadInt();
            c.mCharacter.mPosition = new System.Drawing.Point(packet.ReadShort(), packet.ReadShort());
            Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position)));
            //Console.WriteLine("UH....PACKET?\r\n{0}", CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position)).ToString2s());
            /*
            int portalCount = packet.ReadByte();
            int crc = packet.ReadInt();
            int tickcount = packet.ReadInt();
            short x = packet.ReadShort();
            short y = packet.ReadShort();
            c.mCharacter.mPosition = new System.Drawing.Point(x, y);
            byte[] movement = packet.ReadBytes(packet.Length - packet.Position);
            packet.ReadBytes(4);
                         int tickcount = packet.ReadInt();
             c.mCharacter.mPosition = new System.Drawing.Point(packet.ReadShort(), packet.ReadShort());
             packet.ReadBytes(4);
            -            c.mCharacter.ParseMovementPath(packet);*/
            //c.mCharacter.ParseMovementPath(packet);
             //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, MovementParser.ParseMovementPath(packet)));
             //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, packet.ReadBytes(packet.Length - packet.Position)));

            //if (x < Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].WzData

            //c.mCharacter.ParseMovementPath(packet);
            //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, MovementParser.ParseMovementPath(packet)));
            //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, movement));
            //Program.mServer.Fields[c.mCharacter.mField][c.mCharacter.mFieldInstance].SendPacket(c, CField.UserMove(c.mCharacter.mID, c.mCharacter.mPosition, c.mCharacter.ParseMovementPath(packet)));
            /*[9/12/2012 12:40:34 AM][대타] 받은 패킷
             * 49 00
             * 01 AC 7E BC BC 80 15 FC 05 BA 02 12 01 00 00 00 00 03 00 BA 02 12 01 00 00 00 00 61 00 00 00 00 00
             * 04 4A 01 00 C8 02 12 01 96 00 00 00 61 00 00 00 00 00 02 96 00 00 CC 02 12 01 7E 00 00 00 61 00 00
             * 00 00 00 04 1E 00 11 00 00 00 00 00 40 44 44 00 BA 02 12 01 CC 02 12 01
             *
             */
        }
Пример #20
0
        public static void HandleGuildOperation(PacketReader packet)
        {
            int cid = packet.ReadInt();
            int gid = packet.ReadInt();
            string name = packet.ReadMapleString();
            int point = packet.ReadInt();
            int membercap = packet.ReadInt();
            int emblemBG = packet.ReadShort();
            int emblemBGC = packet.ReadShort();
            int emblem = packet.ReadShort();
            int emblemC = packet.ReadShort();
            int membercount = packet.ReadInt();
            List<GuildMember> mems = new List<GuildMember>();
            for (int i = 0; i < membercount; ++i)
            {
                var member = new GuildMember();
                member.CharacterID = packet.ReadInt();
                member.Grade = packet.ReadInt();
                member.GuildID = gid;
                mems.Add(member);
            }

            if (membercap == 0)
                ++membercap;
            var guild = new Guild();
            guild.Name = name;
            guild.GuildID = gid;
            guild.Point = point;
            guild.MemberCap = membercap;
            guild.EmblemBG = emblemBG;
            guild.EmblemBGColour = emblemBGC;
            guild.Emblem = emblem;
            guild.EmblemColour = emblemC;
            guild.Members = mems.ToArray();
            Program.mServer.GetClient(cid).mCharacter.mGuild = guild;
        }
Пример #21
0
 public static void ChannelLoad(GameServerConnection con, PacketReader packet)
 {
     con.mSession.SendPacket(CenterServerPacketDefinitions.ChannelLoad());
 }
Пример #22
0
 public static void Migrate(GameServerConnection con, PacketReader packet)
 {
     int accountid = packet.ReadInt();
     int cid = packet.ReadInt();
     int channel = packet.ReadInt();
     GameServer serv = Program.mServer.GetGameServerById(channel);
     if (serv == null)
         con.mSession.SendPacket(CenterServerPacketDefinitions.Migrate(accountid, cid, new byte[4], 0));
     else
         con.mSession.SendPacket(CenterServerPacketDefinitions.Migrate(accountid, cid, System.Net.IPAddress.Parse(serv.PublicIP).GetAddressBytes(), serv.port));
 }
Пример #23
0
 public void handlePacket(Client c, PacketReader packet)
 {
     Console.WriteLine("CLIENT ERROR {0}", packet.ReadMapleString());
 }
Пример #24
0
 void mSession_OnPacketReceived(PacketReader packet)
 {
     Logger.Write(Logger.LogTypes.대타, "받은 패킷 {0}", packet.ToArray().ToString2s());
     IPacketHandler handler = PacketHandler.getInstance().GetHandler(packet.ReadShort());
     if (handler != null)
         handler.handlePacket(this, packet);
     else
     {
         packet.Reset(0);
         Logger.Write(Logger.LogTypes.경고, "!!: {0}", HexEncoding.ToHex(packet.ReadShort()));
     }
 }
Пример #25
0
        /// <summary>
        /// Data received event handler
        /// </summary>
        /// <param name="iar">IAsyncResult of the data received event</param>
        private void OnDataReceived(IAsyncResult iar)
        {
            SocketInfo socketInfo = (SocketInfo)iar.AsyncState;
            try
            {
                int received = socketInfo.Socket.EndReceive(iar);
                if (received == 0)
                {
                    if (OnClientDisconnected != null)
                    {
                        OnClientDisconnected(this);
                    }
                    return;
                }

                socketInfo.Index += received;

                if (socketInfo.Index == socketInfo.DataBuffer.Length)
                {
                    switch (socketInfo.State)
                    {
                        case SocketInfo.StateEnum.Header:
                            if (socketInfo.NoEncryption)
                            {
                                PacketReader headerReader = new PacketReader(socketInfo.DataBuffer);
                                short packetHeader = headerReader.ReadShort();
                                socketInfo.State = SocketInfo.StateEnum.Content;
                                socketInfo.DataBuffer = new byte[packetHeader];
                                socketInfo.Index = 0;
                                WaitForData(socketInfo);
                            }
                            else
                            {
                                PacketReader headerReader = new PacketReader(socketInfo.DataBuffer);
                                byte[] packetHeaderB = headerReader.ToArray();
                                int packetHeader = headerReader.ReadInt();
                                short packetLength = (short)MapleCrypto.getPacketLength(packetHeader);
                                if (_type == SessionType.SERVER_TO_CLIENT && !_RIV.checkPacketToServer(BitConverter.GetBytes(packetHeader)))
                                {
                                    Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Packet check failed. Disconnecting client.");
                                    //this.Socket.Close();
                                }
                                socketInfo.State = SocketInfo.StateEnum.Content;
                                socketInfo.DataBuffer = new byte[packetLength];
                                socketInfo.Index = 0;
                                WaitForData(socketInfo);
                            }
                            break;
                        case SocketInfo.StateEnum.Content:
                            byte[] data = socketInfo.DataBuffer;
                            if (socketInfo.NoEncryption)
                            {
                                socketInfo.NoEncryption = false;
                                PacketReader reader = new PacketReader(data);
                                short version = reader.ReadShort();
                                string unknown = reader.ReadMapleString();
                                _SIV = new MapleCrypto(reader.ReadBytes(4), version);
                                _RIV = new MapleCrypto(reader.ReadBytes(4), version);
                                byte serverType = reader.ReadByte();
                                if (_type == SessionType.CLIENT_TO_SERVER)
                                {
                                    OnInitPacketReceived(version, serverType);
                                }
                                OnPacketReceived(new PacketReader(data), true);
                                WaitForData();
                            }
                            else
                            {
                                _RIV.crypt(data);
                                MapleCustomEncryption.Decrypt(data);
                                if (data.Length != 0 && OnPacketReceived != null)
                                {
                                    OnPacketReceived(new PacketReader(data), false);
                                }
                                WaitForData();
                            }
                            break;
                    }
                }
                else
                {
                    Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Warning] Not enough data");
                    WaitForData(socketInfo);
                }
            }
            catch (ObjectDisposedException)
            {
                Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: Socket has been closed");
            }
            catch (SocketException se)
            {
                if (se.ErrorCode != 10054)
                {
                    Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: " + se);
                }
            }
            catch (Exception e)
            {
                Helpers.ErrorLogger.Log(Helpers.ErrorLevel.Critical, "[Error] Session.OnDataReceived: " + e);
            }
        }
Пример #26
0
 public void handlePacket(Client c, PacketReader packet)
 {
     packet.ReadByte(); // unknown, client sends 0x02
     c.Characters = Database.GetCharacters(c.AccountId);
     c.SendPacket(PacketDefinitions.ViewAllCharacters(c.Characters));
 }
Пример #27
0
 void mSession_OnPacketReceived(PacketReader packet)
 {
     short opcode = packet.ReadShort();
     switch ((CenterSendOps)opcode)
     {
         case CenterSendOps.IdentifySuccess: CenterServerPacketHandling.HandleIdentify(packet); break;
         case CenterSendOps.GuildOperation: CenterServerPacketHandling.HandleGuildOperation(packet); break;
     }
 }
Пример #28
0
 public void handlePacket(Client c, PacketReader packet)
 {
     packet.ReadByte();
     int portalId = packet.ReadInt();
     int timestamp = packet.ReadInt();
 }
Пример #29
0
        public void handlePacket(Client c, PacketReader packet)
        {
            string charname = Database.MySqlEscape(packet.ReadMapleString());
            int jobtype = packet.ReadInt();
            short specialjobtype = packet.ReadShort();
            byte gender = packet.ReadByte();
            packet.Skip(2);
            int face = packet.ReadInt();
            int hair = packet.ReadInt();
            int haircolor = packet.ReadInt();
            int skin = packet.ReadInt();
            int top = packet.ReadInt();
            int bottom = 0;
            if (jobtype < 5)
                bottom = packet.ReadInt();
            int shoes = packet.ReadInt();
            int weapon = packet.ReadInt();
            int shield = 0;
            if (jobtype == 6)
                shield = packet.ReadInt();
            Character newchr = new Character();
            newchr.mName = charname;
            if (jobtype == 0)
            {
                newchr.mPrimaryStats.Job = (short)Job.Citizen;
            }
            else if (jobtype == 1)
            {
                newchr.mPrimaryStats.Job = (short)Job.Beginner;
            }
            else if (jobtype == 2)
            {
                newchr.mPrimaryStats.Job = (short)Job.Noblesse;
            }
            else if (jobtype == 3)
            {
                newchr.mPrimaryStats.Job = (short)Job.Legend;
            }
            else if (jobtype == 4)
            {
                newchr.mPrimaryStats.Job = (short)Job.Evan1;
            }
            else if (jobtype == 5)
            {
                newchr.mPrimaryStats.Job = (short)Job.Mercedes;
            }
            else if (jobtype == 6)
            {
                newchr.mPrimaryStats.Job = (short)Job.DemonSlayer;
            }
            newchr.mMap = 100000000;
            newchr.mClient = c;
            newchr.mHair = hair + haircolor;
            newchr.mFace = face;
            newchr.mSkin = (byte)skin;
            newchr.mGender = gender;

            newchr.mPrimaryStats.Level = 1;
            newchr.mPrimaryStats.HP = 50;
            newchr.mPrimaryStats.MaxHP = 50;
            newchr.mPrimaryStats.MP = 50;
            newchr.mPrimaryStats.MaxMP = 50;
            newchr.mPrimaryStats.Str = 4;
            newchr.mPrimaryStats.Dex = 4;
            newchr.mPrimaryStats.Int = 4;
            newchr.mPrimaryStats.Luk = 4;

            Equip eweapon = new Equip(weapon, "Character creation (JobId " + jobtype + ")");
            eweapon.Watk = 17;
            eweapon.Position = -11;
            newchr.mInventory[0].Add(eweapon.Position, eweapon);

            if (shield > 0)
            {
                Equip eshield = new Equip(shield, "Character creation (JobId " + jobtype + ")");
                eshield.Position = -10;
                newchr.mInventory[0].Add(eshield.Position, eshield);
            }

            Equip etop = new Equip(top, "Character creation (JobId " + jobtype + ")");
            etop.Position = -5;
            newchr.mInventory[0].Add(etop.Position, etop);

            if (bottom > 0)
            {
                Equip ebottom = new Equip(bottom, "Character creation (JobId " + jobtype + ")");
                ebottom.Position = -6;
                newchr.mInventory[0].Add(ebottom.Position, ebottom);
            }
            Equip eshoes = new Equip(shoes, "Character creation (JobId " + jobtype + ")");
            eshoes.Position = -7;
            newchr.mInventory[0].Add(eshoes.Position, eshoes);

            Database.SaveCharacter(newchr, true);
            c.SendPacket(PacketDefinitions.NewCharacter(newchr));
        }
Пример #30
0
 public void handlePacket(Client c, PacketReader packet)
 {
     c.LastKeepAlive = DateTime.Now.ToFileTime();
 }