Skip to content

feat: Leaderboard configurable - ordenamiento, tamaño, posición del jugador#12

Closed
michumichifu wants to merge 1 commit into
lino9999:masterfrom
michumichifu:feature/configurable-leaderboard
Closed

feat: Leaderboard configurable - ordenamiento, tamaño, posición del jugador#12
michumichifu wants to merge 1 commit into
lino9999:masterfrom
michumichifu:feature/configurable-leaderboard

Conversation

@michumichifu
Copy link
Copy Markdown

@michumichifu michumichifu commented Mar 18, 2026

Resumen

El leaderboard actualmente ordena por total_levels, un contador acumulativo que nunca se resetea al cambiar de temporada. Esto hace que los jugadores veteranos ocupen permanentemente las primeras posiciones sin importar su actividad en la temporada actual, anulando el propósito de los resets de temporada.

Este PR agrega configurabilidad completa al leaderboard y corrige el comportamiento del reset de temporada.

Cambios

Ordenamiento configurable del leaderboard (config.yml):

leaderboard:
  sort-by: level          # Opciones: level, total_levels, xp, battle_coins
  tiebreaker: xp          # Ordenamiento secundario para desempates
  min-level: 2            # Filtra jugadores inactivos
  size: 20                # Jugadores mostrados (máx 27, antes hardcodeado a 10)
  reset-total-levels-on-season-end: true  # Resetea el contador acumulativo al cambiar temporada

Posición del jugador: Nuevo item "Tu Posición" (RECOVERY_COMPASS, slot 31) que muestra a cada jugador su posición en el ranking aunque no esté en el top. Usa una query eficiente con COUNT(*) en vez de cargar todos los jugadores del top.

Barra de progreso XP: Barra visual en el lore de cada jugador mostrando su progreso de XP hacia el siguiente nivel.

Corrección del reset de temporada: resetSeason() ahora opcionalmente resetea total_levels a 0 cuando reset-total-levels-on-season-end: true, para que el leaderboard refleje correctamente la actividad de la temporada actual.

El problema (antes de este PR)

Posición Jugador Nivel Actual XP Actual total_levels Justo?
#1 JugadorVeterano 5 29 167 No — apenas jugó esta temporada
#3 JugadorActivo 54 9,388 54 Debería ser #1

Con sort-by: level y reset-total-levels-on-season-end: true, el leaderboard refleja correctamente quién está jugando la temporada actual.

Retrocompatible

  • Los valores por defecto mantienen el comportamiento existente si no se configura
  • No requiere cambios en el esquema de la base de datos
  • Todos los placeholders existentes siguen funcionando

- Leaderboard sort criteria now configurable via config.yml (sort-by, tiebreaker)
  Default: level DESC, xp DESC (current season progress, not cumulative total_levels)
- Leaderboard size configurable (default 20, max 27) - was hardcoded to 10
- Added min-level filter to exclude inactive players from leaderboard
- Added "Your Rank" item (RECOVERY_COMPASS, slot 31) showing player's position even if not in top
- Added XP progress bar visualization in leaderboard player lore
- New getPlayerRankInfo() method uses efficient COUNT query instead of loading all top players
- Option to reset total_levels on season end (reset-total-levels-on-season-end)
- resetSeason() now optionally resets total_levels in DB (fixes stale cumulative rankings)

Fixes: Leaderboard was sorted by total_levels (cumulative, never reset) making veteran
players permanently dominate the top regardless of current season activity.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@michumichifu michumichifu changed the title feat: Configurable leaderboard sorting, size, and player rank display feat: Leaderboard configurable - ordenamiento, tamaño, posición del jugador Mar 18, 2026
@michumichifu michumichifu deleted the feature/configurable-leaderboard branch March 18, 2026 16:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant