Exemple #1
0
        /// <summary>
        /// 텔레포트 요청시 유효한 요청인지 확인 & 사용자 레벨에 따른 맵 이동 제한
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="client"></param>
        private void isPossibleTeleport(byte[] buffer, ref Client client)
        {
            MSG_C2S_REQ_TELEPORT reqTel = new MSG_C2S_REQ_TELEPORT();

            reqTel.Deserialize(ref buffer);
            if (reqTel.wTargetLine > Config.TeleportList.Count)
            {
                //bad request. if approval, ZS is crash.
                MSG_S2C_SAY pSay = new MSG_S2C_SAY();
                pSay.MsgHeader.dwPCID = client.Uid;
                pSay.szWords          = ByteTools.bSubString("Invalid request", 0x40);
                byte[] pSayByte = pSay.Serialize();
                //Config.mConvert.Convert_S2C(ref pSayByte, client.Ver);
                Write(ref client, pSayByte);
                Logger.WriteSDB(string.Format("[Try Crash]  {0}  {1}  {2}  {3}/{4}", client.Account, client.Character, client.IPadress, reqTel.wTargetLine, Config.TeleportList.Count));
                //client.TcpClient.Client.Disconnect(false);
            }
            else if (client.Level < Config.TeleportList[reqTel.wTargetLine].MapLv)
            {
                //account level is low
                MSG_S2C_SAY pSay = new MSG_S2C_SAY();
                pSay.MsgHeader.dwPCID = client.Uid;
                pSay.szWords          = ByteTools.bSubString(string.Format("{0}, You can not use this map at your level", client.Account), 0x40);
                byte[] pSayByte = pSay.Serialize();
                //Config.mConvert.Convert_S2C(ref pSayByte, client.Ver);
                Write(ref client, pSayByte);
            }
            else
            {
                Config.mConvert.Crypter.Encrypt(ref buffer, ClientVer.v562);
                ZoneServer.ZS[client.ZoneStatus].Send(buffer);
            }
        }