diff --git a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt index 2d89526..451cee7 100644 --- a/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt +++ b/src/main/kotlin/net/taehui/twilight/qwilight/QwilightAvatar.kt @@ -816,16 +816,16 @@ val lastTitles = DB.getTitleItems(it) val inputMode = targetComputing.inputMode val lastAvatarAbility = when (inputMode) { - Component.InputMode.INPUT_MODE_5_1 -> DB.getAvatarAbility5K(avatarID) Component.InputMode.INPUT_MODE_6 -> DB.getAvatarAbility6K(avatarID) + Component.InputMode.INPUT_MODE_5_1 -> DB.getAvatarAbility5K(avatarID) Component.InputMode.INPUT_MODE_7_1 -> DB.getAvatarAbility7K(avatarID) Component.InputMode.INPUT_MODE_9 -> DB.getAvatarAbility9K(avatarID) else -> 0.0 } val lastAvatarLevel = DB.getAvatarLevels(it)[0] val abilityClassVariety = when (inputMode) { - Component.InputMode.INPUT_MODE_5_1 -> AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K Component.InputMode.INPUT_MODE_6 -> AbilityClassSystem.AbilityClassVariety.INPUT_MODE_6K + Component.InputMode.INPUT_MODE_5_1 -> AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K Component.InputMode.INPUT_MODE_7_1 -> AbilityClassSystem.AbilityClassVariety.INPUT_MODE_7K Component.InputMode.INPUT_MODE_9 -> AbilityClassSystem.AbilityClassVariety.INPUT_MODE_9K else -> null @@ -895,8 +895,8 @@ } val avatarAbility = when (inputMode) { - Component.InputMode.INPUT_MODE_5_1 -> DB.getAvatarAbility5K(avatarID) Component.InputMode.INPUT_MODE_6 -> DB.getAvatarAbility6K(avatarID) + Component.InputMode.INPUT_MODE_5_1 -> DB.getAvatarAbility5K(avatarID) Component.InputMode.INPUT_MODE_7_1 -> DB.getAvatarAbility7K(avatarID) Component.InputMode.INPUT_MODE_9 -> DB.getAvatarAbility9K(avatarID) else -> 0.0 diff --git a/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt b/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt index a184b0b..e7de5d7 100644 --- a/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt +++ b/src/main/kotlin/net/taehui/twilight/system/AbilityClassSystem.kt @@ -10,7 +10,7 @@ object AbilityClassSystem : Logger { enum class AbilityClassVariety(@JvmField val value: Int) { - ETC(-1), INPUT_MODE_5K(0), INPUT_MODE_6K(1), INPUT_MODE_7K(2), INPUT_MODE_9K(3); + ETC(-1), INPUT_MODE_6K(0), INPUT_MODE_5K(1), INPUT_MODE_7K(2), INPUT_MODE_9K(3); @JsonValue fun getValue(): Int { @@ -18,7 +18,8 @@ } } - private var drawings = arrayOf(emptyArray(), emptyArray(), emptyArray(), emptyArray()) + private var drawings = + arrayOf(emptyArray(), emptyArray(), emptyArray(), emptyArray()) private var abilityClasses = emptyArray>() var isLoading = false @@ -127,8 +128,8 @@ TwilightComponent.ABILITY_CLASS_ENTRY_PATH.resolve( when (abilityClassVariety) { AbilityClassVariety.ETC -> "" - AbilityClassVariety.INPUT_MODE_5K -> "5K" AbilityClassVariety.INPUT_MODE_6K -> "6K" + AbilityClassVariety.INPUT_MODE_5K -> "5K" AbilityClassVariety.INPUT_MODE_7K -> "7K" AbilityClassVariety.INPUT_MODE_9K -> "9K" } diff --git a/src/main/kotlin/net/taehui/twilight/system/DB.kt b/src/main/kotlin/net/taehui/twilight/system/DB.kt index 139c34f..84f1c24 100644 --- a/src/main/kotlin/net/taehui/twilight/system/DB.kt +++ b/src/main/kotlin/net/taehui/twilight/system/DB.kt @@ -99,8 +99,8 @@ Input_Mode INTEGER NOT NULL, Total_Notes INTEGER NOT NULL, Is_Salt BOOLEAN NOT NULL, - Ability_5K REAL NOT NULL, Ability_6K REAL NOT NULL, + Ability_5K REAL NOT NULL, Ability_7K REAL NOT NULL, Ability_9K REAL NOT NULL, Length REAL NOT NULL, @@ -113,8 +113,8 @@ FULLTEXT (Title), FULLTEXT (Genre), KEY (Is_Salt), - KEY (Ability_5K), KEY (Ability_6K), + KEY (Ability_5K), KEY (Ability_7K), KEY (Ability_9K), KEY (Total_Count), @@ -1869,7 +1869,7 @@ dbStatement.setDouble( 13, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, + AbilityClassSystem.AbilityClassVariety.INPUT_MODE_6K, noteID128, noteID256 ) @@ -1877,7 +1877,7 @@ dbStatement.setDouble( 14, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.INPUT_MODE_6K, + AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, noteID128, noteID256 ) @@ -1971,14 +1971,14 @@ it.prepareStatement( """ UPDATE tw_note - SET Ability_5K = ?, Ability_6K = ?, Ability_7K = ?, Ability_9K = ? + SET Ability_6K = ?, Ability_5K = ?, Ability_7K = ?, Ability_9K = ? WHERE Note_ID = ? """.trimIndent() ).use { dbStatement -> dbStatement.setDouble( 1, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, + AbilityClassSystem.AbilityClassVariety.INPUT_MODE_6K, noteID128, noteID256 ) @@ -1986,7 +1986,7 @@ dbStatement.setDouble( 2, if (isSalt) 0.0 else AbilitySystem.getAbility( - AbilityClassSystem.AbilityClassVariety.INPUT_MODE_6K, + AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, noteID128, noteID256 ) @@ -2835,14 +2835,14 @@ var date = 0L var wwwLevelIDCount = 0 var avatarLevels = intArrayOf() - var avatarAbility5K = 0.0 - var avatarAbility5KPlace = 0 - var avatarAbility5KCount = 0 - var avatarAbility5KStatus = 0.0 var avatarAbility6K = 0.0 var avatarAbility6KPlace = 0 var avatarAbility6KCount = 0 var avatarAbility6KStatus = 0.0 + var avatarAbility5K = 0.0 + var avatarAbility5KPlace = 0 + var avatarAbility5KCount = 0 + var avatarAbility5KStatus = 0.0 var avatarAbility7K = 0.0 var avatarAbility7KPlace = 0 var avatarAbility7KCount = 0 @@ -3012,21 +3012,6 @@ } } }, logFuture { - val rawAbilities5K = getAbilities5K() - val targetAbilities5K = getAbilities(rawAbilities5K).toList() - val validAbilities5K = targetAbilities5K.stream().filter { it.second.second }.toList() - val targetAbility5K = - targetAbilities5K.stream().filter { it.first.first == avatarID }.findAny().orElse( - Pair(Pair(avatarID, avatarName), Pair(0.0, false)) - ) - avatarAbility5K = targetAbility5K.second.first - avatarAbility5KPlace = validAbilities5K.indexOf(targetAbility5K) - avatarAbility5KCount = validAbilities5K.size - avatarAbility5KStatus = AbilityClassSystem.getStatus( - AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, - avatarAbility5K - ) - }, logFuture { val rawAbilities6K = getAbilities6K() val targetAbilities6K = getAbilities(rawAbilities6K).toList() val validAbilities6K = targetAbilities6K.stream().filter { it.second.second }.toList() @@ -3042,6 +3027,21 @@ avatarAbility6K ) }, logFuture { + val rawAbilities5K = getAbilities5K() + val targetAbilities5K = getAbilities(rawAbilities5K).toList() + val validAbilities5K = targetAbilities5K.stream().filter { it.second.second }.toList() + val targetAbility5K = + targetAbilities5K.stream().filter { it.first.first == avatarID }.findAny().orElse( + Pair(Pair(avatarID, avatarName), Pair(0.0, false)) + ) + avatarAbility5K = targetAbility5K.second.first + avatarAbility5KPlace = validAbilities5K.indexOf(targetAbility5K) + avatarAbility5KCount = validAbilities5K.size + avatarAbility5KStatus = AbilityClassSystem.getStatus( + AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, + avatarAbility5K + ) + }, logFuture { val rawAbilities7K = getAbilities7K() val targetAbilities7K = getAbilities(rawAbilities7K).toList() val validAbilities7K = targetAbilities7K.stream().filter { it.second.second }.toList() @@ -3085,14 +3085,14 @@ val date = date val wwwLevelIDCount = wwwLevelIDCount val avatarLevels = avatarLevels - val avatarAbility5K = avatarAbility5K - val avatarAbility5KPlace = avatarAbility5KPlace + 1 - val avatarAbility5KCount = avatarAbility5KCount - val avatarAbility5KStatus = avatarAbility5KStatus val avatarAbility6K = avatarAbility6K val avatarAbility6KPlace = avatarAbility6KPlace + 1 val avatarAbility6KCount = avatarAbility6KCount val avatarAbility6KStatus = avatarAbility6KStatus + val avatarAbility5K = avatarAbility5K + val avatarAbility5KPlace = avatarAbility5KPlace + 1 + val avatarAbility5KCount = avatarAbility5KCount + val avatarAbility5KStatus = avatarAbility5KStatus val avatarAbility7K = avatarAbility7K val avatarAbility7KPlace = avatarAbility7KPlace + 1 val avatarAbility7KCount = avatarAbility7KCount @@ -3111,13 +3111,6 @@ } fun getMaxAbilityName(avatarID: String?): String { - val rawAbilities5K = getAbilities5K() - val targetAbilities5K = getAbilities(rawAbilities5K).toList() - val targetAbility5K = - targetAbilities5K.stream().filter { it.first.first == avatarID }.map { it.second }.findAny().orElse( - Pair(0.0, false) - ).first - val rawAbilities6K = getAbilities6K() val targetAbilities6K = getAbilities(rawAbilities6K).toList() val targetAbility6K = @@ -3125,6 +3118,13 @@ Pair(0.0, false) ).first + val rawAbilities5K = getAbilities5K() + val targetAbilities5K = getAbilities(rawAbilities5K).toList() + val targetAbility5K = + targetAbilities5K.stream().filter { it.first.first == avatarID }.map { it.second }.findAny().orElse( + Pair(0.0, false) + ).first + val rawAbilities7K = getAbilities7K() val targetAbilities7K = getAbilities(rawAbilities7K).toList() val targetAbility7K = @@ -3141,8 +3141,8 @@ return AbilityClassSystem.getPlatformAbilityText( minOf( - AbilityClassSystem.getValue(AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, targetAbility5K), AbilityClassSystem.getValue(AbilityClassSystem.AbilityClassVariety.INPUT_MODE_6K, targetAbility6K), + AbilityClassSystem.getValue(AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, targetAbility5K), AbilityClassSystem.getValue(AbilityClassSystem.AbilityClassVariety.INPUT_MODE_7K, targetAbility7K), AbilityClassSystem.getValue(AbilityClassSystem.AbilityClassVariety.INPUT_MODE_9K, targetAbility9K) ) @@ -3278,8 +3278,8 @@ fun getAvatarAbility(inputMode: Component.InputMode, avatarID: String): CompletableFuture { return logValueFuture { (when (inputMode) { - Component.InputMode.INPUT_MODE_5_1 -> getAbilities5K(true) Component.InputMode.INPUT_MODE_6 -> getAbilities6K(true) + Component.InputMode.INPUT_MODE_5_1 -> getAbilities5K(true) Component.InputMode.INPUT_MODE_7_1 -> getAbilities7K(true) Component.InputMode.INPUT_MODE_9 -> getAbilities9K(true) else -> emptyMap() @@ -3483,79 +3483,6 @@ } } - private fun getAbilities5K(getHandled: Boolean = false): Map, MutableCollection> { - val abilities5K = mutableMapOf, MutableCollection>() - pool.connection.use { - it.prepareStatement( - """ - SELECT tw_note.Note_ID, Note_Variety, Artist, Title, Genre, Level_Text, tw_note.Level, Stand, Avatar_ID, Avatar_Name, Ability_5K * (POWER(Stand / 1000000, 3) - 0.5 * POWER(Stand / 1000000, 2) + 0.5 * (Stand / 1000000)) AS Value - FROM tw_comment - INNER JOIN tw_note USING(Note_ID) - INNER JOIN tn_avatar ON tw_comment.Avatar = tn_avatar.Avatar_ID - WHERE Ability_5K > 0.0 AND ${ - getAbilityFilter( - Component.DEFAULT_INPUT_FAVOR_MODE, - Component.MODE_5_INPUT_FAVOR_MODE, - Component.MODE_5_1_INPUT_FAVOR_MODE - ) - } AND Is_Max = true - ORDER BY Value DESC - """.trimIndent() - ).use { dbStatement -> - dbStatement.executeQuery().use { rows -> - while (rows.next()) { - val avatarID = rows.getString("Avatar_ID") - val noteID = rows.getString("Note_ID") - val abilities = abilities5K.computeIfAbsent( - Pair(avatarID, rows.getString("Avatar_Name")) - ) { ArrayList() } - if (abilities.size < 50) { - abilities.add( - JSON.TwilightWwwAvatarAbility( - rows, - 0.95.pow(abilities.size.toDouble()), - if (getHandled) getHandled(avatarID, noteID) else Component.Handled.NOT - ) - ) - } - } - } - } - } - return abilities5K - } - - fun getAvatarAbility5K(avatarID: String): Double { - pool.connection.use { db -> - db.prepareStatement( - """ - SELECT Ability_5K * (POWER(Stand / 1000000, 3) - 0.5 * POWER(Stand / 1000000, 2) + 0.5 * (Stand / 1000000)) AS Value - FROM tw_comment - INNER JOIN tw_note USING(Note_ID) - INNER JOIN tn_avatar ON tw_comment.Avatar = tn_avatar.Avatar_ID - WHERE Avatar = ? AND Ability_5K > 0.0 AND ${ - getAbilityFilter( - Component.DEFAULT_INPUT_FAVOR_MODE, - Component.MODE_5_INPUT_FAVOR_MODE, - Component.MODE_5_1_INPUT_FAVOR_MODE - ) - } AND Is_Max = true - ORDER BY Value DESC - LIMIT 50 - """.trimIndent() - ).use { dbStatement -> - dbStatement.setString(1, avatarID) - dbStatement.executeQuery().use { rows -> - val abilities = mutableListOf() - while (rows.next()) { - abilities.add(rows.getDouble("Value") * 0.95.pow(abilities.size.toDouble())) - } - return abilities.sumOf { it } - } - } - } - } - private fun getAbilities6K(getHandled: Boolean = false): Map, MutableCollection> { val abilities6K = mutableMapOf, MutableCollection>() pool.connection.use { @@ -3629,6 +3556,79 @@ } } + private fun getAbilities5K(getHandled: Boolean = false): Map, MutableCollection> { + val abilities5K = mutableMapOf, MutableCollection>() + pool.connection.use { + it.prepareStatement( + """ + SELECT tw_note.Note_ID, Note_Variety, Artist, Title, Genre, Level_Text, tw_note.Level, Stand, Avatar_ID, Avatar_Name, Ability_5K * (POWER(Stand / 1000000, 3) - 0.5 * POWER(Stand / 1000000, 2) + 0.5 * (Stand / 1000000)) AS Value + FROM tw_comment + INNER JOIN tw_note USING(Note_ID) + INNER JOIN tn_avatar ON tw_comment.Avatar = tn_avatar.Avatar_ID + WHERE Ability_5K > 0.0 AND ${ + getAbilityFilter( + Component.DEFAULT_INPUT_FAVOR_MODE, + Component.MODE_5_INPUT_FAVOR_MODE, + Component.MODE_5_1_INPUT_FAVOR_MODE + ) + } AND Is_Max = true + ORDER BY Value DESC + """.trimIndent() + ).use { dbStatement -> + dbStatement.executeQuery().use { rows -> + while (rows.next()) { + val avatarID = rows.getString("Avatar_ID") + val noteID = rows.getString("Note_ID") + val abilities = abilities5K.computeIfAbsent( + Pair(avatarID, rows.getString("Avatar_Name")) + ) { ArrayList() } + if (abilities.size < 50) { + abilities.add( + JSON.TwilightWwwAvatarAbility( + rows, + 0.95.pow(abilities.size.toDouble()), + if (getHandled) getHandled(avatarID, noteID) else Component.Handled.NOT + ) + ) + } + } + } + } + } + return abilities5K + } + + fun getAvatarAbility5K(avatarID: String): Double { + pool.connection.use { db -> + db.prepareStatement( + """ + SELECT Ability_5K * (POWER(Stand / 1000000, 3) - 0.5 * POWER(Stand / 1000000, 2) + 0.5 * (Stand / 1000000)) AS Value + FROM tw_comment + INNER JOIN tw_note USING(Note_ID) + INNER JOIN tn_avatar ON tw_comment.Avatar = tn_avatar.Avatar_ID + WHERE Avatar = ? AND Ability_5K > 0.0 AND ${ + getAbilityFilter( + Component.DEFAULT_INPUT_FAVOR_MODE, + Component.MODE_5_INPUT_FAVOR_MODE, + Component.MODE_5_1_INPUT_FAVOR_MODE + ) + } AND Is_Max = true + ORDER BY Value DESC + LIMIT 50 + """.trimIndent() + ).use { dbStatement -> + dbStatement.setString(1, avatarID) + dbStatement.executeQuery().use { rows -> + val abilities = mutableListOf() + while (rows.next()) { + abilities.add(rows.getDouble("Value") * 0.95.pow(abilities.size.toDouble())) + } + return abilities.sumOf { it } + } + } + } + } + private fun getAbilities7K(getHandled: Boolean = false): Map, MutableCollection> { val abilities7K = mutableMapOf, MutableCollection>() pool.connection.use { @@ -4050,8 +4050,8 @@ return logValueFuture { getAbilities( when (inputMode) { - Component.InputMode.INPUT_MODE_5_1 -> getAbilities5K() Component.InputMode.INPUT_MODE_6 -> getAbilities6K() + Component.InputMode.INPUT_MODE_5_1 -> getAbilities5K() Component.InputMode.INPUT_MODE_7_1 -> getAbilities7K() Component.InputMode.INPUT_MODE_9 -> getAbilities9K() else -> emptyMap() diff --git a/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt b/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt index a31f328..4a203ef 100644 --- a/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt +++ b/src/main/kotlin/net/taehui/twilight/www/WwwAvatar.kt @@ -306,15 +306,15 @@ send(ctx, it) } - "/qwilight/www/avatar/ability/5K" -> DB.getAvatarAbility( - Component.InputMode.INPUT_MODE_5_1, + "/qwilight/www/avatar/ability/6K" -> DB.getAvatarAbility( + Component.InputMode.INPUT_MODE_6, avatarID ).thenAccept { send(ctx, it) } - "/qwilight/www/avatar/ability/6K" -> DB.getAvatarAbility( - Component.InputMode.INPUT_MODE_6, + "/qwilight/www/avatar/ability/5K" -> DB.getAvatarAbility( + Component.InputMode.INPUT_MODE_5_1, avatarID ).thenAccept { send(ctx, it) @@ -389,12 +389,12 @@ send(ctx, it) } - "/qwilight/www/hall/ability/5K" -> DB.getHallAbility(Component.InputMode.INPUT_MODE_5_1) + "/qwilight/www/hall/ability/6K" -> DB.getHallAbility(Component.InputMode.INPUT_MODE_6) .thenAccept { send(ctx, it) } - "/qwilight/www/hall/ability/6K" -> DB.getHallAbility(Component.InputMode.INPUT_MODE_6) + "/qwilight/www/hall/ability/5K" -> DB.getHallAbility(Component.InputMode.INPUT_MODE_5_1) .thenAccept { send(ctx, it) } @@ -545,8 +545,8 @@ "/qwilight/www/drawing" -> { val drawingVariety = params.getOrDefault("drawingVariety", "") - val abilityClass5K = params.getOrDefault("abilityClass5K", "") val abilityClass6K = params.getOrDefault("abilityClass6K", "") + val abilityClass5K = params.getOrDefault("abilityClass5K", "") val abilityClass7K = params.getOrDefault("abilityClass7K", "") val abilityClass9K = params.getOrDefault("abilityClass9K", "") val levelID = params.getOrDefault("levelID", "") @@ -596,14 +596,6 @@ else -> send400(ctx) } - } else if (abilityClass5K.isNotEmpty()) { - send( - ctx, - AbilityClassSystem.getDrawing( - AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, - abilityClass5K.toDouble() - ) - ) } else if (abilityClass6K.isNotEmpty()) { send( ctx, @@ -612,6 +604,14 @@ abilityClass6K.toDouble() ) ) + } else if (abilityClass5K.isNotEmpty()) { + send( + ctx, + AbilityClassSystem.getDrawing( + AbilityClassSystem.AbilityClassVariety.INPUT_MODE_5K, + abilityClass5K.toDouble() + ) + ) } else if (abilityClass7K.isNotEmpty()) { send( ctx,