/// <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); } }
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; }
/// <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); } }
/// <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); } }
/// <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)); } }
/// <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); } } }
/// <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); } } }
/// <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; }
/// <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); }
/// <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)); } } } }
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; }
/// <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; }
public void Over() { TeamInstanceProxy.TryRemove(m_id); TransScene(m_oldScene, new object[] { oldx, oldy }, true); m_team = null; }
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); }
/// <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); } } } }
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); } } }
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; }