feat(statistics): store ranked_score & total_score under classic scoring mode (#68)
* Initial plan * feat(calculator): add classic score simulator and scoring mode support - Add ScoringMode enum with STANDARDISED and CLASSIC modes - Add scoring_mode configuration to game settings - Implement GetDisplayScore function in calculator.py - Add get_display_score method to Score model - Update score statistics to use display scores based on scoring mode Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com> * fix(calculator): apply scoring mode to TotalScoreBestScore delete method - Update delete method to use display score for consistency - Ensures all UserStatistics modifications use configured scoring mode Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com> * refactor(calculator): address code review feedback - Move MAX_SCORE constant to app/const.py - Implement is_basic() as method in HitResult enum - Move imports to top of file in Score model - Revert TotalScoreBestScore storage to use standardised score - Apply display score calculation in tools/recalculate.py - Keep display score usage in UserStatistics modifications Co-authored-by: MingxuanGame <68982190+MingxuanGame@users.noreply.github.com> * chore(linter): auto fix by pre-commit hooks * Don't use forward-ref for `ScoringMode` * chore(linter): auto fix by pre-commit hooks * fix(calculator): update HitResult usage in get_display_score and adjust ruleset value in PerformanceServerPerformanceCalculator --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: MingxuanGame <MingxuanGame@outlook.com>
This commit is contained in:
@@ -374,7 +374,9 @@ async def _recalculate_statistics(
|
||||
continue
|
||||
|
||||
statistics.play_count += 1
|
||||
statistics.total_score += score.total_score
|
||||
# Use display score based on configured scoring mode
|
||||
display_score = score.get_display_score()
|
||||
statistics.total_score += display_score
|
||||
|
||||
playtime, is_valid = calculate_playtime(score, beatmap.hit_length)
|
||||
if is_valid:
|
||||
@@ -390,7 +392,9 @@ async def _recalculate_statistics(
|
||||
if ranked and score.passed:
|
||||
statistics.maximum_combo = max(statistics.maximum_combo, score.max_combo)
|
||||
previous = cached_best.get(score.beatmap_id)
|
||||
difference = score.total_score - (previous.total_score if previous else 0)
|
||||
# Calculate difference using display scores
|
||||
previous_display = previous.get_display_score() if previous else 0
|
||||
difference = display_score - previous_display
|
||||
if difference > 0:
|
||||
cached_best[score.beatmap_id] = score
|
||||
statistics.ranked_score += difference
|
||||
|
||||
Reference in New Issue
Block a user