Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Samigabacho en Septiembre 26, 2012, 04:58:21 PM

Título: Cambiar variables por archivo externo (SOLUCIONADO)
Publicado por: Samigabacho en Septiembre 26, 2012, 04:58:21 PM
Hola a todos y todas,
soy nuevo en la comunidad y llevo muy poco usando GM.

Tras la presentación ahí va mi consulta:

Estoy desarrollando un juego muy sencillo. Se podría decir que es algo muy parecido a un Space Invader aunque con algunas variaciones.
En el juego hay una serie de variables que afectan a lo que sucede en el desarrollo del mismo, como por ejemplo, la aparición de un enemigo, el cambio de color de algunos otros enemigos. Por el momento la gran mayoría de las cosas en el juego suceden de manera aleatoria (v.gr., dando valores con random (); al comienzo de cada alarma), pero mi intención es que estas variables cambien de valor dependiendo de cierto orden preestablecido.
Este orden estará escrito en un archivo (v.gr., un archivo .txt), y desearía saber si hay alguna manera de que al principio del juego pueda "cargar" dicho .txt que dará valores a lo largo del desarrollo del juego a las variables.

Mmmm creo que ha quedado un poco oscura la pregunta, voy a intentar ilustrarlo con un ejemplo:

Variables:
Gran_disparo: 1 o 0 (indica si aparece el evento)
Sprite_enemigo: 1(rojo), 2(verde), 3 (amarillo)

en el archivo .txt:

Milisegundos desde comienzo(linea de tiempo):             1000  2200.............
Gran_disparo:                                                            1        0   ..............
Srite_enemigo:                                                          2         1   .............

Espero haberme hecho entender, en caso contrario decirlo y lo intento de nuevo.
Tengo más dudas pero por el momento, necesito saber si esto es factible antes de seguir.
Muchas gracias.

Título: Re:Cambiar variables por archivo externo
Publicado por: Mgbu en Septiembre 26, 2012, 05:28:54 PM
Si, es como guardar lo que va a pasar en un archivo txt
Es algo que se puede hacer sin el archivo, pero es mas divertido hacer el txt :P

Eso se hace con las funciones de esta sección del manual (http://www.comunidadgm.org/manual_GM/Archivos_GML.htm)
Así que vas a tener que escribir el txt y buscar la forma de que el juego lo entienda, no es tan facil, por eso hay ejemplos o scripts que te lo haen más fácil.
Un ejemplo es BD, un conjunto de script y cosas que hacen una tabla (algo así como excel) para guardar y cargar cuando quieras, puede ser un poco dificil pero lo hace más fácil. La BD de que te hablo está aquí (http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=2336), también justo subieron un programita (http://www.comunidadgm.org/index.php?topic=17499.msg83271#msg83271) para hacer grids (http://www.comunidadgm.org/manual_GM/Rejillas.htm) (tablas), también se ve bueno

Lo más fácil es hacer un archivo .ini (http://www.comunidadgm.org/manual_GM/Archivos_INI.htm), el problema es que es mas limitado, porque soporta guardar valores solamente, algo así como:
[Nivel 1]
enemigo1=rojo
enemigo2=verde
enemigo3=rojo
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Septiembre 26, 2012, 05:40:32 PM
Muchas gracias compañero Mgbu,
de momento todo lo que me sugieres me suena a chino porque estoy empezando, pero me has dado una gran pista de por dónde puedo comenzar a leer para aprender a hacerlo y sobre todo... al menos ya se que SI se puede hacer, así que voy al lío.
Título: Re:Cambiar variables por archivo externo
Publicado por: Mgbu en Septiembre 26, 2012, 05:59:39 PM
Como vi que ya programabas con codigo oensé que estabas bastante avanzado, pero esta muy bien :P
Para lo que necesitas lo mas facil me parece que es que aprendas a usar grids, y crearlas con el ejemplo que subieron hace poquito que te mostre:
Cita de: Mgbu en Septiembre 26, 2012, 05:28:54 PM
También justo subieron un programita (http://www.comunidadgm.org/index.php?topic=17499.msg83271#msg83271) para hacer grids (http://www.comunidadgm.org/manual_GM/Rejillas.htm) (tablas), también se ve bueno
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Septiembre 26, 2012, 07:20:55 PM
Aquí voy de nuevo...  ;)

He descargado el programa que me has sugerido, que si no he entendido mal me permite hacer tablas donde definir diferentes valores que luego podrán exportarse a GM.
Tras generar una posible tabla y "encriptarla" (supongo que esto es transformarla a formato .gml, que me imagino que es el formato de los script por lo que creo haber leído en el manual) me da un archivo .gml.
(http://desmond.imageshack.us/Himg210/scaled.php?server=210&filename=62398450.jpg&res=landing)

¿Ese archivo contiene toda la información que la tabla y además en la misma forma? Cuando lo he abierto con un editor las cosas que salían eran casi ilegible.
Si es así, imagino que habrá que añadir el script al juego, pero... ¿cómo se saca la información de este? ¿quizás llamando desde código GML desde otra parte del juego?
Título: Re:Cambiar variables por archivo externo
Publicado por: Mgbu en Septiembre 26, 2012, 08:31:07 PM
Ese programa (que no puedo usar porque no me anda) supongo genera un texto que lee el Game Maker que tiene toda la informacion de la tabla. Luego a ese texto lo guarda en un archivo
Luego tu juego tiene que leer lo que dice el archivo y crear la tabla para ser usada. Para leer el archivo tenés que usar las funciones para leer archivos (http://www.comunidadgm.org/manual_GM/Archivos_GML.htm), guardas lo que tiene el archivo como un string y le pasas el string a la siguiente función: ds_grid_read(id,str)

Es decir, la función que mencioné antes lee un string creado desde un grid, ese string viene del programita, cuando usás esa función reconstruís el grid que había creado el programa. Pero como no me anda no estoy bien seguro de como funciona. Obviamente vas a tener que aprender a usar grids para manejar la informacion del cuadro

Todo esto se puede hacer con un array bidimensional, un array bidimensional es una tabla, en donde vos buscas por ejemplo variable=tabla[6,4], ahí variable tiene el valor de la celda 6,4
hau que hacer que el juego lea un array desde un archivo de texto. Yo te recomiendo usar el programa porque hace muy facil hacer la tabla y te ahorra el trebajo de decodificar el archivo ¿Entendes?
porque o si no vas a tener que hacer un archivo de texto como:
Milisegundos.Gran Disparo.Disparo
2000.1.2
2600.0.1
4000.5.6

Y crear un código que traduzca eso en un array, que es bastante mas dificil. Bueno, si sabes manejar strings te va a salir

Cualquier cosa en un rato te hago un ejemplito, pero no se si te gustaría mas usar arrays o grids
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Septiembre 26, 2012, 09:40:06 PM
Ante todo... gracias de nuevo amigo Mgbu por tu atención y dicho esto continuo con mis dudas...

sigo intentando dar lógica a lo que hace el programa DB. He leído que tras hacer la tabla (por ejemplo la imagen que puse antes) el encristar la información genera un documento que puede importarse como script.
Y será ese, el fichero que se adjuntará a el juego como script.
En mi caso salio esto:
/*
Encryption script generated from Alasdair Forsythe's GM Database Support Random Encryption Script Generator.
Encryption Script ID = 6858143
argument0 is the string to encrypt/decrypt.
argument1 whether to encrypt (true) or decrypt (false).
*/

//a
if argument1==1
{
argument0=string_replace_all(argument0,' ','è');
argument0=string_replace_all(argument0,'(','²');
argument0=string_replace_all(argument0,')','«');
argument0=string_replace_all(argument0,'*','ü');
argument0=string_replace_all(argument0,'+','Ç');
argument0=string_replace_all(argument0,',','µ');
argument0=string_replace_all(argument0,'-','½');
argument0=string_replace_all(argument0,'.','¼');
argument0=string_replace_all(argument0,'/','Á');
argument0=string_replace_all(argument0,'0','±');
argument0=string_replace_all(argument0,'1','È');
argument0=string_replace_all(argument0,'2','å');
argument0=string_replace_all(argument0,'3','à');
argument0=string_replace_all(argument0,'4','Ó');
argument0=string_replace_all(argument0,'5','Ì');
argument0=string_replace_all(argument0,'6','â');
argument0=string_replace_all(argument0,'7','ã');
argument0=string_replace_all(argument0,'8','Ý');
argument0=string_replace_all(argument0,'9','Ò');
argument0=string_replace_all(argument0,':','×');
argument0=string_replace_all(argument0,';','Ö');
argument0=string_replace_all(argument0,'<','ñ');
argument0=string_replace_all(argument0,'=','À');
argument0=string_replace_all(argument0,'>','õ');
argument0=string_replace_all(argument0,'A','Ú');
argument0=string_replace_all(argument0,'E','´');
argument0=string_replace_all(argument0,'I','Æ');
argument0=string_replace_all(argument0,'O','Ï');
argument0=string_replace_all(argument0,'T','¶');
argument0=string_replace_all(argument0,'U','Ù');
argument0=string_replace_all(argument0,'[','ð');
argument0=string_replace_all(argument0,'\','þ');
argument0=string_replace_all(argument0,']','Ê');
argument0=string_replace_all(argument0,'a','ó');
argument0=string_replace_all(argument0,'b','·');
argument0=string_replace_all(argument0,'c','Ë');
argument0=string_replace_all(argument0,'d','ø');
argument0=string_replace_all(argument0,'e','Ä');
argument0=string_replace_all(argument0,'f','Õ');
argument0=string_replace_all(argument0,'g','ì');
argument0=string_replace_all(argument0,'h','»');
argument0=string_replace_all(argument0,'i','ï');
argument0=string_replace_all(argument0,'j','ý');
argument0=string_replace_all(argument0,'k','ç');
argument0=string_replace_all(argument0,'l','î');
argument0=string_replace_all(argument0,'m','Ü');
argument0=string_replace_all(argument0,'n','ô');
argument0=string_replace_all(argument0,'o','¹');
argument0=string_replace_all(argument0,'p','ú');
argument0=string_replace_all(argument0,'r','ª');
argument0=string_replace_all(argument0,'s','ö');
argument0=string_replace_all(argument0,'t','÷');
argument0=string_replace_all(argument0,'u','á');
argument0=string_replace_all(argument0,'{','Í');
argument0=string_replace_all(argument0,'|','¿');
argument0=string_replace_all(argument0,'}','Ð');
}
else
//b
{
argument0=string_replace_all(argument0,'è',' ');
argument0=string_replace_all(argument0,'²','(');
argument0=string_replace_all(argument0,'«',')');
argument0=string_replace_all(argument0,'ü','*');
argument0=string_replace_all(argument0,'Ç','+');
argument0=string_replace_all(argument0,'µ',',');
argument0=string_replace_all(argument0,'½','-');
argument0=string_replace_all(argument0,'¼','.');
argument0=string_replace_all(argument0,'Á','/');
argument0=string_replace_all(argument0,'±','0');
argument0=string_replace_all(argument0,'È','1');
argument0=string_replace_all(argument0,'å','2');
argument0=string_replace_all(argument0,'à','3');
argument0=string_replace_all(argument0,'Ó','4');
argument0=string_replace_all(argument0,'Ì','5');
argument0=string_replace_all(argument0,'â','6');
argument0=string_replace_all(argument0,'ã','7');
argument0=string_replace_all(argument0,'Ý','8');
argument0=string_replace_all(argument0,'Ò','9');
argument0=string_replace_all(argument0,'×',':');
argument0=string_replace_all(argument0,'Ö',';');
argument0=string_replace_all(argument0,'ñ','<');
argument0=string_replace_all(argument0,'À','=');
argument0=string_replace_all(argument0,'õ','>');
argument0=string_replace_all(argument0,'Ú','A');
argument0=string_replace_all(argument0,'´','E');
argument0=string_replace_all(argument0,'Æ','I');
argument0=string_replace_all(argument0,'Ï','O');
argument0=string_replace_all(argument0,'¶','T');
argument0=string_replace_all(argument0,'Ù','U');
argument0=string_replace_all(argument0,'ð','[');
argument0=string_replace_all(argument0,'þ','\');
argument0=string_replace_all(argument0,'Ê',']');
argument0=string_replace_all(argument0,'ó','a');
argument0=string_replace_all(argument0,'·','b');
argument0=string_replace_all(argument0,'Ë','c');
argument0=string_replace_all(argument0,'ø','d');
argument0=string_replace_all(argument0,'Ä','e');
argument0=string_replace_all(argument0,'Õ','f');
argument0=string_replace_all(argument0,'ì','g');
argument0=string_replace_all(argument0,'»','h');
argument0=string_replace_all(argument0,'ï','i');
argument0=string_replace_all(argument0,'ý','j');
argument0=string_replace_all(argument0,'ç','k');
argument0=string_replace_all(argument0,'î','l');
argument0=string_replace_all(argument0,'Ü','m');
argument0=string_replace_all(argument0,'ô','n');
argument0=string_replace_all(argument0,'¹','o');
argument0=string_replace_all(argument0,'ú','p');
argument0=string_replace_all(argument0,'ª','r');
argument0=string_replace_all(argument0,'ö','s');
argument0=string_replace_all(argument0,'÷','t');
argument0=string_replace_all(argument0,'á','u');
argument0=string_replace_all(argument0,'Í','{');
argument0=string_replace_all(argument0,'¿','|');
argument0=string_replace_all(argument0,'Ð','}');
}



Imagino que ahí estará la misma información que en la tabla pero... ¿de qué manera puedo acceder a esta información mientras el juego va pasando?

He visto en el manual que:
ds_grid_get(id,x,y)
Devuelve el valor de la celda indicada, pero la cosa es que no tengo muy claro que eso contenga celdas.

En verdad el array bidimensional creo que no me vendría bien ya que necesito pasar más de dos variable.
Otra cosa diferente es que pudiera hacer un objeto, que contuviera diferentes arrays para cada una de las variables que quiero ir cambiando y que al leer el archivo guardara en la dichos arrays todos los valores que las variables tomarían a lo largo del juego:
tiempo_ms [tiempo_total];
Color_enemigo [numero_de_cambios];
Gran_ataque [numero_de_cambios];
etc[]

de tal manera que compruebo el tiempo que está pasando comparándolo con los milisegundo donde debe pasar algo (que tengo guardado en tiempo_ms [tiempo_total]) y a la vez recorro los otros arrays asignando el valor que tenga a la variable que corresponda...

lo malo de todo esto es.... que no se como hacerlo en GM8  ;)





Título: Re:Cambiar variables por archivo externo
Publicado por: Mgbu en Septiembre 26, 2012, 11:02:22 PM
Cita de: Samigabacho en Septiembre 26, 2012, 09:40:06 PM
Ante todo... gracias de nuevo amigo Mgbu por tu atención y dicho esto continuo con mis dudas...

sigo intentando dar lógica a lo que hace el programa DB. He leído que tras hacer la tabla (por ejemplo la imagen que puse antes) el encristar la información genera un documento que puede importarse como script.
Y será ese, el fichero que se adjuntará a el juego como script.
En mi caso salio esto:
/*
Encryption script generated from Alasdair Forsythe's GM Database Support Random Encryption Script Generator.
Encryption Script ID = 6858143
argument0 is the string to encrypt/decrypt.
argument1 whether to encrypt (true) or decrypt (false).
*/

//a
if argument1==1
{
argument0=string_replace_all(argument0,' ','è');
argument0=string_replace_all(argument0,'(','²');
argument0=string_replace_all(argument0,')','«');
argument0=string_replace_all(argument0,'*','ü');
argument0=string_replace_all(argument0,'+','Ç');
argument0=string_replace_all(argument0,',','µ');
argument0=string_replace_all(argument0,'-','½');
argument0=string_replace_all(argument0,'.','¼');
argument0=string_replace_all(argument0,'/','Á');
argument0=string_replace_all(argument0,'0','±');
argument0=string_replace_all(argument0,'1','È');
argument0=string_replace_all(argument0,'2','å');
argument0=string_replace_all(argument0,'3','à');
argument0=string_replace_all(argument0,'4','Ó');
argument0=string_replace_all(argument0,'5','Ì');
argument0=string_replace_all(argument0,'6','â');
argument0=string_replace_all(argument0,'7','ã');
argument0=string_replace_all(argument0,'8','Ý');
argument0=string_replace_all(argument0,'9','Ò');
argument0=string_replace_all(argument0,':','×');
argument0=string_replace_all(argument0,';','Ö');
argument0=string_replace_all(argument0,'<','ñ');
argument0=string_replace_all(argument0,'=','À');
argument0=string_replace_all(argument0,'>','õ');
argument0=string_replace_all(argument0,'A','Ú');
argument0=string_replace_all(argument0,'E','´');
argument0=string_replace_all(argument0,'I','Æ');
argument0=string_replace_all(argument0,'O','Ï');
argument0=string_replace_all(argument0,'T','¶');
argument0=string_replace_all(argument0,'U','Ù');
argument0=string_replace_all(argument0,'[','ð');
argument0=string_replace_all(argument0,'\','þ');
argument0=string_replace_all(argument0,']','Ê');
argument0=string_replace_all(argument0,'a','ó');
argument0=string_replace_all(argument0,'b','·');
argument0=string_replace_all(argument0,'c','Ë');
argument0=string_replace_all(argument0,'d','ø');
argument0=string_replace_all(argument0,'e','Ä');
argument0=string_replace_all(argument0,'f','Õ');
argument0=string_replace_all(argument0,'g','ì');
argument0=string_replace_all(argument0,'h','»');
argument0=string_replace_all(argument0,'i','ï');
argument0=string_replace_all(argument0,'j','ý');
argument0=string_replace_all(argument0,'k','ç');
argument0=string_replace_all(argument0,'l','î');
argument0=string_replace_all(argument0,'m','Ü');
argument0=string_replace_all(argument0,'n','ô');
argument0=string_replace_all(argument0,'o','¹');
argument0=string_replace_all(argument0,'p','ú');
argument0=string_replace_all(argument0,'r','ª');
argument0=string_replace_all(argument0,'s','ö');
argument0=string_replace_all(argument0,'t','÷');
argument0=string_replace_all(argument0,'u','á');
argument0=string_replace_all(argument0,'{','Í');
argument0=string_replace_all(argument0,'|','¿');
argument0=string_replace_all(argument0,'}','Ð');
}
else
//b
{
argument0=string_replace_all(argument0,'è',' ');
argument0=string_replace_all(argument0,'²','(');
argument0=string_replace_all(argument0,'«',')');
argument0=string_replace_all(argument0,'ü','*');
argument0=string_replace_all(argument0,'Ç','+');
argument0=string_replace_all(argument0,'µ',',');
argument0=string_replace_all(argument0,'½','-');
argument0=string_replace_all(argument0,'¼','.');
argument0=string_replace_all(argument0,'Á','/');
argument0=string_replace_all(argument0,'±','0');
argument0=string_replace_all(argument0,'È','1');
argument0=string_replace_all(argument0,'å','2');
argument0=string_replace_all(argument0,'à','3');
argument0=string_replace_all(argument0,'Ó','4');
argument0=string_replace_all(argument0,'Ì','5');
argument0=string_replace_all(argument0,'â','6');
argument0=string_replace_all(argument0,'ã','7');
argument0=string_replace_all(argument0,'Ý','8');
argument0=string_replace_all(argument0,'Ò','9');
argument0=string_replace_all(argument0,'×',':');
argument0=string_replace_all(argument0,'Ö',';');
argument0=string_replace_all(argument0,'ñ','<');
argument0=string_replace_all(argument0,'À','=');
argument0=string_replace_all(argument0,'õ','>');
argument0=string_replace_all(argument0,'Ú','A');
argument0=string_replace_all(argument0,'´','E');
argument0=string_replace_all(argument0,'Æ','I');
argument0=string_replace_all(argument0,'Ï','O');
argument0=string_replace_all(argument0,'¶','T');
argument0=string_replace_all(argument0,'Ù','U');
argument0=string_replace_all(argument0,'ð','[');
argument0=string_replace_all(argument0,'þ','\');
argument0=string_replace_all(argument0,'Ê',']');
argument0=string_replace_all(argument0,'ó','a');
argument0=string_replace_all(argument0,'·','b');
argument0=string_replace_all(argument0,'Ë','c');
argument0=string_replace_all(argument0,'ø','d');
argument0=string_replace_all(argument0,'Ä','e');
argument0=string_replace_all(argument0,'Õ','f');
argument0=string_replace_all(argument0,'ì','g');
argument0=string_replace_all(argument0,'»','h');
argument0=string_replace_all(argument0,'ï','i');
argument0=string_replace_all(argument0,'ý','j');
argument0=string_replace_all(argument0,'ç','k');
argument0=string_replace_all(argument0,'î','l');
argument0=string_replace_all(argument0,'Ü','m');
argument0=string_replace_all(argument0,'ô','n');
argument0=string_replace_all(argument0,'¹','o');
argument0=string_replace_all(argument0,'ú','p');
argument0=string_replace_all(argument0,'ª','r');
argument0=string_replace_all(argument0,'ö','s');
argument0=string_replace_all(argument0,'÷','t');
argument0=string_replace_all(argument0,'á','u');
argument0=string_replace_all(argument0,'Í','{');
argument0=string_replace_all(argument0,'¿','|');
argument0=string_replace_all(argument0,'Ð','}');
}


Imagino que ahí estará la misma información que en la tabla pero... ¿de qué manera puedo acceder a esta información mientras el juego va pasando?
He visto en el manual que:
ds_grid_get(id,x,y)
Devuelve el valor de la celda indicada, pero la cosa es que no tengo muy claro que eso contenga celdas.
Ooops,  logré abrir el programa, pero nunca me salió eso :-[
Por lo que veo es para desencriptar un texto, o sea para descifrar un texto codificado
Que programa usaste? el DBMaker (http://www.comunidadgm.org/index.php?topic=17499.msg83271#msg83271)?

Según sé estás buscando usar ese programa, así que ahora lo pude abrir te digo que te falta hacer

Primero en el programa hace tu tabla, no es dificil, cualquier cosa pregunta, también con F1 hay ayuda
Despues hay que guardarlo, apretas el diskette y te va a buscar guardar un archivo con extensión .monsterdb, ponele la extensión que más te guste porque es lo mismo
Podés abrir ese archivo con el bloc de notas, vas a ver que son todos numeros en linea, "escritos sin apretar enter"
Después en tu juego hay que leer eso:
Para eso abrimos el archivo que hizo el programa, leemos lo que tiene adentro y lo guardamos en una variable. Cambia "archivo.extensión" por lo que tengas, por defecto el programa crea "New database.monsterdb"
Luego creamos una grid en donde guerdar todo y usamos la función magica de "ds_grid_read"
[gml]archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo

grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid
[/gml]
Supuestamente debería funcionar, pero me da "Unexpected error ocurred during the game", nunca me pasó, no entiendo como se e puede complicar tanto XD
Así que estoy reiniciando mi PC para ver que pasa, si no se arregla voy a abrir un tema para solucionarlo


Cita de: Samigabacho en Septiembre 26, 2012, 09:40:06 PM
En verdad el array bidimensional creo que no me vendría bien ya que necesito pasar más de dos variable.
Otra cosa diferente es que pudiera hacer un objeto, que contuviera diferentes arrays para cada una de las variables que quiero ir cambiando y que al leer el archivo guardara en la dichos arrays todos los valores que las variables tomarían a lo largo del juego:
tiempo_ms [tiempo_total];
Color_enemigo [numero_de_cambios];
Gran_ataque [numero_de_cambios];
etc[]

de tal manera que compruebo el tiempo que está pasando comparándolo con los milisegundo donde debe pasar algo (que tengo guardado en tiempo_ms [tiempo_total]) y a la vez recorro los otros arrays asignando el valor que tenga a la variable que corresponda...

lo malo de todo esto es.... que no se como hacerlo en GM8  ;)
Un array bidimensional puede tener todas las filas y columnas que quieras, ¿Te referis a eso?

Por ejemplo para vos saber el color del enemigo en el instante 3500 primero tenés que saber en qué fila está el instante 3500, así que vas buscando una por una con un for, sría algo así
[gml]
for (i=0;i<=cantidad_filas;i+=1) {
    if array[0,i]=3500 fila=i //La columna es 0 porque es la primera
}
[/gml]
A lo mejor no sabes usar los ciclos for, no importa, copialo y pegalo que es eso nomas XD

Ahora que sabemos la fila buscamos el valor de la columna 1 en la fila conocida:
[gml]
color_enemigo=array[1,fila]
[/gml]

Perdon por hacerlo tan complicado y largo :-[
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Septiembre 27, 2012, 09:13:05 AM
CitarOoops,  logré abrir el programa, pero nunca me salió eso
Por lo que veo es para desencriptar un texto, o sea para descifrar un texto codificado
Que programa usaste? el DBMaker?

La verdad es que el programa que he usado no es DBMaker, no por nada, si no porque el instalador me da un error "bdmaker.exe no es una aplicación Win32 válida", así que he usado otro, que intuyo es parecido, que he encontrado en el foro de la comunidad.
El nombre del programa es GM Database Support v3.1 y no se porqué extraña razón ahora no soy capaz de encontrar donde se encuentra en el foro para hacer el link :D

Siguiendo con lo que planteas... creo que ya lo voy pillando, realmente no hay que incluir el archivo encriptado, lo que hay que hacer es leer el archivo simple que genera, es decir la tabla traducida a una matriz, ¿me equivoco?
En mi esto podría ser un ejemplo:

0
1
{1}<Untitled>{2}
6,6
{1}momento_1{2}momento_2{3}momento_3{4}momento_4{5}momento_5{6}momento_6{7}
{1}ITI ms{2}PRE ms{3}CS ms{4}CONTEXTO{5}CS{6}US{7}
{1}300{2}400{3}700{4}200{5}500{6}300{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}1{2}1{3}1{4}1{5}1{6}1{7}
{1}1{2}1{3}2{4}1{5}2{6}2{7}
{1}1{2}1{3}0{4}1{5}0{6}0{7}


Ya solo faltaría leerlo y hacer lo que me sugieres:
CitarLuego creamos una grid en donde guerdar todo y usamos la función magica de "ds_grid_read"
archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo

grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid
Supuestamente debería funcionar, pero me da "Unexpected error ocurred during the game", nunca me pasó, no entiendo como se e puede complicar tanto
Así que estoy reiniciando mi PC para ver que pasa, si no se arregla voy a abrir un tema para solucionarlo
Siempre y cuando funcione :D

CitarUn array bidimensional puede tener todas las filas y columnas que quieras, ¿Te referis a eso?
Qué zote que estoy hecho, claro! Dos dimensiones no significa dos capacidades si no dos dimensiones. ¿El primer valor del array indica columnas y el segundo filas? Si eso es así, se podría guardar en cada una de las filas el valor de una variable a lo largo del juego ¿no?

for (j=0;j<=cantidad_columbnas;J+=1){
    for (i=0;i<=cantidad_filas;i+=1){
        <hacer_aquí_las_asignaciones>
    }
}

Título: Re:Cambiar variables por archivo externo
Publicado por: Mgbu en Septiembre 27, 2012, 08:11:36 PM
Cita de: Samigabacho en Septiembre 27, 2012, 09:13:05 AM
La verdad es que el programa que he usado no es DBMaker, no por nada, si no porque el instalador me da un error "bdmaker.exe no es una aplicación Win32 válida", así que he usado otro, que intuyo es parecido, que he encontrado en el foro de la comunidad.
El nombre del programa es GM Database Support v3.1 y no se porqué extraña razón ahora no soy capaz de encontrar donde se encuentra en el foro para hacer el link :D

Siguiendo con lo que planteas... creo que ya lo voy pillando, realmente no hay que incluir el archivo encriptado, lo que hay que hacer es leer el archivo simple que genera, es decir la tabla traducida a una matriz, ¿me equivoco?
En mi esto podría ser un ejemplo:

0
1
{1}<Untitled>{2}
6,6
{1}momento_1{2}momento_2{3}momento_3{4}momento_4{5}momento_5{6}momento_6{7}
{1}ITI ms{2}PRE ms{3}CS ms{4}CONTEXTO{5}CS{6}US{7}
{1}300{2}400{3}700{4}200{5}500{6}300{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}1{2}1{3}1{4}1{5}1{6}1{7}
{1}1{2}1{3}2{4}1{5}2{6}2{7}
{1}1{2}1{3}0{4}1{5}0{6}0{7}

Ahhh, muy bien, aunque se llamen parecido los programas en realidad son bastante distintos, bueno, eso es lo que va en el txt. Ahora falta que el juego lea eso, así que tenemos que usar los scripts que vienen en el rar que descargaste. Como hace bastante que no lo uso y para no equivocarme lo descargué de nuevo y esto es lo que tuve que hacer:
1- Hice mi tabla y la guardé como tabla.txt
2- Como el script es tan viejo, no es compatible con GM8, por suerte Ferhand me pasó los scripts arreglados, entonces descargá el gmk que adjunté, es un ejemplo para la carga de tablas como esa. Ese ejemplo está preparado para cargar varias tablas a la vez, así que hay dos arrays que debés conocer:
var_tablas[x,x]: Guarda los datos de las tablas, en [1,1] guarda el nombre de la tabla 1, en [1,2] guarda la cantidad de filas de esa tabla y en [1,3] guarda las columnas de la tabla. Si cargás dos tablas la información de la segunda tabla está en [2,1],[2,2] y [2,3], etc. Se vería algo así como:





Cantidad de tablas 
Nombre tabla 1  Nombre tabla 2 
Cant filas tabla 1  Cant filas tabla 2 
Cant columnas tabla 1  Cant columnas tabla 2 
Los bbcodes no me dejan poner bordes....
var_nombretabla[x,x]: Obviamente tenés que cambiar el "nombretabla" por el nombre de tu tabla, ahí guarda lo que a vos te interesa, en [0,0] guarda el numero que tiene esa tabla en var_tablas[] (no es tan importante). En la primera columna guarda el nombre de las filas y en la primer fila el nombre de las columnas, entonces el array se vería algo así como:




Numero de tabla  Nombre fila 1  Nombre fila 2 
Nombre columna 1-datos-  -datos- 
Nombre columna 2-datos-  -datos- 
Si esto se te hace muy dificil decime que te ajusto el script a lo que necesites, te hago descargar el ejemplo para que veas que funciona, además podés ver bien como se usa

3- Entonces copia el script "scr_cargar" del adjunto a tu juego, ponele el nombre que quieras

4- Llama al script (con el nombre que elejiste), por ejemplo: scr_cargar("tabla.txt"). Fijate que hay que darle como argumento el nombre del archivo a abrir

5- Usar los arrays -al fin! XD-

Cita de: Samigabacho en Septiembre 27, 2012, 09:13:05 AM
Ya solo faltaría leerlo y hacer lo que me sugieres:
CitarLuego creamos una grid en donde guerdar todo y usamos la función magica de "ds_grid_read"
archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo

grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid
Supuestamente debería funcionar, pero me da "Unexpected error ocurred during the game", nunca me pasó, no entiendo como se e puede complicar tanto
Así que estoy reiniciando mi PC para ver que pasa, si no se arregla voy a abrir un tema para solucionarlo
Siempre y cuando funcione :D
No le hagas caso a eso porque es para cuando usas el otro programa, hacé lo de arriba
Título: Re:Cambiar variables por archivo externo
Publicado por: ferhand en Septiembre 27, 2012, 09:01:18 PM
  Saludos makero Samigabacho:


  El "script" "cargar" que el makero Mgbu te envió es capaz de "cargar" un fichero de base de datos creado con el "GM Database Support" y lo transforma en un objeto con muchos "arrays". Cada "array" se covierte en una tabla de la base de datos y el nombre de cada "array" será el prefijo "tb_" más el nombre de la tabla que representa, osea "tb_nombretabla".

  Si tienes en la BD una tabla llamada "saturno", el "array" creado dentro del objeto será "tb_saturno".

Una vez que quieras salvar la base de datos completa utiliza el "script" "grabar" y le pasas como argumento el nombre del objeto base de datos que has estado utilizando en tu juego. Esto creará un fichero de texto con todos los datos en él.

El problema es que estos "scripts" son viejos y fueron una prueba para lograr algo mejor. Estoy trabajando en los "scripts" mejorados. Estos viejos pueden traer problemas ya que al guardar no seleccionan el fichero BD para escribir la salva en el.

Te prometo para el lunes traerte los "scripts" actualizados.

  Gracias por la atención prestada y disculpen las molestias ocasionadas.   ;D 
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Septiembre 27, 2012, 09:37:39 PM
Muchas gracias por tu atención compañero ferhand.
La verdad es que todo me sigue pareciendo un poco extraño (será porque aun estoy un poco verde), aunque poco a poco empiezo a comprender.

Esto es el script "cargar":
archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo




y ¿esto es el de "Guardar"?:
grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid


¿no va todo junto?
Y... si va junto imagino que al script se le pasaría un argument0, que sería una cadena con el nombre del archivo (por ejemplo... "mi_BD.txt"), no?
Título: Re:Cambiar variables por archivo externo
Publicado por: ferhand en Septiembre 27, 2012, 09:49:58 PM
  Saludos makero Samigabacho:


  El primer segmento de código parece mío, pero el segundo definitivamente no. Yo jamás he usado "grids" (cuadrículas).  :-\

  ¡Qué alegría! Vi en tu perfil que tenemos la misma edad.   XD

  Permíteme hacer una pregunta: ¿Cuando hablas de que estás verde, cuán verde estás? Lo digo para orientarte mejor. Si son tus primeros pasos en GM deberías primero seguir ciertos "tutoriales" antes de emprender el camino de hacer tu propio juego. Parece más lento, pero en realidad es mucho más rápido.  :-[

  Espero respuesta compañero de años...  ;D 
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Septiembre 27, 2012, 10:01:50 PM
El código que puse me lo pasó muy amablemente el compañero  Mgbu, aunque creo que a el le dio cierto error.

En cuanto a mi verdor...
Conozco algo sobre programación orientada a objeto (hace tiempo hice un curso), y más o menos intento aplicar parte de la lógica a lo que voy viendo por aquí, aunque no sé la manera correcta de cómo hacer muchas cosas.
Por el momento, me he leído el manual de la comunidad y ahora estoy viendo algunos videotutoriales en youtube que me están ayudando bastante a entender menor.
De hecho, creo que mi juego (la interfaz) está más que lista para lo que necesito. Es sencillo y si es necesario lo iré perfeccionando con el tiempo.
Pero lo que realmente me interesa saber (ya que si no el propósito de hacer el juego pierde el sentido) es poder decirle al juego en cada momento (en segundos o milisegundos) qué es lo que tienen que hacer algunos objetos (como por ejemplo cambiar de color durante 5 segundos, lanzar un ataque en un segundo concreto, etc...) y además de eso (pero esto lo dejo para el futuro) poder almacenar en variables las respuestas del jugador y el momento en el que las hace con el fin de poder escribir un fichero (por ejemplo un .txt) guardando toda esa información.

¿Es muy complicado? :D
Título: Re:Cambiar variables por archivo externo
Publicado por: Mgbu en Septiembre 27, 2012, 10:19:51 PM
Cita de: Samigabacho en Septiembre 27, 2012, 09:37:39 PM
Muchas gracias por tu atención compañero ferhand.
La verdad es que todo me sigue pareciendo un poco extraño (será porque aun estoy un poco verde), aunque poco a poco empiezo a comprender.

Esto es el script "cargar":
archivo = file_text_open_read("archivo.extensión") //Abrimos el archivo
contenido_archivo = file_text_read_string(archivo) //Guardamos lo que tenía escrito el archivo
file_text_close(archivo) //Cerramos el Archivo




y ¿esto es el de "Guardar"?:
grid = ds_grid_create(0,0) //Creamos una grid en donde guardar todo
show_message(contenido_archivo)
ds_grid_read(grid,contenido_archivo) //Guardamos lo que tenía el archivo en la grid


¿no va todo junto?
Y... si va junto imagino que al script se le pasaría un argument0, que sería una cadena con el nombre del archivo (por ejemplo... "mi_BD.txt"), no?
No, esperá, ese código no sé de donde salió EDIT: Mirandolo de nuevo ese es el código para cargar lo que hace el programa que no funciona, te estoy mareando mucho :-[. Hagamos una cosa, olvida todos los codigos anteriores y seguí esto.

Haciendo de cuenta que tenés un archivo llamado tabla.txt o como sea,, creado con ESTE (http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=2336) programa, el que se llama GM Database Support: Database file creator, el de la foto que me mandaste antes, adentro tiene que tener lo que me dijiste que tenías hecho:
0
1
{1}<Untitled>{2}
6,6
{1}momento_1{2}momento_2{3}momento_3{4}momento_4{5}momento_5{6}momento_6{7}
{1}ITI ms{2}PRE ms{3}CS ms{4}CONTEXTO{5}CS{6}US{7}
{1}300{2}400{3}700{4}200{5}500{6}300{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}5000{2}5000{3}5000{4}5000{5}5000{6}5000{7}
{1}1{2}1{3}1{4}1{5}1{6}1{7}
{1}1{2}1{3}2{4}1{5}2{6}2{7}
{1}1{2}1{3}0{4}1{5}0{6}0{7}


Creá un script, con el nombre scr_guardar, y adentro pegá esto:
{
/* 
    La idea es un "script" que le pasamos una base de datos y, a partir
     de ahí crea el objeto base de datos con sus "arrays" correspondientes
*/
    // crear un "array" por cada tabla
    var var_file /*fichero*/, var_linea /*cada línea de la BD*/, var_nombre/**/;
    var_tablas[0,1] = 'tb_nombre';
    var_tablas[0,2] = 'tb_filas';
    var_tablas[0,3] = 'tb_columnas';
    if(file_exists(argument0))
    {
        var_file = file_text_open_read(argument0);          // abrir el fichero para leer
        file_text_readln(var_file);                         // saltar a la segunda linea
        var_tablas[0,0] = file_text_read_real(var_file);    // leer la cantidad de tablas
        file_text_readln(var_file);                         // saltar a la tercera linea       
        var_linea = file_text_read_string(var_file);        // leer los nombres de las tablas 

/* Extraer nombre de cada Tablas */   

        for(i=1;i<var_tablas[0,0]+1;i+=1)                     // Para cada tabla...
        {                                                   // extraer el nombre y guardarlo en el "array" var_tablas
            var_tablas[i,1] = string_copy(var_linea, string_pos('{' + string(i) + '}',var_linea)+2+string_length(string(i)),string_pos('{' + string(i+1) + '}',var_linea)-string_pos('{' + string(i) + '}',var_linea)-(2+string_length(string(i))));
            //var_tablas[i] = var_nombre;
           
        }

/* Crear los "Arrays" "tb_NombreTabla" */
       
       for(i=1;i<var_tablas[0,0]+1;i+=1)
       {
            variable_local_array2_set("tb_"+string(var_tablas[i,1]),0,0,i); // Creo un array por cada tabla llamado "tb_nombretabla" y guardo orden de tabla.
       }

/* Para cada Tabla */

       for(i=1;i<var_tablas[0,0]+1;i+=1) // para cada tabla
       {
            file_text_readln(var_file);                         // saltar a la cuarta linea (columnas, filas)
            var_linea = file_text_read_string(var_file);        // leer (columnas, filas) de las tablas
       
/* Cantidad de Columnas y Filas */
       
            var_tablas[i,2] = real(string_copy(var_linea, string_pos(',',var_linea)+1, string_length(var_linea)-(string_pos(',',var_linea)))     ); // filas de la tabla
            var_tablas[i,3] =  real(string_delete(var_linea, string_pos(',',var_linea), string_length(var_linea)-(string_pos(',',var_linea)-1))  ); // columnas de la tabla
           
            file_text_readln(var_file);                         // saltar a la quinta linea (nombre de columnas)
            var_linea = file_text_read_string(var_file);        // leer (nombre de columnas) de las tablas
           
/* Nombre de Columnas */
           
            for(j=1;j<real(var_tablas[i,3])+1;j+=1) // para cada columna
            {
                variable_local_array2_set("tb_"+string(var_tablas[i,1]), 0, j, string_copy(var_linea, string_pos('{' + string(j) + '}',var_linea)+2+string_length(string(j)),string_pos('{' + string(j+1) + '}',var_linea)-string_pos('{' + string(j) + '}',var_linea)-(2+string_length(string(j)))) );
            }
           
            file_text_readln(var_file);                         // saltar a la sexta linea (nombre de filas)
            var_linea = file_text_read_string(var_file);        // leer (nombre de filas) de las tablas
           
/* Nombre de Filas */
           
            for(j=1;j<real(var_tablas[i,2])+1;j+=1) // para cada fila
            {
                variable_local_array2_set("tb_"+string(var_tablas[i,1]), j, 0, string_copy(var_linea, string_pos('{' + string(j) + '}',var_linea)+2+string_length(string(j)),string_pos('{' + string(j+1) + '}',var_linea)-string_pos('{' + string(j) + '}',var_linea)-(2+string_length(string(j)))) );
            }
           
/*  Llenar Datos de Tablas*/   
         
            for(j=1;j<real(var_tablas[i,2])+1;j+=1) // para cada fila de la tabla
            {
                file_text_readln(var_file);                         // saltar a la septima línea (datos tabla)
                var_linea = file_text_read_string(var_file);        // leer (datos tabla)
               
                for(k=1;k<real(var_tablas[i,3])+1;k+=1) // para cada columna de la fila de la tabla
                {
                    variable_local_array2_set("tb_"+string(var_tablas[i,1]), j, k, string_copy(var_linea, string_pos('{' + string(k) + '}',var_linea)+2+string_length(string(k)),string_pos('{' + string(k+1) + '}',var_linea)-string_pos('{' + string(k) + '}',var_linea)-(2+string_length(string(k)))) );
                }
            }
       }
    }
}

Bueno, ese script debe ser llamado con un argumento que es el nombre del archivo, entonces en el create de un objeto ponés
scr_cargar("tabla.txt")
Con el nombre de archivo que tengas.

Ahora se te habrá creado un array llamado "tb_nombretabla" dependiendo como has llamado a la tabla

Listo, recordá cómo esta escrito el array, como te expliqué antes:
Citarvar_nombretabla[x,x]: Obviamente tenés que cambiar el "nombretabla" por el nombre de tu tabla, ahí guarda lo que a vos te interesa, en [0,0] guarda el numero que tiene esa tabla en var_tablas[] (no es tan importante). En la primera columna guarda el nombre de las filas y en la primer fila el nombre de las columnas,

Ahora tenemos que hacer que el juego haga algo en tal milisegundo, a esto lo expliqué así que lo cito y lo modifico un poco:
Cita de: Mgbu en Septiembre 26, 2012, 11:02:22 PM
Por ejemplo para vos saber el color del enemigo en el instante 3500 primero tenés que saber en qué fila está el instante 3500, así que vas buscando una por una con un for, sría algo así
[gml]
for (i=1;i<=cantidad_filas;i+=1) {
    if array[1,i]=3500 fila=i //La columna es 1 porque es la columna con los milisegundos
}
[/gml]

Ahora que sabemos la fila buscamos el valor de la columna 1 en la fila conocida:
[gml]
color_enemigo=array[2,fila] //Ahora uso la columna 2 porque es la columna de los colores
[/gml]

EDIT: Cualquier cosa si no es molestia pasame el gmk con la tabla que necesites así acomodo todo para que lo puedas usar, obviamente después explico bien todo lo que tuve que hacer
Título: Re:Cambiar variables por archivo externo
Publicado por: ferhand en Septiembre 27, 2012, 10:21:23 PM
Makero Samigabacho:


  Por lo que necesitas de realizar acciones en ciertos momentos, te recomiendo que leas algo sobre los "time lines". Aun que no hay nada que no se pueda hacer con las "alarms".

  En la página de "yoyogames", en la sección de "tutoriales" hay un "tutorial" muy completo paso a paso sobre como hacer un juego "shooter". En dicho "tutorial" tocan elementos como los "time lines", "alarms" y otros muy necesarios para comprender y dominar el GM. Claro, ellos asumen que pasaste el primer "tutorial".

  Mi recomendación es que sigas el "tutorial", si no tienes problemas con el inglés, y verás que muchas de esas preguntas estarán más que respondidas.   :D

   Link a yoyogames: aquí (http://sandbox.yoyogames.com/make/tutorials) 

  Disculpa la demora en la respuesta...  ;D 
Título: Re:Cambiar variables por archivo externo
Publicado por: ferhand en Septiembre 28, 2012, 05:14:30 PM
  Saludos makero Samigabacho:


  Disculpa la demora.  :-[

   Acá te dejo un "script" para cargar todo un fichero de BD creado con el "GM Database Support". Para que funcione solo lo debes llamar y pasarle como argumento una cadena de caracteres compuesta por el nombre del fichero y su extensión.  Por ejemplo: "basedatos.txt"

Luego, en el objeto desde el cual llamas al "script", se crean unos "arrays":
* Un "array" bidimensional, cuyo nombre es el argumento pasado al "script", que contiene información de todas las tablas de la forma:
  basedatos.txt[0,0] = cantidad total de tablas,  [0,1] = nombre de tabla,  [0,2] = cantidad total de filas, [0,3] = cantidad total de columnas
[1,0]= nada, [1,1] = nombreTabla_1, [1,2] = 6, [1,3] = 2,
[1,0]= nada, [1,1] = nombreTabla_2, [1,2] = 4, [1,3] = 5,
[1,0]= nada, [1,1] = nombreTabla_3, [1,2] = 3, [1,3] = 10,

* Un "array" bidimensional para cada tabla. El nombre de este "array" es el nombre de la tabla, por ejemplo: "nombreTabla_1[2,1]", de la forma:

nombreTabla_1[0,0] = nada, [0,1] = nombre_columna_1, [0,2] = nombre_columna_2, [0,3] = nombre_columna_3
[1,0] = nombre_fila_1, [1,1] = valor, [1,2] = valor, [1,3] = valor,
[2,0] = nombre_fila_2, [2,1] = valor, [2,2] = valor, [2,3] = valor,
[3,0] = nombre_fila_1, [3,1] = valor, [3,2] = valor, [3,3] = valor,


Puedes aceder a los nombre de cada tabla, la cantidad de columnas y filas en el primer "array". Los nombres de cada fila, columna, así como sus valores en lños "arrays" creados para cada tabla.

Parece complicado, pero es sencillo una vez lo comprendes. Tienes todo organizado y listo para usarse.

Esta versión del "script" solo carga fichero sin encriptar, la hice ayer por la tarde. El Lunes te traigo la de "guardar" y luego le agregamos la función de "enciptar - desencriptar".

  Cualquier duda pregunta. No estaré el fin de semana, pero el Lunes nos podemos ver (escribir.)  :-[

Disculpa por las molestias causadas y hasta la próxima.  ;D   

Edito:  Se me olvidaba el adjunto. Suerte que Mgbu me lo recordó... :-[ 
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Septiembre 28, 2012, 05:41:22 PM
Guau!!!
Me dejáis con la boca abierta... muchas gracias compañeros ferhand y Mgbu por vuestra disponibilidad y rapidez.
Dejadme un tiempo para ver si entiendo el código (a fin de progresar en mi instrucción en GML) que seguro regresaré con alguna duda :D
Gracias de nuevo y buen fin de semana!
Título: Re:Cambiar variables por archivo externo
Publicado por: ferhand en Septiembre 28, 2012, 07:10:59 PM
  Saludos makero Samigabacho:

  No te preocupes por este código. Primero aprende el código básico general, que es más fácil, luego con una breve explicación entenderás este...   ;D

PD: te puse los "scripts" en el mensaje anterior..
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Octubre 01, 2012, 11:04:44 AM
Hola amigos, aquí vuelvo a la carga...:D
he mirado los dos script que me habéis dejado y creo que son más o menos lo mismo.
Al hacer la primera prueba para ver si me funcionaba me he topado con el siguiente mensaje de error:

Citar___________________________________________
ERROR in
action number 1
of Other Event: Game Start
for object Info:

In script scr_guardar2:
Error in code at line 60:
           for(i=1; i <= variable_global_array2_get(string(argument0),0,0); i+=1)  // Para cada tabla...
                         ^
at position 24: Cannot compare arguments.
A ver si doy con la tecla...
¿podrías ser porque la variable array2 no está inicializada? aunque creo haber leído que en GML no hace falta inicializar variables no?

EDITO: El que me ha dado error es el facilitado por el compañero ferhand pero he probado el facilitad por Mgbu y ha corrido sin problema.
Título: Re:Cambiar variables por archivo externo
Publicado por: ferhand en Octubre 01, 2012, 03:54:19 PM
  Saludos makero Samigabacho:


  Dos respuestas atrás, en este tema, te dejé un adjunto con el "script" para cargar que si debe funcionar. Este es un "punto gml" que debes ingresarlo al proyecto con la opción "import script".

   Lo hice precisamente porque los "scripts" de "cargar" y "guardar" enviados antes no estaban pensados para ese formato de datos.

  Te pido por favor que me disculpes la demora y trates de probar el último que te dejé como adjunto dos respuestas atrás.

  Gracias por la atención prestada y disculpa las molestias causadas.  ;D
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Octubre 01, 2012, 06:08:08 PM
Amigo ferhand, ahí radicaba mi error... abrir el fichero "scr_cargar_old_0.1.gml" con un editor y copie y pegué en un nuevo script. Ahora que lo he hecho importando ha funcionado perfectamente, o al menos eso creo ya que aún no he podido verificar que recibe los valores de la misma manera que son mandados.
De hecho es lo que voy a pasar a verificar intentando sacarlos por pantalla.
Muchas gracias de nuevo y... no hace falta que te disculpes por nada, de hecho me estás ayudando mucho.
:D
EDITADO: Siento rectificarme, pero sigue dando error:


___________________________________________
ERROR in
action number 1
of Create Event
for object obj_inicio:

In script scr_cargar:
Error in code at line 59:

                        ^
at position 23: Cannot compare arguments.
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Octubre 01, 2012, 08:19:11 PM
Bueno definitivamente el script de Mgbu me funciona (el que me sugiere en la última respuesta de la primera página). He añadido un antes de que termine el script un mensaje emergente para ver si llega la ejecución hasta el final... y lo hace.
    show_message("Cargado diseño...??");

Pero me interesaría saber si realmente está los datos que he cargado (sobre todo para intentar comprender mejor el código), así que intento pintarlo en un room antes de que el juego comience:
    var columna, fila;
   
    for (columna = 1; columna <real(var_tablas[columna,3])+1;columna +=1){
        for (fila = 1; fila <real(var_tablas[fila,2])+1;fila+=1){
            draw_text(x+(columna-1)*64, y+(fila-1)*16, string (tb_Diseno_1[columna, fila]));
        }
    }

Imagino que no debe de ser la manera ya que me da un error
Título: Re:Cambiar variables por archivo externo
Publicado por: Mgbu en Octubre 01, 2012, 10:52:32 PM
Cita de: Samigabacho en Octubre 01, 2012, 08:19:11 PM
Bueno definitivamente el script de Mgbu me funciona (el que me sugiere en la última respuesta de la primera página). He añadido un antes de que termine el script un mensaje emergente para ver si llega la ejecución hasta el final... y lo hace.
    show_message("Cargado diseño...??");

Pero me interesaría saber si realmente está los datos que he cargado (sobre todo para intentar comprender mejor el código), así que intento pintarlo en un room antes de que el juego comience:
    var columna, fila;
   
    for (columna = 1; columna <real(var_tablas[columna,3])+1;columna +=1){
        for (fila = 1; fila <real(var_tablas[fila,2])+1;fila+=1){
            draw_text(x+(columna-1)*64, y+(fila-1)*16, string (tb_Diseno_1[columna, fila]));
        }
    }

Imagino que no debe de ser la manera ya que me da un error
El código que me dió Ferhand para leer las BD es este:
for(i=0;i<var_tablas[1,2]+1;i+=1)       // para cada fila
    {
        for(j=0;j<var_tablas[1,3]+1;j+=1)   // para cada columna
        {
            a = variable_local_array2_get("tb_"+string(var_tablas[1,1]),i,j);
            draw_text(50+(j*100),50+(i*25),a);
        }
    }

Fijate que a la cantidad de filas y columnas las saca del array "var_tablas", su funcionamiento lo expliqué antes:
Citarvar_tablas[x,x]: Guarda los datos de las tablas, en [1,1] guarda el nombre de la tabla 1, en [1,2] guarda la cantidad de filas de esa tabla y en [1,3] guarda las columnas de la tabla. Si cargás dos tablas la información de la segunda tabla está en [2,1],[2,2] y [2,3]. La tercer tabla en [3,1],[3,2] y [3,3], etc.
Como ves si sabés la cantidad de filas y de columnas no es tan necesario.
Otra cosa complicada es "a = variable_local_array2_get("tb_"+string(var_tablas[1,1]),i,j);", esa función extraña aparece ahí porque el código está preparado para funcionar con una tabla de cualquier nombre, tranquilamente podés reemplazar esa línea por "a=tb_nombretabla[i,j]"

YA estamos cerca! :D
A eso lo podés pegar como está en el step, aunque al igual que el scr_guardar tiene cositas que no las necesitás, pero igual como están deben funcionar bien (a mi me funciona XD)
Título: Re:Cambiar variables por archivo externo
Publicado por: Samigabacho en Octubre 02, 2012, 07:33:41 PM
Al fin lo tengo, creo que entiendo más o menos el código y introduciendo  show_message(); en cada parte del código más o menos se como opera.
El código para pintar el array no me funciona con draw_text(), pero si con show_message().
Sigo teniendo algunas dudas respecto al código, pero creo que el objetivo de la pregunta está más que cumplido, así que se podría dar por SOLUCIONADO y pasos mis demás dudas a preguntas nuevas más concretas.
PD. Muchísimas gracias a Mgbu y Ferhand os acabáis de ganar a un amigo :D
Título: Re:Cambiar variables por archivo externo
Publicado por: Mgbu en Octubre 02, 2012, 10:07:32 PM
Jeje muchas gracias, me esforcé XD
Está muy bueno como alternativa "show_debug_message()", escribe el mensaje cuando corres en "Debug Mode" (El play rojo). Para ver los mensajes de esa función, en la ventana de debug andá a Tools>Show Messages, te abre una ventana en donde van apareciendo los mensajes, me gusta porque no para el juego, no molesta cuando no se necesita y guarda los mensajes
Título: Re:Cambiar variables por archivo externo
Publicado por: ferhand en Octubre 03, 2012, 06:12:16 PM
Cita de: Mgbu en Octubre 02, 2012, 10:07:32 PM
Jeje muchas gracias, me esforcé XD
Está muy bueno como alternativa "show_debug_message()", escribe el mensaje cuando corres en "Debug Mode" (El play rojo). Para ver los mensajes de esa función, en la ventana de debug andá a Tools>Show Messages, te abre una ventana en donde van apareciendo los mensajes, me gusta porque no para el juego, no molesta cuando no se necesita y guarda los mensajes
  Saludos amigos:

  ¡ Increíble! Yo no sabía acerca de esa función...  :o 

   Eso me hará la vida más fácil...