Giter Site home page Giter Site logo

beatleader-mod's Introduction

BeatLeader PC mod

An open-source leaderboard System for Beat Saber

cover

Usage

  • Download zip for your game version from the Releases and extract it to your BeatSaber directory
  • Make sure to install and update all required dependencies

Go to the https://beatleader.xyz/ to see your scores on the web

If you experience any issues, have any suggestions or bug reports - you can leave them in our Discord server

Dependencies

beatleader-mod's People

Contributors

burgerindividual avatar christoffyw avatar dizzyjune avatar erisapps avatar hardcpp avatar hermanest avatar hibit-at avatar invoxiplaygames avatar karghoff-e avatar kuurama avatar loloppe avatar meivyn avatar microcber avatar moddingpink avatar motzel avatar nsgolova avatar reezonate avatar sirspam avatar snowystars1 avatar speecil avatar tatenshi avatar uragirimono00 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

Watchers

 avatar  avatar  avatar  avatar  avatar

beatleader-mod's Issues

Replays dont show up on desktop

When I watch a beatleader replay, I can only see it in my headset. It's just black on the desktop.

Desktop.2023.01.16.-.11.46.32.01.mp4

BeatLeader happily accepts JDFixer "No Leaderboard" songs

Steps to reproduce:

1: Install BeatLeader and JDFixer.
2: Use JDFixer to change song NJS. (This option should disable score submission!)
3: Play song.

Expected behavior:
Song score is not recorded by BeatLeader.
Song score is not recorded by in-game high score.

Actual behavior:
Song score is submitted to BeatLeader (wrong behavior).
Score does not appear in in-game high score (right behavior).

Issue:
JDFixer lets the player change the JD and NJS but only the JD is supposed to be editable without disabling score submissions. Editing NJS normally disables submissions from being made.

Replay system doesn't work in VR

When I click to watch a replay the headset goes black and the replay loads up on the beat saber desktop window.
If I exit the replay on the desktop the headset stays black until I restart beat saber again.

Make Negative Modifiers Deduct Your Score in Golf Mode Instead of Disabling Score Submission

The title of this is pretty much self explanatory. I feel like each negative modifier should increase your accuracy in some way depending on what modifier is used.

I'm not too keen with NA getting this treatment as it's very easy to cheese and get a bad note cut score by slightly moving your saber. If it does then it should have a huge deduction from your score like +20% or +18%

Outdated version on BeatMods

The version available on BeatMods is outdated. It is still on version v0.5.4.

I don't know if this is the right place to report this but could not find any contact details for the uploader on BeatMods.

Replays with pro mode don't play

Upon opening a replay with PM modifier following stacktrace is being thrown:

[CRITICAL @ 05:32:24 | UnityEngine] FieldAccessException: Field `GameplayModifiers:_proMode' is inaccessible from method `BeatLeader.Utils.ReplayDataHelper/EditableModifiers:set_proMode (bool)'
[CRITICAL @ 05:32:24 | UnityEngine] BeatLeader.Utils.ReplayDataHelper.GetModifiersFromReplay (BeatLeader.Models.Replay replay) (at <076921e7a4104b9dba226bbec2a1c9a4>:0)
[CRITICAL @ 05:32:24 | UnityEngine] BeatLeader.Utils.ReplayDataHelper.CreateTransitionData (BeatLeader.Models.ReplayLaunchData launchData, PlayerDataModel playerModel) (at <076921e7a4104b9dba226bbec2a1c9a4>:0)
[CRITICAL @ 05:32:24 | UnityEngine] BeatLeader.Replayer.ReplayerLauncher+<StartReplayAsync>d__18.MoveNext () (at <076921e7a4104b9dba226bbec2a1c9a4>:0)
[CRITICAL @ 05:32:24 | UnityEngine] --- End of stack trace from previous location where exception was thrown ---
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] BeatLeader.Replayer.ReplayerLauncher+<StartReplayAsync>d__17.MoveNext () (at <076921e7a4104b9dba226bbec2a1c9a4>:0)
[CRITICAL @ 05:32:24 | UnityEngine] --- End of stack trace from previous location where exception was thrown ---
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter`1[TResult].GetResult () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] BeatLeader.Replayer.ReplayerMenuLoader+<StartReplayAsync>d__44.MoveNext () (at <076921e7a4104b9dba226bbec2a1c9a4>:0)
[CRITICAL @ 05:32:24 | UnityEngine] --- End of stack trace from previous location where exception was thrown ---
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.TaskAwaiter.GetResult () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] BeatLeader.Replayer.ReplayerMenuLoader+<StartReplayAsync>d__43.MoveNext () (at <076921e7a4104b9dba226bbec2a1c9a4>:0)
[CRITICAL @ 05:32:24 | UnityEngine] --- End of stack trace from previous location where exception was thrown ---
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_0 (System.Object state) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
[CRITICAL @ 05:32:24 | UnityEngine] UnityEngine.UnitySynchronizationContext+WorkRequest.Invoke () (at <451019b49f1347529b43a32c5de769af>:0)
[CRITICAL @ 05:32:24 | UnityEngine] UnityEngine.UnitySynchronizationContext:ExecuteTasks()

This is both on latest ci build and latest release, game version 1.27.

Exception with unity debug build

What I did

Beat saber: 1.25.1
BeatLeader: v0.5.0
with above setup I replaced the beat saber with debug build.

What I expected

Plain leaderboard

What I got

Additional context

_latest.log

Inconsistent handling of SS vs BL replays

I just tested the new replay feature and its pretty awesome, but I find some inconsistencies between the replay handling.

BeatLeader replays do not smooth at all, whereas the same map with the ScoreSaber replay does get smoothed by Camera2.

I can provide examples if necessary.

Edit: I'm reporting it here, since you bundle Camera2 in the release - and therefore think it's part of your responsibility to fix

[1.34.2] Unable to watch replays: stuck on "Loading replay data..."

As the title states, I'm running Beat Saber 1.34.2 and every time I try to watch a replay (either from the leaderboard on the right side when selecting a song, or from the BeatLeader saved replays menu on the left side of the main menu), the in-game UI appears to do nothing and the console says:

[INFO @ 18:12:51 | BeatLeader] Attempting to load replay:
[INFO @ 18:12:51 | BeatLeader] ModVersion: 0.9.4
[INFO @ 18:12:51 | BeatLeader] GameVersion: 1.34.2_7115288407
[INFO @ 18:12:51 | BeatLeader] Platform: steam
[INFO @ 18:12:51 | BeatLeader] PlayerID: 76561198963882706
[INFO @ 18:12:51 | BeatLeader] SongHash: E774B798DA2258D2FE017E84B79B9AD3A86162B9
[INFO @ 18:12:51 | BeatLeader] Mode: Standard
[INFO @ 18:12:51 | BeatLeader] Modifiers: SS
[INFO @ 18:12:51 | BeatLeader] TotalScore: 416611
[NOTICE @ 18:12:51 | BeatLeader] [Loader] Applied specified environment: Big Mirror
[NOTICE @ 18:12:51 | BeatLeader] [Launcher] Loading replay data...

The last line comes from line 23 of Source/2_Core/Replayer/ReplayerLauncher.cs and, based on the fact that there is another message on line 29 that is never printed, I'm guessing it's getting hung up on line 24, when calling data.CreateTransitionData(_playerDataModel).

Incorrect replay view when fpfc in args + ignore in SiraUtil

When viewing a replay with fpfc in the launch arguments for Beat Saber and ignore for fpfc enabled in SiraUtil's config, replays should start playing in the VR view. However, when starting a replay, it kicks the viewer over to the desktop view, and when exiting with Esc, the game is put into fpfc until you press G to toggle back.

For reference, the ignore setting in SiraUtil allows for fpfc to be in the launch args, but the game won't start fpfc. This lets fpfc still be toggleable however by pressing the G key. However, when viewing a replay, it gets kicked to fpfc even when currently in VR. Maybe this might be because of a check of the launch args and not if the game is actually in fpfc or not?

Score uploaded twice.

I set a score on Barbecue, and it appears to have uploaded twice, because it supposedly added 72 and 25 to my total PP.
Screenshot_20221018-151649

Confusion about song speed modifiers in ranked

So BeatLeader now has a difficulty algorithm that looks for the speed, acc, and tech difficulty of a map, each of which seems to react differently to speed modifiers (like speed difficulty increasing more). At the same time in-game, the speed modifiers still show +22%/+50% as the default for FS/SF modifiers, or nerfed modifier values from the previous difficulty system for specific songs like Black Rover. Is BeatLeader still applying the percentages shown in-game, or is it now applying the increases calculated by the difficulty algorithm?

If you are using the algorithm-calculated values for speed modifiers, can you update the mod show to what the percentages are in-game, or change the star rating above the leaderboard from "Rating" to "Rating (Rating with modifiers)"?

And don't forget the SS modifier exists.

Exception on beat saber 1.24.0

[DEBUG @ 21:02:41 | Harmony] ### Exception from user "com.github.rithik-b.LeaderboardCore", Harmony v2.7.0.0
[DEBUG @ 21:02:41 | Harmony] ### Original: static System.Reflection.MethodBase LeaderboardCore.HarmonyPatches.PanelView_SetIsLoaded::TargetMethod()
[DEBUG @ 21:02:41 | Harmony] ### Patch class: LeaderboardCore.HarmonyPatches.PanelView_SetIsLoaded
[DEBUG @ 21:02:41 | Harmony] ### System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object
[DEBUG @ 21:02:41 | Harmony] ###   at LeaderboardCore.HarmonyPatches.PanelView_SetIsLoaded.TargetMethod () [0x00019] in <a3f7ca23706d4baa8ae968c081a3d2ff>:0 
[DEBUG @ 21:02:41 | Harmony] ###   at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod,object,object[],System.Exception&)
[DEBUG @ 21:02:41 | Harmony] ###   at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00032] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | Harmony] ###    --- End of inner exception stack trace ---
[DEBUG @ 21:02:41 | Harmony] ###   at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00048] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | Harmony] ###   at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | Harmony] ###   at HarmonyLib.PatchClassProcessor.RunMethod[S,T] (T defaultIfNotExisting, T defaultIfFailing, System.Func`2[T,TResult] failOnResult, System.Object[] parameters) [0x000e2] in <5933b4983adb4a5fb7bcaf1e4ea35e61>:0
[DEBUG @ 21:02:41 | Harmony] ### Exception from user "com.github.rithik-b.LeaderboardCore", Harmony v2.7.0.0
[DEBUG @ 21:02:41 | Harmony] ### Original: NULL
[DEBUG @ 21:02:41 | Harmony] ### Patch class: LeaderboardCore.HarmonyPatches.PanelView_SetIsLoaded
[DEBUG @ 21:02:41 | Harmony] ### System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object
[DEBUG @ 21:02:41 | Harmony] ###   at LeaderboardCore.HarmonyPatches.PanelView_SetIsLoaded.TargetMethod () [0x00019] in <a3f7ca23706d4baa8ae968c081a3d2ff>:0 
[DEBUG @ 21:02:41 | Harmony] ###   at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod,object,object[],System.Exception&)
[DEBUG @ 21:02:41 | Harmony] ###   at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00032] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | Harmony] ###    --- End of inner exception stack trace ---
[DEBUG @ 21:02:41 | Harmony] ###   at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00048] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | Harmony] ###   at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | Harmony] ###   at HarmonyLib.PatchClassProcessor.RunMethod[S,T] (T defaultIfNotExisting, T defaultIfFailing, System.Func`2[T,TResult] failOnResult, System.Object[] parameters) [0x000e2] in <5933b4983adb4a5fb7bcaf1e4ea35e61>:0
[ERROR @ 21:02:41 | LeaderboardCore] Error applying Harmony patches: Patching exception in method static System.Reflection.MethodBase LeaderboardCore.HarmonyPatches.PanelView_SetIsLoaded::TargetMethod()
[DEBUG @ 21:02:41 | LeaderboardCore] HarmonyLib.HarmonyException: Patching exception in method static System.Reflection.MethodBase LeaderboardCore.HarmonyPatches.PanelView_SetIsLoaded::TargetMethod() ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object
[DEBUG @ 21:02:41 | LeaderboardCore]   at LeaderboardCore.HarmonyPatches.PanelView_SetIsLoaded.TargetMethod () [0x00019] in <a3f7ca23706d4baa8ae968c081a3d2ff>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]   at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke(System.Reflection.MonoMethod,object,object[],System.Exception&)
[DEBUG @ 21:02:41 | LeaderboardCore]   at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00032] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]    --- End of inner exception stack trace ---
[DEBUG @ 21:02:41 | LeaderboardCore]   at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00048] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]   at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in <eae584ce26bc40229c1b1aa476bfa589>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]   at HarmonyLib.PatchClassProcessor.RunMethod[S,T] (T defaultIfNotExisting, T defaultIfFailing, System.Func`2[T,TResult] failOnResult, System.Object[] parameters) [0x000e2] in <5933b4983adb4a5fb7bcaf1e4ea35e61>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]    --- End of inner exception stack trace ---
[DEBUG @ 21:02:41 | LeaderboardCore]   at HarmonyLib.PatchClassProcessor.ReportException (System.Exception exception, System.Reflection.MethodBase original) [0x00045] in <5933b4983adb4a5fb7bcaf1e4ea35e61>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]   at HarmonyLib.PatchClassProcessor.Patch () [0x00095] in <5933b4983adb4a5fb7bcaf1e4ea35e61>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]   at HarmonyLib.Harmony.<PatchAll>b__11_0 (System.Type type) [0x00007] in <5933b4983adb4a5fb7bcaf1e4ea35e61>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]   at HarmonyLib.CollectionExtensions.Do[T] (System.Collections.Generic.IEnumerable`1[T] sequence, System.Action`1[T] action) [0x00014] in <5933b4983adb4a5fb7bcaf1e4ea35e61>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]   at HarmonyLib.Harmony.PatchAll (System.Reflection.Assembly assembly) [0x00006] in <5933b4983adb4a5fb7bcaf1e4ea35e61>:0 
[DEBUG @ 21:02:41 | LeaderboardCore]   at LeaderboardCore.Plugin.ApplyHarmonyPatches () [0x0001f] in <a3f7ca23706d4baa8ae968c081a3d2ff>:0 

Add the ability to upload score after game restart

For some time my game struggles to upload a score+replay to the BeatLeader.
Usually it takes a minute and maybe a retry to upload.
But sometimes I'm forgetting about it and start a new play or exit the game, only to realize that I failed to upload a score.
It's frustrating to make a new best score on a difficult map and not get it uploaded to get those sweet PPs.

Can we have a way to upload a score+replay to the leaderboard after we had played other map or after game restart?

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.