140 lines
4.0 KiB
C++
140 lines
4.0 KiB
C++
#include <dfhack/Core.h>
|
|
#include <dfhack/Console.h>
|
|
#include <dfhack/Export.h>
|
|
#include <dfhack/PluginManager.h>
|
|
#include <vector>
|
|
#include <string>
|
|
#include <dfhack/modules/Materials.h>
|
|
#include <stdlib.h>
|
|
|
|
using std::vector;
|
|
using std::string;
|
|
using namespace DFHack;
|
|
//FIXME: possible race conditions with calling kittens from the IO thread and shutdown from Core.
|
|
bool shutdown_flag = false;
|
|
bool final_flag = true;
|
|
bool timering = false;
|
|
uint64_t timeLast = 0;
|
|
|
|
DFhackCExport command_result rawdump_i (Core * c, vector <string> & parameters);
|
|
DFhackCExport command_result rawdump_p (Core * c, vector <string> & parameters);
|
|
|
|
DFhackCExport const char * plugin_name ( void )
|
|
{
|
|
return "rawdump";
|
|
}
|
|
|
|
DFhackCExport command_result plugin_init ( Core * c, std::vector <PluginCommand> &commands)
|
|
{
|
|
commands.clear();
|
|
commands.push_back(PluginCommand("dump_inorganic","Dump inorganic raws.",rawdump_i));
|
|
commands.push_back(PluginCommand("dump_plants","Dump plant raws.",rawdump_p));
|
|
return CR_OK;
|
|
}
|
|
|
|
DFhackCExport command_result plugin_shutdown ( Core * c )
|
|
{
|
|
return CR_OK;
|
|
}
|
|
|
|
DFhackCExport command_result rawdump_i (Core * c, vector <string> & parameters)
|
|
{
|
|
int index = -1;
|
|
Console & con = c->con;
|
|
if(parameters.size())
|
|
{
|
|
index = atoi(parameters[0].c_str());
|
|
}
|
|
c->Suspend();
|
|
Materials * mats = c->getMaterials();
|
|
if(!mats->df_inorganic)
|
|
{
|
|
con.printerr("No inorganic materials :(\n");
|
|
return CR_FAILURE;
|
|
}
|
|
if(index >= 0)
|
|
{
|
|
if( index < mats->df_inorganic->size())
|
|
{
|
|
df_inorganic_material * mat = mats->df_inorganic->at(index);
|
|
// dump single material
|
|
con.print("%-3d : [%s] %s\n",
|
|
index,
|
|
mat->Inorganic_ID.c_str(),
|
|
mat->STATE_NAME_SOLID.c_str());
|
|
con.print("MAX EDGE: %d\n",mat->MAX_EDGE);
|
|
}
|
|
else
|
|
{
|
|
con.printerr("Index out of range: %d of %d\n",index, mats->df_inorganic->size());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// dump all materials
|
|
for(int i = 0; i < mats->df_inorganic->size();i++)
|
|
{
|
|
con.print("%-3d : %s\n",i,mats->df_inorganic->at(i)->Inorganic_ID.c_str());
|
|
}
|
|
}
|
|
c->Resume();
|
|
return CR_OK;
|
|
}
|
|
|
|
DFhackCExport command_result rawdump_p (Core * c, vector <string> & parameters)
|
|
{
|
|
int index = -1;
|
|
Console & con = c->con;
|
|
if(parameters.size())
|
|
{
|
|
index = atoi(parameters[0].c_str());
|
|
}
|
|
c->Suspend();
|
|
Materials * mats = c->getMaterials();
|
|
if(!mats->df_plants)
|
|
{
|
|
con.printerr("No inorganic materials :(\n");
|
|
return CR_FAILURE;
|
|
}
|
|
if(index >= 0)
|
|
{
|
|
if( index < mats->df_plants->size())
|
|
{
|
|
df_plant_type * mat = mats->df_plants->at(index);
|
|
// dump single material
|
|
con.print("%-3d : [%s] %s %s %s\n",
|
|
index,
|
|
mat->ID.c_str(),
|
|
mat->material_str_leaves[0].c_str(),
|
|
mat->material_str_leaves[1].c_str(),
|
|
mat->material_str_leaves[2].c_str()
|
|
);
|
|
con.print("DEPTH: %d-%d\n",mat->underground_depth[0], mat->underground_depth[1]);
|
|
}
|
|
else
|
|
{
|
|
con.printerr("Index out of range: %d of %d\n",index, mats->df_plants->size());
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// dump all materials
|
|
for(int i = 0; i < mats->df_plants->size();i++)
|
|
{
|
|
df_plant_type * mat = mats->df_plants->at(i);
|
|
// dump single material
|
|
con.print("%-3d : [%s] %s %s %s\n",
|
|
i,
|
|
mat->ID.c_str(),
|
|
mat->material_str_leaves[0].c_str(),
|
|
mat->material_str_leaves[1].c_str(),
|
|
mat->material_str_leaves[2].c_str()
|
|
);
|
|
con.print("DEPTH: %d-%d\n",mat->underground_depth[0], mat->underground_depth[1]);
|
|
}
|
|
}
|
|
c->Resume();
|
|
return CR_OK;
|
|
}
|
|
|