From 61706a4b1bdaef17e6409a8cd90944e50b374e5d Mon Sep 17 00:00:00 2001 From: jw098 Date: Mon, 30 Jun 2025 22:37:36 -0700 Subject: [PATCH] MaterialFarmer: fix std::chrono overflow issue --- .../Farming/PokemonSV_MaterialFarmerTools.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.cpp b/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.cpp index c984aaa174..0bc3fbfbff 100644 --- a/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.cpp +++ b/SerialPrograms/Source/PokemonSV/Programs/Farming/PokemonSV_MaterialFarmerTools.cpp @@ -216,7 +216,7 @@ void run_material_farmer( std::to_string(farming_time_remaining.count()) + " min", COLOR_PURPLE ); - if (farming_time_remaining < std::chrono::minutes(0)){ + if (farming_time_remaining <= std::chrono::minutes(0)){ console.log("Time's up. Stop the Material farming program.", COLOR_RED); return; } @@ -229,7 +229,7 @@ void run_material_farmer( std::to_string(sandwich_time_remaining.count()) + " min", COLOR_PURPLE ); - if (sandwich_time_remaining < std::chrono::minutes(0)){ + if (sandwich_time_remaining <= std::chrono::minutes(0)){ console.log("Sandwich not active. Make a sandwich."); last_sandwich_time = make_sandwich_material_farm(env, console, context, options, stats); console.overlay().add_log("Sandwich made."); @@ -393,9 +393,14 @@ WallClock make_sandwich_material_farm( } // given the start time, and duration in minutes, return the number of remaining minutes +// WARNING: this function may silently overflow if start_time is near WallClock::min() or WallClock::max() std::chrono::minutes minutes_remaining(WallClock start_time, std::chrono::minutes minutes_duration){ - return std::chrono::minutes(minutes_duration) - - std::chrono::duration_cast(current_time() - start_time); + if (start_time == WallClock::min()){ + return std::chrono::minutes(0); + }else{ + auto elapsed_time = std::chrono::duration_cast(current_time() - start_time); + return minutes_duration - elapsed_time; + } } // from the North Province (Area 3) pokecenter, move to start position for Happiny dust farming