using Server.Pack; using Server.Data; using GameData; using MrWu.Debug; using Game.Player; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; using GameDAL.FriendRoom; using Server.Core; using GameMessage; namespace Server { /// /// 朋友房管理 /// public partial class FriendRoomManager { /// /// 处理加入到某个朋友房的桌子 /// public class DoJoinFriendRoom { /// /// 是否加入成功 /// public bool result; /// /// 如果加入失败,失败提示 /// public string errinfo; /// /// 错误码 /// public int errorCode; /// /// 房间所在的模块,当房间不在本模块时有值 /// public ServerNode desknode; /// /// 包头 /// public readonly PackHead head; /// /// 加入房间的包裹 /// public readonly JoinRoom jpk; /// /// 如果是竞技比赛房间,是否要询问,竞技比赛该玩家可不可以加入该房间 /// public readonly bool checkClub; /// /// 是否自动进入房间 /// public readonly bool isAuto; /// /// 是否是竞技比赛 /// public readonly bool isClub; /// /// 玩家所在俱乐部 /// public int ClubId; /// /// 玩家的俱乐部分数 /// public double Score; public bool IsTestPack; public List SeatmateLimitList; /// /// 处理朋友房的加入 /// /// 包头 /// 包 /// 检查竞技比赛 /// /// public DoJoinFriendRoom(PackHead head, JoinRoom jpk, JoinFriendRoom jfr, bool checkClub = false, bool isClub = false) { this.head = head; this.jpk = jpk; this.checkClub = checkClub; this.isAuto = jfr == null ? false : jfr.isAuto == 1; this.isClub = isClub; this.ClubId = jfr == null ? 0 : jfr.ClubId; this.Score = jfr == null ? 0 : jfr.Score; SeatmateLimitList = jfr?.SeatmateLimitList ?? new List(); } /// /// 没有这个房间的处理 /// void NoDesk(string weiyima, int roomnum) { this.result = false; errinfo = "无此房间,请重试!"; errorCode = MessageErrCode.ClubJoinDeskNotDesk; /* if (!isAuto) { Debug.Error("无此房间号:" + weiyima + "," + roomnum + "," + isClub); //没有这个房间号 SendManager.SendErrorInfo_Socket(head.userid, 0, 4, head.GetModuleUtil()); } else { Debug.Warning("自动进入,进不去,退出游戏!"); var tmp = PlayerCollection.instance.FindPlayer_Userid(head.userid); if (tmp == null) { Debug.Error("玩家加入房间时 -找不到玩家:" + tmp.userid); } else GameManager.instance.QuitGame(tmp, "NoDesk"); } */ } void InDesk() { PlayerDataAsyc pl = PlayerCollection.Instance.FindPlayerByUserId(head.userid); if (pl == null) { result = false; errinfo = "请求失败,请稍后再试!"; Debug.Error("服务器错误登录了却没找到人:" + head.userid); PlayerFun.UnLockPlayer(head.userid, GameBase.instance.myUtil, false); return; } int rmnum; pl.ClubId = this.ClubId; pl.ClubScore = this.Score; if (int.TryParse(jpk.roomNum, out rmnum) && instance.ting.InTing(pl, instance.room.id, ref errinfo, ref errorCode,rmnum, jpk.pwd, isClub)) { Desk dsk = instance.FindDesk(pl.friendRoomNum); if (dsk == null) { Debug.Error("服务器错误!dsk not find"); } else { dsk.SendPlayersinfo(2, pl.userid, pl.nickname); } result = true; #if DEBUG pl.IsTest = IsTestPack; #endif } else { Debug.Error($"InTing Error errorCode:{errorCode} errinfo:{errinfo}"); result = false; GameManager.instance.QuitGame(pl, "InDesk", false); } } /// /// 开始处理 /// /// public async Task Start() { if (this.jpk == null) { Debug.Error("客户端发包错误!"); this.result = false; errinfo = "请求失败!"; errorCode = MessageErrCode.ClubJoinDeskUnknow; return; } int roomnum; if (!int.TryParse(jpk.roomNum, out roomnum)) { Debug.Warning("房间号不是数字:" + jpk.roomNum); this.result = false; errinfo = "请求失败!"; errorCode = MessageErrCode.ClubJoinDeskNumError; return; } var desk = instance.FindDesk(int.Parse(jpk.roomNum)); if ((!isClub && desk != null && desk.deskinfo != null && desk.deskinfo.creatStyle == 5)) { Debug.Warning("房间号无效,加入失败!"); //xu add 修改玩家输入房号不能加入俱乐部的桌子 2021年1月5日 result = false; errinfo = "房间号无效,加入失败!"; errorCode = MessageErrCode.ClubJoinDeskNumError; return; } if (isClub) { /* * 0731 --over * 上次写了一个脚本,里面有个方法是检查玩家是否属于禁止同桌的组 * 这里调用下,如果不能加入 * 则运行下面这段代码 * result = false; errinfo = "反作弊检查,禁止加入房间!"; yield break; * * * */ if (desk != null && desk.deskinfo != null && desk.deskinfo.creatStyle == 5) { int[] user = new int[desk.deskinfo.nowPlayerCnt]; int idx = 0; for (int i = 0; i < desk.deskinfo.pls.Length; i++) { if (desk.deskinfo.pls[i] != null) { user[idx++] = desk.deskinfo.pls[i].userid; } } if (!ClubSeatmate.CheckSeatmate(SeatmateLimitList, user)) { Debug.Warning("反作弊检查,禁止加入房间!"); result = false; errinfo = "反作弊检查,禁止加入房间!"; errorCode = MessageErrCode.ClubJoinDeskNotAllowed; return; } } if (checkClub) { //如果要检查玩家是否可以加入该竞技比赛房间 //检查之后再回来 if (desk != null && desk.deskinfo != null && desk.deskinfo.creatStyle == 5) { //竞技比赛房间房间 CheckClub checkclub = new CheckClub(head.userid, desk.deskinfo.creatUserid); await checkclub.Start(); if (!checkclub.result) { Debug.Warning("禁止加入房间!"); result = false; errinfo = checkclub.errinfo; errorCode = MessageErrCode.ClubJoinDeskNotAllowed; return; } } } } string weiyima = null; ServerNode node = null; //没有这个房间 if (!Room.GetWeiyima(roomnum, ref weiyima, ref node)) { Debug.Warning("没有这个房间!"); NoDesk(weiyima, roomnum); } else { //有这个房间 if (GlobalManager.instance.myUtil.Equals(node)) { LoginInfo loginInfo = LoginInfo.Create(head.userid, true, head.GetUtil(), head.ip,jpk.deviceinfo,head.clientVer,head); await LoginManager.Instance.Start(loginInfo); bool result = loginInfo.Result; loginInfo.Dispose(); loginInfo = null; //登录成功 if (result) { Debug.Info($"加入桌子:{roomnum}"); InDesk(); } else { Debug.Warning($"请求失败,请稍后再试!"); result = false; errorCode = MessageErrCode.ClubJoinDeskUnknow; //errinfo = "请求失败,请稍后再试!"; } /* bool isLogin = isAuto; if (!isLogin) { GameManager.Login login = new GameManager.Login(head.userid, true, head.GetModuleUtil(), head.ip, jpk.deviceinfo, head.clientVer); yield return login.Start(); isLogin = login.result; } //本模块的房间 if (isLogin) {//登录成功 InDesk(); } else { } */ } else { Debug.Log("kkkkk"); result = false; desknode = node; /* //其他模块的房间 RPC 去配置模块拿游戏名称,发送给客户端.. if (isAuto) { Debug.Error("怎么可能,自动进入的房间怎么会是其他模块管理的!"); yield break; } bool isDie = ServerHeart.instanece.IsDie(node.id, node.nodeNum); Coroutine.StartCoroutine(instance.SendGameTip(head, isDie, node.id)); */ } } return; } } } }