Exemple #1
0
        public void LeaveGroup(PleavePacket __)
        {
            var group = Session.Character.Group;

            if (group.Count == 1)
            {
                return;
            }

            if (group.Count > 2)
            {
                Session.Character.LeaveGroup();

                if (group.IsGroupLeader(Session.Character.CharacterId))
                {
                    var session = ServerManager.Instance.Sessions.Values.FirstOrDefault(s =>
                                                                                        s.Character.CharacterId == group.Values.First().Item2.VisualId);

                    if (session == null)
                    {
                        return;
                    }

                    ServerManager.Instance.Broadcast(Session, new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.NEW_LEADER, Session.Account.Language)
                    }, ReceiverType.OnlySomeone, string.Empty, session.Character.CharacterId);
                }

                if (group.Type != GroupType.Group)
                {
                    return;
                }

                foreach (var member in group.Values.Where(s => s.Item2 is ICharacterEntity))
                {
                    var session =
                        ServerManager.Instance.Sessions.Values.FirstOrDefault(s =>
                                                                              s.Character.CharacterId == member.Item2.VisualId);
                    session?.SendPacket(session.Character.Group.GeneratePinit());
                    session?.SendPacket(new MsgPacket
                    {
                        Message = string.Format(
                            Language.Instance.GetMessageFromKey(LanguageKey.LEAVE_GROUP, Session.Account.Language),
                            Session.Character.Name)
                    });
                }

                Session.SendPacket(Session.Character.Group.GeneratePinit());
                Session.SendPacket(new MsgPacket
                {
                    Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_LEFT, Session.Account.Language)
                });
                Session.Character.MapInstance.Broadcast(Session.Character.Group.GeneratePidx(Session.Character));
            }
            else
            {
                var memberList = new List <INamedEntity>();
                memberList.AddRange(group.Values.Select(s => s.Item2));

                foreach (var member in memberList.Where(s => s is ICharacterEntity))
                {
                    var session =
                        ServerManager.Instance.Sessions.Values.FirstOrDefault(s =>
                                                                              s.Character.CharacterId == member.VisualId);

                    if (session == null)
                    {
                        continue;
                    }

                    session.SendPacket(new MsgPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_CLOSED,
                                                                      session.Account.Language),
                        Type = MessageType.Whisper
                    });

                    session.Character.LeaveGroup();
                    session.SendPacket(session.Character.Group.GeneratePinit());
                    ServerManager.Instance.Broadcast(session.Character.Group.GeneratePidx(session.Character));
                }

                ServerManager.Instance.Groups.TryRemove(group.GroupId, out _);
            }
        }
Exemple #2
0
        public void LeaveGroup(PleavePacket __)
        {
            var group = Session.Character.Group;

            if (group.Count == 1)
            {
                return;
            }

            if (group.Count > 2)
            {
                Session.Character.LeaveGroup();

                if (group.IsGroupLeader(Session.Character.CharacterId))
                {
                    var session = Broadcaster.Instance.GetCharacter(s =>
                                                                    s.VisualId == group.Values.First().Item2.VisualId);

                    if (session == null)
                    {
                        return;
                    }

                    Broadcaster.Instance.Sessions.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.NEW_LEADER, Session.Account.Language)
                    }, new EveryoneBut(session.Channel.Id));
                }

                if (group.Type != GroupType.Group)
                {
                    return;
                }

                foreach (var member in group.Values.Where(s => s.Item2 is ICharacterEntity))
                {
                    var character = member.Item2 as ICharacterEntity;
                    character.SendPacket(character.Group.GeneratePinit());
                    character.SendPacket(new MsgPacket
                    {
                        Message = string.Format(
                            Language.Instance.GetMessageFromKey(LanguageKey.LEAVE_GROUP, Session.Account.Language),
                            Session.Character.Name)
                    });
                }

                Session.SendPacket(Session.Character.Group.GeneratePinit());
                Session.SendPacket(new MsgPacket
                {
                    Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_LEFT, Session.Account.Language)
                });
                Session.Character.MapInstance.Sessions.SendPacket(Session.Character.Group.GeneratePidx(Session.Character));
            }
            else
            {
                var memberList = new List <INamedEntity>();
                memberList.AddRange(group.Values.Select(s => s.Item2));

                foreach (var member in memberList.Where(s => s is ICharacterEntity))
                {
                    var session =
                        Broadcaster.Instance.GetCharacter(s =>
                                                          s.VisualId == member.VisualId);

                    if (session == null)
                    {
                        continue;
                    }

                    session.SendPacket(new MsgPacket
                    {
                        Message = session.GetMessageFromKey(LanguageKey.GROUP_CLOSED),
                        Type    = MessageType.White
                    });

                    session.LeaveGroup();
                    session.SendPacket(session.Group.GeneratePinit());
                    Broadcaster.Instance.Sessions.SendPacket(session.Group.GeneratePidx(session));
                }

                GroupAccess.Instance.Groups.TryRemove(group.GroupId, out _);
            }
        }