Add RankingManager and integrate RR system

Introduce a new RankingManager that implements a per-round Rank Rating (RR) system (placement + kill-based scoring, placement games, kill caps and RR interpolation). Wire the manager into the plugin (SpeedHG): add field + initialization. Integrate into GameManager: call startRound at game start, registerRoundKill on kills, and onPlayerResult for eliminated players and the winner; adjust some stats calls (addLoss/addWin kept alongside ranking updates). Add corresponding English language messages for placement progress and result notifications.
This commit is contained in:
TDSTOS
2026-04-03 19:27:04 +02:00
parent 184443b7c6
commit ab976cc2a4
4 changed files with 322 additions and 3 deletions

View File

@@ -205,6 +205,8 @@ class GameManager(
player.sendMsg( "game.started" )
}
plugin.rankingManager.startRound( Bukkit.getOnlinePlayers() )
Bukkit.getOnlinePlayers().forEach { player ->
player.sendMsg( "game.invincibility-start", "time" to invincibilityTime.toString() )
}
@@ -247,13 +249,14 @@ class GameManager(
player.gameMode = GameMode.SPECTATOR
plugin.statsManager.addDeath( player.uniqueId )
plugin.statsManager.adjustScrimScore( player.uniqueId, -25 ) // Elo-Verlust
plugin.statsManager.addLoss( player.uniqueId )
plugin.rankingManager.onPlayerResult( player, isWinner = false )
if ( killer != null )
{
killer.exp += 0.5f
plugin.statsManager.addKill( killer.uniqueId )
plugin.statsManager.adjustScrimScore( killer.uniqueId, +15 ) // Elo-Gewinn
plugin.rankingManager.registerRoundKill( killer.uniqueId )
}
player.inventory.contents.filterNotNull().forEach {
@@ -296,7 +299,7 @@ class GameManager(
if ( p.uniqueId == winnerUUID )
{
plugin.statsManager.addWin( p.uniqueId )
plugin.statsManager.adjustScrimScore( p.uniqueId, +50 ) // Elo-Bonus für Win
plugin.rankingManager.onPlayerResult( p, isWinner = true )
}
}