|
|
@ -1,6 +1,9 @@
|
|
|
|
# slay all creatures of a given race
|
|
|
|
# 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]
|
|
|
|
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|
|
|
|
|
checkunit = lambda { |u|
|
|
|
|
u.body.blood_count != 0 and
|
|
|
|
u.body.blood_count != 0 and
|
|
|
@ -9,12 +12,39 @@ checkunit = lambda { |u|
|
|
|
|
not df.map_designation_at(u).hidden
|
|
|
|
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|
|
|
|
|
all_races = df.world.units.active.map { |u|
|
|
|
|
u.race_tg.creature_id if checkunit[u]
|
|
|
|
u.race_tg.creature_id if checkunit[u]
|
|
|
|
}.compact.uniq.sort
|
|
|
|
}.compact.uniq.sort
|
|
|
|
|
|
|
|
|
|
|
|
if !race
|
|
|
|
if !race
|
|
|
|
puts all_races
|
|
|
|
puts all_races
|
|
|
|
|
|
|
|
elsif race == 'him'
|
|
|
|
|
|
|
|
if him = df.unit_find
|
|
|
|
|
|
|
|
slayit[him]
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
puts "Choose target"
|
|
|
|
|
|
|
|
end
|
|
|
|
else
|
|
|
|
else
|
|
|
|
raw_race = df.match_rawname(race, all_races)
|
|
|
|
raw_race = df.match_rawname(race, all_races)
|
|
|
|
raise 'invalid race' if not raw_race
|
|
|
|
raise 'invalid race' if not raw_race
|
|
|
@ -24,7 +54,7 @@ else
|
|
|
|
count = 0
|
|
|
|
count = 0
|
|
|
|
df.world.units.active.each { |u|
|
|
|
|
df.world.units.active.each { |u|
|
|
|
|
if u.race == race_nr and checkunit[u]
|
|
|
|
if u.race == race_nr and checkunit[u]
|
|
|
|
u.body.blood_count = 0
|
|
|
|
slayit[u]
|
|
|
|
count += 1
|
|
|
|
count += 1
|
|
|
|
end
|
|
|
|
end
|
|
|
|
}
|
|
|
|
}
|
|
|
|