From ab00dce18c5f06ecefcf13ff23a0617e8b1342e6 Mon Sep 17 00:00:00 2001 From: cssxsh Date: Fri, 9 Jun 2023 17:19:18 +0800 Subject: [PATCH] update: data structure --- .../xyz/cssxsh/arknights/excel/Enemy.kt | 80 +++++++++++++++---- .../xyz/cssxsh/arknights/excel/Gacha.kt | 4 +- .../xyz/cssxsh/arknights/excel/Skill.kt | 2 +- .../xyz/cssxsh/arknights/mine/Question.kt | 13 ++- 4 files changed, 75 insertions(+), 24 deletions(-) diff --git a/src/main/kotlin/xyz/cssxsh/arknights/excel/Enemy.kt b/src/main/kotlin/xyz/cssxsh/arknights/excel/Enemy.kt index 6acf263..626d61d 100644 --- a/src/main/kotlin/xyz/cssxsh/arknights/excel/Enemy.kt +++ b/src/main/kotlin/xyz/cssxsh/arknights/excel/Enemy.kt @@ -2,50 +2,100 @@ package xyz.cssxsh.arknights.excel import kotlinx.serialization.* -public typealias EnemyTable = Map +@Serializable +public data class EnemyTable( + @SerialName("levelInfoList") + public val levelInfos: List, + @SerialName("enemyData") + public val enemies: Map, + @SerialName("raceData") + public val races: Map +) + +@Serializable +public data class LevelInfo( + @SerialName("classLevel") + public val level: String, + @SerialName("attack") + public val attack: LevelInfoRange, + @SerialName("def") + public val def: LevelInfoRange, + @SerialName("magicRes") + public val magicRes: LevelInfoRange, + @SerialName("maxHP") + public val maxHP: LevelInfoRange, + @SerialName("moveSpeed") + public val moveSpeed: LevelInfoRange, + @SerialName("attackSpeed") + public val attackSpeed: LevelInfoRange, +) -public val Enemy.designation: String get() = "${name}(${race?.let { "$it#" }.orEmpty()}${level.text})" +@Serializable +public data class LevelInfoRange( + @SerialName("min") + public val min: Double, + @SerialName("max") + public val max: Double, +) : ClosedFloatingPointRange by (min .. max) @Serializable public data class Enemy( @SerialName("ability") val ability: String?, - @SerialName("attack") - val attack: String, @SerialName("attackType") - val type: String,// 多属性用空格分开 - @SerialName("defence") - val defence: String, + val type: String?, @SerialName("description") val description: String, - @SerialName("endure") - val endure: String, @SerialName("enemyId") override val id: String, @SerialName("enemyIndex") val index: String, @SerialName("enemyLevel") val level: EnemyLevel, - @SerialName("enemyRace") - val race: String?, @SerialName("enemyTags") override val tags: List?, @SerialName("isInvalidKilled") val isInvalidKilled: Boolean, @SerialName("name") override val name: String, - @SerialName("resistance") - val resistance: String, @SerialName("sortId") val sortId: Int, @SerialName("overrideKillCntInfos") internal val overrideKillCntInfos: Map, @SerialName("hideInHandbook") - internal val hideInHandbook: Boolean -) : Id, Name, TagInfo + internal val hideInHandbook: Boolean, + @SerialName("abilityList") + internal val abilities: List, + @SerialName("linkEnemies") + internal val linkEnemies: List, + @SerialName("damageType") + internal val damageType: List, + @SerialName("invisibleDetail") + internal val invisibleDetail: Boolean, +) : Id, Name, TagInfo { + val designation: String get() = "${name}(${level.text})" +} public enum class EnemyLevel(public val text: String) { NORMAL("普通"), ELITE("精英"), BOSS("领袖"); } + +@Serializable +public data class EnemyAbility( + @SerialName("text") + public val text: String, + @SerialName("textFormat") + public val format: String +) + +@Serializable +public data class Race( + @SerialName("id") + val id: String, + @SerialName("raceName") + val name: String, + @SerialName("sortId") + val sortId: Int +) \ No newline at end of file diff --git a/src/main/kotlin/xyz/cssxsh/arknights/excel/Gacha.kt b/src/main/kotlin/xyz/cssxsh/arknights/excel/Gacha.kt index c1a1012..eeb7a53 100644 --- a/src/main/kotlin/xyz/cssxsh/arknights/excel/Gacha.kt +++ b/src/main/kotlin/xyz/cssxsh/arknights/excel/Gacha.kt @@ -120,7 +120,9 @@ public data class GachaTable( @SerialName("linkageTenGachaItem") internal val linkageTenGachaItem: List, @SerialName("fesGachaPoolRelateItem") - internal val fesGachaPoolRelateItem: JsonObject + internal val fesGachaPoolRelateItem: JsonObject, + @SerialName("dicRecruit6StarHint") + internal val dicRecruit6StarHint: JsonObject ) @Serializable diff --git a/src/main/kotlin/xyz/cssxsh/arknights/excel/Skill.kt b/src/main/kotlin/xyz/cssxsh/arknights/excel/Skill.kt index 64af1e3..a894a81 100644 --- a/src/main/kotlin/xyz/cssxsh/arknights/excel/Skill.kt +++ b/src/main/kotlin/xyz/cssxsh/arknights/excel/Skill.kt @@ -33,7 +33,7 @@ public data class SkillLevel( @SerialName("skillType") val type: SkillType, @SerialName("durationType") - val durationType: DurationType, + val durationType: DurationType = DurationType.INSTANT, @SerialName("spData") val data: SkillSpData ) : Name diff --git a/src/main/kotlin/xyz/cssxsh/arknights/mine/Question.kt b/src/main/kotlin/xyz/cssxsh/arknights/mine/Question.kt index 3f710c4..25ae946 100644 --- a/src/main/kotlin/xyz/cssxsh/arknights/mine/Question.kt +++ b/src/main/kotlin/xyz/cssxsh/arknights/mine/Question.kt @@ -202,16 +202,15 @@ public enum class QuestionType(public val description: String) { }, ENEMY("敌方相关") { override fun load(loader: QuestionDataLoader): QuestionBuilder { - val enemies = runBlocking { loader.excel.enemy() } + val table = runBlocking { loader.excel.enemy() } val (attribute, value) = listOf String>>( - "攻击方式" to { type }, - "攻击力" to { attack }, - "防御力" to { defence }, - "法术抗性" to { resistance }, - "耐久" to { endure } + "攻击方式" to { damageType.joinToString().ifEmpty { "无" } }, + "等级" to { level.text }, + "简介" to { description }, + "能力" to { abilities.joinToString { it.text }.ifEmpty { "无" } }, ).random() return ChoiceQuestionBuilder(meaning = "敌方" to attribute, range = defaultChoiceRange) { - for ((_, enemy) in enemies) { + for ((_, enemy) in table.enemies) { add(enemy.designation to enemy.value()) } }