Anuncios Google

Duda en el manejo de tablas y 'string.explode'

Hola! Bueno, mi problema *hoy* (xD) es con los savedatas... bueno, más bien con el manejo de tablas. Aún no soy muy diestro en Lua, no lo soy en ningún lenguaje, y es por eso por lo que *muy* probablemente haya hecho un noobada de las gordas (otra más), pero... dejaré que el code se explique por sí solo...

function game.engine.savedata.save()
	saveplace = {gameid="LDEV", savenames="MHEH"};
	savelangig_readed = {
		title="Monster Hunter Epic Hunt™", 
		subtitle="Game Data",
		details="Game Data for Monster Hunter Epic Hunt™.",
		icon0="eboot/ICON0.PNG",
		pic1="eboot/PIC1.PNG"
	};
	data = {
		player = player,
		options = {
			cpu = menu.options.cpu,
			brightness = menu.options.brightness,
			dualload = menu.options.dualload
		}
	};
	done, where = savedata.autosave(saveplace, savelangig_readed, string.implode(data, "|@%")); -- 'done' almacena un valor booleano, si se guardó con éxito o no, y 'where' es un string que contiene el nombre del savedata guardado
	if done == true then
		return where;
	else
		return nil;
	end
end
 
function game.engine.savedata.load()
	saveplace = {gameid="LDEV", savenames="MHEH"};
	done, where, what = savedata.autoload(saveplace);
	if done == true then
		data = {
			player = nil,
			options = {
				cpu = nil,
				brightness = nil,
				dualload = nil
			}
		};
		data = string.explode(what, "|@%");
		player = data.player;
		menu.options.cpu = data.options.cpu;
		menu.options.brightness = data.options.brightness;
		menu.options.dualload = data.options.dualload;
		return done;
	else
		return nil;
	end
end

Tan sólo hay que quedarse con que menu es una tabla, contiene otra tabla en su interior, options, que a su vez aloja los elementos cpu (de tipo numérico), brightness (tmb de tipo numérico) y dualload (de tipo booleano).

Al cargar el savedata, carga el string en la variable what y después parte el string según el separador |@%. Por último, reasigna y... error...

espero que alguien pueda ayudarme,

muchas gracias y saludos!


http://www.mhypnok.blogspot.com/

Gracias a Dark_AleX, Total_Noob, VirtuousFlame, Coldbird, Codestation...


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.
Imagen de dj51_Shura

Muchas gracias a todos,

ya está resuelto.

Slau2!!!

Con un for: function

Con un for:

function implode(tabla)
local str = tabla[i]
 
for i = 2, #tabla do
str = str.."|@%"..tostring(tabla[i])
end
 
return str
end
 

ehm....

Y qué error sale? xD

PD. Cuidado, si usas string.implode en una tabla estilo...

tabla1 = { 
              var1 = "see", 
              var2 = 25, 
              var3 = true
             }

Te devolverá una cadena en blanco.

Imagen de DeViaNTe

Correctamente correcto (de

Correctamente correcto (de momento).

Ya veo que me vais a hacer mejorar mucho el implode... xD

El implode y explode solo funciona para arrays numericas, no con key=value.
Es decir, sólo con tablas tipo:

{ abc, abd, dca, bac } y no del tipo { aaa = bdc, aep = bd }, y mucho menos con tablas dentro de tablas.

Procesad manualmente la tabla y convertirla en string como os sea conveniente, no es necesario ni obligatorio el implode ni el explode, para guardar tiene k ser string, que cada coder se busque su propia convención.

Probad por ejemplo:
datos = { vida = 12, nivel = 23 }

function guardar()
 string = datos.vida..","..datos.nivel;
 -- y guardais esta string.
end

function cargar()
  string = load...
  datillos = string.explode(",");
  datos.vida = datillos[1];
  datos.nivel = datillos[2]; -- los hemos juntado por este orden, 1 vida, 2, nivel.
 -- etc...
end 


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

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.