using System; using System.Threading.Tasks; using MrWu.Debug; using Server.Data; using GameData; using GameDAL.FriendRoom; using Server.Pack; using Server.MQ; using Server.Data.Module; using GameMessage; namespace Server { /// /// 进入桌子的处理 /// public partial class FriendRoomManager { /// /// 进入桌子 /// /// 房间号 /// /// /// /// public int EnterDesk(int deskNum, PlayerDataAsyc pl, string pwd, bool isClub,ref string errinfo,ref int errcode) { if (pl.friendRoomNum > 0) { Debug.Error("您已经在朋友房了!" + pl.friendRoomNum); errinfo = "您已经在朋友房了!"; if(!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 19, pl.socketUtil);//您在朋友房中 errcode = MessageErrCode.ClubJoinDeskHasRoom; return -1; } Desk dsk = FindDesk(deskNum); if (dsk == null) { //没这个房间 errinfo = "进入房间失败!没有这个房间!"; Debug.Info("进入房间失败!没有这个房间!" + deskNum); if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 4, pl.socketUtil);//无此房间 errcode = MessageErrCode.ClubJoinDeskNotDesk; return -1; } DeskInfo dskinfo = dsk.deskinfo; DeskRule rule = dskinfo.rule; if (!string.IsNullOrEmpty(rule.pwd)) { if (rule.pwd != pwd) { //密码错误 if(!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 5, pl.socketUtil); Debug.Error("密码错误!"); errinfo = "进入房间失败,密码错误!"; errcode = MessageErrCode.ClubJoinDeskPwdError; return -2; } } if ((dsk.state & DeskState.Queue) == 0) { //房间已过期,不能加入 if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 1, 6, pl.socketUtil); Debug.Warning("房间过期!"); errinfo = "进入房间失败,房间过期!"; errcode = MessageErrCode.ClubJoinDeskInValid; return -3; } if (dsk.PlayerCnt >= rule.maxCnt) { //最大开战人数 if(!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 7, pl.socketUtil); Debug.Warning("人数太多了!" + rule.maxCnt + "," + dsk.PlayerCnt); errinfo = "进入房间失败,房间已满!"; errcode = MessageErrCode.ClubJoinDeskFull; return -4; } if (rule.interceptIp > 0) {//检测ip if (rule.interceptIp == 1) { //检查是否相同 if (dsk.CheckPlayersIP(pl.ip)) { if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 8, pl.socketUtil); Debug.Info("检查ip无法通过!"); errinfo = "-进入房间失败,有相同ip的玩家在房间中!"; errcode = MessageErrCode.ClubJoinDeskSameIp; return -5; } } else { //检查是否相同且不能为空! if (string.IsNullOrEmpty(pl.ip)) { if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 9, pl.socketUtil); Debug.Error("检查ip无法通过saa"); errinfo = "进入房间失败,ip未读取!"; errcode = MessageErrCode.ClubJoinDeskIpEmpty; return -6; } else if (dsk.CheckPlayersIP(pl.ip) || isClub) { if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 8, pl.socketUtil); Debug.Info("检查ip无法通过"); errinfo = "进入房间失败,有相同ip的玩家在房间中!"; errcode = MessageErrCode.ClubJoinDeskSameIp; return -6; } } } if (rule.interecptimei > 0) { if (string.IsNullOrEmpty(pl.device.phone_imei)) { Debug.Warning("玩家的设备唯一编号为空,加入房间失败:" + pl.device.phone_imei); if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 55, pl.socketUtil); errinfo = "进入房间失败,未获取到设备唯一码!"; errcode = MessageErrCode.ClubJoinDeskImeiEmpty; return -10; } int len = dsk.Count; for (int i = 0; i < len; i++) { if (dsk[i] == null) continue; if (dsk[i].device.phone_imei == pl.device.phone_imei) { Debug.Warning("玩家的设备唯一编号一致.加入房间失败:" + dsk[i].userid + "," + pl.userid); if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 55, pl.socketUtil); errinfo = "进入房间失败,与房间内其他玩家的使用一个设备!"; errcode = MessageErrCode.ClubJoinDeskSameImei; return -10; } } } if (rule.interceptWeChat > 0) {//拦截账号 if (rule.interceptWeChat == 1) { if (pl.userType < 100) { //微信登录,或者微信绑定账号 if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 10, pl.socketUtil); errinfo = "进入房间失败,开启防作弊的房间微信账号不可进入!"; errcode = MessageErrCode.ClubJoinDeskNotWeChatAccount; return -7; } } else if (pl.userType < 110) { //必须是微信绑定账号 if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 11, pl.socketUtil); errinfo = "进入房间失败,开启防作弊的房间进入需要绑定微信账号!"; errcode = MessageErrCode.ClubJoinDeskNotWeChatAccount; return -8; } } Debug.Log("检查地理位置:" + rule.interceptpos); if (rule.interceptpos > 0) { //检查地理位置 //和当前房间的所有人比较地理位置 距离小于1千米的就可以坐一起 if (pl.device.GetPosition().isEmpty) { Debug.Info("玩家的经纬度为空,加入失败!"); if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 55, pl.socketUtil); errinfo = "进入房间失败,未获取到您的位置信息,请开启定位权限后再试!"; errcode = MessageErrCode.ClubJoinDeskNotPosition; return -10; } int len = dsk.Count; for (int i = 0; i < len; i++) { if (dsk[i] == null) continue; var result = ting.CheckCheatingLevel(pl, dsk[i]); Debug.Info("得到数量:" + result.Item1); if (result.Item1 > 3) { //不在安全距离内 Debug.Warning("两玩家距离过进,加入房间失败:" + pl.userid + "," + dsk[i].userid); errinfo = "进入房间失败,与房间中的其他玩家距离过近!"; if (!isClub) GeneralSendPack.SendErrorInfo_Socket(pl.userid, 2, 55, pl.socketUtil); errcode = MessageErrCode.ClubJoinDeskNotSafeDistance; return -10; } } } //Debug.Log("玩家上桌!"); if (dsk.AddPlayer(pl, GameManager.instance.friendRoom.id)) { errcode = MessageErrCode.Success; return 1; } errcode = MessageErrCode.ClubJoinDeskJoinFail; return -9; } /* /// /// 为这一桌加分,分数越高,玩法进入人的几率越大 /// /// public void AddScore(DeskInfo deskinfo) { //发送游戏信息, //发送全桌玩家数据 if (deskinfo.creatStyle == 5) { int clubid = deskinfo.creatUserid; string wayid = deskinfo.wayid; string weiyima = deskinfo.weiyima; //int minCnt = deskinfo.rule.minCnt; Task.Factory.StartNew( () => { //朋友房的房间-加分 WayRoom.instance.IncScore(clubid, wayid, weiyima, minCnt, playerCnt); var dt = WayRoom.instance.ClubWayPlayerChange(clubid, wayid, minCnt); ServerHead head = new ServerHead(ServerPackAgreement.ClubPlayWayPlChange); GlobalMQ.instance.DeliveryEveryOne((int)ModuleType.ClubModule, GlobalMQ.CreateMessage(head, dt), true); } ); } } */ } }