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()