Merge remote-tracking branch 'eswald/autogems-bugfix' into develop

develop
lethosor 2016-02-24 16:33:54 -05:00
commit 79fde493e2
1 changed files with 21 additions and 5 deletions

@ -107,6 +107,23 @@ void add_tasks(gem_map &gem_types, df::building_workshopst *workshop) {
} }
} }
bool valid_gem(df::item* item) {
if (item->getType() != item_type::ROUGH) return false;
if (item->getMaterial() != builtin_mats::INORGANIC) return false;
if (item->flags.bits.in_job) return false;
if (item->flags.bits.forbid) return false;
if (item->flags.bits.dump) return false;
if (item->flags.bits.owned) return false;
if (item->flags.bits.trader) return false;
if (item->flags.bits.hostile) return false;
if (item->flags.bits.removed) return false;
if (item->flags.bits.encased) return false;
if (item->flags.bits.construction) return false;
if (item->flags.bits.garbage_collect) return false;
if (item->flags.bits.in_building) return false;
return true;
}
void create_jobs() { void create_jobs() {
// Creates jobs in Jeweler's Workshops as necessary. // Creates jobs in Jeweler's Workshops as necessary.
// Todo: Consider path availability? // Todo: Consider path availability?
@ -137,7 +154,7 @@ void create_jobs() {
Buildings::StockpileIterator stored; Buildings::StockpileIterator stored;
for (stored.begin(stockpile); !stored.done(); ++stored) { for (stored.begin(stockpile); !stored.done(); ++stored) {
auto item = *stored; auto item = *stored;
if (item->getType() == item_type::ROUGH && item->getMaterial() == builtin_mats::INORGANIC) { if (valid_gem(item)) {
stockpiled.insert(item->id); stockpiled.insert(item->id);
piled[item->getMaterialIndex()] += 1; piled[item->getMaterialIndex()] += 1;
} }
@ -182,8 +199,7 @@ void create_jobs() {
auto gems = world->items.other[items_other_id::ROUGH]; auto gems = world->items.other[items_other_id::ROUGH];
for (auto g = gems.begin(); g != gems.end(); ++g) { for (auto g = gems.begin(); g != gems.end(); ++g) {
auto item = *g; auto item = *g;
// ROUGH also includes raw glass; the INORGANIC check filters that out. if (valid_gem(item) && !stockpiled.count(item->id)) {
if (item->getMaterial() == builtin_mats::INORGANIC && !stockpiled.count(item->id)) {
available[item->getMaterialIndex()] += 1; available[item->getMaterialIndex()] += 1;
} }
} }
@ -268,7 +284,7 @@ DFhackCExport command_result plugin_onstatechange(color_ostream &out, state_chan
if (enabled && World::isFortressMode()) { if (enabled && World::isFortressMode()) {
// Determine whether auto gem cutting has been disabled for this fort. // Determine whether auto gem cutting has been disabled for this fort.
auto config = World::GetPersistentData(CONFIG_KEY); auto config = World::GetPersistentData(CONFIG_KEY);
running = !(config.isValid() && config.ival(0)); running = config.isValid() && !config.ival(0);
last_frame_count = world->frame_counter; last_frame_count = world->frame_counter;
} }
} else if (event == DFHack::SC_MAP_UNLOADED) { } else if (event == DFHack::SC_MAP_UNLOADED) {
@ -286,9 +302,9 @@ DFhackCExport command_result plugin_enable(color_ostream& out, bool enable) {
} }
enabled = enable; enabled = enable;
running = enabled && World::isFortressMode();
} }
running = enabled && World::isFortressMode();
return CR_OK; return CR_OK;
} }