```lua
-- buscar_material.lua
--
-- Uso:
-- buscar_material NOMBRE
--
-- Ejemplo:
-- buscar_material tetrahedrite
--
-- El script busca únicamente el material indicado y selecciona
-- una casilla donde exista, preferentemente la más cercana
-- al cursor actual.
local args = {...}
if #args == 0 then
print("Uso: buscar_material <material>")
print("Ejemplo: buscar_material tetrahedrite")
return
end
local buscado = table.concat(args, " "):lower()
local pos = dfhack.gui.getCursorPos()
if not pos then
print("Coloca primero el cursor sobre una casilla del mapa.")
return
end
local bx, by, bz = pos.x, pos.y, pos.z
local mejor = nil
local mejor_dist = nil
-- Recorremos únicamente las casillas cargadas del mapa.
-- No mostramos los materiales encontrados: solo buscamos
-- coincidencias con el material solicitado.
for block in dfhack.maps.getAllBlocks() do
if block and block:isValid() then
local bx0 = block.map_pos.x
local by0 = block.map_pos.y
local bz0 = block.map_pos.z
for ly = 0, 15 do
for lx = 0, 15 do
local x = bx0 + lx
local y = by0 + ly
local z = bz0
local tile = block.tiletype[lx][ly]
local matinfo = dfhack.maps.getTileMaterial(x, y, z)
if matinfo then
local name = tostring(matinfo):lower()
if name:find(buscado, 1, true) then
local dist =
math.abs(x - bx) +
math.abs(y - by) +
math.abs(z - bz) * 20
if not mejor_dist or dist < mejor_dist then
mejor_dist = dist
mejor = {x=x, y=y, z=z}
end
end
end
end
end
end
end
if not mejor then
print("No se ha encontrado el material solicitado en las casillas cargadas.")
return
end
dfhack.gui.setCursorPos(mejor.x, mejor.y, mejor.z)
print(string.format(
"Material encontrado. Cursor situado en (%d, %d, %d).",
mejor.x, mejor.y, mejor.z
))
```
To embed this project on your website, copy the following code and paste it into your website's HTML: