summaryrefslogtreecommitdiff
path: root/library/modules
diff options
context:
space:
mode:
authorAlexander Gavrilov2012-09-14 18:49:02 +0400
committerAlexander Gavrilov2012-09-14 18:49:02 +0400
commit24772f4dbcfcfbf0ac3d29f72d3bda19566d8530 (patch)
treee31e06906af5a071525f69165567ea3fe232c24f /library/modules
parent68bfc63b7d0804ac5229623480e47f297783f502 (diff)
downloaddfhack-24772f4dbcfcfbf0ac3d29f72d3bda19566d8530.tar.gz
dfhack-24772f4dbcfcfbf0ac3d29f72d3bda19566d8530.tar.bz2
dfhack-24772f4dbcfcfbf0ac3d29f72d3bda19566d8530.tar.xz
Add an api function for destroying items.
Diffstat (limited to 'library/modules')
-rw-r--r--library/modules/Items.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/library/modules/Items.cpp b/library/modules/Items.cpp
index 751797f0..b8c697a4 100644
--- a/library/modules/Items.cpp
+++ b/library/modules/Items.cpp
@@ -730,6 +730,18 @@ static bool detachItem(MapExtras::MapCache &mc, df::item *item)
item->flags.bits.in_inventory = false;
return true;
}
+ else if (item->flags.bits.removed)
+ {
+ item->flags.bits.removed = false;
+
+ if (item->flags.bits.garbage_collect)
+ {
+ item->flags.bits.garbage_collect = false;
+ item->categorize(true);
+ }
+
+ return true;
+ }
else
return false;
}
@@ -871,6 +883,26 @@ bool DFHack::Items::moveToInventory(
return true;
}
+bool Items::remove(MapExtras::MapCache &mc, df::item *item, bool no_uncat)
+{
+ CHECK_NULL_POINTER(item);
+
+ auto pos = getPosition(item);
+
+ if (!detachItem(mc, item))
+ return false;
+
+ if (pos.isValid())
+ item->pos = pos;
+
+ if (!no_uncat)
+ item->uncategorize();
+
+ item->flags.bits.removed = true;
+ item->flags.bits.garbage_collect = !no_uncat;
+ return true;
+}
+
df::proj_itemst *Items::makeProjectile(MapExtras::MapCache &mc, df::item *item)
{
CHECK_NULL_POINTER(item);