|
|
@ -80,6 +80,7 @@ using df::global::world;
|
|
|
|
DFHACK_PLUGIN_IS_ENABLED(enable_labormanager);
|
|
|
|
DFHACK_PLUGIN_IS_ENABLED(enable_labormanager);
|
|
|
|
|
|
|
|
|
|
|
|
static bool print_debug = 0;
|
|
|
|
static bool print_debug = 0;
|
|
|
|
|
|
|
|
static bool pause_on_error = 1;
|
|
|
|
|
|
|
|
|
|
|
|
static std::vector<int> state_count(5);
|
|
|
|
static std::vector<int> state_count(5);
|
|
|
|
|
|
|
|
|
|
|
@ -525,8 +526,6 @@ struct dwarf_info_t
|
|
|
|
|
|
|
|
|
|
|
|
~dwarf_info_t()
|
|
|
|
~dwarf_info_t()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (print_debug)
|
|
|
|
|
|
|
|
debug("LABORMANAGER: destroying dwarf %p\n", (void*) this);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -608,7 +607,7 @@ static df::unit_labor hauling_labor_map[] =
|
|
|
|
df::unit_labor::HAUL_FOOD, /* FISH_RAW */
|
|
|
|
df::unit_labor::HAUL_FOOD, /* FISH_RAW */
|
|
|
|
df::unit_labor::HAUL_REFUSE, /* VERMIN */
|
|
|
|
df::unit_labor::HAUL_REFUSE, /* VERMIN */
|
|
|
|
df::unit_labor::HAUL_ITEM, /* PET */
|
|
|
|
df::unit_labor::HAUL_ITEM, /* PET */
|
|
|
|
df::unit_labor::HAUL_FOOD, /* SEEDS */
|
|
|
|
df::unit_labor::HAUL_ITEM, /* SEEDS */
|
|
|
|
df::unit_labor::HAUL_FOOD, /* PLANT */
|
|
|
|
df::unit_labor::HAUL_FOOD, /* PLANT */
|
|
|
|
df::unit_labor::HAUL_ITEM, /* SKIN_TANNED */
|
|
|
|
df::unit_labor::HAUL_ITEM, /* SKIN_TANNED */
|
|
|
|
df::unit_labor::HAUL_FOOD, /* LEAVES */
|
|
|
|
df::unit_labor::HAUL_FOOD, /* LEAVES */
|
|
|
@ -716,6 +715,14 @@ void debug (char* fmt, ...)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void debug_pause ()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (pause_on_error)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
debug("LABORMANAGER: Game paused so you can investigate the above message.\nUse 'labormanager pause-on-error no' to disable autopausing.\n");
|
|
|
|
|
|
|
|
*df::global::pause_state = true;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
class JobLaborMapper {
|
|
|
|
class JobLaborMapper {
|
|
|
|
|
|
|
|
|
|
|
@ -804,9 +811,10 @@ private:
|
|
|
|
return workshop_build_labor[ws->type];
|
|
|
|
return workshop_build_labor[ws->type];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case df::building_type::Construction:
|
|
|
|
|
|
|
|
return df::unit_labor::BUILD_CONSTRUCTION;
|
|
|
|
case df::building_type::Furnace:
|
|
|
|
case df::building_type::Furnace:
|
|
|
|
case df::building_type::TradeDepot:
|
|
|
|
case df::building_type::TradeDepot:
|
|
|
|
case df::building_type::Construction:
|
|
|
|
|
|
|
|
case df::building_type::Bridge:
|
|
|
|
case df::building_type::Bridge:
|
|
|
|
case df::building_type::ArcheryTarget:
|
|
|
|
case df::building_type::ArcheryTarget:
|
|
|
|
case df::building_type::WaterWheel:
|
|
|
|
case df::building_type::WaterWheel:
|
|
|
@ -870,6 +878,7 @@ private:
|
|
|
|
|
|
|
|
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for construct building job of type %s\n",
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for construct building job of type %s\n",
|
|
|
|
ENUM_KEY_STR(building_type, bld->getType()).c_str());
|
|
|
|
ENUM_KEY_STR(building_type, bld->getType()).c_str());
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
|
|
|
|
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -900,9 +909,10 @@ private:
|
|
|
|
return workshop_build_labor[ws->type];
|
|
|
|
return workshop_build_labor[ws->type];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case df::building_type::Construction:
|
|
|
|
|
|
|
|
return df::unit_labor::REMOVE_CONSTRUCTION;
|
|
|
|
case df::building_type::Furnace:
|
|
|
|
case df::building_type::Furnace:
|
|
|
|
case df::building_type::TradeDepot:
|
|
|
|
case df::building_type::TradeDepot:
|
|
|
|
case df::building_type::Construction:
|
|
|
|
|
|
|
|
case df::building_type::Wagon:
|
|
|
|
case df::building_type::Wagon:
|
|
|
|
case df::building_type::Bridge:
|
|
|
|
case df::building_type::Bridge:
|
|
|
|
case df::building_type::ScrewPump:
|
|
|
|
case df::building_type::ScrewPump:
|
|
|
@ -964,6 +974,7 @@ private:
|
|
|
|
|
|
|
|
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for destroy building job of type %s\n",
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for destroy building job of type %s\n",
|
|
|
|
ENUM_KEY_STR(building_type, bld->getType()).c_str());
|
|
|
|
ENUM_KEY_STR(building_type, bld->getType()).c_str());
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
|
|
|
|
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -998,6 +1009,7 @@ private:
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make crafts job (not bone)\n");
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make crafts job (not bone)\n");
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case df::item_type::WOOD:
|
|
|
|
case df::item_type::WOOD:
|
|
|
@ -1005,6 +1017,7 @@ private:
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make crafts job, item type %s\n",
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make crafts job, item type %s\n",
|
|
|
|
ENUM_KEY_STR(item_type, jobitem).c_str());
|
|
|
|
ENUM_KEY_STR(item_type, jobitem).c_str());
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1022,6 +1035,7 @@ private:
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make job, workshop type %s\n",
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make job, workshop type %s\n",
|
|
|
|
ENUM_KEY_STR(workshop_type, type).c_str());
|
|
|
|
ENUM_KEY_STR(workshop_type, type).c_str());
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1036,12 +1050,14 @@ private:
|
|
|
|
default:
|
|
|
|
default:
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make job, furnace type %s\n",
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make job, furnace type %s\n",
|
|
|
|
ENUM_KEY_STR(furnace_type, type).c_str());
|
|
|
|
ENUM_KEY_STR(furnace_type, type).c_str());
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make job, building type %s\n",
|
|
|
|
debug ("LABORMANAGER: Cannot deduce labor for make job, building type %s\n",
|
|
|
|
ENUM_KEY_STR(building_type, bld->getType()).c_str());
|
|
|
|
ENUM_KEY_STR(building_type, bld->getType()).c_str());
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
|
|
|
|
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
return df::unit_labor::NONE;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1382,6 +1398,7 @@ public:
|
|
|
|
if (job_to_labor_table.count(j->job_type) == 0)
|
|
|
|
if (job_to_labor_table.count(j->job_type) == 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
debug("LABORMANAGER: job has no job to labor table entry: %s\n", ENUM_KEY_STR(job_type, j->job_type).c_str());
|
|
|
|
debug("LABORMANAGER: job has no job to labor table entry: %s\n", ENUM_KEY_STR(job_type, j->job_type).c_str());
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
labor = df::unit_labor::NONE;
|
|
|
|
labor = df::unit_labor::NONE;
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
|
|
|
@ -1941,6 +1958,7 @@ private:
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
out.print("Dwarf \"%s\" has unknown job %i\n", dwarf->dwarf->name.first_name.c_str(), job);
|
|
|
|
out.print("Dwarf \"%s\" has unknown job %i\n", dwarf->dwarf->name.first_name.c_str(), job);
|
|
|
|
|
|
|
|
debug_pause();
|
|
|
|
state = OTHER;
|
|
|
|
state = OTHER;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (state == BUSY)
|
|
|
|
if (state == BUSY)
|
|
|
@ -2780,6 +2798,18 @@ command_result labormanager (color_ostream &out, std::vector <std::string> & par
|
|
|
|
|
|
|
|
|
|
|
|
return CR_OK;
|
|
|
|
return CR_OK;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (parameters.size() == 2 && parameters[0] == "pause-on-error")
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
if (!enable_labormanager)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
out << "Error: The plugin is not enabled." << endl;
|
|
|
|
|
|
|
|
return CR_FAILURE;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pause_on_error = parameters[1] == "yes" || parameters[1] == "true";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return CR_OK;
|
|
|
|
|
|
|
|
}
|
|
|
|
else if (parameters.size() == 1 && parameters[0] == "debug")
|
|
|
|
else if (parameters.size() == 1 && parameters[0] == "debug")
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (!enable_labormanager)
|
|
|
|
if (!enable_labormanager)
|
|
|
|