diff --git a/app/src/main/java/io/github/fate_grand_automata/ui/exit/BattleExit.kt b/app/src/main/java/io/github/fate_grand_automata/ui/exit/BattleExit.kt index b58566ab9..0a7734ca3 100644 --- a/app/src/main/java/io/github/fate_grand_automata/ui/exit/BattleExit.kt +++ b/app/src/main/java/io/github/fate_grand_automata/ui/exit/BattleExit.kt @@ -77,7 +77,6 @@ private fun AutoBattle.ExitReason.text(): String = when (this) { AutoBattle.ExitReason.FirstClearRewards -> stringResource(R.string.first_clear_rewards) AutoBattle.ExitReason.Paused -> stringResource(R.string.script_paused) AutoBattle.ExitReason.StopAfterThisRun -> stringResource(R.string.stop_after_this_run) - AutoBattle.ExitReason.StormPodRanOut -> stringResource(R.string.script_msg_storm_pods_ran_out) } @Composable diff --git a/app/src/main/res/values/localized.xml b/app/src/main/res/values/localized.xml index 7ce9f6ec9..93d7fa341 100644 --- a/app/src/main/res/values/localized.xml +++ b/app/src/main/res/values/localized.xml @@ -385,7 +385,6 @@ After pressing on the button, switch the app filter from \"Not optimized\" to \" "Download successful. Restarting app in 5 seconds." "Mélusine" - "Ran out of Storm Pods" "Reset all" "Reset to default" diff --git a/scripts/src/main/java/io/github/fate_grand_automata/scripts/entrypoints/AutoBattle.kt b/scripts/src/main/java/io/github/fate_grand_automata/scripts/entrypoints/AutoBattle.kt index f0ff465a8..75e313f1e 100644 --- a/scripts/src/main/java/io/github/fate_grand_automata/scripts/entrypoints/AutoBattle.kt +++ b/scripts/src/main/java/io/github/fate_grand_automata/scripts/entrypoints/AutoBattle.kt @@ -58,23 +58,22 @@ class AutoBattle @Inject constructor( private val ceDropsTracker: CEDropsTracker ) : EntryPoint(exitManager), IFgoAutomataApi by api { sealed class ExitReason(val cause: Exception? = null) { - object Abort : ExitReason() + data object Abort : ExitReason() class Unexpected(cause: Exception) : ExitReason(cause) - object CEGet : ExitReason() + data object CEGet : ExitReason() class LimitCEs(val count: Int) : ExitReason() - object FirstClearRewards : ExitReason() + data object FirstClearRewards : ExitReason() class LimitMaterials(val count: Int) : ExitReason() - object WithdrawDisabled : ExitReason() - object APRanOut : ExitReason() - object StormPodRanOut : ExitReason() - object InventoryFull : ExitReason() + data object WithdrawDisabled : ExitReason() + data object APRanOut : ExitReason() + data object InventoryFull : ExitReason() class LimitRuns(val count: Int) : ExitReason() - object SupportSelectionManual : ExitReason() - object SupportSelectionPreferredNotSet : ExitReason() + data object SupportSelectionManual : ExitReason() + data object SupportSelectionPreferredNotSet : ExitReason() class SkillCommandParseError(cause: Exception) : ExitReason(cause) class CardPriorityParseError(val msg: String) : ExitReason() - object Paused : ExitReason() - object StopAfterThisRun : ExitReason() + data object Paused : ExitReason() + data object StopAfterThisRun : ExitReason() } internal class BattleExitException(val reason: ExitReason) : Exception(reason.cause) @@ -92,6 +91,8 @@ class AutoBattle @Inject constructor( private var canScreenshotBondCE = false + private var isQuestClose = false + override fun script(): Nothing { try { loop() @@ -228,6 +229,12 @@ class AutoBattle @Inject constructor( // In case the repeat loop breaks and we end up in menu (like withdrawing from quests) isContinuing = false + if (isQuestClose){ + // Ordeal Call + isQuestClose = false + throw BattleExitException(ExitReason.LimitRuns(state.runs)) + } + battle.resetState() showRefillsAndRunsMessage() @@ -341,19 +348,10 @@ class AutoBattle @Inject constructor( private fun ordealCallOutOfPods() { locations.ordealCallOutOfPodsClick.click() + + isQuestClose = true // Count the current run state.nextRun() - - 2.seconds.wait() - val isBlackScreen = locations.npStartedRegion.isBlack() - if (isBlackScreen){ - locations.menuScreenRegion.exists( - images[Images.Menu], - similarity = 0.7, - timeout = 15.seconds - ) - } - throw BattleExitException(ExitReason.StormPodRanOut) } private fun findRepeatButton(): Match? { @@ -518,8 +516,17 @@ class AutoBattle @Inject constructor( // delay so refill with copper is not disturbed 2.5.seconds.wait() - if (isInventoryFull()) { - throw BattleExitException(ExitReason.InventoryFull) + var closeScreen = false + var inventoryFull = false + + useSameSnapIn { + closeScreen = isInOrdealCallOutOfPodsScreen() + inventoryFull = isInventoryFull() + } + + when { + closeScreen -> throw BattleExitException(ExitReason.LimitRuns(state.runs)) + inventoryFull -> throw BattleExitException(ExitReason.InventoryFull) } refill.refill()