|
|
@ -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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|