From 80674f76977f38ad1750531d9e990c73957fd1cd Mon Sep 17 00:00:00 2001 From: abstern <58846922+abstern@users.noreply.github.com> Date: Tue, 12 Jan 2021 21:37:51 +0100 Subject: [PATCH] [feature] autofarm: fallow farms when no further plants requested --- plugins/autofarm.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/plugins/autofarm.cpp b/plugins/autofarm.cpp index dd7aca977..a50f761d2 100644 --- a/plugins/autofarm.cpp +++ b/plugins/autofarm.cpp @@ -201,11 +201,26 @@ public: { // this algorithm attempts to change as few farms as possible, while ensuring that // the number of farms planting each eligible plant is "as equal as possible" - - if (farms.empty() || plants.empty()) - return; // do nothing if there are no farms or no plantable plants - + int season = *df::global::cur_season; + + if (farms.empty() || plants.empty()) + { + // if no more plants were requested, fallow all farms + // if there were no farms, do nothing + for (auto farm : farms) + { + int o = farm->plant_id[season]; + if (o != -1) + { + farm->plant_id[season] = -1; + out << "autofarm: changing farm #" << farm->id << + " from " << ((o == -1) ? "NONE" : world->raws.plants.all[o]->name) << + " to NONE" << endl; + } + } + return; + } int min = farms.size() / plants.size(); // the number of farms that should plant each eligible plant, rounded down int extra = farms.size() - min * plants.size(); // the remainder that cannot be evenly divided