/// <summary> /// 开始游戏 /// </summary> public KFCopyTeamStartRsp StartGame(KFCopyTeamStartReq req) { KFCopyTeamStartRsp rsp = new KFCopyTeamStartRsp(); try { lock (Mutex) { CopyTeamData td = null; if (!CopyTeamDict.TryGetValue(req.TeamId, out td)) { rsp.ErrorCode = CopyTeamErrorCodes.TeamIsDestoryed; return(rsp); } if (td.StartTime > 0) { rsp.ErrorCode = CopyTeamErrorCodes.TeamAlreadyStart; return(rsp); } if (td.LeaderRoleID != req.RoleId) { rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader; return(rsp); } CopyTeamMemberData leader = td.TeamRoles.Find(_role => _role.RoleID == req.RoleId); if (leader == null || leader.RoleID != req.RoleId) { rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader; return(rsp); } if (td.TeamRoles.Exists(_role => _role.IsReady == false)) { rsp.ErrorCode = CopyTeamErrorCodes.MemeberNotReady; return(rsp); } int kfSrvId; if (!ClientAgentManager.Instance().AssginKfFuben(GameTypes.KuaFuCopy, td.TeamID, td.TeamRoles.Count, out kfSrvId)) { rsp.ErrorCode = CopyTeamErrorCodes.KFServerIsBusy; return(rsp); } td.StartTime = TimeUtil.NOW(); td.KFServerId = kfSrvId; td.FuBenSeqID = 0; // not set CopyTeamStartData data = new CopyTeamStartData(); data.TeamId = req.TeamId; data.StartMs = td.StartTime; data.ToServerId = kfSrvId; data.FuBenSeqId = td.FuBenSeqID; AsyncDataItem evItem = new AsyncDataItem(); evItem.EventType = KuaFuEventTypes.KFCopyTeamStart; evItem.Args = new object[2] { leader.ServerId, data }; AddAsyncEvent(evItem); // 副本超时强制关闭的时间 副本开始(客户端点击开始) + 副本持续时间 + 3分钟额外时间 TimeLimitCopy[td.TeamID] = td.StartTime + req.LastMs + 3 * 60 * 1000; 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 KFCopyTeamStartRsp StartGame(KFCopyTeamStartReq req) { KFCopyTeamStartRsp rsp = new KFCopyTeamStartRsp(); try { lock (this.Mutex) { CopyTeamData td = null; if (!this.CopyTeamDict.TryGetValue(req.TeamId, out td)) { rsp.ErrorCode = CopyTeamErrorCodes.TeamIsDestoryed; return(rsp); } if (td.StartTime > 0L) { rsp.ErrorCode = CopyTeamErrorCodes.TeamAlreadyStart; return(rsp); } if (td.LeaderRoleID != req.RoleId) { rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader; return(rsp); } CopyTeamMemberData leader = td.TeamRoles.Find((CopyTeamMemberData _role) => _role.RoleID == td.LeaderRoleID); if (leader == null || leader.RoleID != req.RoleId) { rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader; return(rsp); } if (td.TeamRoles.Exists((CopyTeamMemberData _role) => !_role.IsReady)) { rsp.ErrorCode = CopyTeamErrorCodes.MemeberNotReady; return(rsp); } int kfSrvId; if (!ClientAgentManager.Instance().AssginKfFuben(GameTypes.KuaFuCopy, td.TeamID, td.TeamRoles.Count, out kfSrvId)) { rsp.ErrorCode = CopyTeamErrorCodes.KFServerIsBusy; return(rsp); } td.StartTime = TimeUtil.NOW(); td.KFServerId = kfSrvId; td.FuBenSeqID = 0; CopyTeamStartData data = new CopyTeamStartData(); data.TeamId = req.TeamId; data.StartMs = td.StartTime; data.ToServerId = kfSrvId; data.FuBenSeqId = td.FuBenSeqID; this.AddAsyncEvent(new AsyncDataItem { EventType = KuaFuEventTypes.KFCopyTeamStart, Args = new object[] { leader.ServerId, data } }); this.TimeLimitCopy[td.TeamID] = td.StartTime + (long)req.LastMs + 180000L; 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); }