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