Siempre tan f?ciles mis preguntas XD
Quiero lograr hacer un actualizador para un juego, se me ha ocurrido usar execute_string al comienzo del juego o durante el mismo para ir agregando las cosas q faltan en dicha version con respecto a la vieja, pero es muy tedioso, porq adem?s de programar la nueva versi?n hay que meter los cambios en un txt o algo. Tambi?n se me ocurri? trabajar con los archivos bin directamente sobre el exe, guardando en un txt los bytes que se encontraban diferentes en un exe y en el otro, y parec?a funcionar, pero tardaba demasiado en recorrer un archivo de 2mb, tanto para crear la actualizaci?n como para ponerla en pr?ctica (1 hora para actualizar 300kb no es algo viable)
Si alguien tiene una idea soy todo oidos, ya sea que se pueda resolver con Game Maker o con cualquier otro programa, ya prob? dll's de archivos bin y todas son m?s o menos lo mismo, no reducen demasiado el tiempo.
Bueno, de por s? gracias por haber le?do hasta ak, y si se les ocurre algo, mejor a?n :)




#1 Diciembre 29, 2010, 12:01:50 AM Ultima modificación: Diciembre 30, 2010, 05:11:41 AM por andrey!
xD creo que en descargas hay. . . dejame ver. . .

http://www.facebook.com/andrey957/posts/176625869036366?notif_t=like

EDIT: Damn it! que torpe soy xD

Me pasaste un link del face XD
Aun asi, creo q s? a q ejemplo te refer?s, pero el problema es q ese ejemplo descarga el archivo entero de vuelta y eso es justo lo q quiero evitar, el juego pesa 25mb por ahora y va a seguir aumentando a medida q agregue cartas porq son muchas y tienen q tener una definicion aceptable, lo que necesito es crear un programa q analize las diferencias entre las dos versiones y cree el parche o la actualizacios, y desp hacer un programa capaz de montar dicha actualizacion en el ejecutable de la version vieja para transformarla en la nueva




Me gustar?a saber que manejas en tu exe/gmk y que cosas cargas externamente.

Yo me imagino estas 3 opciones:

- Como ya mencionaste, que siempre descarguen todo el juego. (funciona en todos los casos, pero no es muy c?modo)
- Que descarguen solamente los sprites/musica/descripciones y el exe principal (siempre bajaran como 2-4mb minimo por culpa del exe, ya que tendras que modificarlo para que "detecte" las nuevas cosas)
- Que descarguen solamente los nuevos archivos externos, y que tu exe este configurado para trabajar con un numero "infinito" de cartas, as? no es necesario actualizar el exe cada ves que agregues algo peque?o (solamente para los grandes updates)

El problema es que tienes que encriptar o inventar un sistema para que no puedan modificar tus txts y puedan inventar cartas >.<

* Te recomiendo ver este dll, es mucho mejor que usar *.txt y para mi gusto es mas simple de usar que los *.xml ---> http://gmc.yoyogames.com/index.php?showtopic=432948&st=0
Puedes ordenar todas las descripciones/efectos de las cartas en un solo ini y acceder a esos datos con el gmk

Gracias por contestar
Uno de los principales problemas es q el c?digo cambia constantemente porq est? en desarrollo, y las cartas no se cargan de manera externa, sino interna. La cosa es q trabajar con un n?mero infinito de cartas es imposible en este caso, porq cada carta tiene su programaci?n propia, ataques y poke power, la parte de cargar las im?genes ser?a pan comido, pero lo q me cuesta es hacer q el c?digo cambie tambi?n, aunq se me ocurre q podr?a hacer un programa q analize el gmk sobre el q corre y guarde todo, desde backgrounds, sprites, codigos, objetos, etc. Luego q corra sobre otro y haga lo mismo, pero q al final elimine cada codigo q se repita 2 veces, asi quedar?an solamente las diferencias entre las versiones. Pero se me hace muy complicado
Si lograra saber c?mo funcionan internamente los archivos gmres...




Al menos yo uso as? los archivos *.ini (no debe ser lo mas correcto, pero funciona bien XD):
1. En tu caso ser?a crear el archivo "Cartas Jungla.ini" con lo siguiente
[gml][1]
sprite=sprJungla001
name=Bulbasaur
tipo=Hierba
coste=4
descripcion=Es un pokemon de tipo hierba/veneno que.......
atk1=...
power1=...
[2]
sprite=sprJungla002
name=Ivysaur
... //etc con cada una de las cartas, lo que esta entre "[]" es el nombre de la secci?n, asi no tienes que
[/gml]
2. Abrir el archivo al inicio del juego (usando el dll, no es tan malo dejarlo siempre abierto)
3. Que todas tus funciones lean el archivo ini, por ejemplo: [gml]draw_text(x,y,rini_read_string(ind,section,key,default))
//tienes que aprender a usar el dll que mencione para entender[/gml]

Al menos en mi intento de rpg no tengo problemas de lag por tener un archivo siempre abierto, y puedo tener a todos los enemigos del juego en un solo archivo externo :D

* La estructura del archivo es solo un ejemplo, otra puede ser mas eficiente.

Eso s? se puede hacer, no es la parte comlpicada, pero cada ataque est? programado en un script con su nombre para llamarlo f?cil desde otro objeto teniendo el nombre en un string. Como este script:

[gml]
name=string(sprite_get_name(CartaActivo.carta[1]))
name2=string(sprite_get_name(CartaActivoP2.carta[1]))
msgbox.msg=msgbox.msg+"#"+name+" us? Drenadoras"
if string(CartaActivoP2.carta[7])=string(CartaActivo.carta[3])
{
CartaActivoP2.carta[16]+=40
msgbox.msg=msgbox.msg+"#Es muy efectivo"
msgbox.msg=msgbox.msg+"#"+name2+" perdi? 40 puntos de HP"
dann=40
msgbox.msg=msgbox.msg+"#"+name+" recuper? 10 puntos#de HP"
if CartaActivo.carta[16]>=10 {CartaActivo.carta[16]-=10}
}
else
{
if string(CartaActivoP2.carta[8])=string(CartaActivo.carta[3])
{
msgbox.msg=msgbox.msg+"#Es poco efectivo"
msgbox.msg=msgbox.msg+"#"+name2+" no sufri? ning?n da?o"
}
else
{
CartaActivoP2.carta[16]+=20
msgbox.msg=msgbox.msg+"#"+name2+" perdi? 20 puntos de HP"
dann=20
msgbox.msg=msgbox.msg+"#"+name+" recuper? 10 puntos#de HP"
if CartaActivo.carta[16]>=10 {CartaActivo.carta[16]-=10}
}
}
if name2="Pidgeotto"
{
clearat()
global.atacadop2[1]=dann
}
global.turn=1 {FinTurn()}
[/gml]

Bueno, el punto es q si te fijas no hay ninguna funci?n q diga script_add ni nada, de ahi la sarta de comlicaciones para cambiar cosas externamente





O:
No lo conoc?a, y eso q busqu? updater en GMC
Muchas gracias, lo voy a probar!! :)