Anuncios Google

(Solucionado por todos)[LuaDEV] imprimir un valor de una tabla

Hoy estaba preparando una funcion que consiste en que un NPC que te habla, pero a la hora de de probarlo me dice LuaDEV: script.lua:4: do expected near screen, aqui os dejo el code a ver si me podeis ayudar.

 

script.lua

dofile("npc/dialogo.lua")
 
for i=0,6 do
		screen.print(20,20,npcdialogo[(i+1)],verde)
		screen.print(20,40,npcdialogo[(i+2)],verde)
		screen.print(20,60,"Pulsa X")
		if controls.cross() then
			i=i+2
		end
		screen.flip()
end

npc/dialogo.lua

npcdialogo = {
	"fila1	                                      ",
	"fila2                                       ",
	"fila3                                       ",
	"fila4                                       ",
	"fila5                                       ",
	"fila6                                       ",
}

EDITO: ahora tengo otro problema, este es el error: script.lua:5: bad argument #3 to print (string expected, got nil), tambien e probado a poner en npcdialogo[] un numero fijo en los dos, pero cuando lo pruebo el eboot me mando al XMB.

Saludos y gracias de antemano


Programador en C++ y Lua.

Creando un Juego con Unity3D para Android.

Deseo poder crear mi propio IDE para C++ y un Motor de Videojuegos.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Sé...

Que ya está solucionado, pero me gustaría añadir que no es necesario escribir [(i+1)]. Con poner [i+1] basta ;D

Imagen de AdriGV

No pasa nada

Se agradecen los aportes ;)

Imagen de User170294

Sobre el segundo error

Haber, debes tener en cuenta que en el momento en el que la "i" valga 6 dentro del for estarás llamando a npcdialogo[7] y a npcdialogo[8]. Estos no existen y por lo tanto te da error.


Imagen de AdriGV

Ok

e estado probando, pero el bucle for empieza a contar solo, hay alguna manera de pararlo y que nada mas cuente cuando pulso la X?

Saludos


Programador en C++ y Lua.

Creando un Juego con Unity3D para Android.

Deseo poder crear mi propio IDE para C++ y un Motor de Videojuegos.

Imagen de barney77

Mmm... Lo que tú quieres

Mmm... Lo que tú quieres hacer es: En el primer print imprimir el elemento correspondiente según "i" y en el segundo print imprimir el elemento correspondiente según "i" más 1.

Sí es así, prueba con esto;

dofile("npc/dialogo.lua");
 
for i = 1, 5 do -- Empezamos desde el primer elemento al penúltimo
    screen.print(20,20,npcdialogo[i],verde); -- Imprimimos el elemento correspondiente según "i"
    screen.print(20,40,npcdialogo[(i + 1)],verde); -- Imprimimos el elemento correspundiente según "i" más 1(osea que cuando i = 1, imprime el segundo elemento y así consecutivamente). 
    screen.print(20,60,"Pulsa X");
 
    if controls.cross() then i=i+2; end
 
    screen.flip();
end
 
controls.waitforkey(); -- Esto es para que al terminar el for no te saque al XMB, de está forma, al terminar el for, esperará a que se presione un boton para salir al XMB

Si lo que quieres es hacer otra cosa, dila, trataremos de ayudarte ;).

 

Imagen de AdriGV

e estado probando

e estado probando, esta vez solo suma i cuando pulso X pero se imprime el dialogo uno ni el dos, y cuando pulso la X solo suma a la i un 2, pero no se muestra, por que sera que no se imprime, voy a probar prepararlo con if.

Grax y Saludos

 


Programador en C++ y Lua.

Creando un Juego con Unity3D para Android.

Deseo poder crear mi propio IDE para C++ y un Motor de Videojuegos.

Imagen de AdriGV

Bien, os explico

Perdon por no haberlo explico antes, lo que quiero es lo siguiente:

En un juego RPG(como poquemon) cuando hablas con una persona sale el cuadro de dialogo, el texto se muestra de 2 en dos, yo lo que quiero es preparar una funcion(esto ya lo hare yo cuando tenga solucionado este problema), los dialogos se almacenan en unas tablas, me aveis ayudado mucho, el proble es que no se muestra el texto que corresponderia cada vez que pulso X (mas bien es que nunca se ve).

Espero averme expliaco bien, si no me lo comentais y lo explicare mejor.

Ya esta casi todo solucionado, lo que no se es porque no se muestra el texto.

Gracias por vuestra ayuda a ver si conseguimos solucionarlo.


Programador en C++ y Lua.

Creando un Juego con Unity3D para Android.

Deseo poder crear mi propio IDE para C++ y un Motor de Videojuegos.

Imagen de barney77

Has probado el Code que te

Has probado el Code que te deje abajo?

EDITO: Ya se porque el error, se me fue la pinza, el code correcto es este:

dofile("npc/dialogo.lua");
i = 1;
 
while true do
	controls.read();
 
	screen.print(20,20,npcdialogo[i],verde);
	screen.print(20,40,npcdialogo[(i + 1)],verde);
	screen.print(20,60,"Pulsa X");
 
	if controls.press("cross") then
		if i > 5 then
			i = 1;
		else
			i = i + 1;
		end
	end
 
	if controls.press("cross") then
		if i < 1 then
			i = 5;
		else
			i = i - 1;
		end
	end
 
	screen.flip();
end

Cualquier error, duda, comentario, dimelo ;).

Imagen de AdriGV

Ya esta solucionado

El problema era que no se imprimia porque la variable que almacenava el color no existia, por lo tanto no se mostraba.

 

Perdonad que se tan despistado, muchas gracias a todos.


Programador en C++ y Lua.

Creando un Juego con Unity3D para Android.

Deseo poder crear mi propio IDE para C++ y un Motor de Videojuegos.

Imagen de barney77

Mmmm.. creo que ya entendí lo

Mmmm.. creo que ya entendí lo que quieres hacer... prueba esto:

dofile("npc/dialogo.lua");
i = 1;
 
while true do
	controls.read();
 
	screen.print(20,20,npcdialogo[i],verde);
	screen.print(20,40,npcdialogo[(i + 1)],verde);
	screen.print(20,60,"Pulsa X");
 
	if controls.press("cross") then
		if i > 5 then
			i = 1;
		else
			i = i + 1;
		end
 
		if i < 1 then
			i = 5;
		else
			i = i - 1;
		end
	end
 
	screen.flip();
end

Si no te da el resultado que quieres, dime exactamente que es lo que quieres hacer.

PD. Si se ve muy separado el code, es culpa del copy/paste de notepad++.

Imagen de User170294

Si nos explicas mejor que es

Si nos explicas mejor que es EXACTAMENTE lo que quieres hacer te lo resolveremos en un plis. Saludos.

El error lo dice todo... no

El error lo dice todo... no pusiste do en el for

for i=0,6 do --Este "do" te faltó :P
		screen.print(20,20,npcdialogo[(i+1)],verde)
		screen.print(20,40,npcdialodo[(i+2)],verde)

Imagen de AdriGV

ups

es verdad no me di cuenta, gracias rober por responder tan rapido

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.