Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        /// <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();
            }
        }
Esempio n. 8
0
        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
            }
        }