Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Lua - Como Pasar Datos Sin Usar Tablas

Iniciado por Lord Trancos 2, 17 de Julio de 2005, 06:07:09 PM

« anterior - próximo »

Lord Trancos 2

 Digamos que en una aplicacion en C (o lo que sea), tengo un "enorme" array de (digamos) 5000 enteros de 32 bits.

Y desde un script de lua quiero leer simplemente uno (o unos pocos) de esos valores (digamos el 3241, por ejemplo).

La única forma que conozco de pasar valores de C (o lo que sea) a LUA es mediante tablas... pero meter una tabla con los 5000 enteros me parece muy cutre. Y no quiero crear una tabla y llenar "a cañon" los 3 o 4 valores que me interesan, puesto que es el script y no el programa, el que debe de decir que valor se debe de leer.

No se si me explico...  :rolleyes:

Pues bien,... ¿alguien sabe como se hace?

Soy novatillo en LUA y no acabo de ver la forma de hacerlo...  (nooo)  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

vincent

 Para pasar un numero de C a LUA:
lua_pushnumber(L, m_iNumber);

Para leer un número que ha pasado LUA a C:
int iL = lua_tonumber(L, 1);
Para leer un string que ha pasado LUA a C:

char* name;
name = (char*) lua_tostring(L, 1);


Espero que te sirva esto! (pq mucho más no sé... :P )
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Lord Trancos 2

Cita de: "vincent"Para pasar un numero de C a LUA:
lua_pushnumber(L, m_iNumber);
Efectivamente,... esto es lo que andaba buscando... muchas gracias  (uoh)  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

vincent

 De ná!

Podrias explicar tu como va el tema de las tablas? Es que me gustaria pasarle a LUA una estructura y me gustaria hacerlo de golpe, no con n pushnumbers...

Merci!
Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Lord Trancos 2

Cita de: "vincent"De ná!

Podrias explicar tu como va el tema de las tablas? Es que me gustaria pasarle a LUA una estructura y me gustaria hacerlo de golpe, no con n pushnumbers...

Merci!
Lo de las tablas aprendi ha hacerlo gracias al tutorial (donde pone C API al final de la página):
http://lua-users.org/wiki/TutorialDirectory
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

vincent

Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Lord Trancos 2

 Gracias, esta bastante majo el .pdf

Me esta gustando esto.... ya tengo medio juego listo para tirar de scripts LUA  (ole)  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

MChiz

 Holaps!

Yo sinceramente te recomiendo que utilices luabind. Es lento de compilar pero va de puta madre.
Quizás sea matar moscas a cañonazos, o quizás no...

talogo!

EDIT: Ahm! Hay un link muy interesante de Lua: PIL

Lord Trancos 2

 Gracias. Interesantes ambos links.

Del luabind, creo que por ahora paso, ya tengo gran parte del juego funcionando a base de scripts y me da perro cambiarlo. Ademas, uso delphi y no se si hay cabeceras de luabind para delphi.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Fanakito

 Yo utilizo LuaBind en el PFC y como dice MChiz va de puta madre. Eso si, los templates son un peligro porque a la que empiezas a exportar muchas cosas puedes llegar al limite maximo del Visual Studio.  

Si alguien se anima, la idea es tener claro que exportar y colocar el codigo de bind, que es el que genera los templates, en un lugar separado para que al recompilar no se tenga que recompilar mucho, que como tambien dice MChiz es algo lento.

Sobre tu pregunta, quizas una forma mas practica de pasar numerillos, seria que exportases a lua una funcion get_from_array que le pasas el indice y te devuelve el numero.

Mas o menos se haria asi (igual estoy redundando en algo que ya sabes, pero asi es como lo haria yo):


int get_from_array( lua_State * pLuaState )
{
    int index=(int) lua_tonumber( pLuaState, 1); // leemos el primer parametro (se podria comprobar que fuera un numero con lua_isnumber

    int numero;
    /* codigo para acceder a tu super array */
   
   // los parametros se envian por la pila de Lua
   lua_pushNumber(pLuaState, numero);

    return 1; // devolvemos 1 resultado
}



Luego para poder acceder desde Lua harias ...


lua_register ( pLuaState, "get_x", get_from_array);


El problema de esto es que a) es un poco C hack para mi gusto y B) si usas objetos tienes que pasar parametros para identificar la instancia, el metodo que quieres ejecutar, etc. por eso mejor usar LuaBind para esos casos, ya que te automatiza bastante el proceso.

Sobre LuaBind, creo que no hay la cabecera para Delphi, ademas al ser una libreria basada en templates seria dificil de utilizar en Delphi, no es una cosa que se pueda enchufar como la DLL de Lua.

vicho

 ese tutorial de lua lo escribio un amigo mio, (participa aqui tambien). actualmente estamos usando lua para controlar datos de los escenarios, como posiciones de objetos y un gran etc. es bastante bueno ;)

para que lo estan usando ustedes?

Lord Trancos 2

 vicho, dile a tu amigo que el tuto mola  (ole)

Yo estoy usando lua actualmente para definir los ataques, las conversaciones con NPCs, y el sistema de inventario/tienda del RPG que estoy haciendo. Funciona a las mil perlas y me estoy limitando a mejorarlo y ampliarlo. Actualmente sin tocar el ejecutable puedo hacer medio juego solo a base de tocar/crear scripts.

Para los mapas todavia uso un cutre-sistema ""script"" hecho por mi que me resulta mas comodo que usar lua por diversos motivos.
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

herman

 may have Alzheimer's but at least I don't have Alzheimer's






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.