Пример #1
0
    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));
            }
        }
    }