```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
))
```

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: