Added teledwarf: teleports dwarves to their destination instantly.

develop
expwnent 2012-08-20 22:18:39 -04:00
parent 509d957090
commit 76cd941084
1 changed files with 80 additions and 16 deletions

@ -23,33 +23,88 @@ DFhackCExport command_result plugin_shutdown ( color_ostream &out )
return CR_OK; return CR_OK;
} }
static int enable_fastdwarf = false; static bool enable_fastdwarf = false;
static bool enable_teledwarf = false;
DFhackCExport command_result plugin_onupdate ( color_ostream &out ) DFhackCExport command_result plugin_onupdate ( color_ostream &out )
{ {
// check run conditions // check run conditions
if(!world || !world->map.block_index || !enable_fastdwarf) if(!world || !world->map.block_index)
{ {
// give up if we shouldn't be running' enable_fastdwarf = enable_teledwarf = false;
return CR_OK; return CR_OK;
} }
int32_t race = ui->race_id; int32_t race = ui->race_id;
int32_t civ = ui->civ_id; int32_t civ = ui->civ_id;
for (size_t i = 0; i < world->units.all.size(); i++) if ( enable_fastdwarf ) {
{ for (size_t i = 0; i < world->units.all.size(); i++)
df::unit *unit = world->units.all[i]; {
df::unit *unit = world->units.all[i];
if (unit->race == race && unit->civ_id == civ && unit->counters.job_counter > 0)
unit->counters.job_counter = 0;
// could also patch the unit->job.current_job->completion_timer
}
}
if ( enable_teledwarf ) {
for (size_t i = 0; i < world->units.all.size(); i++)
{
df::unit *unit = world->units.all[i];
if (unit->race != race || unit->civ_id != civ || unit->path.dest.x == -30000)
continue;
if (unit->relations.draggee_id != -1 || unit->relations.dragger_id != -1)
continue;
if (unit->relations.following != 0)
continue;
if (unit->race == race && unit->civ_id == civ && unit->counters.job_counter > 0) //move immediately to destination
unit->counters.job_counter = 0; unit->pos.x = unit->path.dest.x;
// could also patch the unit->job.current_job->completion_timer unit->pos.y = unit->path.dest.y;
unit->pos.z = unit->path.dest.z;
}
} }
return CR_OK; return CR_OK;
} }
static command_result fastdwarf (color_ostream &out, vector <string> & parameters) static command_result fastdwarf (color_ostream &out, vector <string> & parameters)
{ {
if (parameters.size() == 1 && (parameters[0] == "0" || parameters[0] == "1")) if (parameters.size() == 1) {
if ( parameters[0] == "0" ) {
enable_fastdwarf = true;
enable_teledwarf = false;
} else if ( parameters[0] == "1" ) {
enable_fastdwarf = false;
enable_teledwarf = false;
} else {
out.print("Incorrect usage.\n");
return CR_OK;
}
} else if (parameters.size() == 2) {
if ( parameters[0] == "0" ) {
enable_fastdwarf = false;
} else if ( parameters[0] == "1" ) {
enable_fastdwarf = true;
} else {
out.print("Incorrect usage.\n");
return CR_OK;
}
if ( parameters[1] == "0" ) {
enable_teledwarf = false;
} else if ( parameters[1] == "1" ) {
enable_teledwarf = true;
} else {
out.print("Incorrect usage.\n");
return CR_OK;
}
} else if (parameters.size() == 0) {
//print status
} else {
out.print("Incorrect usage.\n");
return CR_OK;
}
/*if (parameters.size() == 1 && (parameters[0] == "0" || parameters[0] == "1"))
{ {
if (parameters[0] == "0") if (parameters[0] == "0")
enable_fastdwarf = 0; enable_fastdwarf = 0;
@ -62,7 +117,7 @@ static command_result fastdwarf (color_ostream &out, vector <string> & parameter
out.print("Makes your minions move at ludicrous speeds.\n" out.print("Makes your minions move at ludicrous speeds.\n"
"Activate with 'fastdwarf 1', deactivate with 'fastdwarf 0'.\n" "Activate with 'fastdwarf 1', deactivate with 'fastdwarf 0'.\n"
"Current state: %d.\n", enable_fastdwarf); "Current state: %d.\n", enable_fastdwarf);
} }*/
return CR_OK; return CR_OK;
} }
@ -70,8 +125,17 @@ static command_result fastdwarf (color_ostream &out, vector <string> & parameter
DFhackCExport command_result plugin_init ( color_ostream &out, std::vector <PluginCommand> &commands) DFhackCExport command_result plugin_init ( color_ostream &out, std::vector <PluginCommand> &commands)
{ {
commands.push_back(PluginCommand("fastdwarf", commands.push_back(PluginCommand("fastdwarf",
"enable/disable fastdwarf (parameter=0/1)", "enable/disable fastdwarf and teledwarf (parameters=0/1)",
fastdwarf)); fastdwarf, false,
"fastdwarf: controls speedydwarf and teledwarf. Speedydwarf makes dwarves move quickly and perform tasks quickly. Teledwarf makes dwarves move instantaneously, but do jobs at the same speed.\n"
"Usage:\n"
" fastdwarf 0 0: disable both speedydwarf and teledwarf\n"
" fastdwarf 0 1: disable speedydwarf, enable teledwarf\n"
" fastdwarf 1 0: enable speedydwarf, disable teledwarf\n"
" fastdwarf 1 1: enable speedydwarf, enable teledwarf\n"
" fastdwarf 0: disable speedydwarf, disable teledwarf\n"
" fastdwarf 1: enable speedydwarf, disable teledwarf\n"
));
return CR_OK; return CR_OK;
} }