diff --git a/library/MiscUtils.cpp b/library/MiscUtils.cpp index 9febe6db6..8658788bb 100644 --- a/library/MiscUtils.cpp +++ b/library/MiscUtils.cpp @@ -26,7 +26,6 @@ distribution. #include "Export.h" #include "MiscUtils.h" #include "Error.h" -#include "Types.h" #ifndef LINUX_BUILD #include diff --git a/library/modules/Buildings.cpp b/library/modules/Buildings.cpp index cdaa016fb..0512e9f03 100644 --- a/library/modules/Buildings.cpp +++ b/library/modules/Buildings.cpp @@ -698,12 +698,28 @@ static bool linkForConstruct(df::job* &job, df::building *bld) return true; } +static bool needsItems(df::building *bld) +{ + if (!bld->isActual()) + return false; + + switch (bld->getType()) + { + case building_type::FarmPlot: + case building_type::RoadDirt: + return false; + + default: + return true; + } +} + bool Buildings::constructWithItems(df::building *bld, std::vector items) { CHECK_NULL_POINTER(bld); - CHECK_INVALID_ARGUMENT(!items.empty()); CHECK_INVALID_ARGUMENT(bld->id == -1); CHECK_INVALID_ARGUMENT(bld->isActual()); + CHECK_INVALID_ARGUMENT(!items.empty() == needsItems(bld)); for (size_t i = 0; i < items.size(); i++) { @@ -738,9 +754,9 @@ bool Buildings::constructWithItems(df::building *bld, std::vector ite bool Buildings::constructWithFilters(df::building *bld, std::vector items) { CHECK_NULL_POINTER(bld); - CHECK_INVALID_ARGUMENT(!items.empty()); CHECK_INVALID_ARGUMENT(bld->id == -1); CHECK_INVALID_ARGUMENT(bld->isActual()); + CHECK_INVALID_ARGUMENT(!items.empty() == needsItems(bld)); for (size_t i = 0; i < items.size(); i++) CHECK_NULL_POINTER(items[i]);