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 _); } }
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 _); } }