Skip to content

Commit

Permalink
update: data structure
Browse files Browse the repository at this point in the history
  • Loading branch information
cssxsh committed Jun 9, 2023
1 parent d47f08f commit ab00dce
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 24 deletions.
80 changes: 65 additions & 15 deletions src/main/kotlin/xyz/cssxsh/arknights/excel/Enemy.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,50 +2,100 @@ package xyz.cssxsh.arknights.excel

import kotlinx.serialization.*

public typealias EnemyTable = Map<String, Enemy>
@Serializable
public data class EnemyTable(
@SerialName("levelInfoList")
public val levelInfos: List<LevelInfo>,
@SerialName("enemyData")
public val enemies: Map<String, Enemy>,
@SerialName("raceData")
public val races: Map<String, Race>
)

@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<Double> 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<String>?,
@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<String, Int>,
@SerialName("hideInHandbook")
internal val hideInHandbook: Boolean
) : Id, Name, TagInfo
internal val hideInHandbook: Boolean,
@SerialName("abilityList")
internal val abilities: List<EnemyAbility>,
@SerialName("linkEnemies")
internal val linkEnemies: List<String>,
@SerialName("damageType")
internal val damageType: List<String>,
@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
)
4 changes: 3 additions & 1 deletion src/main/kotlin/xyz/cssxsh/arknights/excel/Gacha.kt
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,9 @@ public data class GachaTable(
@SerialName("linkageTenGachaItem")
internal val linkageTenGachaItem: List<JsonObject>,
@SerialName("fesGachaPoolRelateItem")
internal val fesGachaPoolRelateItem: JsonObject
internal val fesGachaPoolRelateItem: JsonObject,
@SerialName("dicRecruit6StarHint")
internal val dicRecruit6StarHint: JsonObject
)

@Serializable
Expand Down
2 changes: 1 addition & 1 deletion src/main/kotlin/xyz/cssxsh/arknights/excel/Skill.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 6 additions & 7 deletions src/main/kotlin/xyz/cssxsh/arknights/mine/Question.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<Pair<String, Enemy.() -> 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())
}
}
Expand Down

0 comments on commit ab00dce

Please sign in to comment.