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 - bygdle

856
¿No puedes poner windows 7?
Porque aunque W10 sea peor, W8 no se queda atrás :-[
857
Sí le has pillao xD
Bueno, hace unos escasos minutos he escrito lo mismo en otro post XD

Puedes poner una view, y cambiar el wport y el hport (¡OJO!, el wPORT, no el wVIEW, porque con el wview y hview sólo achicas lo que se muestra de la room en pantalla, no achicas las dimensiones en realidad)
Algo así:

[gml]
view_wport[0] = display_get_gui_width();
view_hport[0] = display_get_gui_height();
[/gml]

Y si quieres adaptarlo con las relaciones de aspecto, haz algunas divisiones, ahora mismo no estoy en condiciones de pensar mucho xD (Sin dormir 3 días xD), así que dale un poco de cabeza. Si algo, preguntas de nuevo
:-[ :'(
858
¿Cómo vas a probar el juego en celulares con Game Maker 8? :-[ :-\ XD
859
No, arcangelcaos, ni siquiera lo voy a descargar xD . La razón es que sencillamanet el título dice "Error con sistema de encriptación", no dice "denme un sistema de encriptación". No me gusta copypastear y ya, prefiero hacer mis propios códigos, y si necesito ayuda, pues abro un tema como este xD

Volviendo al tema, usé un while como dijo jmbs19, y sirvió a la perfección. Aquí dejo cómo quedó el código:

[gml]
///encode( str, key );
var str = argument0;
var key = argument1;

while string_length(str) > (string_length(key) + 1)
         {
            var rest = string_length(str) - string_length(key);
            var falt = string_copy(key,1,rest);
            key += falt;
         }
//show_message(key);

result = "";

for(i=1;i<=string_length(str);i++)
{
    result += chr(string_ord_at(str,i) + string_ord_at(key,i));
}
return base64_encode(result);
[/gml]

[gml]
///decode( str, key );
str = base64_decode(argument0);
key = argument1;
result = "";

while string_length(str) > (string_length(key) + 1)
         {
            var rest = string_length(str) - string_length(key);
            var falt = string_copy(key,1,rest);
            key += falt;
         }
//show_message(key);

for(i=1;i<=string_length(str);i++)
{
result += chr(string_ord_at(str,i) - string_ord_at(key,i));
}
return result;
[/gml]

SOLUCIONAOH
860
Preguntas y respuestas / Re:Resoluciones
Enero 11, 2016, 08:11:39 PM
Cita de: Grewyks en Enero 11, 2016, 08:06:53 PM
es posible hacer que el juego detecte la resolucion de una pantalla(...)?

Atiende, te lo dije en el post anterior XD  :-[ :-X
Cita de: NiuWeb en Enero 11, 2016, 07:25:13 PM
te recomiendo buscar un poco acerca de las funciones display_get_gui(...), que te serán útiles junto con las views.

Mira, lee la documentación:

display_get_gui_width
display_get_gui_height

Puedes poner una view, y cambiar el wport y el hport (¡OJO!, el wPORT, no el wVIEW, porque con el wview y hview sólo achicas lo que se muestra de la room en pantalla, no achicas las dimensiones en realidad)
Algo así:

[gml]
view_wport[0] = display_get_gui_width();
view_hport[0] = display_get_gui_height();
[/gml]
861
Los chinos son cool
Y no te complico la vida, te la facilto XD ;D
862
Cita de: kostra en Enero 11, 2016, 07:47:28 PM
ahora pásate por mi otro post JAJAJA
Ño xD

PD: te doy un consejo, a la hora de crear tus juegos, almacena TODAS las variables que serán globales en una ds_map global, como te lo mostré arriba. Esto para poder eliminar las variables globales que no uses de nuevo (cosa imposible de lograr con variables normales), y es más ordenadito y eficiente. O sea, olvídate de poner global.var1, global.var2. Sólo pon global.var[? 'valor1']...

[gml]
global.vars = ds_map_create();
ds_map_add(global.vars,"Perros",irandom(200));
ds_map_add(global.vars,"Gatos",irandom(160));

show_message("Hay " + string(global.vars[? 'Perros']) + " perros y " + string(global.vars[? 'Gatos']) + " gatos.");
[/gml]
863
Sí o sí debes usar una ds_map, ya que una variable convencional es un simple espacio de memoria, no puedes llamarlas o verlas desde strings.
Pero con ds_maps, es más fácil, sencillo, ordenado y eficiente.
Te dejo un ejemplo de cómo podrías hacerlo:

[gml]
global.vars = ds_map_create(); //Creamos el mapa que tendrá todas las variables

//agregamos los valores
ds_map_add(global.vars,"variable1","valor1");
ds_map_add(global.vars,"variable2","valor2");
[/gml]

Y cuando quieras hacer lo que mostraste en tu código, sólo haces:

[gml]
var variable = get_string("var","");
show_message( string( ds_map_find_value(global.vars,variable) ) );
[/gml]

Si el valor en la llave escrita por el get_string existe en el mapa, la función ds_map_find_value() devolverá el valor almacenado en dicha llave. De lo contrario, devolverá <undefined> (sin valor). Puedes usar la función is_undefined() para evitar problemas
864
Preguntas y respuestas / Re:Resoluciones
Enero 11, 2016, 07:25:13 PM
Te recomiendo 1280*720.
Pero debes tener en cuenta que aunque la mayoría de teléfonos tenga una proporción de 16:9, el tamaño no siempre es el mismo. Por ejemplo, si un dispositivo tiene su resolución de 640*360, el juego presentará problemas d rendimiento y el famoso Lag.
Para evitar eso, te recomiendo buscar un poco acerca de las funciones display_get_gui(...), que te serán útiles junto con las views.
Saludos
865
Oka, ya entiendo. Pero ahora mismo no se me ocurre una forma de "copypastear" la cadena como se supone debería hacerlo.
¿Cómo me recomiendas que lo haga?
866
Bueno, lo de la función ya tengo claro que sí existe. No aparece en el manual online, pero si miras el que viene con GMS, podrás encontrar la función completamente documentadita

Cambié lo del for, poniendo i=1;i<=(...), y me funcionó perfecto. Desencripto bien...PEEERO...
La seguridad es baja. Si intentas desencriptar con una clave incorrecta, sólo aparecen incorrectos los X (donde X = string_length(key)) primeros caracteres de la cadena, lo cual hace bastante inseguro.
Comento que ya cambié el código, no sé si está bien, pero lo puese así:
[gml]
///encode( str, key );
var str = argument0;
var key = argument1;

//Aquí, esto es lo importante...se supone que se rellena la clave para quedar igual que la cadena, pero si no marqué como solucionado es porque no funca xD
if string_length(key) < string_length(str)
{
    var falt = string_length(str) - string_length(key);
    var mas = string_copy(key,1,falt);
    key += mas;
}

result = "";

for(i=1;i<=string_length(str);i++)
{
result += chr(string_ord_at(str,i) + string_ord_at(key,i));
}
return base64_encode(result);
[/gml]

[gml]
///decode( str, key );
str = base64_decode(argument0);
key = argument1;
result = "";

//Igual que en a codificación
if string_length(key) < string_length(str)
{
    var falt = string_length(str) - string_length(key);
    var mas = string_copy(key,1,falt);
    key += mas;
}

for(i=1;i<=string_length(str);i++)
{
result += chr(string_ord_at(str,i) - string_ord_at(key,i));
}
return result;
[/gml]
867
Bueno, voy a probar lo de la longitud, se me ha ocurrido algo, que es repetir la clave X veces para rellenar lo que le hace falta para quedar de igual longitud a la cadena...a ver si es eso

Otra cosa, ¿Cómo que string_ord_at() no es una función?, yo la uso a diario, y es más, mira:


En mi GMS (1.4.1657) string_ord_at() es una función...


EDIT: antes de hacer los cambios de la key nombrados arribita (^), hice una pequeña prueba, encriptando "hola" con la clave "hola" (según lo que dice jmbs19, debería funcionar así), y al encriptarlo, me sale esto "w5DDkMOew5g=",el problema radica en que cuando lo desencripto, me sale esta mierda: "hhar"....el GM me odia T_T
868
Hola, en el proyecto que estoy haciendo llegué a un punto en el que es completamente necesario crear una encriptación para archivos de información, pero esta encriptación no puede ser desencriptable fácilmente, necesita una "clave" para desencriptarla. Por eso el base64 queda fuera, y los Hash igual, así que decidí buscar algunos ejemplos de cualquier lenguaje, y encontré uno muy bueno en PHP, así que me dediqué a traducirlo a GML. Al final me quedó así:

[gml]
///encode
str = argument0;
key = argument1;
result = "";

for(i=0;i<string_length(str);i++)
{
result += chr(string_ord_at(str,i) + string_ord_at(key,i));
}
return base64_encode(result);
[/gml]

Lo cual hace que así se desencripte el base64, haya un segundo nivel de protección para desencriptar el contenido, y este nivel es el que está protegido con contraseña.
Ahora, la desencriptación:

[gml]
///decode
str = base64_decode(argument0);
key = argument1;
result = "";

for(i=0;i<string_length(str);i++)
{
result += chr(string_ord_at(str,i) - string_ord_at(key,i));
}
return result;
[/gml]

Y se supone que con esto debería funcionar, pero sencillamente desencripta cosas que no son, por ejemplo, si encripto "hola", al desencriptar lo que ha encriptado me sale "hhhy", y cosas por el estilo

¿Alguien puede encontrar cuál es el error en este código? Yo no encuentro qué está mal, y aclaro que la clave de encriptación siempre es la misma por si alguien sale con esa idea xD
869
Preguntas y respuestas / ¿zip_zip?
Enero 09, 2016, 07:39:57 PM
Hola, acabo de iniciar un proyecto en GM, cosa que de por sí ya es bastante extraña :-[ , Y nada más crear el proyecto en blanco me encontré con un muro de 120 metros llamado zip_zip...
Sé que existe la función zip_unzip en GM, que sirve para descomprimir archivos .ZIP, pero en este caso, necesito también comprimir el archivo.
Había pensado crear una extensión, pero según lo que he leído, tendía que hacerla en Java para que pudiera usarla en Android, y de Java no sé nada (Ni siquiera he lograo crear un nuevo proyecto en Eclipse xD). Y aunque de VB sepa algo, no es lo suficiente...Por estas razones pienso que sería mejor hacerlo con código interno de GM, o en el peor de los casos, una extensión ya existente.
¿Alguien se ha topado de casualidad con una extensión que haga este trabajo? ¿De no existir, alguien me puede instruir para poder crear este sistema?
Muchas gracias a todos de posmano.
870
La respuesta es: ALARMAS
Usa una alarma, y una variable "puede disparar", así:
[gml]
//Evento CREATE
disparar = true;
[/gml]

[gml]
//Evento "disparar", en tu caso, press P
if disparar == true
{
  //tu código para disparar
  alarm[0] = room_speed * 2; //Dos segundos
  disparar = false; //Impedimos disparar
}
[/gml]

[gml]
//Evento alarm 0
disparar = true;
[/gml]

Y listo