public KFCopyTeamLeaveRsp LeaveTeam(KFCopyTeamLeaveReq req) { KFCopyTeamLeaveRsp rsp = new KFCopyTeamLeaveRsp(); 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) { } CopyTeamMemberData member = td.TeamRoles.Find((CopyTeamMemberData _role) => _role.RoleID == req.RoleId); if (member == null) { rsp.ErrorCode = CopyTeamErrorCodes.NotInMyTeam; return(rsp); } this.RoleId2JoinedTeam.Remove(member.RoleID); td.TeamRoles.Remove(member); td.MemberCount = td.TeamRoles.Count; if (td.MemberCount <= 0) { this.RemoveTeam(td.TeamID); } else if (td.LeaderRoleID == member.RoleID) { td.LeaderRoleID = td.TeamRoles[0].RoleID; td.TeamRoles[0].IsReady = true; td.TeamName = td.TeamRoles[0].RoleName; } CopyTeamLeaveData data = new CopyTeamLeaveData(); data.TeamId = req.TeamId; data.RoleId = req.RoleId; this.AddAsyncEvent(new AsyncDataItem { EventType = KuaFuEventTypes.KFCopyTeamLeave, Args = new object[] { req.ReqServerId, 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> public KFCopyTeamLeaveRsp LeaveTeam(KFCopyTeamLeaveReq req) { KFCopyTeamLeaveRsp rsp = new KFCopyTeamLeaveRsp(); try { lock (Mutex) { CopyTeamData td = null; if (!CopyTeamDict.TryGetValue(req.TeamId, out td)) { // 房间不存在!!! GameServer要检查这个错误码,可能出现的情况是 跨服中心重启了,那么GameServer要把这个房间清掉 rsp.ErrorCode = CopyTeamErrorCodes.TeamIsDestoryed; return(rsp); } if (td.StartTime > 0) { // 已经开始了,别走 //rsp.ErrorCode = (int)CopyTeamErrorCodes.TeamAlreadyStart; //return rsp; } CopyTeamMemberData member = td.TeamRoles.Find(_role => _role.RoleID == req.RoleId); if (member == null) { rsp.ErrorCode = CopyTeamErrorCodes.NotInMyTeam; return(rsp); } RoleId2JoinedTeam.Remove(member.RoleID); td.TeamRoles.Remove(member); td.MemberCount = td.TeamRoles.Count; if (td.MemberCount <= 0) { RemoveTeam(td.TeamID); } else { if (td.LeaderRoleID == member.RoleID) { // 移交队长 td.LeaderRoleID = td.TeamRoles[0].RoleID; td.TeamRoles[0].IsReady = true; td.TeamName = td.TeamRoles[0].RoleName; } } // 异步广播离开队伍的事件 CopyTeamLeaveData data = new CopyTeamLeaveData(); data.TeamId = req.TeamId; data.RoleId = req.RoleId; AsyncDataItem evItem = new AsyncDataItem(); evItem.EventType = KuaFuEventTypes.KFCopyTeamLeave; evItem.Args = new object[2] { req.ReqServerId, 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); }