diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index f04726a44..09c0b298d 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -79,6 +79,7 @@ if (BUILD_SUPPORTED) DFHACK_PLUGIN(follow follow.cpp) DFHACK_PLUGIN(changevein changevein.cpp) DFHACK_PLUGIN(advtools advtools.cpp) + DFHACK_PLUGIN(tweak tweak.cpp) #DFHACK_PLUGIN(versionosd versionosd.cpp) endif() diff --git a/plugins/tweak.cpp b/plugins/tweak.cpp new file mode 100644 index 000000000..c244553ad --- /dev/null +++ b/plugins/tweak.cpp @@ -0,0 +1,88 @@ +// A container for random minor tweaks that don't fit anywhere else, +// in order to avoid creating lots of plugins and polluting the namespace. + +#include "Core.h" +#include "Console.h" +#include "Export.h" +#include "PluginManager.h" + +#include "modules/Gui.h" + +#include "DataDefs.h" +#include "df/ui.h" +#include "df/world.h" +#include "df/squad.h" +#include "df/unit.h" +#include "df/unit_soul.h" +#include "df/historical_entity.h" +#include "df/historical_figure.h" +#include "df/historical_figure_info.h" +#include "df/assumed_identity.h" +#include "df/language_name.h" +#include "df/death_info.h" +#include "df/criminal_case.h" + +#include + +using std::vector; +using std::string; +using std::endl; +using namespace DFHack; +using namespace df::enums; + +using df::global::ui; +using df::global::world; + +using namespace DFHack::Gui; + +static command_result tweak(Core * c, vector & parameters); + +DFHACK_PLUGIN("tweak"); + +DFhackCExport command_result plugin_init (Core *c, std::vector &commands) +{ + commands.clear(); + commands.push_back(PluginCommand( + "tweak", "Various tweaks for minor bugs.", tweak, false, + " tweak clear-missing\n" + " Remove the missing status from the selected unit.\n" + )); + return CR_OK; +} + +DFhackCExport command_result plugin_shutdown ( Core * c ) +{ + return CR_OK; +} + +static command_result tweak(Core * c, vector ¶meters) +{ + CoreSuspender suspend(c); + + if (parameters.empty()) + return CR_WRONG_USAGE; + + string cmd = parameters[0]; + + if (cmd == "clear-missing") + { + df::unit *unit = getSelectedUnit(c); + if (!unit) + return CR_FAILURE; + + auto death = df::death_info::find(unit->counters.death_id); + + if (death) + { + death->flags.bits.discovered = true; + + auto crime = df::criminal_case::find(death->crime_id); + if (crime) + crime->flags.bits.discovered = true; + } + } + else + return CR_WRONG_USAGE; + + return CR_OK; +}