Marzo 15, 2012, 10:36:26 PM Ultima modificación: Marzo 16, 2012, 06:54:15 PM por Maniarts
Version GM
Game Maker 8 Pro y Game Maker Studio 1.0

Pregunta:
¿Como puedo hacer para que el juego se actualize si hay un nueva version disponible?

Nueva Pregunta:
-Es posible descargar un archivo con un ejecutable de Game Maker usando solamente script (esto puede resolver todo mi problema)

Algoritmo Prototipo
CitarSi (coneccion a internet) cierto
  {
   Leer "version online"
   Leer "version actual"
   Si ("version actual es menor que version online")
       {
       preguntar si desea actualizar y sobreescribir
       Si (desea actualizar y sobreescribir) cierto
           {
            Iniciar descarga
           }
       }
   }
   
Nota:
Preferible un ejemplo en GM 8  :GM8:

#1 Marzo 16, 2012, 04:34:05 PM Ultima modificación: Marzo 16, 2012, 04:43:25 PM por Gutic
Buenas, depende de cómo quieras enfocarlo.

Primero te recomiendo tener un programa aparte que se encargue de la actualización, sino es un rollo.

Yo te voy a exponer cómo lo hago yo en mi software para que sea seguro y no comprometa nuestro servidor, es muy simple:

¿Qué necesitamos?
1. Una dll que descargue los archivos del servidor
2. Un servidor
3. Una base de datos mysql
4. Aprender php y un poco de mysql, claro.

Entonces una vez que lo tengas todo listo debes crear una entrada en la BD que indique la última version del software disponible.

Ahora, llega el momento de ponerse con php; un ejemplo sería el siguiente:
<?php
//Primero conectamos con nuestra BD con nuestro usuario de BD y después
$consulta="SELECT version FROM (tabla) WHERE id=x"//Siendo "id" un identificador dentro de la tabla para saber qué entrada contiene la version del software
$resultado=mysql_query($consulta);
$ultversion=mysql_result($resultado0"version");
echo 
$ultversion;
?>


El software debe hacer lo siguiente:
1. Descargar el archivo php que nos indica la versión.
2. Leer la parte del archivo recibido que nos indica la actualización.
3. Comprobar que la versión del software (que puedes ponerla como una variable global) es igual y sino descargar el archivo que también se puede indicar con el php poniéndo el enlace en tu BD.

Si el archivo no pudo descargarse-> No hay conexión a internet o el servicio no está disponible
Tienes que planear cómo vas a hacer la estructura de los datos que vas a recibir por el archivo php, ésto es lo más latoso realmente, saber como interpretar la información y cuál cojer. Te recomiendo que pongas una clave de inicio y otra de fin de la información, ej. @) para iniciar datos que leer y (@ para saber que es el fin de los datos. Tendrías que tratarlo buscando dentro de la cadena del archivo dichos simbolos y cojer solo lo que hay entre ellos. ( string_pos(), string_cpy() )

Espero haberte ayudado. Se puede hacer de miles de formas diferentes, esta es limpia y segura a mi juicio.

¡Un saludo y ánimo!

Preguntas a Gutic:
-Que dll me recomiendas que sea compatible con gm
-El script PHP es compatible con GML?

Desarrollo de la idea:
-Como dice Gutic es recomendable usar un "Launcher" (programa paralelo encargado de actualizar, verificar datos y iniciar el juego, comun en juegos MMORPG)

Nueva Pregunta:
-Es posible descargar un archivo con un ejecutable de Game Maker usando solamente script (esto puede resolver todo mi problema)

#3 Marzo 16, 2012, 08:44:50 PM Ultima modificación: Marzo 16, 2012, 08:48:34 PM por Gutic
Hay una dll que yo uso que se llama DownloadManager en GMC de yoyogames, está hecha por hObbel, yo te recomendaría esta porque no se congela el juego mientras descarga y es muy fácil de usar, eso sí, bajate la versión 2, la uno no va en windows 7. Post GMC

Voy a darte paso por paso lo que debes hacer si vas a usar lo que te he dicho:
1. Crea una BD, con una tabla que se llame "X"
2. La tabla debe tener al menos dos campos, id, que para la actualización será 0, y version. Ésto lo vamos a hacer así poorque no vas a desperdiciar una tabla sólo para guardar la versión, ¿no? entonces si la quieres usar para algo más sólo procura que el id sea 0 para la actualización y para lo demás como creas conveniente, pero distinto.
3. Añade un elemento a la tabla X, id=0, version=Y
4. Sube el siguiente archivo version.php a tu servidor:

Código ("version.php") [Seleccionar]
(@ <?php
$link
=mysql_connect(servidor,usuariobd,contraseñauser);
mysql_select_db(nombrebd$link); 
$resultado mysql_query("SELECT version FROM X where id=0"$link); 
echo 
mysql_result($resultado0"version"); 
?>
@)

CitarServidor=Servidor Mysql (localhost normalmente)
Usuariobd=Usuario de la BD que vas a usar
Contraseñauser=Contraseña del usuario de esa BD
NombreBD=Base de datos a la que vas a acceder
X=Nombre de la tabla

5. Añade la dll que te he comentado en tu programa y haces que se descargue el archivo anterior.
6. Comprueba que se ha descargado con DM_GetCompleted(descarga);
7. Si se ha descargado tu aplicación debe hacer algo asi:

Código ("Script para leer datos") [Seleccionar]
file=file_text_open_read("archivo descargado");
v=file_text_read_string(file);
file_text_close(file);
if (string_pos("(@",ex)!=1)
{
///El archivo está dañado, o te has equivocado de enlace
}
else
{
v=string_copy(v,string_pos("(@",v)+string_length("(@"),string_length(v)-1);
v=string_copy(v,0,string_pos("@)",v)-1);
ultimavers=real(v);
if (global.versionactual<ultimavers)
{
//Preguntar si actualizar y si es así repetir el método de descarga con DownloadManager 2 para descargar el nuevo archivo.
}
}


Este código se encarga de comprobar que la información recibida es correcta (por eso (@ y @)) y coje lo que hay entre medias que es el número de la versión.

Php no es compatible con GML, php se ejecuta en el servidor y crea un archivo que es lo que recibe el usuario, por eso la orden echo.

Usando sólo funciones de Game Maker no estoy seguro de que consigas hacerlo, y si puedes, no podrás tener el control que vas a conseguir con la DLL que te he citado, es muy fácil de usar e incluye un ejemplo que seguro vas a entender.

Lo del Launcher, depende de qué quieres actualizar, porque si vas a actualizar el exe principal ¿cómo lo sustituyes si lo estás utilizando? Debe hacerlo otro programa.

Espero que te sirva, cualquier duda pregunta sin reparo.

¡Un saludo!

Bueno... no necesitas my sql pero si una dll, la cual viene junto a un tutorial de wadk el cual es bastante bueno-.
http://www.comunidadgm.org/index.php?page=verdescargas&accion=descargaD&download_id=2026

gracias a ambos por responder, voy a checkar ambas sugerencias a ver cual elijo.