/// <summary> /// This method will be called when the leader is inviting the member. /// </summary> /// <param name="pSender">The user who is being invited.</param> /// <param name="pTarget">The leader of the team</param> /// <param name="pMsg">The packet that will be processed</param> public void InviteMember(Character pSender, Character pTarget, MsgTeam pMsg) { if (pTarget != m_pLeader) { pSender.Send(ServerString.STR_NOT_CAPTAIN_ACCEPT); return; } if (IsForbid) { // pSender.Send(ServerString.STR_FORBIDDEN_JOIN); // message to player pTarget.Send(ServerString.STR_TEAM_CLOSED); // message to leader return; } if (Members.Count >= _MAX_MEMBER) { pSender.Send(ServerString.STR_TEAM_FULL); return; } pTarget.SetTeamInvite(pSender.Identity); pMsg.Target = pTarget.Identity; pSender.Send(pMsg); pSender.SendRelation(pTarget); }
/// <summary> /// This method will send the request to the leader to accept. /// </summary> /// <param name="pSender">The user who wants to join the team</param> /// <param name="pTarget">The leader of the team</param> /// <param name="pMsg">The packet that will be processed</param> public void RequestMember(Character pSender, Character pTarget, MsgTeam pMsg) { if (pTarget != m_pLeader) { pSender.Send(ServerString.STR_NO_CAPTAIN_CLOSE); return; } if (IsForbid) { pSender.Send(ServerString.STR_FORBIDDEN_JOIN); // message to player //pTarget.Send(ServerString.STR_TEAM_CLOSED); // message to leader return; } if (Members.Count >= 5) { pSender.Send(ServerString.STR_HIS_TEAM_FULL); return; } pSender.SetTeamJoin(pTarget.Identity); pMsg.Target = pSender.Identity; pTarget.Send(pMsg); pTarget.SendRelation(pSender); }
public void KickMember(Character pRole, MsgTeam pMsg) { if (pRole != m_pLeader) { pRole.Send(ServerString.STR_NOT_LEADER_KICK); return; } Character pTarget; if (!Members.TryRemove(pMsg.Target, out pTarget)) { pRole.Send(ServerString.STR_APPLICANT_NOT_FOUND); return; } pTarget.Send(pMsg); Send(pMsg); pTarget.Team = null; var aura = m_lAuras.Values.FirstOrDefault(x => x.CasterId == pRole.Identity); if (aura != null) { RemoveAura(aura); } }
public static void Leave(YiObj leader, YiObj kicked) { if (!Teams.ContainsKey(leader.UniqueId)) { return; } foreach (var member in Teams[leader.UniqueId].Members.Values) { (member as Player)?.Send(MsgTeam.Kick(kicked)); } Teams.TryRemove(kicked.UniqueId); Teams[leader.UniqueId].Members.TryRemove(kicked.UniqueId); }
public static void Disband(YiObj leader) { if (!Teams.ContainsKey(leader.UniqueId)) { return; } foreach (var member in Teams[leader.UniqueId].Members.Values) { (member as Player)?.Send(MsgTeam.Kick(member)); Teams.TryRemove(member.UniqueId); } (leader as Player)?.Send(MsgTeam.DisbandTeam(leader)); leader.RemoveStatusEffect(StatusEffect.TeamLeader); Teams.TryRemove(leader.UniqueId); }
public bool Destroy(Character pRole, MsgTeam pMsg) { if (pRole != m_pLeader) { pRole.Send(ServerString.STR_NOT_CAPTAIN_DISMISS); return(false); } Send(pMsg); foreach (var plr in Members.Values) { plr.Team = null; } pRole.DetachStatus(FlagInt.TEAM_LEADER); m_pLeader = null; Members.Clear(); return(true); }
/// <summary> /// This method is called when the user accept a team invitation. /// </summary> public void MemberAccept(Character pLeader, Character pMember, MsgTeam pMsg) { if (pLeader != m_pLeader) { pMember.Send(ServerString.STR_NO_CAPTAIN_CLOSE); return; } if (IsForbid) { pLeader.Send(ServerString.STR_FORBIDDEN_JOIN); // message to player // pLeader.Send(ServerString.STR_TEAM_CLOSED); // message to leader return; } if (Members.Count >= _MAX_MEMBER) { pMember.Send(ServerString.STR_HIS_TEAM_FULL); return; } if (!pLeader.FetchTeamInvite(pMember.Identity)) { return; } if (Members.TryAdd(pMember.Identity, pMember)) { pMember.Send(pMsg); pMember.Team = this; SendMember(); pMember.Send(string.Format(ServerString.STR_TEAM_MONEY, !m_bCloseMoney ? "ON" : "OFF"), ChatTone.TEAM); pMember.Send(string.Format(ServerString.STR_TEAM_ITEM, !m_bCloseItem ? "ON" : "OFF"), ChatTone.TEAM); pMember.Send(string.Format(ServerString.STR_TEAM_GEM, !m_bCloseGem ? "ON" : "OFF"), ChatTone.TEAM); pLeader.ClearTeamInvite(); } }
public void LeaveTeam(Character pRole, MsgTeam pMsg) { Character trash; if (!Members.TryRemove(pRole.Identity, out trash)) { return; } pRole.Team = null; if (pMsg != null) { Send(pMsg); } else { Send(new MsgTeam { Type = TeamActionType.KICK, Target = pRole.Identity }); return; } pRole.Send(pMsg); }
public static void HandleTeamAction(Character pRole, MsgTeam pMsg) { switch (pMsg.Type) { #region Create case TeamActionType.CREATE: { if (pRole.Team != null) { pRole.Send(ServerString.STR_TEAMMATE_CANNOT_CREATE); return; // already have a team } if (!pRole.AttachStatus(pRole, FlagInt.TEAM_LEADER, 0, int.MaxValue, int.MaxValue, 0, pRole.Identity)) { pRole.Send(ServerString.STR_CREATE_TEAM_FAILED); return; } pRole.Team = new Team(pRole); pRole.Send(pMsg); pMsg.Type = TeamActionType.LEADER; pRole.Send(pMsg); break; } #endregion #region Dismiss case TeamActionType.DISMISS: { if (pRole.Team == null) { pRole.Send(ServerString.STR_NO_TEAM_TO_DISMISS); return; } pRole.Team.Destroy(pRole, pMsg); pRole.Team = null; break; } #endregion #region Leave Team case TeamActionType.LEAVE_TEAM: { if (pRole.Team == null) { pRole.Send(ServerString.STR_NO_TEAM_TO_LEAVE); return; } pRole.Team.LeaveTeam(pRole, pMsg); break; } #endregion #region Kick Member case TeamActionType.KICK: { if (pRole.Team == null) { pRole.Send(ServerString.STR_NO_TEAM_TO_LEAVE); return; } pRole.Team.KickMember(pRole, pMsg); break; } #endregion #region Request Join (Applicant want to join) case TeamActionType.REQUEST_JOIN: { if (pRole.Team != null) { pRole.Send(ServerString.STR_HAVE_JOIN_TEAM); return; // already has a team } Character pUserTarget; if (!pRole.Map.Players.TryGetValue(pMsg.Target, out pUserTarget)) { pRole.Send(ServerString.STR_NO_CAPTAIN_CLOSE); return; } if (pUserTarget.Team == null) { pRole.Send(ServerString.STR_NOT_CREATE_TEAM); return; } pUserTarget.Team.RequestMember(pRole, pUserTarget, pMsg); break; } #endregion #region Request Invite (Applicant is inviting) case TeamActionType.REQUEST_INVITE: { if (pRole.Team == null) { pRole.Send(ServerString.STR_NO_TEAM_TO_INVITE); return; // dont have a team, cant invite } Character pUserTarget; if (!pRole.Map.Players.TryGetValue(pMsg.Target, out pUserTarget)) { pRole.Send(ServerString.STR_APPLICANT_NOT_FOUND); return; } if (pUserTarget.Team != null) { pRole.Send(ServerString.STR_HAS_IN_TEAM); return; } pRole.Team.InviteMember(pUserTarget, pRole, pMsg); break; } #endregion #region Accept Team (Me accepting invitation) case TeamActionType.ACCEPT_INVITE: { if (pRole.Team != null) { pRole.Send(ServerString.STR_HAVE_JOIN_TEAM); return; // already has a team } Character pLeader; if (!pRole.Map.Players.TryGetValue(pMsg.Target, out pLeader)) { pRole.Send(ServerString.STR_NO_CAPTAIN_CLOSE); return; } pLeader.Team.MemberAccept(pLeader, pRole, pMsg); break; } #endregion #region Accept Join (Leader accepting join request) case TeamActionType.ACCEPT_JOIN: { if (pRole.Team == null) { pRole.Send(ServerString.STR_NO_TEAM_TO_INVITE); return; // dont have a team, cant accept } Character pUserTarget; if (!pRole.Map.Players.TryGetValue(pMsg.Target, out pUserTarget)) { pRole.Send(ServerString.STR_APPLICANT_NOT_FOUND); return; } if (pUserTarget.Team != null) { pRole.Send(ServerString.STR_HAS_IN_TEAM); return; } pRole.Team.AcceptMember(pRole, pUserTarget, pMsg); break; } #endregion #region Forbid Join case TeamActionType.JOIN_DISABLE: { if (pRole.Team == null || pRole.Team.Leader != pRole) { return; } pRole.Team.SetForbid(true); pRole.Send(pMsg); break; } #endregion #region Enable Join case TeamActionType.JOIN_ENABLE: { if (pRole.Team == null || pRole.Team.Leader != pRole) { return; } pRole.Team.SetForbid(false); pRole.Send(pMsg); break; } #endregion #region Open Item case TeamActionType.ITEM_ENABLE: { if (pRole.Team == null || pRole.Team.Leader != pRole) { return; } pRole.Team.SetCloseItem(true); pRole.Send(pMsg); break; } #endregion #region Close Item case TeamActionType.ITEM_DISABLE: { if (pRole.Team == null || pRole.Team.Leader != pRole) { return; } pRole.Team.SetCloseItem(false); pRole.Send(pMsg); break; } #endregion #region Open Money case TeamActionType.MONEY_ENABLE: { if (pRole.Team == null || pRole.Team.Leader != pRole) { return; } pRole.Team.SetCloseMoney(true); pRole.Send(pMsg); break; } #endregion #region Close Money case TeamActionType.MONEY_DISABLE: { if (pRole.Team == null || pRole.Team.Leader != pRole) { return; } pRole.Team.SetCloseMoney(false); pRole.Send(pMsg); break; } #endregion #region Cancel Join or Invite Request case (TeamActionType)14: { Client pTarget; if (ServerKernel.Players.TryGetValue(pMsg.Target, out pTarget)) { if (pTarget.Character != null && pTarget.Character.Team != null) { pTarget.Character.SetTeamInvite(0); pTarget.Character.SetTeamJoin(0); } } break; } #endregion } }