Dudas varias (sobre la programacion y el API)

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

Dudas varias (sobre la programacion y el API)

by libahunt » Sat Oct 01, 2016 14:59

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
Member
 
Posts: 2141
Joined: Thu Oct 18, 2012 05:00
GitHub: kaeza
IRC: kaeza diemartin blaaaaargh
In-game: kaeza

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

by kaeza » Sat Oct 01, 2016 17:54

Hola.

Para saber si un objeto está cerca de alguna posición, debes usar `minetest.get_objects_inside_radius`:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
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`:
Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
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 | BTC: 1DFZAa5VtNG7Levux4oP6BuUzr1e83pJK2
 

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

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

by libahunt » Tue Oct 04, 2016 14:15

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:

Your phone or window isn't wide enough to display the code box. If it's a phone, try rotating it to landscape mode.
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
 


Return to Español

Who is online

Users browsing this forum: No registered users and 4 guests

cron