Bienvenidos sean a este post, hasta el post anterior hemos creado un archivo para almacenar el record o puntaje mas alto pero ahora le daremos un giro especial.
Pero porque queremos encriptar estos archivos? Por una simple razon, no queremos que las personas puedan modificar nuestros datos asi como asi, por ejemplo tenemos el caso de los puntajes donde no deseamos que se modifique manualmente por fuera del juego pero tampoco estaremos protegiendo informacion super vital o credenciales hiper importantes por esta razon veremos como trabajar con una codificacion base64.
Si bien vamos a hablar sobre encriptar nuestros datos pero usaremos un estandar que cualquier persona con un poco de conocimiento puede llegar a desencriptar dicha informacion, por eso es recomendable usar este metodo en conjuncion con operaciones arimeticas, pero hoy no hablaremos sobre esto sino que lo haremos de una manera mas simple, para comenzar con nuestra encriptacion deberemos ir al objeto de pausa, obj_Pausa, en el evento Draw modificaremos el case que esta dentro del condicional donde verificamos si presionamos Enter, veamos primero el case como es su codigo ahora:
case 1:
ini_open("score.ini");
ini_write_real("puntajealto",
"puntajealto",
global.puntaje_alto);
ini_close();
global.room_destino = rm_setup;
instance_create_depth(
0,0,0,
obj_Transicion);
break;
Lo modificaremos de la siguiente manera:
case 1:
ini_open("score.ini");
record_codificado = base64_encode(
string(global.puntaje_alto));
ini_write_string("puntajealto",
"puntajealto",
record_codificado);
ini_close();
global.room_destino = rm_setup;
instance_create_depth(
0,0,0,
obj_Transicion);
break;
En este caso seguimos abriendo el archivo INI, luego creamos una variable llamada record_codificado y le asignaremos el valor de la funcion base64_encode, veamos esa linea de un tiron:
record_codificado = base64_encode(string(global.puntaje_alto));
Esta funcion solo trabaja con string y por ende solo devuelve este tipo de dato, para poder convertir el valor de puntaje_alto en cadena o string usamos a la funcion con el mismo nombre que la convertira por nosotros, con el valor obtenido y asignado a record_codificado, nuestro siguiente paso sera escribirlo pero cambiamos a ini_write_real por ini_write_string, como dijimos en el post anterior trabaja de la misma forma, y la unica diferencia esa en el valor que pasamos, en lugar de pasar el dato global pasamos el valor que obtuvimos anteriormente, por ultimo cerramos el archivo INI.
Salvo la pequeña modificacion de la codificacion y el cambio de la funcion para escribir como cadena el resto siguen haciendo las mismas tareas, con esto ya podemos escribir solo nos resta recuperar la informacion y decodificarla, para ello debemos ir al room de raiz, rm_setup, presionamos el boton Creation Code y del codigo que nos aparece tomaremos la siguiente linea:
global.puntaje_alto = ini_read_real(
"puntajealto",
"puntajealto",
190);
Y la reemplazaremos por esta:
record_decodificado = base64_decode(
ini_read_string("puntajealto",
"puntajealto",
0));
Al igual que antes creamos una nueva variable para almacenar la decodificacion realizada por base64_decode y dentro usaremos a la funcion para leer pero otra vez de tipo string y este trabaja de la misma forma que el otro, con esto tenemos obtenido el resultado pero en formato cadena o string y esto hara que no lo podamos usar como numero pero aca entrara en accion otra magia, detras de esta linea agregaremos el siguiente bloque:
if (record_decodificado!="")
{
global.puntaje_alto = real(
record_decodificado);
}
else
{
global.puntaje_alto = 0;
}
En este condicional verificamos que record_decodificado sea distinto de nada, esto lo hacemos porque la primera vez siempre nos devolvera un valor vacio, en el primer caso cuando existe un valor asignara a puntaje_alto el valor obtenido en record_decodificado pero por medio de la funcion real para convertir la cadena (string) en un numero y podemos procesarlo en el juego, en el caso contrario asumimos que record_decodificado no existe y por ende el valor va a ser 0, con todo esto concluido ya tenemos los valores para el «record», para la ultima modificacion debemos ir a la ubicacion donde trabaja nuestro juego y borraremos el archivo score.ini que existe ahi, nuestro siguiente paso sera ir a la carpeta datafiles y modificaremos el archivo score.ini de la siguiente manera:
[puntajealto]
puntajealto = "0"
Como pueden ver la unica diferencia es que pusimos el numero entre comillas, recuerden que ahora busca valores de tipo string, con estas dos modificaciones podemos pasar a probarlo, compilemos y veamos el siguiente video
En el video podemos ver como todo funciona normalmente pero ahora vemos como se genero nuestro archivo, completamos un buen record y cuando abrimos el archivo podemos observar como ahora esta codificado y «nadie» podria modificar al mismo.
En resumen, hoy hemos visto un concepto de como «encriptar» los valores almacenados de nuestro juego, hemos visto como utilizar una codificacion basica, como almacenarla y luego hemos visto como recuperarla, tambien hemos preparado todo para cuando nuestro juego inicie por primera vez, espero les hay gustado sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00
