Autor: JBJ
Dificultad/Habilidades: Media-Alta. Necesitas tener nociones de programación informática.
Descripción del tutorial: En este tutorial aprenderemos a crear instaladores para cualquier aplicación, pero nos centramos en las modificaciones de M&B ya sean mod completos o archivos sueltos. Dando por sentado que ya tienes instalado M&B en tu ordenador ahora deberás instalar NSIS, usaremos la versión 'NSIS Unicode' que nos permite incluir caracteres especiales en los textos del instalador ve al tema o descarga aquí. Para programar puedes usar el 'Bloc de notas' de Windows o cualquier otro programa que permita trabajar con texto plano, nosotros usaremos Notepad++ para instalarlo ve al tema o descarga aquí.
Descripción del proyecto: Vamos a suponer que queremos crear el instalador para nuestro hipotético e increible mod llamado 'Mod Caballeros de Calradia' que se encuentra tanto en Español como en Inglés. Y queremos que el instalador cumpla al menos los siguientes requisitos:
-Sea bilingüe
-Detecte si M&B está o no instalado y su versión.
-Detecte si nuestro mod está instalado.
-Nos de a elegir cual de los dos idiomas queremos instalar
-Posibilidad de leer 'Léeme/Readme'
-Crear desinstalador
...
Pasos:
1º Crearemos la carpeta que contendrá todo nuestro trabajo, un buen lugar es el escritorio, se llamará 'MiInstalador'. Dentro de ella crearemos un nuevo archivo de texto que llamaremos 'codigo.txt' podemos trabajar tanto con la extensión .txt como con .nsi, yo la cambiaré a .nsi ya que de este modo el icono también cambia y resulta más sencillo reconocer el archivo.
2º Copiaremos dentro de la carpeta 'MiInstalador' la carpeta que contiene nuestro mod 'Mod Caballeros de Calradia' pero vamos a cortar las carpetas 'es' y 'en' que contienen los archivos de idiomas y que están dentro de 'languages' para pegarlas en 'MiInstalador' (esto es necesario porque será el instalador el que copie dentro del mod únicamente la carpeta de idiomas que elija el usuario).
Hasta ahora tendremos algo así:
4º Nuestro instalador necesitará algunas imágenes para tener personalidad, en nuestro caso son las siguientes:
-2 iconos. Uno para la instalación y otro para la desintalación (lote en formato: ico)
-1 imágen de bienvenida (ancho: 329px, alto: 630px, formato: bmp)
-1 imágen de cabecera (ancho: 150px, alto: 57px, formato: bmp)
-1 imágen como splash (ancho: 512px, alto: 128px, formato: bmp)
Los requisitos de dimensión y formato son obligados por NSIS.
(Creé las imágenes e iconos con GIMP y IconFX)
Tendremos esto:
-NSIS tiene su propio lenguaje de programación que puedes aprender fácilmente con la documentación oficial http://nsis.sourceforge.net/Docs/Contents.html o con tutoriales por internet (también hay disponible algunos ejemplos en la instalación de NSIS). De todas formas debes tener en cuenta que como en toda programación una misma cosa puede hacerse de muy diversas formas atendiendo principalmente a la experiencia del programador.
-Nosotros aprenderemos mediante un ejemplo, un script ya terminado que iré explicando directamente sobre el código.
-Puedes pegar todo el código que aparece a continuación en el archivo 'codigo.nsi' y guardarlo.
-Aprender todas las posibilidades que ofrece el lenguaje queda de tu parte.
6º Ahora solo nos queda compilar. Abrimos NSIS Unicode, picamos en 'Compile NSIS script' y abrimos o arrastramos nuestro 'codigo.nsi'. También podemos usar el acceso directo disponible al pulsar con el botón derecho sobre el archivo. Tendremos que esperar un ratito mientras el programa trabaja... Cuando finalice la compilación se nos informa si todo fue correcto o si por el contrario hubo alguna advertencia o error, en ese caso solo debemos reparar el código y repetir el proceso de compilación.
7º ¡FIN! Ya podemos cerrar todo y ver como en la carpeta 'MiInstalador' se ha creado nuestro instalador 'CdeC_setup.exe' que solo debemos ejecutar y compartir con los amigos.
Así nos quedó el instalador:
Ahora estás preparado para crear tu propio instalador de 'mods' de M&B o para cualquier otra aplicación.
Incluyo los archivos que hemos usado. Descarga aquí
Dificultad/Habilidades: Media-Alta. Necesitas tener nociones de programación informática.
Descripción del tutorial: En este tutorial aprenderemos a crear instaladores para cualquier aplicación, pero nos centramos en las modificaciones de M&B ya sean mod completos o archivos sueltos. Dando por sentado que ya tienes instalado M&B en tu ordenador ahora deberás instalar NSIS, usaremos la versión 'NSIS Unicode' que nos permite incluir caracteres especiales en los textos del instalador ve al tema o descarga aquí. Para programar puedes usar el 'Bloc de notas' de Windows o cualquier otro programa que permita trabajar con texto plano, nosotros usaremos Notepad++ para instalarlo ve al tema o descarga aquí.
Descripción del proyecto: Vamos a suponer que queremos crear el instalador para nuestro hipotético e increible mod llamado 'Mod Caballeros de Calradia' que se encuentra tanto en Español como en Inglés. Y queremos que el instalador cumpla al menos los siguientes requisitos:
-Sea bilingüe
-Detecte si M&B está o no instalado y su versión.
-Detecte si nuestro mod está instalado.
-Nos de a elegir cual de los dos idiomas queremos instalar
-Posibilidad de leer 'Léeme/Readme'
-Crear desinstalador
...
Pasos:
1º Crearemos la carpeta que contendrá todo nuestro trabajo, un buen lugar es el escritorio, se llamará 'MiInstalador'. Dentro de ella crearemos un nuevo archivo de texto que llamaremos 'codigo.txt' podemos trabajar tanto con la extensión .txt como con .nsi, yo la cambiaré a .nsi ya que de este modo el icono también cambia y resulta más sencillo reconocer el archivo.
2º Copiaremos dentro de la carpeta 'MiInstalador' la carpeta que contiene nuestro mod 'Mod Caballeros de Calradia' pero vamos a cortar las carpetas 'es' y 'en' que contienen los archivos de idiomas y que están dentro de 'languages' para pegarlas en 'MiInstalador' (esto es necesario porque será el instalador el que copie dentro del mod únicamente la carpeta de idiomas que elija el usuario).
Hasta ahora tendremos algo así:
- Spoiler:
4º Nuestro instalador necesitará algunas imágenes para tener personalidad, en nuestro caso son las siguientes:
-2 iconos. Uno para la instalación y otro para la desintalación (lote en formato: ico)
-1 imágen de bienvenida (ancho: 329px, alto: 630px, formato: bmp)
-1 imágen de cabecera (ancho: 150px, alto: 57px, formato: bmp)
-1 imágen como splash (ancho: 512px, alto: 128px, formato: bmp)
Los requisitos de dimensión y formato son obligados por NSIS.
(Creé las imágenes e iconos con GIMP y IconFX)
Tendremos esto:
- Spoiler:
-NSIS tiene su propio lenguaje de programación que puedes aprender fácilmente con la documentación oficial http://nsis.sourceforge.net/Docs/Contents.html o con tutoriales por internet (también hay disponible algunos ejemplos en la instalación de NSIS). De todas formas debes tener en cuenta que como en toda programación una misma cosa puede hacerse de muy diversas formas atendiendo principalmente a la experiencia del programador.
-Nosotros aprenderemos mediante un ejemplo, un script ya terminado que iré explicando directamente sobre el código.
-Puedes pegar todo el código que aparece a continuación en el archivo 'codigo.nsi' y guardarlo.
-Aprender todas las posibilidades que ofrece el lenguaje queda de tu parte.
- Código:
;Script de ejemplo para crear tu propio instalador con NSIS
;Autor: JBJ
;Proyecto: Nuestro hipotético mod 'Caballeros de Calradia'
;Para aprender más de NSIS visita http://nsis.sourceforge.net/Docs/Contents.html
;################################################################################################################################
;INCLUIR LIBRERIAS
;En primer lugar incluiremos las librerías que contienen aquellas funciones avanzadas que usaremos.
!include "MUI2.nsh" ;Interfaz de usuario moderna.
!include "Sections.nsh" ;Método de instalación por secciones.
!include "LogicLib.nsh" ;Operaciones lógicas.
;################################################################################################################################
;CUESTIONES GENERALES
SetCompressor lzma ;Tipo de compresión. Puedes usar zlib, bzip2 o lzma. Cada uno tiene sus ventajas e inconvenientes, el lzma es el más nuevo.
Name "Caballeros de Calradia" ;Nombre de tu mod. Aparecerá en el texto de la instalación.
OutFile "CdeC_setup.exe" ;Nombre del archivo de salida. Es el nombre del instalador.
InstallDir "$PROGRAMFILES\Mount&Blade Warband\Modules\" ;Directorio de instalación por defecto. En adelante podremos hacer referencia a él mediante la variable $INSTDIR
RequestExecutionLevel user ;Requerir los privilegios de usuario para los sistemas Windows Vista/7/8.
;################################################################################################################################
;OPCIONES DE LA INTERFAZ
!define MUI_HEADERIMAGE ;Habilitar imagen de cabecera.
!define MUI_HEADERIMAGE_BITMAP "imagen_cabecera.bmp" ;Imagen de cabecera del instalador. Rutas relativas.
!define MUI_HEADERIMAGE_UNBITMAP "imagen_cabecera.bmp" ;Imagen de cabecera del desinstalador.
!define MUI_WELCOMEFINISHPAGE_BITMAP "imagen_bienvenida.bmp" ;Imagen de bienvenida del instalador.
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "imagen_bienvenida.bmp" ;Imagen de bienvenida del desinstalador.
!define MUI_ICON "imagen_icon.ico" ;Icono de instalación.
!define MUI_UNICON "imagen_unicon.ico" ;Icono de desinstalación.
!define MUI_ABORTWARNING ;Habilita el aviso de confirmación en el caso de querer anular la instalación.
;!define MUI_COMPONENTSPAGE_NODESC ;Deshabilitar cualquier descripción de los componentes.
!define MUI_COMPONENTSPAGE_SMALLDESC ;Habilitar pequeña descripción de los componentes.
!define MUI_FINISHPAGE_SHOWREADME ;Habilitar opción 'Ver léeme/View readme' al final de la instalación.
!define MUI_FINISHPAGE_SHOWREADME_FUNCTION ejecutar_leeme ;Antes de abrir Léeme/Readme ejecutar la función 'ejecutar_leeme' que se encuentra al final del código.
;################################################################################################################################
;PÁGINAS
;Aquí se indica cuales son las diversas páginas que componen el instalador.
!insertmacro MUI_PAGE_WELCOME ;Página de bienvenida.
;!insertmacro MUI_PAGE_LICENSE "License.txt" ;Página para mostrar la licencia. Debe ser un .txt
!insertmacro MUI_PAGE_COMPONENTS ;Página para seleccionar los componentes a instalar.
!insertmacro MUI_PAGE_DIRECTORY ;Página para seleccionar el directorio de instalación. Por defecto será el indicado en InstallDir.
;!insertmacro MUI_PAGE_STARTMENU pageid variable ;Página para crear acceso directo en el menú inicio.
!insertmacro MUI_PAGE_INSTFILES ;Página de progreso de la instalación.
!insertmacro MUI_PAGE_FINISH ;Página final.
;Aquí se indica cuales son las diversas páginas que componen el desinstalador.
!insertmacro MUI_UNPAGE_WELCOME ;Página de bienvenida.
!insertmacro MUI_UNPAGE_CONFIRM ;Confirmar la desinstalación.
;!insertmacro MUI_UNPAGE_LICENSE "License.txt" ;Página para mostrar la licencia. Debe ser un .txt
;!insertmacro MUI_UNPAGE_COMPONENTS ;Página para seleccionar los componentes a desinstalar.
;!insertmacro MUI_UNPAGE_DIRECTORY ;Página para seleccionar el directorio de desinstalación. Por defecto será el indicado en InstallDir.
!insertmacro MUI_UNPAGE_INSTFILES ;Página de progreso de la desinstalación.
!insertmacro MUI_UNPAGE_FINISH ;Página final.
;################################################################################################################################
;IDIOMAS DEL INSTALADOR
;En la web oficial encontrarás todos los idiomas disponibles.
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Spanish"
;################################################################################################################################
;SECCIONES. Aquí se colocan las diferentes secciones con los componentes que deseamos instalar.
;Sección primera. Esta sección se encargará de instalar tres cosas. Carpeta del mod, archivo léeme o readme y desinstalador.
Section "Mod Caballeros de Calradia" sec1 ;sec1 es una variable cadena que contiene la descripción del componente y variará dependiendo del idioma. Más adelante la inicializamos.
;Instalar carpeta Mod Caballeros de Calradia
SetOverwrite on ;Habilita la sobreescritura.
SetOutPath "$INSTDIR" ;Directorio de instalación será por defecto el que se indicó en InstallDir.
File /r "Mod Caballeros de Calradia" ;Archivos a instalar. Si deseamos instalar una carpteta con todo su contenido usamos /r, pero tiene algunas restricciones, ver el punto 4.9.1.5 de http://nsis.sourceforge.net/Docs/Chapter4.html#4.9
;Instalar archivos Léeme/Readme dependiendo del idioma elegido.
SetOverwrite on ;Habilita la sobreescritura
SetOutPath "$INSTDIR\Mod Caballeros de Calradia\" ;Directorio de instalación. El archivo Léeme que mostraremos al final deberá copiarse dentro de la carpeta base.
${If} $LANGUAGE = ${LANG_SPANISH} ;Evaluamos que idioma eligió el usuario en el instalador.
File "Léeme.txt" ;En caso de ser Español solo copiará este archivo a la carpeta de instalación.
${Else}
File "Readme.txt" ;En otro caso el idioma elegido fue el Inglés y se copiará este otro archivo.
${EndIf}
;Crear desinstalador
WriteUninstaller "$INSTDIR\Mod Caballeros de Calradia\uninstall.exe" ;Crea el desinstalador en este directorio.
SectionEnd
;--------------------------------------------------------------------------------------------------------------------------------
;Sección segunda. Esta sección se encargará de instalar los idiomas en el mod dependiendo de nuestra elección.
SubSection $(Sec2Name) sec2 ;En este caso el nombre de la sección es una variable $(Sec2Name) al igual que su descripción sec2, esto es así porque ambos dependen del idioma del usuario. Se llamará 'Idiomas' y 'Languages' en adelante lo inicializamos.
Section "English"
SetOverwrite on ;Habilita la sobreescritura
SetOutPath "$INSTDIR\Mod Caballeros de Calradia\languages\" ;Directorio de instalación de la carpeta
File /r "en" ;Instala inglés
SectionEnd
;Si deseamos que una casilla de componente aparezca deseleccionada por defecto usamos: Section /o... Lo probamos a continuación.
Section /o "Spanish" ;Deshabilitado por defecto
SetOverwrite on ;Habilita la sobreescritura
SetOutPath "$INSTDIR\Mod Caballeros de Calradia\languages\" ;Directorio de instalación de la carpeta
File /r "es" ;Instala español
SectionEnd
SubSectionEnd
;--------------------------------------------------------------------------------------------------------------------------------
;Sección de desintalación. Esta sección no aparecerá como opción y se encargará de instalar un archivo de desinstalación en la carpeta.
Section "Uninstall"
RMDir /r /REBOOTOK "$PROGRAMFILES\Mount&Blade Warband\Modules\Mod Caballeros de Calradia" ;Directorio a desinstalar. /REBOOTOK elimina tras reiniciar los archivos que no se pudieron desintalar.
SectionEnd
;################################################################################################################################
;FUNCIONES
;A continuación vamos a programar tres funciones que se ejecutarán, al inicio de la instalación, al principio de la desinstalación y en el momento de leer el Léeme/Readme respectivamente.
;Función de inicialización
Function .onInit ;Todo lo que se encuentra dentro de la función .onInit se ejecutará antes de llamar al programa instalador.
;Añadir una imagen Splash
InitPluginsDir ;Inicializa los Plugins
File /oname=$PLUGINSDIR\splash.bmp "imagen_splash.bmp" ;Ruta del plugins splash (viene instaldo por defecto). Además indicamos cual será nuestra imagen.
advsplash::show 1000 500 0 -1 $PLUGINSDIR\splash ;Parámetros del plugin. El splash necesita que le pasemos los siguientes valores:
;Delay,FadeIn,FadeOut,KeyColor,FileName
;(tiempo ms total de la animación),(tiempo ms en aparecer), (tiempo ms en desaparecer), (Color RGB-Hx para la transparencia de la imagen, -1=transparente), (imagen)
;--------------------------------------------------------------------------------------------------------------------------------
;Elegir idioma del instalador
!insertmacro MUI_LANGDLL_DISPLAY ;Este código habilita un listado para elegir el idioma del instalador.
;--------------------------------------------------------------------------------------------------------------------------------
;Ahora escribiremos un código que nos permitirá chequear si M&B está o no instalado en el PC evaluando el registro de Windows.
ClearErrors ;Borrar reporte de errores. Lo necesitamos limpio para los siguientes pasos.
;Comprobamos si existe o no una clave de registro en Windows de M&B. Existirá solo si está instalado.
;Si está instalado la variable R0 guarda su valor y la variable Errors no se activa. En caso de no estar instalado ocurre lo inverso.
;Si quieres ver las claves de registro puedes hacerlo ejecutando el comando 'regedit' en Windows y yendo a HKEY_LOCAL_MACHINE -> SOFTWARE -> Mount&Blade Warband, podemos obserbar como M&B tiene asociada dos claves de registro, una predeterminada para el nombre y otra para la versión.
ReadRegStr $R0 HKLM "Software\Mount&Blade Warband" "" ;Lee la clave de registro de M&B Warband. Guarda el resultado en R0.
${If} ${Errors} ;Evaluar error. Warband no instalado.
${If} $LANGUAGE = ${LANG_SPANISH} ;Informa al usuario en español
MessageBox MB_ICONSTOP "Mount&Blade Warband no está instalado en su PC." ;El comando MessageBox crea un cuadro de aviso. Podemos elegir el tipo de icono y el mensaje. Ir a la documentación oficial para ver las opciones disponibles.
${Else} ;Informa al usuario en inglés
MessageBox MB_ICONSTOP "Mount&Blade Warband is not installed on your PC."
${EndIf}
Abort ; Aborta instalación
${EndIf}
;--------------------------------------------------------------------------------------------------------------------------------
;Comprueba si nuestro mod está instalado en el PC.
;Nuestro mod no añade ninguna clave de registro, por lo que para comprobar si está o no instalado no podemos usar el método anterior, en éste caso buscaremos directamente si existe una carpeta llamada 'Mod Caballeros de Calradia' en la carpeta 'Modules'
${If} ${FileExists} "$PROGRAMFILES\Mount&Blade Warband\Modules\Mod Caballeros de Calradia\*.*" ;FileExists es una variable con el mismo significado que Errors, pero se activa si no se encontraron los archivos. Al colocar *.* comprobamos que la carpeta no está vacía.
${If} $LANGUAGE = ${LANG_SPANISH} ;Informa del error en Español
MessageBox MB_YESNO|MB_ICONINFORMATION "Mod Caballeros de Calradia ya está instalado en su PC. ¿Desea continuar?" IDYES salto1 ;Da la posibilidad de abortar instalación, mediante una ventana de aviso con dos botones. Si pulsamos SI, vamos a la línea salto1.
${Else} ;Informa del error en Inglés
MessageBox MB_YESNO|MB_ICONINFORMATION "Mod Caballeros de Calradia has already been installed on your computer. Continue?" IDYES salto1
${EndIf}
Abort
salto1:
${EndIf}
;--------------------------------------------------------------------------------------------------------------------------------
;Comprueba la versión de M&B instalada en el PC mediante el chequeo de las claves de registro del sistema operativo. El proceso es igual que al analizar si M&B estaba o no instalado, solo que ahora evaluamos la clave de registro Version
ReadRegStr $R1 HKLM "Software\Mount&Blade Warband" "Version" ;Lee la clave de registro de Version de M&B Warband. Guarda el resultado en R1.
IntCmp $R1 1158 eq le mo ;Operación lógica de comparación de enteros. Compara R1 que contiene el número de la versión instalada con el número 1158 que es la versión para la cual funciona nuestro mod.
eq: ;La versión es igual a la 1158. Avanzamos.
Goto salto2
le: ;La versión es menor a la 1158. Informamos.
Goto mo
mo: ;La versión es mayor a la 1158. Informamos.
${If} $LANGUAGE = ${LANG_SPANISH} ;Informa en Español
MessageBox MB_YESNO|MB_ICONEXCLAMATION "La versión de Mount&Blade Warband instalada en su PC es distinta a la 1.158. Ésto puede causar errores. ¿Desea continuar?" IDYES salto2 ;Ofrece la posibilidad de abortar la instalación mediante una ventana de aviso con dos botones. Si pulsamos SI, vamos a la línea salto2.
${Else} ;Informa en Inglés
MessageBox MB_YESNO|MB_ICONEXCLAMATION "The version of Mount&Blade Warband installed on your PC is different from 1.158. This can cause errors. Continue?" IDYES salto2
${EndIf}
Abort
salto2:
FunctionEnd
;--------------------------------------------------------------------------------------------------------------------------------
Function un.onInit ;Todo lo que se encuentra dentro de la función un.onInit se ejecutará antes de llamar al programa desinstalador.
;Elegir idioma del desinstalador
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
;--------------------------------------------------------------------------------------------------------------------------------
;Esta función se ejecuta al terminar la instalación y cuando vamos a leer el Léeme/Readme, la llamada se define al principio del código en la línea !define MUI_FINISHPAGE_SHOWREADME_FUNCTION ejecutar_leeme
Function ejecutar_leeme
${If} $LANGUAGE = ${LANG_SPANISH}
ExecShell "" "$INSTDIR\Mod Caballeros de Calradia\Léeme.txt" ;Abre directorio y muestra leeme
${Else}
ExecShell "" "$INSTDIR\Mod Caballeros de Calradia\Readme.txt" ;Abre directorio y muestra readme
${EndIf}
FunctionEnd
;################################################################################################################################
;CONSTANTES
;Recordemos que en el instalador aparece un listado con los componentes que queremos instalar y una descripción de cada uno, ésta dependerá del idioma elegido, por lo que deben ser variables. Aquí se inicializan.
;Cadenas para descripción dependiendo del idioma
LangString DESC_sec1 ${LANG_SPANISH} "Mod Caballeros de Calradia para Mount&Blade Warband 1.158" ;Descripción de la sección 1 en español
LangString DESC_sec1 ${LANG_ENGLISH} "Mod Caballeros de Calradia for Mount&Blade Warband 1.158" ;Descripción de la sección 1 en inglés
LangString DESC_sec2 ${LANG_SPANISH} "Elige los idiomas que deseas instalar." ;Descripción de la sección 2 en español
LangString DESC_sec2 ${LANG_ENGLISH} "Choose the languages you want to install." ;Descripción de la sección 2 en inglés
LangString Sec2Name ${LANG_SPANISH} "Idiomas" ;Nombre de la sección 2 en español
LangString Sec2Name ${LANG_ENGLISH} "Languages" ;Nombre de la sección 2 en inglés
;################################################################################################################################
;Activar la función que permite mostrar las descripciones.
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${sec1} $(DESC_sec1) ;sección 1
!insertmacro MUI_DESCRIPTION_TEXT ${sec2} $(DESC_sec2) ;sección 2
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;################################################################################################################################
6º Ahora solo nos queda compilar. Abrimos NSIS Unicode, picamos en 'Compile NSIS script' y abrimos o arrastramos nuestro 'codigo.nsi'. También podemos usar el acceso directo disponible al pulsar con el botón derecho sobre el archivo. Tendremos que esperar un ratito mientras el programa trabaja... Cuando finalice la compilación se nos informa si todo fue correcto o si por el contrario hubo alguna advertencia o error, en ese caso solo debemos reparar el código y repetir el proceso de compilación.
7º ¡FIN! Ya podemos cerrar todo y ver como en la carpeta 'MiInstalador' se ha creado nuestro instalador 'CdeC_setup.exe' que solo debemos ejecutar y compartir con los amigos.
Así nos quedó el instalador:
- Spoiler:
Ahora estás preparado para crear tu propio instalador de 'mods' de M&B o para cualquier otra aplicación.
Incluyo los archivos que hemos usado. Descarga aquí
Última edición por JBJ el Lun Nov 02, 2015 12:57 pm, editado 2 veces