コード例 #1
0
        /// <summary>
        /// 删除副本, 检测是否是跨服,是否需要上报中心
        /// </summary>
        /// <param name="FuBenSeqId"></param>
        public void OnCopyRemove(int FuBenSeqId)
        {
            long teamId = -1;

            lock (Mutex)
            {
                if (!this.FuBenSeq2TeamId.TryGetValue(FuBenSeqId, out teamId))
                {
                    return;
                }

                FuBenSeq2TeamId.Remove(FuBenSeqId);

                CopyTeamData td;
                if (!TeamDict.TryGetValue(teamId, out td))
                {
                    return;
                }

                OnTeamDestroy(new CopyTeamDestroyData()
                {
                    TeamId = teamId
                });
                if (IsKuaFuCopy(td.FuBenId))
                {
                    KFCopyRpcClient.getInstance().KFCopyTeamRemove(teamId);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 队伍销毁 回调
        /// </summary>
        /// <param name="data"></param>
        private void OnTeamDestroy(CopyTeamDestroyData data)
        {
            if (data == null)
            {
                return;
            }

            lock (Mutex)
            {
                CopyTeamData td = null;
                if (!TeamDict.TryGetValue(data.TeamId, out td))
                {
                    return;
                }

                TeamDict.Remove(data.TeamId);
                FuBenSeq2TeamId.Remove(td.FuBenSeqID);
                HashSet <long> teamList = null;
                if (FuBenId2Teams.TryGetValue(td.FuBenId, out teamList))
                {
                    teamList.Remove(td.TeamID);
                }

                foreach (var member in td.TeamRoles)
                {
                    RoleId2JoinedTeam.Remove(member.RoleID);

                    if (member.ServerId != ThisServerId)
                    {
                        continue;
                    }

                    GameClient client = GameManager.ClientMgr.FindClient(member.RoleID);
                    if (client != null)
                    {
                        NotifyTeamStateChanged(client, (int)CopyTeamErrorCodes.LeaveTeam, member.RoleID, 0);
                    }
                }

                // 队长id设为-1, 通知整个队伍
                td.LeaderRoleID = -1;
                NotifyTeamData(td);

                // 清空队伍,然后通知给所有关注列表的人
                td.TeamRoles.Clear();
                td.MemberCount = td.TeamRoles.Count;
                NotifyTeamListChange(td);
            }
        }
コード例 #3
0
        /// <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);
             *  }
             * }*/
        }
コード例 #4
0
        /// <summary>
        /// 离开队伍回调
        /// </summary>
        /// <param name="data"></param>
        private void OnTeamLeave(CopyTeamLeaveData 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;
                }

                td.TeamRoles.Remove(member);
                td.MemberCount = td.TeamRoles.Count;

                if (td.MemberCount <= 0)
                {
                    td.LeaderRoleID = -1;
                    OnTeamDestroy(new CopyTeamDestroyData()
                    {
                        TeamId = 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;
                    }
                }

                if (member.ServerId == ThisServerId)
                {
                    RoleId2JoinedTeam.Remove(member.RoleID);
                    GameClient client = GameManager.ClientMgr.FindClient(member.RoleID);
                    if (client != null)
                    {
                        NotifyTeamStateChanged(client, (int)CopyTeamErrorCodes.LeaveTeam, member.RoleID, 0);
                    }
                }

                NotifyTeamData(td);
                NotifyTeamListChange(td);
            }

            /*
             * int roleID = client.ClientData.RoleID;
             * long teamID = FindRoleID2TeamID(client.ClientData.RoleID);
             * if (teamID <= 0) //如果没有队伍
             * {
             *  return;
             * }
             *
             * //查找组队的数据
             * CopyTeamData td = FindData(teamID);
             * if (null == td) //没有找到组队数据
             * {
             *  //清空组队ID
             *  RemoveRoleID2TeamID(roleID);
             *  return;
             * }
             *
             * bool updateTeamList = false;
             * bool destroy = false;
             * lock (td)
             * {
             *  if (td.TeamRoles.Count > 1) //转交队长
             *  {
             *      for (int i = 0; i < td.TeamRoles.Count; i++)
             *      {
             *          if (td.TeamRoles[i].RoleID == client.ClientData.RoleID)
             *          {
             *              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;
             *      }
             *      td.MemberCount = td.TeamRoles.Count;
             *  }
             *  else
             *  {
             *      destroy = true;
             *      td.LeaderRoleID = -1; //强迫解散
             *      td.TeamRoles.Clear();
             *      updateTeamList = true;
             *  }
             *  td.MemberCount = td.TeamRoles.Count;
             *
             *  if (td.StartTime == 0)
             *  {
             *      updateTeamList = true;
             *  }
             * }
             *
             * if (destroy)
             * {
             *  //删除组队数据
             *  RemoveData(teamID);
             * }
             *
             * //清空组队ID
             * RemoveRoleID2TeamID(roleID);
             *
             * //发送队伍状态
             * NotifyTeamStateChanged(client, CopyTeamErrorCodes.LeaveTeam, roleID, 0);
             *
             * if (notifyOther)
             * {
             *  //通知组队数据的指令信息
             *  NotifyTeamData(td); //发送null数据,强迫组队解散
             * }
             *
             * if (updateTeamList)
             * {
             *  //组队状态变化通知
             *  NotifyTeamListChange(td);
             * }
             * */
        }
コード例 #5
0
        /// <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);
             */
        }
コード例 #6
0
        /// <summary>
        /// 加入队伍回调
        /// </summary>
        /// <param name="data"></param>
        private void OnTeamJoin(CopyTeamJoinData data)
        {
            if (data == null)
            {
                return;
            }

            lock (Mutex)
            {
                CopyTeamData td;
                if (!TeamDict.TryGetValue(data.TeamId, out td))
                {
                    return;
                }

                if (td.TeamRoles.Count >= ConstData.CopyRoleMax(td.FuBenId))
                {
                    return;
                }

                td.TeamRoles.Add(data.Member);
                td.MemberCount = td.TeamRoles.Count();

                if (data.Member.ServerId == ThisServerId)
                {
                    RoleId2JoinedTeam[data.Member.RoleID] = td.TeamID;
                    GameClient client = GameManager.ClientMgr.FindClient(data.Member.RoleID);
                    if (client != null)
                    {
                        NotifyTeamCmd(client, CopyTeamErrorCodes.Success, (int)TeamCmds.Apply, td.TeamID, td.TeamName);
                    }
                }

                NotifyTeamData(td);
                NotifyTeamListChange(td);
            }

            /*
             * lock (td)
             * {
             *
             *  //是否能加入队伍
             *  //if (!CopyTeamManager.getInstance().CanAddToTeam(roleID, otherClient.ClientData.TeamID, 0))
             *
             *
             *  int index = td.TeamRoles.FindIndex((x) => x.RoleID == roleID);
             *  if (index >= 0)
             *  {
             *      td.TeamRoles[index] = ClientDataToTeamMemberData(client.ClientData);
             *  }
             *  else
             *  {
             *      td.TeamRoles.Add(ClientDataToTeamMemberData(client.ClientData));
             *  }
             *  td.MemberCount = td.TeamRoles.Count;
             * }
             *
             * AddRoleID2TeamID(roleID, teamID);
             *
             * //通知角色组队的指令信息
             * NotifyTeamCmd(client, CopyTeamErrorCodes.Success, (int)TeamCmds.Apply, teamID, td.TeamName);
             * NotifyTeamData(td);
             * NotifyTeamListChange(td);
             *
             *
             */
        }