osu
osu copied to clipboard
Failed scores in multiplayer still submit to leaderboards
p0 until investigated
Discussed in https://github.com/ppy/osu/discussions/26367
Originally posted by Flamiii January 4, 2024 Map: https://lazer.ppy.sh/beatmapsets/881620#osu/1895402
I played this map in a multiplayer lobby and failed in the map, and my score still submitted to the leaderboard of the map when it shouldn't have. This has the potential to be game-breaking, since you can just play in a multiplayer lobby instead of using No Fail and completely bypass the 0.5x score multiplier you're supposed to have.
I also noticed a while ago that you can't tell if you are still alive in multiplayer. I can confirm the described behaviour, see the below video. Before the run I don't have any scores on the friends leaderboards, afterwards I do. I fail in the singleplayer attempt, but it seems you somehow can't fail in multiplayer.
If you do not play at all (0 points), the score is not submitted.
https://github.com/ppy/osu/assets/19955832/5aa00888-f52b-4477-bc12-6a72a05cf4ce
So there's a few things at play here.
First is that, as you say, all scores are being submitted as "passing". This happened when we merged multiplayer and solo scores into the same table storage a while back, overlooking that the multiplayer fail system is underbaked.
The second is that... the multiplayer fail system is underbaked. On stable, you can fail, then "recover" by reaching full HP again. This is not implemented at all. Basically multiplayer never fails and never recovers.
I'm not sure how to fix this yet.
I would say that the bare minimum is to mark the failed scores as failed so that they don't get processed and give pp. Everything can continue to work as it did as long as we at least know that the failed scores are failed.
I will note that I would also like some refactoring to take place in Player
on that occasion because the fact that player implementations are abusing CheckAllowModFailure()
or whatever that method is called to suppress fail is like 80% of the cause of this issue (the other 20% is us forgetting about this).
Yeah it's a very weird setup right now. I'll start with marking as failed and see where that leads to (not sure how server handles scores marked as failed currently, ie. if they will still show at multiplayer results correctly).
https://github.com/ppy/osu-web/issues/10524 is semi-relevant in that respect, but I would say that the key thing is to set the passed
flag on the score correctly at least.
This has been going on for a long time in multiplayer, if the results are still counted then the "no fail" mod and the x0.5 coefficient when playing solo are useless, I agree it also needs to be fixed to automatically skip Record achievements on the leaderboard if Sudden Death, Perfect, Difficulty Adjust (HP 11) and Accuracy Challenge are enabled in multiplayer, if the player does not meet the criteria.
Fixed by https://github.com/ppy/osu/pull/26384
This issue seems to be back, see this map leaderboard: https://osu.ppy.sh/beatmapsets/2041071#osu/4258136 I've checked the players multi history and the scores seem to have been set in this multi room: https://osu.ppy.sh/multiplayer/rooms/626191
Might have regressed with https://github.com/ppy/osu-web/pull/11118. Probably want to set ranked = 0
on those.
For multiplayer scores that haven't got the passed flag set, setting ranked=0
sounds correct (although this sounds frustratingly complicated mentally for flag-logic).
cc @ppy/team-web
that flag is currently set based on beatmap state (approved > 0
). Should that be added? (for everything, not just multiplayer)
https://github.com/ppy/osu-web/blob/4c60d398eaba3a5787b253ab4993eed292a643ad/app/Models/Solo/Score.php#L123
I'd say that enforcing passed
state for the ranked
flag universally would make sense because right now I think we may have scores wherein passed=0, preserve=0, ranked=1
which feels pathological and seems to risk the same thing happening in solo.
Speaking of which, I don't even understand why this is specific to multiplayer at this point, I'd expect solo plays to also do this. But it's probably not as visible because you can't get far up on a leaderboard on an actual solo failure?