/// <summary> /// 踢出队伍 /// </summary> public KFCopyTeamKickoutRsp KickoutTeam(KFCopyTeamKickoutReq req) { KFCopyTeamKickoutRsp rsp = new KFCopyTeamKickoutRsp(); 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 = CopyTeamErrorCodes.TeamAlreadyStart; return(rsp); } if (td.LeaderRoleID != req.FromRoleId) { // 不是队长 rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader; return(rsp); } CopyTeamMemberData leader = td.TeamRoles.Find(_role => _role.RoleID == req.FromRoleId); if (leader == null || leader.RoleID != req.FromRoleId) { rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader; return(rsp); } CopyTeamMemberData member = td.TeamRoles.Find(_role => _role.RoleID == req.ToRoleId); if (member == null) { // 不在本队伍??? rsp.ErrorCode = CopyTeamErrorCodes.NotInMyTeam; return(rsp); } td.TeamRoles.Remove(member); td.MemberCount = td.TeamRoles.Count; RoleId2JoinedTeam.Remove(req.ToRoleId); CopyTeamKickoutData data = new CopyTeamKickoutData(); data.FromRoleId = req.FromRoleId; data.ToRoleId = req.ToRoleId; data.TeamId = req.TeamId; AsyncDataItem evItem = new AsyncDataItem(); evItem.EventType = KuaFuEventTypes.KFCopyTeamKickout; evItem.Args = new object[2] { leader.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.FromRoleId, req.TeamId), ex); rsp.ErrorCode = CopyTeamErrorCodes.CenterServerFailed; } return(rsp); }
public CopyTeamErrorCodes RemoveMember(long teamId, int roleid) { CopyTeamErrorCodes result; try { lock (this.Mutex) { CopyTeamData td = null; if (!this.CopyTeamDict.TryGetValue(teamId, out td)) { result = CopyTeamErrorCodes.TeamIsDestoryed; } else if (td.StartTime > 0L) { result = CopyTeamErrorCodes.TeamAlreadyStart; } else { CopyTeamMemberData leader = td.TeamRoles.Find((CopyTeamMemberData _role) => _role.RoleID == td.LeaderRoleID); if (leader == null) { result = CopyTeamErrorCodes.NotTeamLeader; } else { CopyTeamMemberData member = td.TeamRoles.Find((CopyTeamMemberData _role) => _role.RoleID == roleid); if (member == null) { result = CopyTeamErrorCodes.NotInMyTeam; } else { td.TeamRoles.Remove(member); td.MemberCount = td.TeamRoles.Count; this.RoleId2JoinedTeam.Remove(roleid); CopyTeamKickoutData data = new CopyTeamKickoutData(); data.FromRoleId = td.LeaderRoleID; data.ToRoleId = roleid; data.TeamId = teamId; this.AddAsyncEvent(new AsyncDataItem { EventType = KuaFuEventTypes.KFCopyTeamKickout, Args = new object[] { 0, data } }); result = CopyTeamErrorCodes.Success; } } } } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("系统踢出跨服副本队伍异常, role={0}, teamid={1}", roleid, teamId), ex, true); result = CopyTeamErrorCodes.CenterServerFailed; } return(result); }
public KFCopyRoomKickoutEvent(CopyTeamKickoutData data) : base((int)GlobalEventTypes.KFCopyTeamKickout) { this.Data = data; }
public KFCopyTeamKickoutRsp KickoutTeam(KFCopyTeamKickoutReq req) { KFCopyTeamKickoutRsp rsp = new KFCopyTeamKickoutRsp(); 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.FromRoleId) { rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader; return(rsp); } CopyTeamMemberData leader = td.TeamRoles.Find((CopyTeamMemberData _role) => _role.RoleID == td.LeaderRoleID); if (leader == null || leader.RoleID != req.FromRoleId) { rsp.ErrorCode = CopyTeamErrorCodes.NotTeamLeader; return(rsp); } CopyTeamMemberData member = td.TeamRoles.Find((CopyTeamMemberData _role) => _role.RoleID == req.ToRoleId); if (member == null) { rsp.ErrorCode = CopyTeamErrorCodes.NotInMyTeam; return(rsp); } td.TeamRoles.Remove(member); td.MemberCount = td.TeamRoles.Count; this.RoleId2JoinedTeam.Remove(req.ToRoleId); CopyTeamKickoutData data = new CopyTeamKickoutData(); data.FromRoleId = req.FromRoleId; data.ToRoleId = req.ToRoleId; data.TeamId = req.TeamId; this.AddAsyncEvent(new AsyncDataItem { EventType = KuaFuEventTypes.KFCopyTeamKickout, Args = new object[] { leader.ServerId, data } }); rsp.ErrorCode = CopyTeamErrorCodes.Success; rsp.Data = data; } } catch (Exception ex) { LogManager.WriteLog(LogTypes.Error, string.Format("踢出跨服副本队伍异常, role={0}, teamid={1}", req.FromRoleId, req.TeamId), ex, true); rsp.ErrorCode = CopyTeamErrorCodes.CenterServerFailed; } return(rsp); }
/// <summary> /// 踢出队伍回调 /// </summary> /// <param name="data"></param> private void OnTeamKickout(CopyTeamKickoutData 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.ToRoleId); if (member == null) { return; } td.TeamRoles.Remove(member); td.MemberCount = td.TeamRoles.Count; if (member.ServerId == ThisServerId) { RoleId2JoinedTeam.Remove(member.RoleID); GameClient client = GameManager.ClientMgr.FindClient(member.RoleID); if (client != null) { NotifyTeamStateChanged(client, (int)CopyTeamErrorCodes.BeRemovedFromTeam, member.RoleID, 0); } } NotifyTeamData(td); NotifyTeamListChange(td); } /* * bool destroy = false; * lock (td) * { * //判断是否是队长 * if (td.LeaderRoleID != client.ClientData.RoleID) * { * //通知角色组队的指令信息 * * } * * if (td.TeamRoles.Count > 1) //转交队长 * { * for (int i = 0; i < td.TeamRoles.Count; i++) * { * if (td.TeamRoles[i].RoleID == otherRoleID) * { * td.TeamRoles.RemoveAt(i); * break; * } * } * * //判断是否是队长 * if (td.LeaderRoleID == client.ClientData.RoleID) * { * td.LeaderRoleID = td.TeamRoles[0].RoleID; //转交队长 * td.TeamRoles[0].IsReady = true; * td.TeamName = td.TeamRoles[0].RoleName; * } * } * else * { * destroy = true; * td.TeamRoles.Clear(); * td.LeaderRoleID = -1; //强迫解散 * } * td.MemberCount = td.TeamRoles.Count; * } * * if (destroy) * { * //删除组队数据 * RemoveData(teamID); * } * * //通知组队数据的指令信息 * NotifyTeamData(td); //发送null数据,强迫组队解散 * * //清空组队ID * RemoveRoleID2TeamID(otherRoleID); * * GameClient otherClient = GameManager.ClientMgr.FindClient(otherRoleID); * if (null != otherClient) * { * NotifyTeamStateChanged(otherClient, CopyTeamErrorCodes.BeRemovedFromTeam, otherRoleID, 0); * } * * NotifyTeamListChange(td); */ }