From a875fa71460ee36bcee573c41724fb209a5044c0 Mon Sep 17 00:00:00 2001 From: jw098 Date: Sun, 19 Jul 2026 23:01:46 -0700 Subject: [PATCH] Material Farmer: fix ability to monitor for battles while unlocking minimap to change direction --- .../Farming/PokemonSV_MaterialFarmerTools.cpp | 27 +++++++++++++++++++ .../Farming/PokemonSV_MaterialFarmerTools.h | 13 +++++++++ 2 files changed, 40 insertions(+) diff --git a/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.cpp b/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.cpp index a6b2437bc0..1b4c0b179c 100644 --- a/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.cpp +++ b/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.cpp @@ -474,6 +474,33 @@ void do_action_and_run_from_battle( VideoStream& stream, ProControllerContext& context) >&& action +){ + size_t max_attempts = 5; + for (size_t i = 0; i < max_attempts; i++){ + try{ + do_action_and_monitor_for_battles(info, stream, context, + [&](const ProgramInfo& info, VideoStream& stream, ProControllerContext& context){ + action(info, stream, context); + } + ); + break; + }catch (UnexpectedBattleException&){ + stream.log("Detected battle. Now running away.", COLOR_PURPLE); + run_from_battle(stream, context); + } + } + +} + +void do_action_and_run_from_battle2( + const ProgramInfo& info, + VideoStream& stream, + ProControllerContext& context, + std::function< + void(const ProgramInfo& info, + VideoStream& stream, + ProControllerContext& context) + >&& action ){ size_t max_attempts = 5; for (size_t i = 0; i < max_attempts; i++){ diff --git a/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.h b/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.h index c6387c3fe1..4511fcb9af 100644 --- a/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.h +++ b/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.h @@ -123,6 +123,19 @@ void do_action_and_run_from_battle( >&& action ); +// same as do_action_and_run_from_battle, but will +// stop the action once the overworld disappears +void do_action_and_run_from_battle2( + const ProgramInfo& info, + VideoStream& stream, + ProControllerContext& context, + std::function< + void(const ProgramInfo& info, + VideoStream& stream, + ProControllerContext& context) + >&& action +); + void move_to_start_position_for_letsgo0(VideoStream& stream, ProControllerContext& context); void move_to_start_position_for_letsgo1(const ProgramInfo& info, VideoStream& stream, ProControllerContext& context);