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