Giter Club home page Giter Club logo

beatsaberserverbrowser's Introduction

Beat Saber Server Browser (PC)

Beat Saber multiplayer mod that adds a Server Browser to the Online menu, making it easy to share and join multiplayer games.

โฌ PC Mod ๐Ÿ’š Download latest release
๐Ÿ†• Quest Mod BeatSaberServerBrowserQuest
๐ŸŒŽ Online https://bssb.app

Installation

๐Ÿ‘‰ Server Browser is usually available on ModAssistant, which is the easiest way to install it!

You can also install the mod manually by following the instructions below.

If you need help, you can ask in the Beat Saber Modding Group Discord (#pc-help) or BeatTogether Discord (#help).

Requirements

  • Beat Saber 1.29+ on PC (Steam or Oculus)
  • With the latest version of the following mods:
    • Core mods (BSIPA and SongCore)
    • SiraUtil
    • BeatSaberMarkupLanguage
    • MultiplayerCore

โ„น๏ธ Compatibility note: Check the GitHub releases for up-to-date information on Beat Saber compatibility and older supported versions. The mod usually doesn't require updates after a new game version drops.

Download

You can download the latest release directly from GitHub:

Download latest release

Extract the downloaded ZIP file to your Beat Saber installation directory.

If the mod is installed successfully, you should see ServerBrowser.dll in your Beat Saber Plugins directory. It will only load if you also have the right dependencies like MultiplayerCore.

How it works

Joining games

Open the Online menu, then click on the "Server Browser" button. From there, you'll see all public multiplayer games. Click on a game, and then select "Connect" to jump right in.

Sharing games

When creating a server, you'll see the option to add it to the Server Browser. You can also set a custom name for the game if you want.

If you're the party leader or lobby owner, you can control these settings from the Gameplay Modifiers panel as well. This is located on the left side of the lobby.

If you share your game on the Server Browser, anyone will be able to join! Your server code will be publicly visible on the site (https://bssb.app) as well.

Custom Songs

Want to play Custom Songs in Beat Saber Multiplayer? Here's what you'll need:

  • A modded copy of Beat Saber 1.22+
  • MultiplayerCore: This mod makes multiplayer modding possible, and makes custom songs work.
  • BeatTogether: BeatTogether provides multiplayer servers that allow modded content to work.

The Server Browser mod isn't required for custom songs, but it's here to help you find multiplayer lobbies.

The MultiplayerExtensions mod adds additional multiplayer features and is recommended but not required anymore.

Here's some important things you should know:

  • Official servers do NOT allow Custom Songs at all; it doesn't matter what mods you have.
  • The BeatTogether mod will let you choose which master server to play on. Make sure you choose BeatTogether or another modded master server if you want to play custom songs!

If you need more help, you can ask in the BeatTogether Discord (#help).

Cross-play

Beat Saber has enabled cross-play for all platforms on official servers. Unofficial servers like BeatTogether always allow cross play. You'll encounter both Steam and Oculus players when you play.

Please note that different versions of Beat Saber may not be compatible. Make sure everyone is on the same game version for the best experience.

Reporting issues

If you have any issues with the Server Browser mod itself, please report them via GitHub:

https://github.com/roydejong/BeatSaberServerBrowser/issues

beatsaberserverbrowser's People

Contributors

hpenney2 avatar peddermaster2 avatar roydejong avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

beatsaberserverbrowser's Issues

Beat Saber 1.18.0

Beat Saber 1.18.0 was released.

It doesn't contain any multiplayer changes, and the mod seems to work fine at its core.

BSML broke due to a change in the level selection UI. Need to wait for BSML updates / general mod availability & update manifest.

Keep-alive for lobbies

Currently games fall off the server browser if there hasn't been any activity for over 10 minutes. This is to prevent games getting stuck on there when the game was improperly closed.
(Activity meaning any actual state changes like game start/stop, player connect/disconnect, etc.)

This is fine for the most part, but in cases where you're waiting in a lobby for a while or playing a really long song it could cause your server to disappear even though you're still active.

It would be good to periodically force an update to keep the game visible.

Pitch Black Lobby

I'm on the 2020 Valve Index with Beat Saber and all required mods (mapping extensions, core mods, etc.) reinstalled today. I tried joining numerous steam modded servers and found that except for my Valve floor bounds, the screen was entirely black. Menu options seemed to exist since waving the controller around caused it to vibrate over invisible buttons. The system button on the controller works and causes the Valve menu to visibly pop up. Any ideas for a potential fix? Btw, I'm left-handed, if that helps. Also, making my own server worked, though no one joined. Computer: Dell Alienware M17 RTX 2070 Super 8GB)
plugins
bottom
top

[v1-rewrite] 1.19.1 (beta) support

basic updates are done.

official server architecture has changed quite a bit and will need to be looked at.

more testing and research needed

Announce Toggle turns itself off

If you, at any point, turn the share button off from the in-lobby modifiers panel, afterwards the Create Server dialog gets desynced. It will turn off the toggle when you open the menu (unless you do it from within the browser).

BeatMods rejection

ServerBrowser was rejected from BeatMods for now. This is for the latest release (v0.1.1).

Server Browser was denied on BeatMods- theres absolutely nothing stopping people from joining a custom lobby if they dont have the song or mpex, which soft locks the game if they do try

it makes it really easy for someone to just see something in the server browser, click a map expecting to join, and then the game just crashing

if approved there will be a lot of "i cant join half of the server browser games and my game crashes!" in pc-help

This is a totally valid point.

Issue #7 addressed this to an extent (prevent unmodded players from seeing modded lobbies), but this hasn't been shipped as a release yet.

BeatMods approval will take a while, and with cross-play mods on the horizon I think v0.2.0 should be the next version I try to submit as it will be relatively future-proof.

Checklist

  • Finish implementing v0.2.0 features (#11, #9, #5)
  • Testing scenarios for players without MpEx
  • Testing scenarios for unowned songs (e.g. official DLC song in progress)
  • Testing with cross-play mods / master server switching
  • Ship v0.2.0

Feature: Join notifications

Interesting discussion on the BSMG Discord:

ECrusher:

Plus you have to stay in the room if you make it, so probably a lot of people don't want to wait for players.
But I just made a room that sounded inviting and chilled till people showed up
That's one thing about this mod that I'm not sure could be fixed. I think you can play songs while you wait, but there's no way to tell if people joined so you can quit and start playing with them.
Would be cool to get like an alert or something if someone leaves/joins a room

I think this is a solid idea worth looking into, as it would help a lot with the lobby experience (waiting for players).

Need to determine whether it's possible (UI wise), and if so, should be implemented with a toggle setting somewhere.

"Connection failed" UI can get stuck

Repro steps

  1. Open server browser
  2. Try to join a game that is full or otherwise unavailable
  3. Retry connection
  4. Back to browser
  5. Click "back" button in browser
  6. You are now stuck

image

[v1-rewrite] New UI: Detail view

TODO

  • New data model
  • Loading / idle states
  • Server status / level bar
  • Player count
  • Details (tab)
  • Player list (tab)
  • Level history (tab)
  • Connect button (trigger)

WIP

image

Beat Saber 1.16.0 / 1.16.1

Beat Saber x Interscope update (v1.16.0) released today, and mods are not compatible.

This issue is to track any outstanding issues & changes that need to be made.

  • General: Need to wait for core mods to be updated
  • Fix needed: Certificate patch is broken due to code change (used for BeatTogether compatibility)
  • certificate patch was moved, patch updated in commit 77b8761
  • Fix needed: Textures aren't loading correctly (floating notifications, create server name pencil icon) - possibly BSML
  • was related to harmony patches failing, causing the textures to never be loaded
  • Look into: Why are BeatTogether master server connections failing?
  • protocol version changed (max protocol version = 3), bt devs are aware, minor fix

API usage

Hey man, good work on this plugin!!

I'm a Quest 2 user and just found that Beat together mod is available for everyone, but Quest users cannot browse the lobbies on the beat saber app itself. The code is easy to read and the JSON API could be useful for a CLI program to push the server code to the quest via ADB (still looking at how, and if beat saber app allows for custom launch intents or clipboard pasting). Is it OK if I use the https://bssb.app/api API for my own scripts? Thanks!

Custom game names are locked to "Quick Play Lobby" sometimes

After joining a Quick Play game, and I think in particular if your quick play join failed, the game name gets set and locked automatically.

I think this behavior should just be removed from the mod; let the server deal with setting names automatically.

Support host migration

Host migrations are not properly supported right now.

If the party leader leaves a multiplayer lobby, and you become the new party leader, the UI does not acknowledge this. You are unable to announce the lobby, even if it previously was announced, or you try to flip the switch.

MultiplayerExtensions not detected

Since installing multiplayer extensions 0.4.1, when I open server browser, it now says "multiplayer extensions not detected, hiding blablabla". I'm not really sure what's wrong, it doesn't show any errors in the log file, and I see MultiplayerExtension logs also that seem to indicate it's loading. Any ideas?

Beat Saber 1.13.2

Beat Saber has released an update to all platforms today, including some changes to multiplayer (visual at least).

Testing and debugging needed to make sure everything is good.

Settings tab is visible in Solo / Offline play

The "Server Browser" gameplay settings tab shows up in offline play, even though it doesn't work there.

BSML has functions for adding and removing gameplay tabs, but I haven't been able to conditionally hide the tab outside of multiplayer without causing issues.

This might be a current limitation of BSML, but it might be worth digging a bit deeper and trying to find a solution.

Note that MultiplayerExtensions has the same issue right now.

Browser: Filter full games / filter games in progress

It would be nice to have some extra filter options:

  • Filter out full servers
  • Filter out games in progress
  • Filter out modded games (MultiplayerExtensions)

I think it would be good to add these as toggle buttons in the keyboard modal, similar to how BeatSaverDownloader does this for filtering autogenerated songs.

This is low priority and becomes especially useful if the mod sees a lot of use, so we'll see how important this becomes down the line.

Master Server switching, preparation

Background

There are some mods in development currently that will make it possible to use unofficial Master Servers for Beat Saber multiplayer -- essentially private servers that enable things like cross-play and custom matchmaking.

How this affects the mod

Server Browser uses "Server Codes" to connect games, which won't work if the match was created on a different master server. Therefore, we need to be aware which master server was used by the host and:

  1. add filtering (only show games on your master server); and/or
  2. support automatic master switching (i.e. we'll change your master server to the one used by the game's host so you can be connected, and switch back after the match).

Also, for the good news, we can disable platform filtering for master servers that support cross-play (presumably all unofficial servers).

How this affects the wider player base

When multiple master servers are out there, as well as the official servers, the risk is fragmenting the player base. I think Server Browser can help bridge the gap by allow you to discover and connect matches across different master servers.

Zingabopp has set up a central repository for future master servers (empty at the time of writing):
https://github.com/Zingabopp/BeatSaberMultiplayerServerRepo/blob/master/MasterServers.json

Stuff to research

Some early things to research in preparation:

  • How can we detect the current master server?
  • How can we change the current master server?
  • Can we safely swap master servers at runtime without things breaking?

Beat Saber 1.13

Beat Saber 1.13 released today, and contains some changes that interfere with mods.

Need to test, review, and make changes as neccessary.

Ideally I want to release v0.2.0 ASAP as it contains some other important updates as well.

Filtering: Exclude modded lobbies for unmodded players

There's no reason to display modded lobbies to users who can't play in them, so let's hide them by default.

  • Detect whether local player is modded (without them having to join or host anything)
  • Ask server to exclude modded lobbies if user is unmodded
  • Show some type of UI hint suggesting they might have more luck if they get MultiplayerExtensions

Friends system / social features

I want to add a view controller to the left side of the Server Browser flow coordinator that lets you use social features, so you can easily join players' lobbies.

This would involve:

  • Friends list (from Steam / Oculus or completely seperate?)
  • Friend lobby list
  • Privacy options (set game to "Public", "Private" or "Friends only")

Beat Saber 1.19.0 support

Beat Saber 1.19.0 released today, adding the Lady Gaga DLC, as well as various internal changes including to multiplayer.

The impact on this mod shouldn't be too big; but we need core mods to be updated first, and should carefully review the game code changes to multiplayer.

Backing out of rich presence join can cause UI softlock

Repro steps

  1. Accept a rich presence invite (via Discord or Steam)
  2. After the UI switches to the server browser, but before it goes to lobby, press "back" button in the UI
  3. You are now stuck in black screen (game throws UI nullref exception)

Underlying cause

This is due to how the UI is handled before going into a lobby; the game expects at least one view controller to be stacked on top of the mode selection. If that's not the case, the UI breaks.

[CRITICAL @ 20:30:47 | UnityEngine] ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.
[CRITICAL @ 20:30:47 | UnityEngine] Parameter name: index
[CRITICAL @ 20:30:47 | UnityEngine] System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 20:30:47 | UnityEngine] System.ThrowHelper.ThrowArgumentOutOfRangeException () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 20:30:47 | UnityEngine] HMUI.FlowCoordinator.PresentFlowCoordinator (HMUI.FlowCoordinator flowCoordinator, System.Action finishedCallback, HMUI.ViewController+AnimationDirection animationDirection, System.Boolean immediately, System.Boolean replaceTopViewController) (at <4ed6ccd55f634459bd4b39b724b413c6>:0)
[CRITICAL @ 20:30:47 | UnityEngine] MultiplayerModeSelectionFlowCoordinator.<ResolveAndPresentNextFlowCoordinator>b__50_0 () (at <1307c473efb64193ac77f69250cf4916>:0)
[CRITICAL @ 20:30:47 | UnityEngine] FadeInOutController+<Fade>d__15.MoveNext () (at <09a448c281024307b38abd59cf7acfa0>:0)
[CRITICAL @ 20:30:47 | UnityEngine] UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <451019b49f1347529b43a32c5de769af>:0)

Release for 1.18.x / 1.19.x

The server browser is functionally ready to release, and I'm satisfied things are stable for how multiplayer works since 1.16.3.

I'm waiting for BeatTogether and MultiplayerExtensions to be out of testing and publicly released first.

Beat Saber 1.16.3 / 1.16.4 support

There's an upcoming build of Beat Saber (v1.16.3) that fundamentally changes how multiplayer works, the mod needs to be updated to work. The impact for us is relatively low, but preparation is needed.

  • Review and update patches as needed for v1.16.3
  • Review and test behavior of dedicated server games
  • Review and test behavior of quick play games
  • Explore option of querying public user servers from master

Beat Saber 1.13.4

The game received an update to v1.13.4 today, which includes some multiplayer changes.

Need to check what changes, if any, need to be made to the mod.

Host migration event doesn't always trigger

Sometimes the host migration doesn't trigger, particularly if you join at an awkward moment; happened to me on scene transition between gameplay and lobby.

Low priority, rare issue.

Filter by server type

Summary

The Server Browser UI should add an option to filter by server type, so that players choose what they want to see. In particular, this will be helpful to filter out official games or Quick Play games as they may not always be relevant.

This will require work on both the API and Mod side.

UI

Ideally, this would be a number of checkmarks that can be added/removed freely to create your own filter set. Your selection would be stored in the mod's preferences.

The actual options depend on how MultiplayerExtensions and BeatTogether end up working in the future, but there will be several distinct server types:

  • Official Quick Play (unmodded, no customers)
  • Official Custom (possibly unmodded? depends on MpEx)
  • Modded Quick Play (BeatTogether Quick Play with Customs)
  • Modded Custom (BeatTogethether Dedis with Customs)
  • Private servers (maybe, for special stuff like BeatDedi, possibly masterserverless)

Platform detection is needed

Right now the mod is blissfully ignorant when it comes to the cross-play situation.

We need to log whether the user is a Steam or Oculus user, and only show matches relevant to them in the browser.

Quick Play support

It's possible to add official Quick Play servers to the Server Browser.

I have a working prototype and am working on this under on the quickplay branch.

How it would work

  • Any player in a quick play lobby can choose to share it from the mod panel under Modifiers.
  • Rather than sharing a server code, the connection would happen by passing the host / server secret during the Matchmaking process.
  • The Quick Play lobby is shown in the browser as long as at least one Server Browser user is sharing it.

Task list

Core

  • Update data model on API to include server type and secret
  • Support sharing Quick Play lobbies
  • Support connecting to Quick Play lobbies

Integration

  • Browser/API: Allow users to filter out Quick Play lobbies
  • API: Handle multiple users potentially announcing the same game (merge)
  • Detect and/or prevent connection failures
    • If we can't connect by secret for any reason, matchmaking will put us in a random Quickplay server. We should detect the secret not matching and abort the connection / show an error.
  • Communicate Quick Play lobby difficulty correctly
    • The browser doesn't show the correct difficulty right now
    • The mod currently passes SongPackMask.All during the matchmaking process which may break things(?)
  • API: Don't send Quick Play games to Server Browser <0.7.0

UX: Users don't understand what master server they're creating a server on

It seems to be unclear to users how master servers work or what master server they have selected.

When players click "Create server" in the Server Browser UI, they always expect it to go to BeatTogether, and get confused if it ends up creating a match on official servers.

This should be improved in the UI somewhat.

Possible solution:

  • Show / explain which master server they're using in the "create server" UI

Exploration: Social features

It could be interesting exploring more social features for multiplayer.

Some notes and thoughts I've had, partially based on some discussions I've seen on the topic:

Add players as friends?

When a server goes offline or people leave, you may never see those players again. There's no way to add them as friends in the lobby, and there's no way to see players you've recently encountered.

It could be interesting adding a friend system but that actually presents some technical challenges, not in the least because I'm not sure if multiplayer data even gives us their Steam ID etc right now. If not, that makes this way more complicated (we'd need to extend multiplayer or use the mod's API server) and less useful (only mod users would be able to connect to each other).

Joining friends' games

If we can integrate friends, it would be cool to see their status ingame, with an option to join their game if possible.

Stability issues on 1.18

Now that mods are live for 1.17 / 1.18, there seem to be some stability issues.

It's tricky to figure out in which mod or part the problem lies (ServerBrowser, MpEx/MqEx, BeatTogether?), but I just wanted to track things that I've noticed so far:

  • General: Games seem to drop off the server browser very quickly, even when they're still seemingly live - why?
  • General: Lobby stability issues - can't start new song after another one completes? (Start button is blocked)
  • Data: Player list often disappears on bssb.app, probably due to server resetting on host migrations?
  • Host migrations: Sometimes Server Browser isn't aware local player is party leader and game drops off?

Puts me into spectator mode

Sometimes when I join a match in a modded lobby it puts me into spectator mode and sometimes it says "I don't own the song"

ServerBrowser v0.7.4 doesn't show server code in multi menu

When you create a modded server for multi on beat together and have server browser enabled when you create it the server code isn't shown in the multiplayer menu to share out.

If you create the server and don't share the server on server browser the code will show up... you then have to enable server browser within the multiplayer menu to get it to work

Feature: Native UI

The game has a native UI for a server browser. It's marked "dev" so unsure if they're working on this, or whether it's for developer use only, but perhaps it's worth exploring using this rather than a custom BSML UI.

image

Support Beat Saber v1.16.3 โ†” v1.17.1

Beat Saber 1.16.3 changed how multiplayer works fundamentally. Since then, we've also seen minor releases (1.16.3, 1.17.0 and 1.17.1).

This issue is here to track any outstanding issues to fully support the latest version of the game.


Core

  • Host migrations: Since 1.16.3 a Host Migration can occur if the party leader leaves; the mod needs to be aware of this change and gracefully move the announcer responsibilities to the new party leader.
  • Multiple announcers: The mod needs to support all dedicated server types including Quick Play; for these games multiple announcers can exist in one game, this needs to be handled properly by the mod and server
  • Announce server type: The mod needs to properly announce what type of server it is on since there's a much more diverse mix now -- quickplay, dedicated, beattogether, beatdedi, etc

Bugs and tweaks

  • Quick Play lobby: detect difficulty and server settings
  • When an announcer leaves the lobby, they send an unnecessary announce with "None" lobby state

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.