Dudas varias (sobre la programacion y el API)

Spanish
Post Reply
libahunt
Member
Posts: 14
Joined: Tue Aug 19, 2014 09:54
In-game: libahunt
Location: Barcelona
Contact:

Dudas varias (sobre la programacion y el API)

by libahunt » Post

Hola! hace unas semanas estoy haciendo un mod con un par de personas, e estado mirando la API de minetest pero no se como detectar un objeto tirado cerca de "X" bloque, también me gustaría saber como almacenar datos individuales en un bloque, por ejemplo si un bloque se pudiera cargar con "energía" donde se almacenaría y como?
también como se podría acceder desde otro bloque a la variable que almacena el valor.

Gracias de antemano por leerme :D

PD:Conforme surjan dudas o encuentre soluciones intentare ir actualizando el post para que finalmente quede por si alguien le surjan las mismas dudas :D

PD2: Si te interesa el proyecto y sabes algo de programacion (como minimo una base) enviame un MP y te cuento de que va el proyecto

User avatar
kaeza
Moderator
Posts: 2162
Joined: Thu Oct 18, 2012 05:00
GitHub: kaeza
IRC: kaeza diemartin blaaaaargh
In-game: kaeza
Location: Montevideo, Uruguay
Contact:

Re: Dudas varias (sobre la programacion y el API)

by kaeza » Post

Hola.

Para saber si un objeto está cerca de alguna posición, debes usar `minetest.get_objects_inside_radius`:

Code: Select all

local objetos = minetest.get_objects_inside_radius(posicion, radio)
for _, objeto in ipairs(objetos) do
  -- Obtener referencia a una "entidad Lua" (o "Lua entity")
  local entidad = objeto.get_luaentity and objeto:get_luaentity()
  if entidad then
    -- El objeto es una entidad programada en Lua.
    if entidad.name == "__builtin:item" then
      -- El objeto es un objeto soltado por un jugador
      -- Hacer algo con él aquí.
      -- Podemos acceder a las variables del objeto:
      print(entidad.variable)
      -- O hacer algo con el objeto:
      objeto:remove()
    elseif entidad.name == "algunmod:algunnombre" then
      -- ...
    else
      -- No reconocemos el objeto.
    end
  elseif objeto:is_player() then
    -- El objeto es un jugador.
    -- Hacer algo con él aquí si es necesario
    print(objeto:get_player_name())
  end
end
Para almacenar datos en un bloque, usa `minetest.get_meta`:

Code: Select all

local meta = minetest.get_meta(posicion_del_bloque)

-- Trata de usar el nombre de tu mod como prefijo
-- para evitar choques con variables usadas por
-- otros mods.
meta:set_int("mimod:energia", 9001)
meta:set_string("mimod:mensaje", "Hola, mundo!")

-- Hay campos "especiales" que son usados por Minetest:

-- Si "formspec" está definido, se muestra un formulario
-- al hacer clic derecho:
meta:set_string("formspec", "size[4,3]button[1,1;2,1;Hola!]")

-- Si "infotext" está definido, el mensaje se muestra al
-- apuntar al objeto (de ésta manera se implementan los
-- mensajes para los cofres/cajones/hornos/etc.):
meta:set_string("infotext", "Hola, mundo!")
Espero sirva de ayuda. Cualquier duda, pregunta.
Your signature is not the place for a blog post. Please keep it as concise as possible. Thank you!

Check out my stuff! | Donations greatly appreciated! PayPal

libahunt
Member
Posts: 14
Joined: Tue Aug 19, 2014 09:54
In-game: libahunt
Location: Barcelona
Contact:

Re: Dudas varias (sobre la programacion y el API)

by libahunt » Post

Hola! gracias por responder !

ahora estoy probando con lo que me as comentado de minetest.get_objects_inside_radius, en un rato actualizare mi comentario (este) con el resultado o en su defecto el error o el problema que encuentre. en cuanto a esta parte:

Code: Select all

if entidad.name == "__builtin:item" then
      -- El objeto es un objeto soltado por un jugador
      -- Hacer algo con él aquí.
      -- Podemos acceder a las variables del objeto:
      print(entidad.variable)
      -- O hacer algo con el objeto:
      objeto:remove()
te refieres a las variables que definen el objeto? aviso que aun no e llegado a hacer los objetos que quiero detectar así que no e entrado a programarlos aun xD (solo están "diseñados" en mi libreta de apuntes)

también en cuanto a almacenar variables como "energía" que puse en el ejemplo, podrías ponerme un pequeño ejemplo de como meter la variable y como acceder a ella? (si no es mucha molestia, no querría ser pesado xD)

y de nuevo gracias por leerme :D

Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests