/// <summary> /// 更新准备状态 /// </summary> public KFCopyTeamSetReadyRsp TeamSetReady(KFCopyTeamSetReadyReq req) { KFCopyTeamSetReadyRsp rsp = new KFCopyTeamSetReadyRsp(); try { lock (Mutex) { CopyTeamData td = null; if (!CopyTeamDict.TryGetValue(req.TeamId, out td)) { // 房间不存在!!! GameServer要检查这个错误码,可能出现的情况是 跨服中心重启了,那么GameServer要把这个房间清掉 rsp.ErrorCode = CopyTeamErrorCodes.TeamIsDestoryed; return(rsp); } CopyTeamMemberData member = td.TeamRoles.Find(_role => _role.RoleID == req.RoleId); if (member == null) { rsp.ErrorCode = CopyTeamErrorCodes.NotInMyTeam; return(rsp); } if (td.StartTime > 0) { rsp.ErrorCode = CopyTeamErrorCodes.TeamAlreadyStart; return(rsp); } member.IsReady = req.Ready > 0; // 异步广播准备事件 CopyTeamReadyData data = new CopyTeamReadyData(); data.RoleId = req.RoleId; data.TeamId = req.TeamId; data.Ready = req.Ready; AsyncDataItem evItem = new AsyncDataItem(); evItem.EventType = KuaFuEventTypes.KFCopyTeamSetReady; evItem.Args = new object[2] { member.ServerId, data }; AddAsyncEvent(evItem); rsp.ErrorCode = CopyTeamErrorCodes.Success; rsp.Data = data; } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("更新跨服副本队伍准备状态异常, role={0}, teamid={1}", req.RoleId, req.TeamId), ex); rsp.ErrorCode = CopyTeamErrorCodes.CenterServerFailed; } return(rsp); }
public KFCopyRoomReadyEvent(CopyTeamReadyData data) : base((int)GlobalEventTypes.KFCopyTeamReady) { this.Data = data; }
public KFCopyTeamSetReadyRsp TeamSetReady(KFCopyTeamSetReadyReq req) { KFCopyTeamSetReadyRsp rsp = new KFCopyTeamSetReadyRsp(); try { lock (this.Mutex) { CopyTeamData td = null; if (!this.CopyTeamDict.TryGetValue(req.TeamId, out td)) { rsp.ErrorCode = CopyTeamErrorCodes.TeamIsDestoryed; return(rsp); } if (req.Ready <= 0) { if (req.RoleId == td.LeaderRoleID) { rsp.ErrorCode = CopyTeamErrorCodes.TeamLeaderCant; return(rsp); } } CopyTeamMemberData member = td.TeamRoles.Find((CopyTeamMemberData _role) => _role.RoleID == req.RoleId); if (member == null) { rsp.ErrorCode = CopyTeamErrorCodes.NotInMyTeam; return(rsp); } if (td.StartTime > 0L) { rsp.ErrorCode = CopyTeamErrorCodes.TeamAlreadyStart; return(rsp); } member.IsReady = (req.Ready > 0); if (!member.IsReady) { member.NoReadyTicks = TimeUtil.NOW(); } CopyTeamReadyData data = new CopyTeamReadyData(); data.RoleId = req.RoleId; data.TeamId = req.TeamId; data.Ready = req.Ready; this.AddAsyncEvent(new AsyncDataItem { EventType = KuaFuEventTypes.KFCopyTeamSetReady, Args = new object[] { member.ServerId, data } }); rsp.ErrorCode = CopyTeamErrorCodes.Success; rsp.Data = data; } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("更新跨服副本队伍准备状态异常, role={0}, teamid={1}", req.RoleId, req.TeamId), ex, true); rsp.ErrorCode = CopyTeamErrorCodes.CenterServerFailed; } return(rsp); }
/// <summary> /// 设置准备状态 回调 /// </summary> /// <param name="data"></param> private void OnTeamSetReady(CopyTeamReadyData data) { if (data == null) { return; } lock (Mutex) { CopyTeamData td = null; if (!TeamDict.TryGetValue(data.TeamId, out td)) { return; } CopyTeamMemberData member = td.TeamRoles.Find(_role => _role.RoleID == data.RoleId); if (member == null) { return; } member.IsReady = data.Ready > 0; if (member.ServerId == ThisServerId) { GameClient client = GameManager.ClientMgr.FindClient(member.RoleID); if (client != null) { NotifyTeamStateChanged(client, td.TeamID, member.RoleID, data.Ready); } } NotifyTeamData(td); // 满员了,所有人都已经准备,那么就开吧 if (member.IsReady && td.AutoStart && td.MemberCount >= ConstData.CopyRoleMax(td.FuBenId) && td.TeamRoles.All(_role => _role.IsReady)) { CopyTeamMemberData leader = td.TeamRoles.Find(_role => _role.RoleID == td.LeaderRoleID); if (leader != null && leader.ServerId == ThisServerId) { GameClient client = GameManager.ClientMgr.FindClient(leader.RoleID); if (client != null) { NotifyTeamCmd(client, CopyTeamErrorCodes.Success, (int)TeamCmds.Start, 0, ""); } } } } /* * //int teamType = (int)TeamCmds.Ready; * int roleID = client.ClientData.RoleID; * long teamID = FindRoleID2TeamID(client.ClientData.RoleID); * if (teamID <= 0) * { * * } * * CopyTeamData td = FindData(teamID); * if (null != td) * { * int readyCount = 0; * bool someoneOffline = false; * lock (td) * { * for (int i = 0; i < td.TeamRoles.Count; i++) * { * GameClient gc; * if (td.TeamRoles[i].RoleID == roleID) * { * td.TeamRoles[i].IsReady = ready > 0; //更新状态 * gc = client; * } * else * { * gc = GameManager.ClientMgr.FindClient(td.TeamRoles[i].RoleID); * } * * if (null == gc) * { * td.TeamRoles[i].IsReady = false; * someoneOffline = true; * continue; * } * * //状态变化通知 * NotifyTeamStateChanged(gc, teamID, roleID, ready); * * if (!someoneOffline && td.TeamRoles[i].IsReady && td.AutoStart) * { * readyCount++; * if (readyCount == MaxTeamMemberCount) * { * GameClient leader = GameManager.ClientMgr.FindClient(td.LeaderRoleID); * NotifyTeamCmd(leader, CopyTeamErrorCodes.Success, (int)TeamCmds.Start, 0, ""); * } * } * } * } * * if (someoneOffline) * { * NotifyTeamData(td); * } * }*/ }