@ -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 ;
if ( unit - > race = = race & & unit - > civ_id = = civ & & unit - > counters . job_counter > 0 )
// could also patch the unit->job.current_job->completion_timer
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 ;
//move immediately to destination
unit - > pos . x = unit - > path . dest . x ;
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 ;
}
}