CaptureFormulaModels.kt
package io.github.lishangbu.avalon.game.battle.engine.core.capture
import io.github.lishangbu.avalon.game.battle.engine.core.model.AttachedEffectState
data class CaptureContext(
val alreadyCaught: Boolean = false,
val isFishingEncounter: Boolean = false,
val isSurfEncounter: Boolean = false,
val isNight: Boolean = false,
val isCave: Boolean = false,
val isUltraBeast: Boolean = false,
val targetLevel: Int? = null,
val targetWeight: Int? = null,
val targetTypes: Set<String> = emptySet(),
)
data class CaptureFormulaInput(
val currentHp: Int,
val maxHp: Int,
val captureRate: Int,
val statusState: AttachedEffectState?,
val ballItemInternalName: String,
val turn: Int,
val battleContext: CaptureContext,
)
data class CaptureFormulaResult(
val success: Boolean,
val shakes: Int,
val captureValue: Double,
val finalRate: Double,
val ballRate: Double,
val statusRate: Double,
val reason: String,
)