/// <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); } }