mirror of https://github.com/hykilpikonna/AquaDX
[+] Wacca: Calculate player rating server side
parent
70aed1d5db
commit
be34915cdf
|
@ -292,8 +292,7 @@ fun WaccaServer.init() {
|
||||||
addItems(items as List<List<Int>>, u, itmGrp(u))
|
addItems(items as List<List<Int>>, u, itmGrp(u))
|
||||||
|
|
||||||
// Upsert playlog
|
// Upsert playlog
|
||||||
val pl = WcUserPlayLog.parse(details as List<*>)
|
val pl = WcUserPlayLog.parse(details as List<*>).apply { user = u }
|
||||||
rp.playLog.save(pl.apply { user = u })
|
|
||||||
|
|
||||||
// Update best record
|
// Update best record
|
||||||
val best = rp.bestScore.save((rp.bestScore.findByUserAndMusicIdAndLevel(u, pl.musicId, pl.level)
|
val best = rp.bestScore.save((rp.bestScore.findByUserAndMusicIdAndLevel(u, pl.musicId, pl.level)
|
||||||
|
@ -307,10 +306,18 @@ fun WaccaServer.init() {
|
||||||
rating = waccaRating(achievement, pl.levelConst)
|
rating = waccaRating(achievement, pl.levelConst)
|
||||||
})
|
})
|
||||||
|
|
||||||
// TODO: Update player rating - Best 35 old & 15 new
|
// ⭐ Calculate player rating ⭐
|
||||||
|
// Take the top 50 scores ranked by rating
|
||||||
|
pl.beforeRating = u.playerRating
|
||||||
|
val top50 = rp.bestScore.findTop50(u)
|
||||||
|
u.playerRating = top50.sumOf { it.rating }
|
||||||
|
pl.afterRating = u.playerRating
|
||||||
|
|
||||||
// Re-calculate user total score
|
// Re-calculate user total score
|
||||||
rp.user.save(u.apply { totalScore = rp.bestScore.sumScoreByUser(u) })
|
u.totalScore = rp.bestScore.sumScoreByUser(u)
|
||||||
|
|
||||||
|
rp.user.save(u)
|
||||||
|
rp.playLog.save(pl)
|
||||||
|
|
||||||
ls(best.lsMusicUpdate(), ls(pl.musicId, best.clears[0]), "seasonalInfo" - (1..11).map { 0 }, "ranking" - empty)
|
ls(best.lsMusicUpdate(), ls(pl.musicId, best.clears[0]), "seasonalInfo" - (1..11).map { 0 }, "ranking" - empty)
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,8 @@ interface WcUserBestScoreRepo : IWaccaUserLinked<WcUserScore> {
|
||||||
fun findByUserAndMusicIdAndLevel(user: WaccaUser, songId: Int, level: Int): WcUserScore?
|
fun findByUserAndMusicIdAndLevel(user: WaccaUser, songId: Int, level: Int): WcUserScore?
|
||||||
@Query("SELECT SUM(achievement) FROM WcUserScore WHERE user = :user")
|
@Query("SELECT SUM(achievement) FROM WcUserScore WHERE user = :user")
|
||||||
fun sumScoreByUser(user: WaccaUser): Long
|
fun sumScoreByUser(user: WaccaUser): Long
|
||||||
|
@Query("SELECT WcUserScore FROM WcUserScore WHERE user = :user ORDER BY rating DESC LIMIT 50")
|
||||||
|
fun findTop50(user: WaccaUser): List<WcUserScore>
|
||||||
}
|
}
|
||||||
interface WcUserPlayLogRepo : IWaccaUserLinked<WcUserPlayLog>, GenericPlaylogRepo<WcUserPlayLog>
|
interface WcUserPlayLogRepo : IWaccaUserLinked<WcUserPlayLog>, GenericPlaylogRepo<WcUserPlayLog>
|
||||||
interface WcUserStageUpRepo : IWaccaUserLinked<WcUserStageUp>
|
interface WcUserStageUpRepo : IWaccaUserLinked<WcUserStageUp>
|
||||||
|
|
Loading…
Reference in New Issue