コード例 #1
0
ファイル: TeamMembersMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 离开队伍
 /// </summary>
 /// <param name="note"></param>
 /// <param name="team"></param>
 private void OutTeam(UserNote note, PlayerTeam team)
 {
     PlayerBusiness player = note.Player;
     if (team.RemoveMember(player))
     {
         var buffer = AmfCodec.Encode(TeamCommand.OutTeamR,
             new object[] { true, team.TeamID, player.ID, player.Name, null });
         if (player.SceneID == team.Captain.SceneID)
         {
             team.Captain.CallAll(buffer);
             //通知其它场景上的用户
             team.CallAway(buffer, team.Captain.SceneID);
         }
         else
         {
             player.Call(buffer);
             //通知其它场景上的用户
             team.CallAway(buffer, player.SceneID);
         }
     }
     var t = player.TeamInstance;
     if (t != null)
     {
         t.Exit(player, true);
     }
 }
コード例 #2
0
ファイル: PersonalFam.cs プロジェクト: abel/sinan
 protected override bool FillPlayers(PlayerTeam team, PlayerBusiness player, out string msg)
 {
     //通过完成家族任务获得此副本
     if (team != null)
     {
         msg = TipManager.GetMessage(ClientReturn.IntoLimit1);
         return false;
     }
     m_members = new PlayerBusiness[1] { player };
     msg = null;
     return true;
 }
コード例 #3
0
ファイル: TeamCaptainMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 移交队长
 /// </summary>
 /// <param name="note"></param>
 /// <param name="team"></param>
 private void ChangeManager(UserNote note, PlayerTeam team)
 {
     string teamID = team.TeamID;
     string newCaptainID = note.GetString(0);
     PlayerBusiness newCaptain = team.TransferCaptain(newCaptainID);
     if (newCaptain != null)
     {
         //通知
         var buffer = AmfCodec.Encode(TeamCommand.ChangeManagerR, new object[] { teamID, newCaptainID });
         team.Captain.CallAll(buffer);
         team.CallAway(buffer, note.Player.SceneID);
     }
 }
コード例 #4
0
ファイル: TeamCaptainMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 解散队伍
 /// </summary>
 /// <param name="note"></param>
 private void FreeTeam(UserNote note, PlayerTeam team)
 {
     if (m_teams.TryRemove(team.TeamID, out team))
     {
         var t = note.Player.TeamInstance;
         if (t != null)
         {
             t.Over();
         }
         team.FreeTeam();
         var buffer = AmfCodec.Encode(TeamCommand.FreeTeamR, new object[] { team.TeamID });
         note.Player.CallAll(buffer);
         team.CallAway(buffer, note.Player.SceneID);
     }
 }
コード例 #5
0
ファイル: TeamMembersMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 暂时离开队伍
 /// </summary>
 /// <param name="note"></param>
 /// <param name="team"></param>
 private void AwayTeam(UserNote note, PlayerTeam team)
 {
     PlayerBusiness player = note.Player;
     if (player.TeamJob == TeamJob.Member && player.SetTeam(team, TeamJob.Away))
     {
         var buffer = AmfCodec.Encode(TeamCommand.AwayTeamR,
           new object[] { true, team.TeamID, player.ID, player.Name, null });
         player.CallAll(buffer);
         team.CallAway(buffer, team.Captain.SceneID);
     }
     else
     {
         player.Call(TeamCommand.AwayTeamR, false, team.TeamID, player.ID, player.Name,
             //player.TeamJob == TeamJob.Captain ? "队长不能暂离" : "你已暂离");
             player.TeamJob == TeamJob.Captain ? TipManager.GetMessage(ClientReturn.AwayTeam1) : TipManager.GetMessage(ClientReturn.AwayTeam2));
     }
 }
コード例 #6
0
ファイル: TeamCaptainMediator.cs プロジェクト: abel/sinan
        /// <summary>
        /// 请出队伍
        /// </summary>
        /// <param name="note"></param>
        /// <param name="team"></param>
        private void KillMember(UserNote note, PlayerTeam team)
        {
            string memberID = note.GetString(0);
            PlayerBusiness memeber = team.RemoveMember(memberID);
            if (memeber != null)
            {
                var buffer = AmfCodec.Encode(TeamCommand.OutTeamR,
                    new object[] { true, team.TeamID, memberID, memeber.Name, null });

                team.Captain.CallAll(buffer);
                //通知其它场景上的用户
                team.CallAway(buffer, note.Player.SceneID);

                var t = memeber.TeamInstance;
                if (t != null)
                {
                    t.Exit(memeber, true);
                }
            }
        }
コード例 #7
0
ファイル: TeamMembersMediator.cs プロジェクト: abel/sinan
        /// <summary>
        /// 归队
        /// </summary>
        /// <param name="note"></param>
        /// <param name="team"></param>
        private void RejoinTeam(UserNote note, PlayerTeam team)
        {
            PlayerBusiness player = note.Player;
            if (player.TeamJob == TeamJob.Away)
            {
                if (player.SceneID != team.Captain.SceneID)
                {
                    //player.Call(TeamCommand.RejoinTeamR, false, team.TeamID, player.ID, player.Name,"您需要和队伍在同一场景中才能归队");
                    player.Call(TeamCommand.RejoinTeamR, false, team.TeamID, player.ID, player.Name, TipManager.GetMessage(ClientReturn.RejoinTeam1));
                    return;
                }
                if (player.SetTeam(team, TeamJob.Member))
                {
                    var buffer = AmfCodec.Encode(TeamCommand.RejoinTeamR,
                                                 new object[] { true, team.TeamID, player.ID, player.Name, null });

                    team.Captain.CallAll(buffer);
                    team.CallAway(buffer, team.Captain.SceneID);
                }
            }
        }
コード例 #8
0
ファイル: TeamsMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 创建队伍
 /// </summary>
 /// <param name="note"></param>
 private bool CreateTeam(UserNote note)
 {
     PlayerBusiness player = note.Player;
     if (player.Team != null)
     {
         //已有队伍
         player.Call(TeamCommand.CreateTeamR, false, TipManager.GetMessage(ClientReturn.TeamsMediator1));
         return false;
     }
     PlayerTeam team = new PlayerTeam(player);
     if (team.Captain == player)
     {
         team.Icon = note.GetString(0);
         team.Explain = note.GetString(1);
         if (m_teams.TryAdd(team.TeamID, team))
         {
             player.CallAll(TeamCommand.CreateTeamR, true, team);
             return true;
         }
     }
     return false;
 }
コード例 #9
0
ファイル: TeamCaptainMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 更新队伍信息
 /// </summary>
 /// <param name="note"></param>
 /// <param name="team"></param>
 private void UpdateTeam(UserNote note, PlayerTeam team)
 {
     Variant v = note.GetVariant(0);
     team.AutoInto = v.GetBooleanOrDefault("AutoAgree");
     team.ShieldAutoApply = v.GetBooleanOrDefault("ShieldAutoApply");
     team.Explain = v.GetStringOrDefault("Explain");
     team.Icon = v.GetStringOrDefault("Icon");
     var buffer = AmfCodec.Encode(TeamCommand.UpdateTeamR, new object[] { team });
     note.Player.CallAll(buffer);
     team.CallAway(buffer, note.Player.SceneID);
 }
コード例 #10
0
ファイル: TeamCaptainMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 队长返回请求结果
 /// </summary>
 /// <param name="note"></param>
 private void ReplyApply(UserNote note, PlayerTeam team)
 {
     bool reply = note.GetBoolean(0);
     string memberID = note.GetString(1);
     int check = note.GetInt32(2);
     PlayerBusiness member;
     if (note.Player.Scene.TryGetPlayer(memberID, out member))
     {
         if (member.GetHashCode() == check)
         {
             if (reply)
             {
                 if (team.TryAddMember(member))
                 {
                     var members = team.AllPlayerDetail;
                     member.Call(TeamCommand.IntoTeamR, true, new object[] { team, members });
                     note.Player.CallAllExcludeOne(member, TeamCommand.NewMemberR, team.TeamID, new PlayerDetail(member));
                     return;
                 }
             }
             else //不同意
             {
                 //对方拒绝了你的入队请求
                 member.Call(TeamCommand.IntoTeamR, false, TipManager.GetMessage(ClientReturn.ReplyApply1));
             }
         }
     }
 }
コード例 #11
0
ファイル: TeamInstanceBusiness.cs プロジェクト: abel/sinan
 protected virtual bool FillPlayers(PlayerTeam team, PlayerBusiness player, out string msg)
 {
     if (team == null || player.TeamJob != TeamJob.Captain)
     {
         msg = TipManager.GetMessage(ClientReturn.EctypeLimitTeamMsg1);
         return false;
     }
     for (int i = 0; i < team.Members.Length; i++)
     {
         PlayerBusiness member = team.Members[i];
         if (member != null)
         {
             if (member.TeamJob == TeamJob.Away)
             {
                 msg = TipManager.GetMessage(ClientReturn.EctypeLimitTeamMsg);
                 return false;
             }
         }
     }
     m_members = team.Members;
     msg = null;
     return true;
 }
コード例 #12
0
ファイル: PlayerBusiness.cs プロジェクト: abel/sinan
 /// <summary>
 /// 改变队伍状态
 /// </summary>
 /// <param name="team"></param>
 /// <param name="state"></param>
 /// <returns></returns>
 public bool SetTeam(PlayerTeam team, TeamJob state)
 {
     if (m_team == null || team == null)
     {
         m_team = team;
     }
     else if (m_team != team)
     {
         return false;
     }
     m_teamJob = state;
     return true;
 }
コード例 #13
0
ファイル: TeamInstanceBusiness.cs プロジェクト: abel/sinan
 public void Over()
 {
     TeamInstanceProxy.TryRemove(m_id);
     TransScene(m_oldScene, new object[] { oldx, oldy }, true);
     m_team = null;
 }
コード例 #14
0
ファイル: TeamMembersMediator.cs プロジェクト: abel/sinan
        private void UserDisconnected(UserNote note, PlayerTeam team)
        {
            PlayerBusiness player = note.Player;
            if (player != team.Captain)
            {
                if (team.RemoveMember(player))
                {
                    //TODO:通知队员退出
                    var buffer = AmfCodec.Encode(TeamCommand.AwayTeamR,
                    new object[] { true, team.TeamID, player.ID, player.Name, null });
                    team.CallAway(buffer, player.SceneID);
                }
                return;
            }

            //队长退出
            if (team.Count > 1)
            {
                //转让队伍
                PlayerBusiness newCaptain = team.TransferCaptain(string.Empty, true);
                if (newCaptain != null)
                {
                    var buffer = AmfCodec.Encode(TeamCommand.ChangeManagerR, new object[] { team.TeamID, newCaptain.ID });
                    team.Captain.CallAll(buffer);
                    team.CallAway(buffer, newCaptain.SceneID);
                    return;
                }
            }
            FreeTeam(note, team);
        }
コード例 #15
0
ファイル: TeamCaptainMediator.cs プロジェクト: abel/sinan
 /// <summary>
 /// 快速邀请
 /// </summary>
 /// <param name="note"></param>
 /// <param name="team"></param>
 private void QuickInvite(UserNote note, PlayerTeam team)
 {
     int sendCount = 5;
     foreach (var item in note.Player.Scene.Players)
     {
         if (sendCount <= 0) return;
         {
             if (item.Value.Team == null)
             {
                 sendCount--;
                 item.Value.Call(TeamCommand.InviteR, team);
             }
         }
     }
 }
コード例 #16
0
ファイル: PartMediator.cs プロジェクト: abel/sinan
 private void TeamAddExp(PlayerTeam team, Int32 exp)
 {
     for (int i = 0; i < team.Members.Length; i++)
     {
         PlayerBusiness member = team.Members[i];
         if (member != null && (member.TeamJob == TeamJob.Member || member.TeamJob == TeamJob.Captain))
         {
             member.AddExperience(exp, FinanceType.Part);
             member.AddPetExp(member.Pet, exp, true, (int)FinanceType.Part);
         }
     }
 }
コード例 #17
0
ファイル: TeamInstanceBusiness.cs プロジェクト: abel/sinan
        public bool TryInto(PlayerBusiness player)
        {
            PlayerTeam team = player.Team;
            //设置玩家列表.
            string msg;
            if (!FillPlayers(team, player, out msg))
            {
                player.Call(InstanceCommand.NewInstanceR, new object[] { false, msg, string.Empty });
                return false;
            }

            player.TeamInstance = this;
            // 检查副本进入限制
            if (m_intoLimit != null)
            {
                PlayerBusiness member;
                if ((!m_intoLimit.IntoCheck(m_members, out msg, out member))
                    || (!m_intoLimit.IntoDeduct(m_members, out msg, out member)))
                {
                    player.TeamInstance = null;
                    this.CallAll(InstanceCommand.NewInstanceR, new object[] { false, msg, member == null ? string.Empty : member.Name });
                    m_members = Empty;
                    return false;
                }
            }
            m_team = team;
            TeamInstanceProxy.TryAddInstance(this);

            //设置进入次数
            for (int i = 0; i < m_members.Length; i++)
            {
                PlayerBusiness member = m_members[i];
                if (member == null) continue;
                member.TeamInstance = this;
                member.WriteDaily(PlayerBusiness.DailyMap, m_gc.ID);

                //进入秘境通知..
                member.AddAcivity(ActivityType.FuBenCount, 1);

                // 记录副本进入日志
                PlayerLog log = new PlayerLog(ServerLogger.zoneid, Actiontype.EctypeIn);
                log.itemtype = m_difficulty;
                log.itemid = m_gc.ID;
                log.remark = m_gc.Name;
                member.WriteLog(log);
            }

            oldx = player.X;
            oldy = player.Y;
            m_oldScene = player.Scene;
            m_currentScene = m_oldScene;
            Astate = ActionState.Standing;
            return true;
        }