diff options
| author | jj | 2012-08-03 16:59:54 +0200 |
|---|---|---|
| committer | jj | 2012-08-03 17:00:06 +0200 |
| commit | 64a8443b5a3c467b3855ebdb2dd291ede5ca91f6 (patch) | |
| tree | 434fc92b21610d985dc69375302d15815d38b180 /scripts | |
| parent | c1bcd270e9488f668f0c38c4d8ac736f5368ee00 (diff) | |
| download | dfhack-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.rb | 32 |
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 } |
