private static void HandleInvite(GameSession session, PacketReader packet) { string target = packet.ReadUnicodeString(); Player other = GameServer.PlayerManager.GetPlayerByName(target); if (other == null) { return; } if (session.Player.Party != null) { Party party = session.Player.Party; if (party.Leader != session.Player) { session.Send(PartyPacket.Notice(session.Player, PartyNotice.NotLeader)); return; } if (other == session.Player) { session.Send(PartyPacket.Notice(session.Player, PartyNotice.InviteSelf)); return; } if (other.Party != null) { Party otherParty = other.Party; if (otherParty.Members.Count > 1) { session.Send(PartyPacket.Notice(session.Player, PartyNotice.UnableToInvite)); return; } } other.Session.Send(PartyPacket.SendInvite(session.Player, party)); } else { if (other.Party != null) { Party otherParty = other.Party; if (otherParty.Members.Count == 1) { Party newParty = new(session.Player); GameServer.PartyManager.AddParty(newParty); session.Send(PartyPacket.Create(newParty, true)); other.Session.Send(PartyPacket.SendInvite(session.Player, newParty)); return; } session.Send(PartyPacket.Notice(other, PartyNotice.RequestToJoin)); otherParty.Leader.Session.Send(PartyPacket.JoinRequest(session.Player)); return; } { // create party Party newParty = new(session.Player); GameServer.PartyManager.AddParty(newParty); session.Send(PartyPacket.Create(newParty, true)); other.Session.Send(PartyPacket.SendInvite(session.Player, newParty)); } } }