summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorjj2012-08-03 16:59:54 +0200
committerjj2012-08-03 17:00:06 +0200
commit64a8443b5a3c467b3855ebdb2dd291ede5ca91f6 (patch)
tree434fc92b21610d985dc69375302d15815d38b180 /scripts
parentc1bcd270e9488f668f0c38c4d8ac736f5368ee00 (diff)
downloaddfhack-64a8443b5a3c467b3855ebdb2dd291ede5ca91f6.tar.gz
dfhack-64a8443b5a3c467b3855ebdb2dd291ede5ca91f6.tar.bz2
dfhack-64a8443b5a3c467b3855ebdb2dd291ede5ca91f6.tar.xz
slayrace: add single-creature targetting, add magma column mode
Diffstat (limited to 'scripts')
-rw-r--r--scripts/slayrace.rb32
1 files changed, 31 insertions, 1 deletions
diff --git a/scripts/slayrace.rb b/scripts/slayrace.rb
index 27b1ba3c..b1fc24e3 100644
--- a/scripts/slayrace.rb
+++ b/scripts/slayrace.rb
@@ -1,6 +1,9 @@
# slay all creatures of a given race
+# race = name of the race to eradicate, use 'him' to target only the selected creature
race = $script_args[0]
+# if the 2nd parameter is 'magma', magma rain for the targets instead of instant death
+magma = ($script_args[1] == 'magma')
checkunit = lambda { |u|
u.body.blood_count != 0 and
@@ -9,12 +12,39 @@ checkunit = lambda { |u|
not df.map_designation_at(u).hidden
}
+slayit = lambda { |u|
+ if not magma
+ # just make them drop dead
+ u.body.blood_count = 0
+ # some races dont mind having no blood, ensure they are still taken care of.
+ u.animal.vanish_countdown = 2
+ else
+ # it's getting hot around here
+ # !!WARNING!! do not call on a magma-safe creature
+ ouh = df.onupdate_register(1) {
+ if u.flags1.dead
+ df.onupdate_unregister(ouh)
+ else
+ x, y, z = u.pos.x, u.pos.y, u.pos.z
+ z += 1 while tile = df.map_tile_at(x, y, z+1) and tile.shape_passableflow
+ df.map_tile_at(x, y, z).spawn_magma(7)
+ end
+ }
+ end
+}
+
all_races = df.world.units.active.map { |u|
u.race_tg.creature_id if checkunit[u]
}.compact.uniq.sort
if !race
puts all_races
+elsif race == 'him'
+ if him = df.unit_find
+ slayit[him]
+ else
+ puts "Choose target"
+ end
else
raw_race = df.match_rawname(race, all_races)
raise 'invalid race' if not raw_race
@@ -24,7 +54,7 @@ else
count = 0
df.world.units.active.each { |u|
if u.race == race_nr and checkunit[u]
- u.body.blood_count = 0
+ slayit[u]
count += 1
end
}