Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Enhancement]: Expand common matchmaking implementation #48

Open
1 task done
shoginyan opened this issue Jan 13, 2025 · 4 comments
Open
1 task done

[Enhancement]: Expand common matchmaking implementation #48

shoginyan opened this issue Jan 13, 2025 · 4 comments
Labels
awaiting-approval Topic has not been approved or denied enhancement An update to an existing part of the codebase

Comments

@shoginyan
Copy link

shoginyan commented Jan 13, 2025

Checked Existing

  • I have checked the repository for duplicate issues.

What enhancement would you like to see?

MatchmakeExtension::GetPlayingSession needs implementing

Any other details to share? (OPTIONAL)

No response

@shoginyan shoginyan added awaiting-approval Topic has not been approved or denied enhancement An update to an existing part of the codebase labels Jan 13, 2025
@ashquarky
Copy link
Member

ashquarky commented Jan 16, 2025

More details:
It's stubbed in Splatoon as not used, but apparently YKW3 actually does need it for successful matchmaking. Not clear why

@ashquarky
Copy link
Member

Tri Force Heroes uses GetPlayingSession also

@SuperMarioDaBom
Copy link
Member

To add clarification + additional info:

MatchmakeExtension::GetPlayingSession appears to be used by the various YKW titles as a means of getting active sessions of friends, as the game makes this request pretty early on after connecting to online & the list of PIDs sent matches the console's Friend List. Not sure if this function should be restricted to just friends, or should allow a user to request any session from any PID.

Some additional items that would be nice to have implemented:
MatchmakeExtension::GetMyBlackList (109, 24)
MatchmakeExtension::AddToBlackList (109, 25)
MatchmakeExtension::RemoveFromBlackList (109, 26)
MatchmakeExtension::ClearMyBlackList (109, 27)

These are used by YKW games to kick & prevent players from rejoining rooms and/or joining a room with a player you do not wish to join. For some unknown reason, each time the game connects online for the first time since last launched, it will call MatchmakeExtension::ClearMyBlackList. The game will eventually time-out if this method is not implemented. Would likely be a good idea to get this implemented so as to allow players to block each other online, even if it's technically temporary.

@jonbarrow
Copy link
Member

jonbarrow commented Feb 15, 2025

Not sure if this function should be restricted to just friends, or should allow a user to request any session from any PID

The official implementation does not restrict this to only friends. The way the official servers hide users from this function is via MatchmakeExtension::UpdatePrivacySetting or by blocking the caller (if PID 1000 has blocked PID 2000, but PID 1000 has their privacy setting set to public, and then PID 2000 tries to query for PID 1000, it acts as if PID 1000 has their privacy set to private). In my testing if a user is friends with a target then the privacy setting is ignored. By default all users are set to public for both privacy settings

A user who has onlineStatus set to false will have their results removed from the response of MatchmakeExtension::GetPlayingSession (no error is thrown, it's just removed)

A user who has participationCommunity set to false will have their results removed from the response of MatchmakeExtension::FindCommunityByParticipant (no error is thrown, it's just removed)

Those are the only 2 NEX methods which seem to be affected by the privacy settings. In my testing all other matchmaking and search methods I tested, I still showed up regardless of the privacy setting

Also to clarify how the blacklist works:

The blacklist does not block visibility in other methods or general matchmaking (IE, MatchmakeExtension::BrowseMatchmakeSession will still return sessions even if the user is blocked by a participant or has a participant blocked themselves). The only time the blacklist is checked is when attempting to join the session, which throws either RendezVous::DeniedByParticipants (if a participant of the session has you blocked) or RendezVous::ParticipantInBlackList (if you have a participant of the session blocked)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
awaiting-approval Topic has not been approved or denied enhancement An update to an existing part of the codebase
Projects
None yet
Development

No branches or pull requests

4 participants