66 lines
1.9 KiB
Ruby
66 lines
1.9 KiB
Ruby
|
# create an infinite magma source at the cursor
|
||
|
|
||
|
$magma_sources ||= []
|
||
|
$magma_onupdate ||= nil
|
||
|
|
||
|
case $script_args[0]
|
||
|
when 'here'
|
||
|
$magma_onupdate ||= df.onupdate_register(12) {
|
||
|
if $magma_sources.empty?
|
||
|
df.onupdate_unregister($magma_onupdate)
|
||
|
$magma_onupdate = nil
|
||
|
end
|
||
|
|
||
|
$magma_sources.each { |x, y, z|
|
||
|
if tile = df.map_tile_at(x, y, z) and DFHack::TiletypeShape::PassableFlow[tile.shape]
|
||
|
des = tile.designation
|
||
|
des.flow_size += 1 if des.flow_size < 7
|
||
|
des.liquid_type = 1
|
||
|
des.flow_forbid = true
|
||
|
|
||
|
mf = tile.mapblock.flags
|
||
|
mf.update_liquid = true
|
||
|
mf.update_liquid_twice = true
|
||
|
|
||
|
zf = df.world.map.z_level_flags[z]
|
||
|
zf.update = true
|
||
|
zf.update_twice = true
|
||
|
end
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if df.cursor.x != -30000
|
||
|
if tile = df.map_tile_at(df.cursor)
|
||
|
if DFHack::TiletypeShape::PassableFlow[tile.shape]
|
||
|
$magma_sources << [df.cursor.x, df.cursor.y, df.cursor.z]
|
||
|
else
|
||
|
puts "Impassable tile: I'm afraid I can't do that, Dave"
|
||
|
end
|
||
|
else
|
||
|
puts "Unallocated map block - build something here first"
|
||
|
end
|
||
|
else
|
||
|
puts "Please put the game cursor where you want a magma source"
|
||
|
end
|
||
|
|
||
|
when 'delete-here'
|
||
|
$magma_sources.delete [df.cursor.x, df.cursor.y, df.cursor.z]
|
||
|
|
||
|
when 'stop'
|
||
|
$magma_sources.clear
|
||
|
|
||
|
else
|
||
|
puts <<EOS
|
||
|
Creates a new infinite magma source at the cursor.
|
||
|
Arguments:
|
||
|
here - create a new source at the current cursor position
|
||
|
call multiple times for higher flow
|
||
|
delete-here - delete the source under the cursor
|
||
|
stop - delete all created magma sources
|
||
|
EOS
|
||
|
|
||
|
if $magma_sources.first
|
||
|
puts "Current magma sources:", $magma_sources.map { |s| " #{s.inspect}" }
|
||
|
end
|
||
|
end
|