Cómo Hacer Patch en el Cliente de MU Online: Guía Técnica Completa
Aprende a hacer patch en el cliente de MU Online: editar main.exe, archivos BMD, texturas y distribuir actualizaciones vía patcher o launcher.
Hacer patch en el cliente de MU Online implica editar el ejecutable principal, reemplazar archivos de datos (BMD/OZJ/OZT) y distribuir esos cambios a los jugadores de manera controlada. Esta guía cubre todo el proceso técnico para servidores Season 6 Episode 3 (la versión más común en servidores privados), con notas para otras seasons donde sea relevante.
Entendiendo la Estructura del Cliente
Antes de hacer cualquier edición, es fundamental conocer qué hace cada componente:
MU_Cliente/
├── main.exe ← Ejecutable principal (IP, puerto, título)
├── webzen.bnr ← Banner de la pantalla de login (reemplazable)
├── Data/
│ ├── Monster/ ← BMDs de monstruos (atributos, animaciones)
│ ├── Item/ ← BMDs de ítems (stats, apariencia)
│ ├── Interface/ ← Texturas OZJ/OZT de la interfaz
│ ├── Effect/ ← Efectos visuales OZJ
│ ├── Map/ ← Datos de mapas ATT/OZB
│ └── Log/ ← error.log generado por el cliente
├── GGAuth.des ← Firma de GameGuard
└── npggk.des ← Driver de GameGuard
.bmd pueden estar dentro de subcarpetas comprimidas .pak. La extracción y re-empaquetado requiere herramientas específicas para cada versión.Paso 1: Editar el main.exe — IP y Puerto del ConnectServer
Esta es la edición más frecuente: apuntar el cliente hacia la IP de tu servidor.
Herramientas necesarias: MuMain Editor (recomendado) o HxD (editor hex).
Usando MuMain Editor
- Abre MuMain Editor y carga tu
main.exe - Localiza el campo ConnectServer IP — mostrará la IP actual (ej:
203.229.132.52) - Reemplázala con tu IP:
192.168.1.100(LAN) o la IP pública de tu VPS - Confirma el Puerto — el predeterminado en Season 6 es
44405 - Cambia el título de ventana si lo deseas (campo WindowTitle)
- Guarda — el editor reescribe solo los bytes modificados, manteniendo la alineación
Usando HxD (método manual)
1. Abre main.exe en HxD (asegúrate de que el modo Sobrescribir esté activo — tecla Insert)
2. Presiona Ctrl+F → pestaña "Text string" → busca la IP actual: 203.229.132.52
3. Anota el offset mostrado en la barra de estado (ej: 00D3A0C4)
4. Haz clic en el primer carácter de la IP encontrada
5. Escribe la nueva IP sobrescribiendo byte a byte (misma longitud o menor, rellena el resto con \x00)
6. Guarda con Ctrl+S
00 en hex).Paso 2: Deshabilitar o Reconfigurar GameGuard
Tras editar main.exe, GameGuard detectará la modificación y bloqueará el arranque.
Opción A — Deshabilitar GameGuard en el servidor (más común en privados):
Edita GameServer/Config/GameServer.ini:
[GameServer]
UseGameGuard=0
GGAuthKey=0000000000000000
Edita también ConnectServer/Config/ConnectServer.ini si hay verificación doble:
UseGameGuard=0
Opción B — Mantener GameGuard con main.exe editado:
Necesitarás una versión "crackeada" de npggk.des compatible con tu build. Este proceso es específico por versión de GG y está fuera del alcance de esta guía — la mayoría de los servidores privados opta por la Opción A.
Paso 3: Editar Archivos BMD
Los archivos .bmd controlan monstruos, ítems, habilidades y NPCs. Las ediciones más comunes incluyen cambiar stats de monstruos y agregar nuevos ítems.
Herramientas para BMD
- MuBMD Editor — GUI para editar Monster.bmd, Item.bmd
- ItemEditor — específico para Item.bmd con visualización de campos
- Editor Hex — para ediciones puntuales cuando la herramienta GUI no soporta el campo
Ejemplo: Cambiar HP de un Monstruo en Monster.bmd
1. Abre Monster.bmd en MuBMD Editor
2. Localiza el monstruo por ID (ej: ID 6 = Budge Dragon)
3. Cambia el campo HP: de 80 a 500
4. Guarda el archivo
5. Copia el BMD editado a Data/Monster/ en el cliente
Ejemplo: Agregar una Opción a un Ítem en Item.bmd
Vía SQL en la base de datos del servidor (ItemList en la tabla del GameServer):
-- Verificar opciones actuales del ítem (ej: Legendary Sword = Type 0, Index 13)
SELECT * FROM MuOnline.dbo.ItemOption
WHERE ItemType = 0 AND ItemIndex = 13;
-- Agregar nueva opción (ejemplo: aumentar daño base)
UPDATE MuOnline.dbo.ItemOption
SET MinDamage = 150, MaxDamage = 200
WHERE ItemType = 0 AND ItemIndex = 13;
Paso 4: Reemplazar Texturas e Interfaz
Las texturas del cliente están en formato .ozj (JPEG comprimido con header OZJ) y .ozt (TGA comprimido). La pantalla de login usa webzen.bnr.
Reemplazar la Imagen de Login (webzen.bnr)
1. Crea tu imagen: 1024x768 píxeles, formato JPEG
2. Renómbrala a webzen.bnr
3. Reemplaza el archivo en la raíz del cliente MU
Convertir y Reemplazar Texturas OZJ
1. Convierte tu textura (PNG/JPG) a OZJ usando OZJConverter:
OZJConverter.exe input.png output.ozj
2. Coloca el OZJ en la carpeta correcta:
- Interfaz general: Data/Interface/
- Efectos: Data/Effect/
- Mapas: Data/Map/Texture/
3. El nombre del archivo debe ser EXACTAMENTE igual al original
Paso 5: Crear y Distribuir el Patch
Con todas las ediciones listas, debes distribuir los cambios a los jugadores.
Método A: Patcher Simple con Lista de Archivos
Crea un archivo patchlist.txt en tu servidor web (ej: http://tusitio.com/patch/):
patchlist.txt
version=1005
main.exe|a3f8c2d1e4b9071234567890abcdef12|45678912
Data/Monster/Monster.bmd|b7e3a1c9f2d4e8071234567890abcdef|891234
Data/Interface/Login.ozj|c9d4b2e1a3f7c8071234567890123456|234567
webzen.bnr|d1e5c3b4a2f9e7071234567890fedcba|123456
Formato: ruta_relativa|hash_md5|tamaño_en_bytes
Método B: Launcher con Auto-Update
Si usas un launcher (ej: MuLauncher, LauncherXE), edita el archivo de configuración del launcher:
[Update]
PatchServer=http://tusitio.com/patch/
PatchList=patchlist.txt
PatchVersion=1005
ForceUpdate=1
BackupOldFiles=1
El launcher descarga únicamente los archivos cuyo hash difiere del local, ahorrando ancho de banda.
main.exe editado sin antes probarlo en una instalación limpia del cliente. Un main.exe corrupto impedirá que todos los jugadores inicien sesión. Mantén siempre una copia de respaldo del main.exe original.Paso 6: Probar el Cliente Parchado
Lista de verificación antes de publicar:
[ ] main.exe abre sin error de GameGuard
[ ] La pantalla de login carga correctamente (no queda en negro)
[ ] IP/puerto correctos — cliente se conecta al ConnectServer
[ ] Los personajes cargan con texturas correctas
[ ] Los BMDs editados reflejan los cambios en el juego
[ ] Sin errores críticos en Data/Log/error.log
[ ] El patcher distribuye los archivos correctamente (verificar MD5)
Verificar Conectividad del Cliente
En el servidor, confirma que el ConnectServer está escuchando en el puerto correcto:
-- Verificar configuración de puerto en la base de datos (si se almacena ahí)
SELECT * FROM MuOnline.dbo.ServerInfo
WHERE ServerCode = 0; -- ConnectServer
-- Confirmar IP configurada
SELECT BindIP, BindPort FROM MuOnline.dbo.ConnectServerConfig;
En el servidor Windows, verifica con netstat:
netstat -an | findstr :44405
La salida debe mostrar 0.0.0.0:44405 LISTENING.
Solución de Problemas Comunes
Error: "Cannot connect to server" tras editar main.exe
- Verifica que la IP fue editada correctamente (sin bytes extra ni faltantes)
- Confirma que el puerto en main.exe coincide con
BindPorten ConnectServer.ini - Prueba conectividad:
telnet TU_IP 44405desde el lado del cliente
Error: "Game client has been modified" (GameGuard)
- Confirma
UseGameGuard=0en GameServer.ini y ConnectServer.ini - Reinicia los servicios del GameServer tras el cambio
- Si el error persiste, verifica si hay un tercer archivo de configuración:
EventServer/Config/EventServer.ini
El cliente se congela en la pantalla de carga del personaje
-- Verificar si hay datos de personaje corruptos
SELECT AccountID, Name, Class, cLevel
FROM MuOnline.dbo.Character
WHERE AccountID = 'cuenta_problema';
-- Mover el personaje a Lorencia (mapa 0) como reset de emergencia
UPDATE MuOnline.dbo.Character
SET MapNumber = 0, MapPosX = 135, MapPosY = 130
WHERE Name = 'NombreDelPersonaje';
Los cambios en BMD no se reflejan en el cliente
- Confirma que copiaste el BMD a la carpeta correcta (Data/Monster/ vs Data/NPC/)
- Verifica si el cliente está usando en caché una versión antigua — ciérralo, elimina
Data/Cache/si existe, reabre - Confirma que el BMD editado tiene exactamente el mismo nombre (sensible a mayúsculas en algunos builds)
Conclusión
Hacer patch en el cliente de MU Online requiere atención a tres capas independientes: el ejecutable (main.exe), los archivos de datos binarios (BMD) y las texturas (OZJ/OZT). Cada capa tiene sus propias herramientas y puntos de fallo. Con la lista de verificación de pruebas y los comandos de diagnóstico SQL presentados aquí, podrás identificar y resolver la gran mayoría de problemas antes de que impacten a los jugadores de tu servidor.
Perguntas frequentes
¿Qué herramienta uso para editar el main.exe del cliente MU?
Usa MuMain Editor o un editor hexadecimal como HxD. MuMain Editor expone campos legibles (IP, puerto, título de ventana) sin necesidad de navegar hex puro. Para cambios de IP/puerto en Season 6, el offset del campo ConnectServer suele estar alrededor de 0x00D3A0C0, pero varía por build — siempre localiza el string mediante búsqueda ASCII antes de editar.
¿Puedo redistribuir el cliente parchado sin romper el anti-cheat?
GameGuard (GGAuth.des / npggk.des) verifica el hash del main.exe al iniciar. Tras editar main.exe debes regenerar el hash o deshabilitar la verificación en el servidor configurando UseGameGuard=0 en GameServer/Config/GameServer.ini, de lo contrario los jugadores recibirán el error 'Game client is modified'.
¿Cómo actualizo archivos BMD sin recompilar todo el cliente?
Simplemente reemplaza el archivo BMD en la carpeta correspondiente (ej: Data/Monster/, Data/Item/) y actualiza el patcher para incluir el nuevo archivo en la lista de verificación de CRC. El cliente lee los BMDs directamente del disco — no hay vinculación estática. Asegúrate de mantener la versión de serialización compatible con tu build de cliente.
¿Por qué el cliente se congela en la pantalla de carga tras el patch?
Las causas más comunes son: (1) BMD con versión incompatible — el cliente espera un header de versión específico; (2) archivo de textura DDJ/OZJ corrupto en Data/Interface/; (3) main.exe con IP/puerto incorrectos tras una edición hex mal alineada. Revisa el log en Data/Log/error.log para ver el mensaje de error exacto.