コード例 #1
0
            public static InvitationCreateResult AddInvitation(ICharacter invitee, ICharacter inviter)
            {
                var party = ServerGetParty(inviter);

                if (party == null)
                {
                    Logger.Warning("Player don't have a party and so cannot invite anyone", inviter);
                    return(InvitationCreateResult.Unknown);
                }

                if (ServerPlayerMuteSystem.IsMuted(invitee.Name, out _))
                {
                    return(InvitationCreateResult.ErrorMuted);
                }

                var invitation = GetInvitation(party, invitee);

                if (invitation != null)
                {
                    invitation.ResetExpirationDate();
                    Logger.Info(
                        $"{invitee} is already has been invited by {inviter} to {party} - invitation timeout extended");
                    return(InvitationCreateResult.Success);
                }

                var members = ServerGetPartyMembersReadOnly(party);

                if (members.Contains(invitee.Name, StringComparer.Ordinal))
                {
                    return(InvitationCreateResult.ErrorInviteeAlreadySamePartyMember);
                }

                var partyMembers = ServerGetPartyMembersReadOnly(party);

                if (partyMembers.Count + 1 >= PartyConstants.PartyMembersMax)
                {
                    return(InvitationCreateResult.ErrorPartyFull);
                }

                invitation = new Invitation(party, inviter, invitee);
                InvitationsList.Add(invitation);

                Instance.CallClient(invitation.Invitee,
                                    _ => _.ClientRemote_InvitationAdded(invitation.Inviter.Name));
                Logger.Important($"{invitee} has been invited by {inviter} to {party}");
                ChatSystem.ServerSendServiceMessage(
                    ServerGetPartyChat(party),
                    string.Format(Notification_PlayerInvitedFormat, inviter.Name, invitee.Name));

                return(InvitationCreateResult.Success);
            }