#include "Console.h" #include "Core.h" #include "DataDefs.h" #include "Export.h" #include "PluginManager.h" #include "modules/Buildings.h" #include "modules/EventManager.h" #include "modules/Maps.h" #include "df/coord.h" #include "df/building.h" #include "df/building_def.h" #include "df/map_block.h" #include "df/tile_designation.h" #include using namespace DFHack; using namespace std; DFHACK_PLUGIN("outsideOnly"); void buildingCreated(color_ostream& out, void* data); DFhackCExport command_result plugin_init ( color_ostream &out, std::vector &commands) { EventManager::EventHandler handler(buildingCreated,1); EventManager::registerListener(EventManager::EventType::BUILDING, handler, plugin_self); return CR_OK; } // This is called right before the plugin library is removed from memory. DFhackCExport command_result plugin_shutdown ( color_ostream &out ) { return CR_OK; } void buildingCreated(color_ostream& out, void* data) { int32_t id = (int32_t)data; df::building* building = df::building::find(id); if ( building == NULL ) return; if ( building->getCustomType() < 0 ) return; string prefix("OUTSIDE_ONLY"); df::building_def* def = df::global::world->raws.buildings.all[building->getCustomType()]; if (def->code.compare(0, prefix.size(), prefix)) { return; } //now, just check if it was created inside, and if so, scuttle it df::coord pos(building->centerx,building->centery,building->z); df::tile_designation* des = Maps::getTileDesignation(pos); if ( des->bits.outside ) return; Buildings::deconstruct(building); }