El mayor portal de MU Online de Brasil — desde 2003
Tutorial Avanzado Servidor

Cómo crear ítems personalizados en el ItemList de MU Online

Aprende a agregar ítems totalmente nuevos en el ItemList del servidor y del cliente de MU Online, eligiendo índices libres, importando modelos BMD y distribuyendo el paquete a los jugadores.

BR Bruno · Actualizado el 12 ene 2026 · ⏱ 16 min de lectura
Respuesta rápida

Agregar un ítem que nadie más tiene es una de las formas más rápidas de darle identidad a tu servidor de MU Online. Un ala exclusiva, un set con un aspecto propio o un arma de evento memorable hacen que el jugador sienta que ese mundo no es una copia genérica. Solo que "crear un ítem nuevo" en MU no

Agregar un ítem que nadie más tiene es una de las formas más rápidas de darle identidad a tu servidor de MU Online. Un ala exclusiva, un set con un aspecto propio o un arma de evento memorable hacen que el jugador sienta que ese mundo no es una copia genérica. Solo que "crear un ítem nuevo" en MU no es una única acción: es una cadena de pasos que necesita cerrarse en tres frentes al mismo tiempo — la lista de ítems del servidor, la lista de ítems del cliente y los archivos gráficos (modelo BMD y texturas). Si cualquiera de esos frentes queda desincronizado, el resultado va desde un ítem invisible hasta una desconexión masiva cuando alguien suelta el ítem al suelo.

Este tutorial recorre el proceso completo del ItemList: entender cómo se organizan los ítems por sección e índice, encontrar un índice realmente libre, registrar el ítem del lado del servidor, reflejar esa entrada en el cliente, asociar el modelo 3D y la textura, definir opciones y excelentes, probar en un entorno aislado y, por último, empaquetar todo en un parche para distribuir. El foco está en el concepto real y reutilizable; donde los nombres de archivo y columnas varían, lo trato como ejemplo y señalo que "varía por emulador". Si aún no tienes una base de servidor en línea, conviene primero seguir la guía de cómo montar un servidor de MU Online y volver aquí después.

Requisitos previos

Antes de tocar cualquier archivo, asegúrate de que el entorno está listo y de que tienes cómo volver atrás.

  • Servidor funcional en entorno de prueba. Nunca hagas el primer intento directo en producción. Ten una copia local (o una VM) del GameServer, DataServer/ConnectServer y de la base de datos.
  • Cliente compatible con la misma season del servidor. El formato del ItemList y la estructura de carpetas cambian bastante entre seasons.
  • Editor de ItemList de tu emulador. Puede ser una herramienta gráfica dedicada, un editor de texto simple o una utilidad que lee/graba el formato binario. Varía por emulador.
  • Backup completo. Copia los archivos originales de ItemList (servidor y cliente), la base de datos y la carpeta de datos del cliente antes de empezar. Un backup de 30 segundos evita una reinstalación de 3 horas.
  • Herramientas de modelo, si vas a usar un aspecto nuevo. Un visualizador/conversor de BMD y un editor de imagen que exporte en el formato de textura esperado (generalmente OZJ/OZT/OZB, según la season).
  • Noción de los índices ocupados. Ten a mano la lista de ítems estándar de tu emulador para no elegir un índice ya usado.

Con esto listo, el trabajo queda seguro y reversible.

Cómo se organiza el ItemList

En MU, cada ítem se identifica por un par: sección (type) e índice (index). La sección agrupa categorías — por ejemplo, espadas, hachas, arcos, sets de armadura, alas, pets e ítems de consumo quedan en secciones distintas. Dentro de cada sección, el índice es el número del ítem en esa categoría.

Piensa en la organización como una hoja de cálculo con pestañas: cada pestaña es una sección, cada fila es un índice. Un "Dragon Set" y un "Legendary Staff" viven en secciones diferentes, pero ambos tienen un número de fila dentro de su pestaña. Cuando el servidor le dice al cliente "el personaje está usando el ítem de la sección X, índice Y", el cliente busca exactamente esa fila para saber el nombre, el modelo, el tamaño en el inventario y la apariencia.

Por eso servidor y cliente necesitan coincidir en el mismo par sección+índice. Si en el servidor el índice 300 de la sección de armas es tu "Arma Fantasma" y en el cliente el índice 300 sigue vacío (o es otra cosa), el juego se rompe.

La tabla de abajo muestra un ejemplo conceptual de cómo suelen dividirse las secciones. Los números exactos varían por emulador y season, así que trátalos como ilustración, no como valor fijo.

Sección (ejemplo)CategoríaObservación
0–5Armas cuerpo a cuerpoEspadas, hachas, mazas, lanzas
6Arcos y ballestasIncluye munición en algunos emuladores
7Bastones/StaffsArmas mágicas
8–11Sets de armaduraCasco, pecho, pantalón, guante, bota separados por índice
12Alas y capasÍtems de transformación visual
13–15Pets, ítems especiales y consumiblesFrascos, joyas, cofres

Paso 1 — Elegir un índice libre

Este es el paso más importante y el más ignorado. Un índice "aparentemente vacío" puede estar reservado internamente para una invocación, un ítem de evento o un placeholder del sistema.

  1. Abre la lista de ítems estándar de tu emulador (documentación o el propio ItemList original).
  2. Elige la sección correcta para el tipo de tu ítem (una espada va en la sección de espadas, un ala en la de alas).
  3. Recorre los índices y localiza un número claramente no utilizado — sin nombre, sin modelo asociado, fuera de los rangos reservados.
  4. Prefiere índices altos y alejados de los ítems de sistema. Muchos emuladores reservan los rangos iniciales para ítems oficiales y los rangos más altos para personalización.
  5. Anota el par sección+índice en un documento. Vas a repetir ese mismo par en el servidor, en el cliente y en el parche.

Regla de oro: en la duda, no lo uses. Es mejor perder 5 minutos confirmando en la documentación que descubrir en producción que el índice chocaba con el "Box of Kundun".

Paso 2 — Registrar el ítem en el servidor

Con el par definido, registra el ítem en el ItemList del lado del servidor. Aquí es donde el GameServer aprende que ese ítem existe, cuál es su nivel base, requisitos de clase, daño/defensa, durabilidad y reglas de drop.

Los campos exactos y el formato del archivo varían por emulador. En algunos es un archivo de texto/CSV; en otros, una tabla en la base de datos o un binario editado con herramienta propia. Conceptualmente, vas a rellenar algo como el ejemplo de abajo (formato ilustrativo):

# Ejemplo conceptual de entrada en el ItemList del servidor
# Los campos reales varían por emulador
Section=0
Index=300
Name=Espada Fantasma
Level=0
Slot=1            # tipo de equipamiento (arma de una mano)
Width=2 Height=4  # espacio ocupado en el inventario
DropLevel=120
MinDmg=180 MaxDmg=210
Durability=45
ReqStrength=520 ReqAgility=280
ReqClass=DK,MG    # clases que pueden usarlo
Serial=1          # genera número de serie único
Option=1          # acepta opciones (+add)

Pasos:

  1. Localiza el archivo/tabla de ItemList del servidor (ej.: ItemList en la carpeta de datos del GS — varía por emulador).
  2. Agrega una nueva línea/entrada usando exactamente el Section e Index elegidos.
  3. Rellena nombre, requisitos de atributo, clases permitidas y valores de combate coherentes con el balanceo del servidor.
  4. Define el tamaño en el inventario (ancho x alto). Si te equivocas, el ítem puede superponerse a otras casillas.
  5. Marca si el ítem acepta serial (número único) y opción (bonus adicional). Los sets y las alas normalmente aceptan ambos.
  6. Guarda el archivo manteniendo la codificación original (muchos emuladores exigen ANSI, no UTF-8).

Paso 3 — Reflejar el ítem en el cliente

Ahora repite el registro del mismo par sección+índice en el ItemList del cliente. El cliente no necesita saber del daño ni de los requisitos de combate — eso lo resuelve el servidor — pero necesita saber nombre, tamaño en el inventario, modelo asociado y textura.

  1. Abre el ItemList del cliente (generalmente dentro de la carpeta Data del juego — nombre y formato varían por emulador).
  2. Crea la entrada en el índice idéntico al del servidor.
  3. Define el nombre mostrado. Idealmente igual al del servidor para evitar confusión, pero quien manda en lo que el jugador lee es el cliente.
  4. Apunta el modelo (archivo BMD) y la textura que el ítem va a usar (siguiente paso).
  5. Guarda manteniendo la codificación esperada.

Si el cliente no tiene la entrada y el servidor intenta enviar el ítem, el comportamiento típico es ítem invisible, nombre "corrupto" o caída de conexión al equipar/soltar. Por eso el reflejo es obligatorio.

Paso 4 — Asociar modelo BMD y textura

Aquí decides si el ítem tendrá un aspecto propio o reaprovechado.

Opción A — reaprovechar apariencia (más simple): apunta el modelo y la textura de un ítem ya existente. Tu "Espada Fantasma" usa el BMD de una espada estándar, pero tiene nombre, atributos y opciones exclusivos. Ideal para lanzar rápido.

Opción B — aspecto inédito (más trabajo): importa un BMD nuevo y sus texturas.

  1. Coloca el archivo BMD en la carpeta de modelos correspondiente a la sección (ej.: Data\Item\ para ítems — varía por emulador).
  2. Nombra el BMD siguiendo la convención que el cliente espera para esa sección e índice. Muchos emuladores usan un patrón de nombre derivado del índice; revisa el tuyo.
  3. Exporta las texturas en el formato aceptado (OZJ/OZT/OZB según la season) y colócalas en la misma carpeta.
  4. Verifica que el BMD referencie internamente los nombres de textura correctos — un BMD que apunta a una textura inexistente aparece negro o invisible.
  5. Confirma la escala y el punto de anclaje: un arma con la escala equivocada puede quedar gigante en la espalda del personaje o desalineada en la mano.

Los esquemas de nomenclatura varían bastante por emulador, así que usa el patrón de un ítem vecino de la misma sección como referencia.

Paso 5 — Definir opciones, excelentes y sockets

Un ítem nuevo rara vez es solo "base". En MU, el valor competitivo viene de las capas extra:

  • Opción adicional (+add): incrementos como +daño, +defensa, +vida.
  • Excellent: conjunto de bonus especiales (robo de vida/maná, daño extra por %, velocidad).
  • Ancient/Conjunto: bonus de set cuando se usan varias piezas juntas.
  • Sockets/Seed: casillas para piedras elementales (cuando la season lo soporta).

En el servidor habilitas cuáles de esas capas acepta el ítem y, en el sistema de drop/chaos machine, defines las probabilidades de que aparezca cada una. Mantén la coherencia con el balanceo: un ítem nuevo con excelente garantizado y stats por encima de los oficiales destruye la economía del servidor en una semana.

Paso 6 — Probar en un entorno aislado

Nunca te saltes la prueba. Usa una cuenta de GM en el servidor de prueba.

  1. Reinicia el GameServer para cargar el ItemList nuevo.
  2. Genera el ítem por comando de GM o drop forzado.
  3. Verifica: nombre correcto, ícono en el inventario, tamaño ocupado, apariencia al equipar.
  4. Suelta el ítem al suelo — esta es la prueba que más revela desincronización; los ítems mal registrados suelen tirar la conexión exactamente aquí.
  5. Equipa, desequipa, guárdalo en el baúl y haz trade con otra cuenta.
  6. Aplica opción/excelente y comprueba si los bonus funcionan en combate.

Avanza a la distribución solo cuando todos estos pasos pasen sin error.

Paso 7 — Distribuir el ítem a los jugadores

El servidor lo actualizas una vez; los clientes de todos los jugadores necesitan recibir los archivos nuevos.

  1. Identifica los archivos que cambiaron del lado del cliente: ItemList del cliente, BMD nuevo y texturas.
  2. Empaqueta solo esos archivos en un parche (no obligues a todos a descargar el cliente entero de nuevo).
  3. Publica el parche en tu sistema de autoupdate/launcher, incrementando la versión.
  4. Prueba la descarga en una máquina limpia, como lo haría un jugador común.
  5. Comunica en el sitio/Discord que hay actualización y qué trae.

El jugador abre el launcher, descarga solo lo que cambió y ya ve el ítem. Si actualizas el servidor pero olvidas publicar el parche del cliente, todos los que reciban el ítem verán bugs — así que servidor y parche van juntos.

Errores comunes y soluciones

SíntomaCausa probableSolución
Ítem invisible al equiparCliente sin entrada en el mismo índice o BMD ausenteRefleja el índice en el ItemList del cliente y confirma el BMD en la carpeta
Desconexión al soltar el ítemDesincronización servidor/cliente en el par sección+índiceGarantiza índice idéntico en ambos lados y reinicia el GS
Nombre con bugs/cuadraditosCodificación equivocada al guardar el ItemListGuarda en ANSI (o la codificación que exija el emulador)
Textura negra o invisibleEl BMD apunta a una textura inexistente o formato equivocadoExporta la textura en el formato correcto (OZJ/OZT) con el nombre esperado
El ítem ocupa casillas equivocadas en el inventarioAncho/alto mal definidos en el servidorAjusta Width/Height según el tipo de ítem
El índice sobrescribe otro ítemÍndice ya reservado por el emuladorElige un índice comprobadamente libre en un rango de personalización
El cambio no aparece en el juegoGS no reiniciado o parche no publicadoReinicia el GameServer y publica el parche del cliente

Lista de verificación de lanzamiento

  • Backup de los ItemList (servidor y cliente), base de datos y carpeta de datos del cliente
  • Par sección+índice confirmado como libre en la documentación del emulador
  • Entrada creada en el ItemList del servidor con stats y requisitos coherentes
  • Entrada reflejada en el ItemList del cliente en el índice idéntico
  • BMD y texturas en el formato y nombre correctos (o reaprovechados de un ítem existente)
  • Opciones/excelentes/sockets configurados según el balanceo
  • GameServer reiniciado en el entorno de prueba
  • Ítem probado: inventario, equipar, soltar al suelo, baúl y trade
  • Parche con solo los archivos modificados armado y versionado
  • Descarga del parche probada en una máquina limpia
  • Comunicación publicada en el sitio/Discord

Siguiendo esta secuencia, crear un ítem personalizado deja de ser prueba y error y se convierte en un proceso previsible. El secreto es recordar siempre los tres frentes — servidor, cliente y gráficos — en el mismo índice, probar el drop al suelo antes que nada y distribuir con un parche liviano mediante el launcher.

Preguntas frecuentes

¿Necesito reiniciar el servidor tras editar el ItemList?

Sí. El GameServer carga la lista de ítems al iniciar, así que cualquier cambio exige reiniciar el proceso del GS para que surta efecto. Recargar solo el cliente no basta.

¿Puedo usar cualquier índice dentro de una sección del ItemList?

No. Usa solo índices libres no reservados por el emulador. Los índices ocupados por ítems de sistema, invocaciones o eventos pueden causar conflicto, así que confírmalo en la documentación de tu emulador.

¿El cliente necesita tener el mismo ítem que el servidor?

Sí. Servidor y cliente deben estar sincronizados en el mismo índice (sección y número). Si el cliente no conoce el ítem, aparece invisible, con el nombre equivocado o tira la conexión.

¿Un ítem nuevo exige obligatoriamente un modelo BMD propio?

No necesariamente. Puedes reaprovechar el BMD y la textura de un ítem existente y solo cambiar el nombre, los atributos y las opciones. Un BMD propio solo hace falta cuando quieres una apariencia inédita.

¿Cómo distribuyo el ítem nuevo a quien ya tiene el juego instalado?

Empaqueta los archivos modificados (ItemList del cliente, BMD y texturas) en un parche y publícalo mediante el autoupdate/launcher. Así cada jugador descarga solo los archivos modificados en la próxima apertura.

BR
Editor de eventos, mapas e ítems

Bruno es especialista en eventos, mapas, bosses y economía de ítems de MU Online. Documenta cada detalle basándose en el juego real.

Sigue leyendo

Artículos relacionados