64 lines
1.6 KiB
C++
64 lines
1.6 KiB
C++
|
|
#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 <string>
|
|
|
|
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 <PluginCommand> &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);
|
|
}
|
|
|