LeaveGroup() public method

public LeaveGroup ( ClientSession session ) : void
session ClientSession
return void
 public void GroupLeave(ClientSession session)
 {
     if (Groups != null)
     {
         Group grp = Instance.Groups.FirstOrDefault(s => s.IsMemberOfGroup(session.Character.CharacterId));
         if (grp != null)
         {
             if (grp.CharacterCount == 3)
             {
                 if (grp.Characters.ElementAt(0) == session)
                 {
                     Broadcast(session, session.Character.GenerateInfo(Language.Instance.GetMessageFromKey("NEW_LEADER")), ReceiverType.OnlySomeone, string.Empty, grp.Characters.ElementAt(1).Character.CharacterId);
                 }
                 grp.LeaveGroup(session);
                 foreach (ClientSession groupSession in grp.Characters)
                 {
                     ClientSession sess = GetSessionByCharacterId(groupSession.Character.CharacterId);
                     sess.SendPacket(sess.Character.GeneratePinit());
                     sess.SendPacket(sess.Character.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("LEAVE_GROUP"), session.Character.Name), 0));
                 }
                 session.SendPacket("pinit 0");
                 Broadcast(session.Character.GeneratePidx(true));
                 session.SendPacket(session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("GROUP_LEFT"), 0));
             }
             else
             {
                 foreach (ClientSession targetSession in grp.Characters)
                 {
                     targetSession.SendPacket("pinit 0");
                     targetSession.SendPacket(targetSession.Character.GenerateMsg(Language.Instance.GetMessageFromKey("GROUP_CLOSED"), 0));
                     Broadcast(targetSession.Character.GeneratePidx(true));
                     grp.LeaveGroup(targetSession);
                 }
                 RemoveGroup(grp);
             }
             session.Character.Group = null;
         }
     }
 }
示例#2
0
        public void GroupLeave(ClientSession session)
        {
            Group grp = ServerManager.Instance.Groups.FirstOrDefault(s => s.IsMemberOfGroup(session.Character.CharacterId));

            if (grp != null)
            {
                if (grp.Characters.Count() == 3)
                {
                    if (grp.Characters.ElementAt(0) == session)
                    {
                        Broadcast(session, session.Character.GenerateInfo(Language.Instance.GetMessageFromKey("NEW_LEADER")), ReceiverType.OnlySomeone, "", grp.Characters.ElementAt(1).Character.CharacterId);
                    }
                    grp.LeaveGroup(session);
                    foreach (ClientSession groupSession in grp.Characters)
                    {
                        string str = $"pinit {grp.Characters.Count()}";
                        int    i   = 0;
                        foreach (ClientSession groupSessionForId in grp.Characters)
                        {
                            i++;
                            str += $" 1|{groupSessionForId.Character.CharacterId}|{i}|{groupSessionForId.Character.Level}|{groupSessionForId.Character.Name}|0|{groupSessionForId.Character.Gender}|{groupSessionForId.Character.Class}|{(groupSessionForId.Character.UseSp ? groupSessionForId.Character.Morph : 0)}|{groupSessionForId.Character.HeroLevel}";
                        }
                        foreach (ClientSession sess in Sessions.Where(s => s != null && s.Character != null && s.Character.CharacterId == groupSession.Character.CharacterId))
                        {
                            sess.Client.SendPacket(str);
                            sess.Client.SendPacket(sess.Character.GenerateMsg(String.Format(Language.Instance.GetMessageFromKey("LEAVE_GROUP"), session.Character.Name), 0));
                        }
                    }
                    session.Client.SendPacket("pinit 0");
                    Broadcast(session, $"pidx -1 1.{session.Character.CharacterId}", ReceiverType.All);
                    session.Client.SendPacket(session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("GROUP_LEFT"), 0));
                }
                else
                {
                    foreach (ClientSession targetSession in grp.Characters)
                    {
                        foreach (ClientSession sess in Sessions.Where(s => s != null && s.Character != null && s.Character.CharacterId == targetSession.Character.CharacterId))
                        {
                            sess.Client.SendPacket("pinit 0");
                            sess.Client.SendPacket(sess.Character.GenerateMsg(Language.Instance.GetMessageFromKey("GROUP_CLOSED"), 0));
                            Broadcast(sess, $"pidx -1 1.{targetSession.Character.CharacterId}", ReceiverType.All);
                        }
                    }
                    ServerManager.Instance.Groups.Remove(grp);
                }

                session.Character.Group = null;
            }
        }
示例#3
0
        public void GroupLeave(ClientSession session)
        {
            Group grp = ServerManager.Instance.Groups.FirstOrDefault(s => s.IsMemberOfGroup(session.Character.CharacterId));

            if (grp != null)
            {
                if (grp.Characters.Count() == 3)
                {
                    if (grp.Characters.ElementAt(0) == session)
                    {
                        Broadcast(session, session.Character.GenerateInfo(Language.Instance.GetMessageFromKey("NEW_LEADER")), ReceiverType.OnlySomeone, String.Empty, grp.Characters.ElementAt(1).Character.CharacterId);
                    }
                    grp.LeaveGroup(session);
                    foreach (ClientSession groupSession in grp.Characters)
                    {
                        foreach (ClientSession sess in Sessions.Where(s => s != null && s.Character != null && s.Character.CharacterId == groupSession.Character.CharacterId))
                        {
                            sess.SendPacket(sess.Character.GeneratePinit());
                            sess.SendPacket(sess.Character.GenerateMsg(String.Format(Language.Instance.GetMessageFromKey("LEAVE_GROUP"), session.Character.Name), 0));
                        }
                    }
                    Broadcast(session.Character.GeneratePidx());
                    session.SendPacket(session.Character.GenerateMsg(Language.Instance.GetMessageFromKey("GROUP_LEFT"), 0));
                }
                else
                {
                    foreach (ClientSession targetSession in grp.Characters)
                    {
                        foreach (ClientSession sess in Sessions.Where(s => s != null && s.Character != null && s.Character.CharacterId == targetSession.Character.CharacterId))
                        {
                            sess.SendPacket("pinit 0");
                            sess.SendPacket(sess.Character.GenerateMsg(Language.Instance.GetMessageFromKey("GROUP_CLOSED"), 0));
                            Broadcast(sess.Character.GeneratePidx());
                        }
                    }
                    ServerManager.Instance.Groups.Remove(grp);
                }

                session.Character.Group = null;
            }
        }