Giter Club home page Giter Club logo

beatsaber-http-status's Introduction

Beat Saber HTTP Status

This plugin exposes information about the current game status, live over a WebSocket and over HTTP. It can be used to build custom stream overlays or track player performance by third party programs.

Installation

Recommended (using a mod manager)

You can install Beat Saber HTTP Status by using one of the mod installers listed here. Follow the steps required to run the program of your choice, then in the mods section find "HTTP Status" and install it. This will automatically install and keep everything you need up to date.

Next you will need to get additional software that uses this plugin. This plugin does nothing useful on its own; it simply exposes information for other programs to use.

Manual

  1. Install BSIPA (BSMG guide).

  2. Download the latest release from the releases page.

  3. Extract the zip into your Beat Saber directory.

  4. Download and extract the following plugins and their dependencies:

  5. Get additional software that makes use of this plugin. This mod does nothing on its own; it simply exposes information for other programs to use.

Developers

Using HTTP Status

Protocol documentation can be found in protocol.md.

Contributing to HTTP Status

Before opening a pull request, please read the contributing guide.

To build this project you will need to create a BeatSaberHTTPStatus/BeatSaberHTTPStatusPlugin.csproj.user file specifying where the game is located on your disk:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <!-- Change this path if necessary. Make sure it ends with a backslash. -->
    <GameDirPath>C:\Program Files\Steam\steamapps\common\Beat Saber\</GameDirPath>
  </PropertyGroup>
</Project>

Alternatively you can provide the game DLLs in the libs/beatsaber directory using the standard Beat Saber directory structure. For a full list see the project file.

The following properties can be specified either in the .csproj.user file or through the command line (/p:<name>=<value>):

  • GameDirPath: Path ending with a backslash pointing to the Beat Saber directory. Used to locate required game DLLs.

  • OutputZip = true/false: Enable/disable generating the .zip file. Can be used to get a zip for the Debug configuration.

  • CopyToPlugins = true/false: Enable/disable copying of HTTP Status DLLs to the Beat Saber installation. Depends on GameDirPath.

Credits

xyonico for the Beat Saber Discord Presence plugin, on which this plugin was initially based.

sta for the websocket-sharp library.

Maxaxik for testing and helping with research.

beatsaber-http-status's People

Contributors

alipoodle avatar erisapps avatar lrns123 avatar macil avatar monkeymanboy avatar opl- avatar protected avatar rynan4818 avatar sarayalth avatar zingabopp 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

beatsaber-http-status's Issues

Some maps contain unnecessary characters in songHash

Current behavior

In some scores, the songHash and levelId of the beatmap contains unnecessary characters such as the song name.

Example.
https://beatsaver.com/beatmap/858

"songHash": "884E2D9A82F5675DE7C3FA35199EBF24C4F15D23_858 (citrus - mystikmol)",
"levelId": "custom_level_884E2D9A82F5675DE7C3FA35199EBF24C4F15D23_858 (citrus - mystikmol)",

I believe this is a higher level mod issue than the HTTPStatus issue.
However, I'm not sure what the problem is, to my ability, so I've reported it here.

I found this problem when I was trying to add the bsr display to beat-saber-overlay.
On the overlay side, I solved the problem by taking out only the first 40 characters.
Reselim/beat-saber-overlay#15

I'm using a translation tool because I'm not very good at English.
Please note that there are some oddities in the text.

Environment

BeatSaber version: 1.10.0
HTTP Status version: 1.11.0
Platform: (Vive, Oculus, other?) Vive pro

I created a simple lifx integration

^title says it all. Inspired by the hue integration listed on here, but mine is a lot more primitive, this is my first attempt at doing anything like this but it seems to work perfectly for me, like I said it's still really basic though, you can include it in your list if you want, here is the link:

https://github.com/tchesket/lifx-saber

Insufficient data for determining note slice position

Feature request

It doesn't seem like NoteCutObject contains sufficient information for determining the position of the slice on the sliced note. There are two key issues:

  • cutDistanceToCenter always seems to return a positive (absolute) distance, from my experiments so far, and
  • cutPoint seems to be absolute (or at least not relative to the center of the note).

So while we can calculate the angle of the cut and how offset it is from the center of the note, there is no way to tell if it's to the "left" or to the "right" of the center of the note. Other mod authors retrieve the position of the note in order to calculate the local position of the cutPoint, for example

https://github.com/m1el/BeatSaber-SliceVisualizer/blob/master/Core/NsvSlicedBlock.cs#L280

As long as the value of cutPoint is included unmodified, I propose adding a notePosition field to NoteCutObject when the note was not missed.

Alternatively the cutPoint could be transformed server-side (since we have no other use for the note position), and/or a boolean "cutLeftOfCenter" could be included, which would be enough.

Motivation

I want to draw the slice on the note!

currentMaxScore is not updated when notes cut is missed.

Current behavior

The currentMaxScore, which is required for calculating accuracy, is only updated in scoreChanged events.
If you miss a notes cut, there will be a difference between the accuracy displayed in the in-game UI and the accuracy displayed in the overlay.
If a miss is made at the end of the game, the game ends without updating the accuracy, causing problems when using the overlay display as a record.

Expected behavior

I think it is necessary to update the currentMaxScore on noteMissed events as well, or at least send the data with updated currentMaxScore at the end of the game.

BeatSaber version: 1.15.0
HTTP Status version: 1.15.1

Include note cut timestamp in note cut object

Feature request

It would be nice if the note cut object contained the timestamp of the moment when the note is cut (or the cut is finalized if applicable) in milliseconds or better.

Motivation

Javascript is single-threated, so if you're making a webpage style widget and you want to measure time on your side using timers of offsets you are introducing some degree of error and unnecessary complexity. You also have to deal with pause on your side, which seems redundant.

Endless Mode Plugin And This Plugin

Currently, Endless Mode (https://github.com/MatrikMoon/EndlessMode) and this plugin don't quite work together to produce a satisfying result. When playing a song in Endless Mode, and it switches to a new song, the result is that the name of the song and some other details are not changed (or, they don't appear to be). This leads to incorrect details being displayed in overlays in OBS (and other apps). This appears to be because the endless mode plugin is not triggering a new scene change event, and is instead clearing out the old map data and inserting the new map data.

I have tried hooking into the event that the Endless mode plugin provides, but as it is not actually switching scenes there are (ofcourse) some notable problems. I found that note blocks become uninteractable using this approach after the song switched. Clearly, I caused this issue, and can revert the changes (and install both plugins again).

If possible, we may need to have some agreed way to pull from the game that the song has changed that can work for both projects. Not entirely sure where the best place for that is at the moment. Just noting this down here so that either someone else can think about it, or so that I can come back to this later.

Songs stop loading after playing one song

Reproduction steps

  1. Start the game
  2. Play one song to completion (with nothing using HTTP Status)
  3. Return to menu
  4. Select another song

Current behavior

The other song won't load. The loading icon spins forever

Environment

BeatSaber version: Tested with 1.8.0, 1.9.1, 1.10.0
HTTP Status version: 1.10.0
Platform: Vive, Linux with Proton 4.11

Note

I only landed on HTTP Status through trial and error. I noticed this problem after updating to beat saber 1.10. I tried multiple things to troubleshot: downgrading the game, removing songs, removing plugins, etc. After removing HTTP Status, the problem seems to go away.

[Bug] Score not calculating properly

Http-Status either isn't counting the hit (or multiplier increase) from the first note, or it's delaying it until the next note is hit. You can see in the video the combo is incremented, but the score remains at 0 after the first hit. After the 2nd hit, the score seems to be using the first hit's score. The gap gets worse as the song goes on, by the end there's a 2,080 point difference.
Video

Sabers do not collide with blocks when installed on Beat Saber v0.12.1b1

When I installed the latest release of HTTPS Status on the current beta branch (v0.12.1b1) I am unable to hit any note blocks in game. The saber simply passes through the note, and it is counted as a miss.

You may already be aware of this issue, but I haven't seen it posted here.

Steps to reproduce:

  1. Switch to the steam v0.12.1b1 beta branch of Beat Saber
  2. Launch Beat Saber once, then close it.
  3. Run the mod manager and install the SongLoaderPlugin to patch the game
  4. Delete everything in the Plugins folder
  5. Place the latest release of HTTPS Status dll and the websocket dll into the Plugins folder
  6. Launch Beat Saber and try to play a song.

Edit: Removed instructions to install beta songloader plugin. The bug still occurs when HTTPS Status is the only plugin

Event ObstacleEnter/Exit not fired

Hello,

I don't know if you work for the 1.16.2 version, but Event ObstacleEnter & Exit don't work at this time :)

(I use these for calculate the HP bar so without them that a bit "not working")
(I cant reopen the old issue so, new one)

Reproducing Step

I confirmed this by doing a console.log(event) directly and play fitbit map and go into walls.

Environment

BeatSaber version: 1.16.2
HTTP Status version: lastest (1.16.1)
Platform: Steam BeatSaber with Index

[Feature Request] Output lighting event data

Output the data of each of the lighting events, such as the

  • background colors
  • laser colors
  • laser rotation speed
  • ring rotation speed
  • etc

It could be interesting to sync these lighting events to elements within the overlay.

Game occasionally freezing/lagging

I have received 3 reports of game occasionally hanging while using the plugin. Here's a summary of those reports:

  • Amanatsu says their game keeps freezing up every few minutes. They provided this clip as an example. Reselim and I have analyzed a part of the associated VOD and found lag happening at these timestamps (this list is not conclusive): 0:40:06-0:40:09, 2:33:36-2:33:40, 2:39:26-2:39:29, 2:43:14-2:43:17 and 2:46:41-2:46:45. During all of those the music kept playing, but no user inputs were being processed. At 2:33:40 we can see the pause menu being triggered after the game unfroze. The game also doesn't trigger the fail pitch change until it unfreezes. This suggests that the Update methods aren't being called while the game is frozen. Additionally it's worth noting that there doesn't appear to be a clear pattern for when the lag occurs (if you can spot one, please do comment). Amanatsu says that the freezes started after they installed the plugin.

  • souk was mentioned by Amanatsu in a Discord message in which they say "souk and I are both experiencing HMD freezing while using the plugin/game freezes for several seconds at a time, then resutms but you fail immediately as you've missed a bunch of notes". According to Amanatsu, souk started experiencing the freezing after installing the plugin. I have not established contact with souk so far.

  • Reselim says they experienced the game freezing up during one session. They described it as "minor lag issues for a single session".

My only suspected reason for such freezes was the websocket library the plugin uses, however after analyzing it, it appears to be using asynchronous methods when managing connections.

Due to lack of any solid evidence that the lag was caused by the plugin (can't reproduce the issue reliably, only appears to affect 2 users) and lack of any leads as to what may be causing the freezing, I will not be attempting to fix this issue for now. However, if you are experiencing or know someone who is experiencing it, I would like you to comment on this issue or ask them to do so.

Please include this information in your comment:

  • does the issue happen: every session, only some sessions, only once...
  • how often does the issue happen: every few minutes, once an hour...
  • what plugins you have installed
  • if the issue happens without the HTTP Status plugin
  • if you were streaming/recording when the issue happened
  • if the issue happens when you're not streaming/recording

Deprecated beatmap events link

The current link to the beatmap events reference has moved to it own site.
However, there doesn't seem to be an accurate description there, either. This explains the different areas, but not the specific numbers and their types used in the json data.
Either a new link, or a direct explanation would be much appreciated :)

noteFullyCut finalScore not calculated correctly

Current behavior

the .noteCut.FinalScore in noteFullyCut events don't match the in-game final score, specifically the extra 15 points from cut precision. The maximum finalScore observed is 100, despite scores over 100 while in game. The swingRating field from the noteCut struct is also missing entirely, might be related.

FWIW, .status.performance.lastNoteScore is also always 0, on the same events.

Expected behavior

.finalScore should match what's shown in the game's hit score indicators. .swingRating would be useful to have as well as lastNoteScore.

Reproduction steps

  1. Run beat saber with mod installed
  2. Run websocat ws://127.0.0.1:6557/socket | jq --unbuffered 'select(.event=="NoteFullyCut") | .noteCut.finalScore' -r | tee -a scores.log to see plugin output
  3. Play song, observe scores from output don't match in-game score.

Environment

BeatSaber version: 1.7.0
HTTP Status version: 1.9.1
Platform: SteamVR/Index

Value of `beatmap.difficulty` does not match documentation

As noted in #68, the beatmap.difficulty property stores the localized difficulty name instead of the intended name of the BeatmapDifficulty enum's value.

I believe the best fix here would be to introduce a new property in the beatmap object which would expose the intended string and update the documentation accordingly. Additionally, the existing beatmap.difficulty property can later be used to expose the custom difficulty name set by a mapper, to match the name visible in the beatmap selection menu.

status.json can only be requested once

Current behavior

When trying to request the status.json, HTTP-Status will only return the json once. Every subsequent request will either reset the connection or return an empty response. (different browsers show different errors)
HTTP-Status will only return the status.json again, once BeatSaber was closed and has been reopened.

Expected behavior

status.json should be returned no matter how often it is requested in one session.

Reproduction steps

  1. Send a GET request on localhost:6557/status.json
  2. Send another GET request on localhost:6557/status.json

Environment

BeatSaber version: 1.14.0
HTTP Status version: 1.15.0
Platform: Index, Windows 10 20H2

microstutters with http status installed

I've used http status for a long time but since the most recent camelia 3pack release of beat saber I've gotten microstutters about every 90 seconds on every map. Removing http status plugin only resolved this issue 100%.
I've talked to several other people who use it and had this issue they confirmed removing http status plugin resolved the issue.

Events obstacleEnter & obstacleExit not triggered

Hello,

Reproduction steps

I've an eventListener that capture each event in the game, but in-game when i enter a wall (and leave), none of these events are triggered.

I've already see the issue in a anterior version but that's fixed. #6

Environment

BeatSaber version: 1.9.1
HTTP Status version: 1.10.0
Platform: Steam BeatSaber with Oculus

SocketException (10013): An attempt was made to access a socket in a way forbidden by its access permissions

Current behavior

Connecting to 127.0.0.1:6557/status.json results connection refused.

_latest.log contained the following.

[INFO @ 01:14:23 | Beat Saber HTTP Status] Starting HTTP server on port 6557
[ERROR @ 01:14:23 | IPA] Beat Saber HTTP Status OnEnable: System.InvalidOperationException: The underlying listener has failed to start. ---> System.Net.Sockets.SocketException: 액세스 권한에 의해 숨겨진 소켓에 액세스를 시도했습니다.
[ERROR @ 01:14:23 | IPA]   at System.Net.Sockets.Socket.Bind (System.Net.EndPoint localEP) [0x00043] in <ef151b6abb5d474cb2c1cb8906a8b5a4>:0 
[ERROR @ 01:14:23 | IPA]   at WebSocketSharp.Net.EndPointListener..ctor (System.Net.IPEndPoint endpoint, System.Boolean secure, System.String certificateFolderPath, WebSocketSharp.Net.ServerSslConfiguration sslConfig, System.Boolean reuseAddress) [0x000b6] in <7a2bdf4fe6004810ba771c682597b1d8>:0 
[ERROR @ 01:14:23 | IPA]   at WebSocketSharp.Net.EndPointManager.addPrefix (System.String uriPrefix, WebSocketSharp.Net.HttpListener listener) [0x00130] in <7a2bdf4fe6004810ba771c682597b1d8>:0 
[ERROR @ 01:14:23 | IPA]   at WebSocketSharp.Net.EndPointManager.AddListener (WebSocketSharp.Net.HttpListener listener) [0x00094] in <7a2bdf4fe6004810ba771c682597b1d8>:0 
[ERROR @ 01:14:23 | IPA]   at WebSocketSharp.Net.HttpListener.Start () [0x00016] in <7a2bdf4fe6004810ba771c682597b1d8>:0 
[ERROR @ 01:14:23 | IPA]   at WebSocketSharp.Server.HttpServer.startReceiving () [0x00002] in <7a2bdf4fe6004810ba771c682597b1d8>:0 
[ERROR @ 01:14:23 | IPA]    --- End of inner exception stack trace ---
[ERROR @ 01:14:23 | IPA]   at WebSocketSharp.Server.HttpServer.startReceiving () [0x00020] in <7a2bdf4fe6004810ba771c682597b1d8>:0 
[ERROR @ 01:14:23 | IPA]   at WebSocketSharp.Server.HttpServer.start () [0x000d3] in <7a2bdf4fe6004810ba771c682597b1d8>:0 
[ERROR @ 01:14:23 | IPA]   at WebSocketSharp.Server.HttpServer.Start () [0x00023] in <7a2bdf4fe6004810ba771c682597b1d8>:0 
[ERROR @ 01:14:23 | IPA]   at BeatSaberHTTPStatus.HTTPServer.InitServer () [0x00063] in <3d3adfc0a3df41e5bf686d95b6b4e046>:0 
[ERROR @ 01:14:23 | IPA]   at BeatSaberHTTPStatus.Plugin.OnApplicationStart () [0x00024] in <3d3adfc0a3df41e5bf686d95b6b4e046>:0 
[ERROR @ 01:14:23 | IPA]   at (wrapper dynamic-method) System.Object.lambda_method(System.Runtime.CompilerServices.Closure,object)
[ERROR @ 01:14:23 | IPA]   at IPA.Loader.PluginExecutor.Enable () [0x0000c] in <763a0cb55a5e418c81b67cf4601dddbb>:0 
[ERROR @ 01:14:23 | IPA]   at IPA.Loader.Composite.CompositeBSPlugin+<>c.<OnEnable>b__4_0 (IPA.Loader.PluginExecutor plugin) [0x00000] in <763a0cb55a5e418c81b67cf4601dddbb>:0 
[ERROR @ 01:14:23 | IPA]   at IPA.Loader.Composite.CompositeBSPlugin.Invoke (IPA.Loader.Composite.CompositeBSPlugin+CompositeCall callback, System.String method) [0x00018] in <763a0cb55a5e418c81b67cf4601dddbb>:0 

Expected behavior

I should receive any json.

Reproduction steps

  1. Install this mod by ModAssistant.
  2. Start beat saber.
  3. Open http://127.0.0.1/status.json in Google Chrome.

Environment

OS: Microsoft Windows 10 Pro 10.0.19043 N/A Build 19043
BeatSaber version: 1.18.1
HTTP Status version: 1.19.1
Platform: Oculus Quest 2

Note spawning event

Feature request

Event that fires when a note (or mine) is added to the scene, with its side, type, position, rotation at least.

Motivation

I'm working on a note history display and showing notes before they are cut would make it much clearer.

Update mod for Beat Saber update 0.13

It looks like this mod can't be loaded on Beat Saber update 0.13 (the update that introduces the paid DLC)

Running diagnostics in Modsaber installer returns the following:

  │ [WARN] Could not load plugin BeatSaberHTTPStatus.Plugin in BeatSaberHTTPStatus.dll! System.TypeLoadException: Could not load type of field 'BeatSaberHTTPStatus.Plugin:levelSceneSetupData' (4) due to: Could not resolve type with token 0100002c (from typeref, class/assembly StandardLevelSceneSetupDataSO, Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null) assembly:Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null type:StandardLevelSceneSetupDataSO member:(null) signature:<none>
  │   at System.Reflection.MonoCMethod.InternalInvoke (System.Object obj, System.Object[] parameters) [0x00018] in <f2e6809acb14476a81f399aeb800f8f2>:0 
  │   at System.RuntimeType.CreateInstanceMono (System.Boolean nonPublic) [0x000a8] in <f2e6809acb14476a81f399aeb800f8f2>:0 
  │   at System.RuntimeType.CreateInstanceSlow (System.Boolean publicOnly, System.Boolean skipCheckThis, System.Boolean fillCache, System.Threading.StackCrawlMark& stackMark) [0x00009] in <f2e6809acb14476a81f399aeb800f8f2>:0 
  │   at System.RuntimeType.CreateInstanceDefaultCtor (System.Boolean publicOnly, System.Boolean skipCheckThis, System.Boolean fillCache, System.Threading.StackCrawlMark& stackMark) [0x00027] in <f2e6809acb14476a81f399aeb800f8f2>:0 
  │   at System.Activator.CreateInstance (System.Type type, System.Boolean nonPublic) [0x00020] in <f2e6809acb14476a81f399aeb800f8f2>:0 
  │   at System.Activator.CreateInstance (System.Type type) [0x00000] in <f2e6809acb14476a81f399aeb800f8f2>:0 
  │   at IllusionInjector.PluginManager.LoadPluginsFromFile (System.String file, System.String exeName) [0x00047] in <be160f5ca99440c98e1b1995202ab6fe>:0 
  │ Running on Unity 2018.2.14f1

Other mods for 0.13 work just fine, including beat saber utils. I'm reverting to 0.12.2 for now

Add http-status to new beatmods repository

Since modsaber.org has been shut down a new repository has been created in the form of beatmods.com.

However, http-status is still missing from that repository and might not be compatible yet with the new BSIPA and Beat Saber 0.13.2

"songStart" Event is not fired for certain Mod-Scores

Current behavior

Certain mod-scores don't trigger the song start event.
It is possible that this is an issue with Noodle Extensions, as I've only encountered the issue with Maps using this mod, but not all Noodle Extension scores are broken in this way.
Pretty much all NE-maps I've tried with a Laweless Difficulty did not trigger the event, but if my memory serves me right, there was one more map in my collection that had the same behavior without having a Laweless difficulty.

Expected behavior

Event songStart should be triggered for all songs when the user clicks on play.

Reproduction steps

  1. Install Noodle Extensions
  2. Download a Noodle Extension map that has a Laweless Difficulty (ex. "Up & Down" mapped by "thegoodboi": https://bsaber.com/songs/11cf8/)
  3. Observe the HTTP WebSocket
  4. Play the map

Environment

BeatSaber version: 1.14.0
HTTP Status version: 1.15.0 & 1.15.1
Platform: Index, Windows 10 20H2

Completely Broken.

Added both the HTTP and WS DLLs to the /plugins/ folder.
Node and my browser could not acsess it at all.

Fiddler 4 Log:
[Fiddler] The connection to 'localhost' failed. Error: ConnectionRefused (0x274d). System.Net.Sockets.SocketException No connection could be made because the target machine actively refused it 127.0.0.1:6557

Am I doing something wrong?

game.mode is broken

I could not find anywhere in the game code any properties that would allow me to read the current game modes for the game.mode property, so to not delay the release of the BS 0.12.x version I'm skipping it.

If anyone can figure out a way to get it, a comment on this issue or a PR would be appreciated.

Add the ability to get the background color used

Feature request

When playing the game, sometimes the whole background changes it's color (normaly from blue to red and vice versa). A request to get the background color change (and it's new color) would be really damn cool.

Motivation

When hosting a beat saber party at home, for example, you could hook this up to some LED's or use a Wifi to DMX-Bridge for stage lights. I know, that there is a implementation for philips hue, but they only change the color according to a note being sliced and not to the background color being changed.

Database recording function added version

Hi, I introduced it the other day in a pull request, but it's finally ready to be published on GitHub.
I've modded http-status to create a tool that stores game play information in a SQLite database.

https://github.com/rynan4818/beatsaber-http-status-db

We also created a tool that uses the recorded database to automatically isolate gameplay videos recorded in OBS Studio and others.

https://github.com/rynan4818/bs-movie-cut

I'm using a translation tool for English, so please bear with me if there are any quirks.
The documentation is in Japanese only.

[Feature Request] Get custom colors

It would be great if we could get the player chosen colors either in the status object, or better yet when the song starts with the colors for that level (taking into account the environment)

Menu event doesn't fire on the new release.

Current behavior

Menu event doesn't fire.

Expected behavior

Menu even should fire when leaving game to go to a menu.

Reproduction steps

  1. Finish song or fail song.
  2. See behavior reliant on menu event not work.

Solution

  1. Change overlay to use "finished" or "failed" events.

BeatSaber version: 1.16.1
HTTP Status version: 1.16.1
Platform: Index. LIV.

Doesn't work on 1.17

Current behavior

The mod doesn't work on 1.17

Expected behavior

Well, I guess it would be nice for it to be working)

Reproduction steps

  1. Launch game
  2. See no overlay

Environment

BeatSaber version: 1.17
HTTP Status version: 1.16.1
Platform: Steam, -vrmode oculus

Adding User Info

Would be nice to be able to get the user name / id / avatar (exposed by BS_Utils.Gameplay.GetUserInfo).

Could let people create generic integrations with ScoreSaber for example.

No gameplay events fire when viewing replays

Current behavior

Only seeing beatmapEvents firing when watching replays.

Expected behavior

Expecting noteCut and noteFullyCut events to fire when watching replays.

Reproduction steps

  1. Load a replay in-game from a ranked custom song on the ScoreSaber leaderboards.
  2. Print output of event listeners or etc, e.g.
ws.addEventListener("message", function(msg) {
	var data = JSON.parse(msg.data);
	var event = events[data.event];

	console.log(data.event);

	if(event) {
		event(data.status, data.time);
	}
});

Screenshot from 2021-04-27 08-48-57

Environment

BeatSaber version: 1.14.0
HTTP Status version: 1.15.1
Platform: Desktop

Events sending `beatmap` cause main thread to freeze on songs with large thumbnails

Starting, pausing, and resuming maps for beatmaps with large thumbnails results in a significant lag spike. Reportedly, an example of such a map is buck wild, with a 2500x2500 cover image.

This is most likely due to serialization of the beatmap.songCover property needing to escape the whole string every time.

Potential solutions

  1. Finally make use of the GameStatus object by creating a pool capable of creating a copy of the master on demand, and move JSON serialization off the main thread.
  2. Rescale the cover image to a maximum resolution. This could be a setting in case someone wants the highest resolution possible.
  3. Create a variant of the JSONString class which would cache the escaped string to prevent performing this task multiple times.

Environment

HTTP Status version: v1.19.1 and below

Could this ever work on the oculus quest?

I am new to modding but is this 100% pc only or could it also work on the oculus quest version of beatsaber?
So another app on the device could get events over localhost

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.