Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - Mgbu

301
Che, eso de enigma está muy interesante, justo necesitaba emular un sistema de gravedad hace poco :D
302
Preguntas y respuestas / Re:[Problema] Rompeladrillos
Octubre 01, 2012, 10:19:23 PM
Cita de: Erthalion en Octubre 01, 2012, 09:35:54 PM
Cita de: Mgbu en Octubre 01, 2012, 07:44:20 PM
Cita de: Erthalion en Octubre 01, 2012, 06:35:34 PM
Para Mgbu:
Se me escapó a la vista esa regla  :-[.
Por otra parte, tampoco me funciona lo tuyo:


No hay forma de que funcione, ni poniendo 30 steps ni 1800.
30 steps son un segundo, 1800 son un minuto. Pero por lo que veo tendría que andar ¿En "Set alarm 0 to 30" lo dejaste en "Self"?

No, lo he cambiado, pero sigue igual. Lo he intentado con una pregunta de "If object X is larger than 0", para indicar que cuando haya más de 0, haga un "Set alarm 0 to 150" (sin el relative puesto), asigno la alarma0, creo otro evento con la alarma0 en Barra_larga (como el anterior con "Create"), en el que ha de hacer un sonido y hacer un "Change instance Barra_larga to Barra" (Self), pero ni aun así. Uso Windows 7, a lo mejor tiene algo que ver (a lo mejor tendría que haber empezado por ahí  :-[).
Tendria que funcionar, no se, a lo mejor pasandome el .gmk me doy cuenta
303
Preguntas y respuestas / Re:[Problema] Rompeladrillos
Octubre 01, 2012, 07:44:20 PM
Cita de: Erthalion en Octubre 01, 2012, 06:35:34 PM
Para Mgbu:
Se me escapó a la vista esa regla  :-[.
Por otra parte, tampoco me funciona lo tuyo:


No hay forma de que funcione, ni poniendo 30 steps ni 1800.
30 steps son un segundo, 1800 son un minuto. Pero por lo que veo tendría que andar ¿En "Set alarm 0 to 30" lo dejaste en "Self"?
304
Preguntas y respuestas / Re:[Problema] Rompeladrillos
Octubre 01, 2012, 05:21:03 PM
En las reglas solo permiten una pregunta por tema, pero bueno...

Nadie te contestó la más fácil :D
Cita de: Erthalion en Septiembre 30, 2012, 12:32:46 PM
1) Quiero que el power-up de la bola destructora dure un determinado tiempo, pero no se cómo hacerlo. He trasteado un poco con lo de Timeline, pero creo que eso y nada es lo mismo XD. ¿Alguna idea?
Eso se hace con alarmas, uno hace que se active la alarma dentro de el tiempo que especifiques para hacer lo que necesites
305
Juegos en desarrollo / Re:Rompeladrillos
Septiembre 30, 2012, 11:08:28 PM
Cita de: Erthalion en Septiembre 30, 2012, 10:05:41 PM
Cita de: Mgbu en Septiembre 30, 2012, 09:28:41 PM
Me gusta :P

Te recomiendo unas cositas:
- Adjuntá el juego al post así podés ver cuántas descargas tiene, se adjunta en Opciones Adicionales, que está abajo
- Hacé cuadrados los bloques de los alrededores, porque como son circulares la pelota rebota en todas direcciones
- Al dibujo de la paleta le podés hacer redondeada la parte superior, así la pelota rebota mal y uno puede apuntar hacia donde irá como en otros Rompeladrillos

Son ideas, pero el juego está muy bien, con el marcador de vidas, la explosión cuando se destruye la pelota... :D

1)No lo sabía XD.
2)Lo hice aposta. Verás, con los cuadrados que tenía antes, la forma de rebotar era demasiado..."lineal y anticipadora" que digamos. Por arte de magia, le cambie la imagen (que tiene el mismo tamaño) y ahora rebota así. Me gusta que haya reto jeje.
3)Al dibujo de la paleta...la barra, ¿no? Bien, cogí una que había hecha de muestra en el GM8. Tuve pensamientos de hacer eso. PEEEEEROOOO.... el problema es que toda imagen sprite siempre es cuadrada (independientemente de si se usan esos píxeles en blanco o no, que yo sepa), por lo que no puedo hacer nada para mejorar el actual sistema de colisión. Si quieres que cambie de dirección, intenta darle con la parte superior de las esquinas (puede que la bola se quede pillada ahí, otro problema de colisión).
No, cuando vo no pintas determinados pixeles, esos espacios en blanco no pertenecen al sprite y no son chequeados en la colisiones, fijate que en las paredes de circulos rebota para todos lados porque hay pedazos del sprite sin pintar. Para ver y modificar los puntos de colision de un sprite hacé click en el botón "Modify Mask", ahi se puede ver que las partes con sprite están más oscuras
306
Juegos en desarrollo / Re:Rompeladrillos
Septiembre 30, 2012, 09:28:41 PM
Me gusta :P

Te recomiendo unas cositas:
- Adjuntá el juego al post así podés ver cuántas descargas tiene, se adjunta en Opciones Adicionales, que está abajo
- Hacé cuadrados los bloques de los alrededores, porque como son circulares la pelota rebota en todas direcciones
- Al dibujo de la paleta le podés hacer redondeada la parte superior, así la pelota rebota mal y uno puede apuntar hacia donde irá como en otros Rompeladrillos

Son ideas, pero el juego está muy bien, con el marcador de vidas, la explosión cuando se destruye la pelota... :D
307
Preguntas y respuestas / Re:Control Configurable .....?
Septiembre 30, 2012, 09:13:38 PM
Solamente se me ocurre usando código. Pero no usando los eventos

Yo en una variable pondría el número a esa tecla, no tengo mucha idea de esto pero por lo que probé cada tecla tiene un número de identificación. Entonces por ejemplo en la variable but_disparo tendría guardado el numero 90, que corresponde a la tecla Z, después chequeas muy facilmente:

if keyboard_check(but_disparo) {
    //Disparar
}


Para configurar los controles podés usar la variable "keyboard_lastkey", que te dice el número de la última tecla apretada, entonces cuando configuras los controles normalmente hay un boton, ese boton hace que el juego espere hasta que apretes una tecla, cuando se apreta haces que "but_disparo=keyboard_lastkey" y listo
308
Preguntas y respuestas / Re:¿Dos objects en 1 view?
Septiembre 29, 2012, 09:54:46 PM
Acá lo había solucionado, no te culpo para nada porque fue dificil encontrarlo :P
Voy a hacer un script para eso :D
309
Yo nunca usé esas barras, por qué en vez de usar "\" usás "/"
Yo había abiertos unos archivos en carpetas y no recuerdo haber usado las barras al reves
310
No uses tus poderes de administracion para limpiar las huellas en la base de datos de la comunidad! XD
311
Noticias / Re:AcuaBirfa 2 ya disponible!
Septiembre 28, 2012, 12:06:32 PM
Ahora van a ir poniendo los juegos completos en noticias?
312
Me estas confundiendo :P
El unico array que encontre es cheats[], ese array solamente tiene a los trucos. Lo que uno teclea se guarda en keyboard_string, que solo guarda los ultimos 1024 caracteres
313
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 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
314
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
315
Cita de: Fenris78 en Septiembre 27, 2012, 01:51:12 PM
Me gusta el script, es muy ingenioso.

Es sencillo, util y muy facil de implementar. Enhorabuena.

Si he entendido bien como funciona (estoy un poco oxidado ultimamente), hay una cosa que no me termina de gustar y es que por lo que veo, hace un chequeo constante de la entrada de teclado sin comprobar cuanto tiempo pasa entre pulsaciones. Si uno se confunde escribiendo, o pulsa una tecla de mas, el script termina por no saber cuando el usuario a vuelto a intentar meter un cheat.

Si escribo:

Citarmediccomedicomedicomedico

El script entiende:

Citarmedicc
omedic
omedic

y te puedes llevar todo el tiempo que quieras escribiendolo que no lo vas a conseguir nunca.

podrias solucionar el problema añadiendo un testeo tras pulsar la ultima tecla del codigo correcto mas largo. Si no coincide, limpias el array y comienzas de cero. Tambien puedes hacer lo mismo si pasan mas de x segundos entre pulsaciones, ya que se entiende que el usuario esta iniciando otro intento. De esta forma tambien ahorras espacio en el array y velocidad de proceso. Tal y como esta diseñado ahora mismo, el array continua creciendo indefinidamente con cada entrada de teclado.
Gracias por las felicitaciones, dan ganas de hacer más scripts :D

Lo del error no pasa, porque se fija los ultimos 6 caracteres del keyboard_string, no los multiplos de 6 (si el truco mide 6 caracteres). Fijate en esta parte del código:
[gml]
escrito=string_copy(keyboard_string,largoescrito-largo+1,largo) //escrito = ultimos caracteres de keyboard_string (si el truco mide 6 se fija los ultimos 6, si el truco mide 5 se fija los ultimos 5 y así)
[/gml]