Cómo empaquetar el cliente de MU Online para distribución (instalador)
Aprende a transformar la carpeta del cliente de MU Online en un instalador profesional, con accesos directos, registro de versión y verificación de integridad para distribuir a los jugadores.
Empaquetar el cliente de MU Online es la etapa que separa un proyecto amateur de un servidor que transmite credibilidad ya en el primer contacto. El jugador descarga un único archivo, lo ejecuta, elige la carpeta, obtiene un acceso directo en el escritorio y abre el juego. Nada de ZIP suelto con dec
Empaquetar el cliente de MU Online es la etapa que separa un proyecto amateur de un servidor que transmite credibilidad ya en el primer contacto. El jugador descarga un único archivo, lo ejecuta, elige la carpeta, obtiene un acceso directo en el escritorio y abre el juego. Nada de ZIP suelto con decenas de DLLs esparcidas, nada de "extrae aquí y reza para que funcione". Un instalador bien hecho reduce el soporte, disminuye la tasa de abandono en la descarga y además protege la integridad de los archivos que distribuyes.
En este tutorial vas a montar, desde cero, un instalador profesional para el cliente de tu servidor usando Inno Setup (con menciones a NSIS como alternativa). Vamos a cubrir la preparación de la carpeta base, el script de compilación, accesos directos, icono, verificación de versión, requisitos de sistema, firma digital y las trampas más comunes que hacen que el antivirus del jugador borre tu cliente antes incluso del primer login. Los valores citados (versiones de DirectX, tamaño, nombres de carpetas) son ejemplos y varían según season/cliente.
Si aún no tienes la base del servidor funcionando, comienza por la guía cómo montar un servidor de MU Online y vuelve aquí cuando el cliente ya esté conectando en tu Season.
Requisitos previos
Antes de abrir cualquier herramienta de empaquetado, ten a mano:
- Carpeta del cliente ya funcional y probada, conectando al IP/puerto de tu servidor. Si el cliente no abre en tu máquina, no va a abrir empaquetado.
- Main.exe editado (mediante un editor de Main compatible con tu season) apuntando al IP público o dominio, puerto del Connect Server y serial correcto.
- Archivos de protección (anti-cheat/packet, ej.: GameGuard, Themida wrap, o el esquema que usa tu season) ya integrados y probados.
- Inno Setup 6+ instalado (gratuito, en jrsoftware.org) o NSIS 3+.
- Icono .ico del servidor (256x256 recomendado) para el acceso directo y el ejecutable del instalador.
- Espacio en disco equivalente a por lo menos 2x el tamaño del cliente, para generar el setup sin apuros.
- Opcional, pero recomendado: certificado de firma de código (Code Signing) para reducir las alertas de antivirus.
Un consejo de oro: crea una carpeta limpia llamada cliente_release y copia solamente los archivos que el jugador necesita. No incluyas .pdb, logs, dumps, archivos .bak, editores de Main o herramientas internas. Cada archivo innecesario aumenta la descarga y el riesgo de falso positivo.
Estructura recomendada de la carpeta del cliente
Antes de empaquetar, organiza. Una estructura típica de cliente (varía según season/cliente) se parece a:
| Elemento | Función | ¿Incluir en el instalador? |
|---|---|---|
main.exe | Ejecutable principal del juego | Sí |
Data\ | Modelos, texturas, mapas (BMD/OZB/OZJ/OZT) | Sí |
Data\Local\ | Interfaz y textos localizados | Sí |
Music\ y Sound\ | Audio | Sí (u opcional) |
launcher.exe | Launcher/actualizador del servidor | Sí (recomendado) |
*.dll de protección | Anti-cheat / wrappers DirectX | Sí |
readme.txt | Instrucciones y reglas rápidas | Opcional |
*.pdb, *.log, dump\ | Depuración | No |
Ejecuta el cliente una última vez desde esa carpeta limpia. Si conecta normalmente, está lista para convertirse en instalador.
Paso 1 — Eligiendo la herramienta de empaquetado
Hay tres enfoques comunes:
- Inno Setup — el más popular en la escena de MU. Script legible (Pascal-like), documentación abundante, soporte para compresión LZMA2 fuerte, páginas personalizables y post-instalación simple.
- NSIS — extremadamente flexible y ligero, genera instaladores más pequeños, pero el lenguaje de script es más crudo.
- Empaquetadores comerciales (InstallShield, Advanced Installer) — bonitos, pero de pago y exagerados para el caso.
Para el 90% de los servidores, Inno Setup es la elección correcta: gratuito, robusto y fácil de mantener entre seasons. Seguiremos con él.
Paso 2 — Creando el script de Inno Setup
Instala Inno Setup y abre el Compiler. Puedes usar el asistente (Script Wizard), pero escribir el .iss manualmente da mucho más control. Crea un archivo setup.iss junto a la carpeta cliente_release con el contenido de abajo (ajusta nombres, versiones y rutas a tu proyecto):
[Setup]
AppName=ViciadosMU Season X
AppVersion=1.0.0
AppPublisher=ViciadosMU
DefaultDirName={autopf}\ViciadosMU
DefaultGroupName=ViciadosMU
UninstallDisplayIcon={app}\main.exe
OutputBaseFilename=ViciadosMU_Setup_v1.0.0
Compression=lzma2/max
SolidCompression=yes
SetupIconFile=icone.ico
WizardStyle=modern
PrivilegesRequired=admin
ArchitecturesInstallIn64BitMode=x64
[Languages]
Name: "brazilian"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
[Files]
Source: "cliente_release\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs ignoreversion
[Icons]
Name: "{group}\ViciadosMU"; Filename: "{app}\main.exe"
Name: "{group}\Desinstalar ViciadosMU"; Filename: "{uninstallexe}"
Name: "{autodesktop}\ViciadosMU"; Filename: "{app}\main.exe"; Tasks: desktopicon
[Tasks]
Name: "desktopicon"; Description: "Crear acceso directo en el Escritorio"; GroupDescription: "Accesos directos:"
[Run]
Filename: "{app}\main.exe"; Description: "Iniciar el juego ahora"; Flags: nowait postinstall skipifsilent
Cada sección tiene un papel:
- [Setup] define nombre, versión, carpeta predeterminada (
{autopf}= Program Files), icono y compresión.SolidCompression=yesconlzma2/maxsuele rendir la mejor tasa para clientes de MU. - [Files] empaqueta todo lo que hay dentro de
cliente_release, recursivamente.ignoreversiongarantiza que los archivos sean siempre reemplazados, evitando el clásico bug de la DLL antigua no actualizada. - [Icons] crea los accesos directos en el menú Inicio y, opcionalmente, en el escritorio.
- [Tasks] transforma el acceso directo del escritorio en una opción marcable por el jugador.
- [Run] ofrece iniciar el juego al final de la instalación.
Paso 3 — Compilando el instalador
En el Inno Setup Compiler, abre el setup.iss y presiona F9 (o Build > Compile). Al final, el instalador aparecerá en Output\ViciadosMU_Setup_v1.0.0.exe. Pruébalo en una máquina limpia (o máquina virtual) sin cliente instalado: esa es la única forma confiable de descubrir dependencias faltantes.
Durante la prueba, confirma:
- La instalación elige carpeta correctamente y crea accesos directos.
- El juego abre y conecta al servidor después de instalar.
- La desinstalación elimina los archivos (guarda
Save/configs si es necesario). - Ningún archivo esencial quedó fuera (prueba en una máquina que nunca tuvo MU).
Paso 4 — Requisitos de sistema y dependencias
Los clientes de MU suelen depender de DirectX 9.0c y, dependiendo de la season, de Visual C++ Redistributable y del .NET Framework (para launchers). Nunca asumas que la máquina del jugador tiene todo. Incluye los redistribuibles y ejecútalos silenciosamente:
[Files]
Source: "redist\dxwebsetup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
Source: "redist\vc_redist.x86.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
[Run]
Filename: "{tmp}\vc_redist.x86.exe"; Parameters: "/quiet /norestart"; StatusMsg: "Instalando componentes..."
Filename: "{tmp}\dxwebsetup.exe"; Parameters: "/Q"; StatusMsg: "Verificando DirectX..."
Esto elimina la abrumadora mayoría de los errores de "el programa no pudo iniciarse porque falta xxxx.dll". Las versiones exactas varían según season/cliente.
Paso 5 — Verificación de integridad y versión
Para evitar que el jugador ejecute un cliente corrompido a medias (descarga interrumpida), el instalador ya garantiza la integridad de los archivos internos mediante el checksum del propio .exe. Pero también debes versionar el cliente para que el launcher sepa cuándo actualizar. Una práctica común es generar un archivo version.txt en la raíz con la versión y un hash de la carpeta:
version=1.0.0
build=20251026
data_hash=8f3c9e1a...
El launcher, al abrir, lee ese archivo, lo compara con el servidor de parche y descarga solo lo que cambió. Así las próximas actualizaciones no exigen un nuevo instalador completo.
Paso 6 — Firma digital (opcional, pero recomendada)
El mayor enemigo de la distribución no es el jugador: es el antivirus. Los instaladores empaquetados, launchers y wrappers de protección son frecuentemente marcados como sospechosos. Firmar el .exe con un certificado de code signing reduce mucho los falsos positivos y muestra el nombre de tu proyecto en el aviso de Windows (en vez de "Editor desconocido"). En Inno Setup, configura el firmante:
[Setup]
SignTool=meucert
Y registra la herramienta de firma (signtool.exe) en las preferencias de Inno Setup. Sin certificado, al menos envía tu instalador a los formularios de "falso positivo" de los principales antivirus antes del lanzamiento.
Errores comunes y soluciones
| Error | Causa probable | Solución |
|---|---|---|
| El antivirus borra el instalador | Falso positivo en wrapper/launcher | Firmar el .exe, enviarlo a los proveedores, usar Themida con cautela |
| "Falta d3dx9_XX.dll" | DirectX ausente en la máquina del jugador | Incluir y ejecutar dxwebsetup.exe /Q en [Run] |
| El cliente abre pero no conecta | Main.exe apuntando a un IP local/erróneo | Reeditar el Main con el IP público y recompilar el setup |
| La DLL antigua no se actualiza | Falta la flag ignoreversion | Añadir ignoreversion en la sección [Files] |
| Instalador gigante | Incluyó Music/Sound sin compresión sólida | Activar SolidCompression=yes y lzma2/max |
| El acceso directo no abre nada | Filename apuntando a una ruta errónea | Usar {app}\main.exe, probar en una máquina limpia |
| "Editor desconocido" asusta a los jugadores | Ejecutable sin firmar | Obtener un certificado de code signing |
Buenas prácticas de distribución
- Nunca distribuyas la carpeta de desarrollo entera. Parte siempre de una
cliente_releaselimpia. - Aloja el instalador en al menos dos espejos (ej.: un servicio de almacenamiento y un mirror propio), evitando un punto único de fallo el día del lanzamiento.
- Publica el hash MD5/SHA-256 del instalador en el sitio para que el jugador verifique la integridad.
- Mantén un changelog visible: los jugadores confían más en proyectos que documentan lo que cambia en cada versión.
- Prueba en Windows 10 y 11 y, si es posible, en una máquina sin privilegios de administrador para ver el comportamiento del UAC.
Lista de verificación de lanzamiento
- Carpeta
cliente_releaselimpia, sin archivos de depuración ni editores - Main.exe apuntando a IP/puerto/serial correctos y probado
- Archivos de protección integrados y validados
- Redistribuibles (DirectX, VC++) incluidos y ejecutándose silenciosamente
- Script
.isscompilado sin advertencias - Instalación probada en máquina/VM limpia (sin MU previo)
- Accesos directos de menú y escritorio funcionando
- El juego conecta al servidor después de instalar
- Desinstalación eliminando los archivos correctamente
version.txtgenerado para el launcher de parche- Instalador firmado (o enviado como falso positivo a los antivirus)
- Hash SHA-256 publicado y dos espejos de descarga activos
Con el instalador listo, probado en máquina limpia y firmado, tu servidor entrega una primera impresión de proyecto serio. El siguiente paso natural es reducir el tamaño de la descarga para que más jugadores completen la instalación sin desistir a mitad de camino.
Preguntas frecuentes
¿Necesito pagar por un instalador?
No. Herramientas como Inno Setup y NSIS son gratuitas y cubren el 99% de las necesidades de un servidor de MU Online.
El antivirus marca mi instalador como virus, ¿es normal?
Los falsos positivos son comunes con launchers e instaladores empaquetados. Firmar el ejecutable con un certificado de código y enviarlo a los proveedores de antivirus reduce drásticamente el problema.
¿Debo incluir el Main.exe ya editado en el instalador?
Sí, el cliente distribuido debe contener el Main ya apuntando al IP/puerto y serial de tu servidor, más los archivos de protección configurados.
¿Cuál es la diferencia entre un instalador y un archivo comprimido?
El comprimido solo descomprime archivos; el instalador crea accesos directos, registra la versión, valida requisitos y permite una desinstalación limpia, transmitiendo más confianza al jugador.
¿Puedo actualizar el cliente después sin reinstalar?
Sí. Lo ideal es que el instalador coloque un launcher que haga parcheo incremental, evitando nuevas descargas completas en cada season.