Cómo Gestionar Cuentas y Guilds en tu Servidor de MU Online
Aprende a gestionar cuentas de jugadores y guilds en tu servidor privado de MU Online usando consultas SQL, comandos GM y panel de administración.
Gestionar cuentas de jugadores y guilds es una de las tareas administrativas más frecuentes en cualquier servidor privado de MU Online. Ya sea para resolver un problema de acceso, limpiar guilds inactivos o ajustar el estado de un personaje, realizar estas operaciones de forma correcta evita la corrupción de datos y mantiene el funcionamiento estable de la comunidad. Esta guía cubre las técnicas principales usando acceso directo a SQL, comandos GM en el juego y paneles de administración web.
Comprender la Estructura de la Base de Datos
Antes de modificar cualquier dato es fundamental entender qué tablas almacenan qué información. La mayoría de los emuladores de MU Online (como MuEmu, Igcn o builds de Season 6/15) comparten un esquema de base de datos similar, dividido en dos o tres bases: una para cuentas, una para datos del juego y, en algunos casos, una separada para eventos o el sistema web.
Tablas clave para la gestión de cuentas y guilds:
Base de Datos de Cuentas
MEMB_INFO → credenciales de cuenta, estado, nivel, correo electrónico
MEMB_STAT → estado de conexión, última IP, tiempo conectado
MEMB_CREDITS → saldo de moneda premium o créditos
Base de Datos del Juego
Character → una fila por personaje; campos: AccountID, Name, Class, Level, MapNumber
Inventory → ranuras de inventario de cada personaje
Warehouse → almacén compartido por cuenta
Guild → cabecera del guild: GuildName, GuildMaster, Score, Mark
GuildMember → fila de cada miembro: AccountID, Name, GuildName, GuildStatus
GuildMark → datos binarios del logotipo vinculados a GuildName
Nunca ejecutes sentencias UPDATE o DELETE sin una cláusula WHERE. Usa transacciones (BEGIN TRANSACTION / ROLLBACK / COMMIT) para poder deshacer errores antes de que sean permanentes.
Gestión de Cuentas de Jugadores
Consultar y Editar Información de Cuenta
Para buscar una cuenta por nombre de usuario:
-- Ver detalles de la cuenta
SELECT memb___id, memb__pwd, mail_addr, AccountLevel, BlockCode, ConnectStat
FROM MEMB_INFO
WHERE memb___id = 'nombreusuario';
-- Verificar último estado de conexión conocido
SELECT memb___id, ConnectStat, ServerName, IP
FROM MEMB_STAT
WHERE memb___id = 'nombreusuario';
Significado de los campos más importantes:
AccountLevel→ 0 = jugador normal, 1+ = niveles de staff (valores varían según el build)BlockCode→ 0 = activo, 1 = bloqueado/baneadoConnectStat→ 0 = desconectado, 1 = conectado
Para suspender temporalmente una cuenta:
BEGIN TRANSACTION;
UPDATE MEMB_INFO
SET BlockCode = 1
WHERE memb___id = 'nombreusuario';
-- Verificar antes de confirmar
SELECT memb___id, BlockCode FROM MEMB_INFO WHERE memb___id = 'nombreusuario';
COMMIT;
Para levantar la suspensión, establece BlockCode = 0 con el mismo patrón.
Restablecer Contraseñas
Si tu servidor almacena contraseñas en texto plano (común en builds más antiguos):
BEGIN TRANSACTION;
UPDATE MEMB_INFO
SET memb__pwd = 'ClaveTemporalNueva1'
WHERE memb___id = 'nombreusuario';
COMMIT;
Si tu build usa MD5 u otro hash personalizado, genera primero el hash con el mismo algoritmo que aplica tu servidor y luego inserta la cadena resultante en lugar de la contraseña en crudo. Revisa el código fuente o los archivos de configuración de tu servidor para confirmar el método utilizado.
> [!ATENCION] > Nunca almacenes ni envíes contraseñas en texto plano por Discord, correo electrónico o tickets de soporte. Genera una contraseña temporal, entrégala de forma privada e indica al jugador que la cambie en el primer inicio de sesión.
Mover o Eliminar un Personaje
Para transferir un personaje de una cuenta a otra:
BEGIN TRANSACTION;
UPDATE Character
SET AccountID = 'cuentadestino'
WHERE Name = 'NombrePersonaje';
-- Confirmar el cambio
SELECT Name, AccountID FROM Character WHERE Name = 'NombrePersonaje';
COMMIT;
Para eliminar un personaje limpiamente (quitar todos los datos relacionados):
BEGIN TRANSACTION;
DELETE FROM Inventory WHERE Name = 'NombrePersonaje';
DELETE FROM Warehouse WHERE AccountID = (SELECT AccountID FROM Character WHERE Name = 'NombrePersonaje');
DELETE FROM Character WHERE Name = 'NombrePersonaje';
COMMIT;
La eliminación del almacén solo debe realizarse si ningún otro personaje de esa cuenta comparte el mismo almacén. Ajusta la consulta según corresponda para cuentas con varios personajes.
Gestión de Guilds
Consultar Información de Guilds
-- Listar todos los guilds con conteo de miembros
SELECT g.GuildName, g.GuildMaster, g.Score,
COUNT(m.Name) AS CantidadMiembros
FROM Guild g
LEFT JOIN GuildMember m ON g.GuildName = m.GuildName
GROUP BY g.GuildName, g.GuildMaster, g.Score
ORDER BY CantidadMiembros DESC;
-- Listar todos los miembros de un guild específico
SELECT Name, AccountID, GuildStatus
FROM GuildMember
WHERE GuildName = 'NombreDelGuild'
ORDER BY GuildStatus DESC;
Valores típicos de GuildStatus:
0→ Miembro regular1→ Battle Master2→ Guild Master
Cambiar el Guild Master
Si el master actual abandonó el servidor y dejó el guild sin liderazgo:
BEGIN TRANSACTION;
-- Degradar al antiguo master en GuildMember
UPDATE GuildMember
SET GuildStatus = 0
WHERE GuildName = 'NombreDelGuild' AND Name = 'NombreAntiguo';
-- Promover al nuevo master en GuildMember
UPDATE GuildMember
SET GuildStatus = 2
WHERE GuildName = 'NombreDelGuild' AND Name = 'NombreNuevo';
-- Actualizar la tabla cabecera Guild
UPDATE Guild
SET GuildMaster = 'NombreNuevo'
WHERE GuildName = 'NombreDelGuild';
COMMIT;
> [!CONSEJO] > Anuncia los cambios de liderazgo en el Discord o foro de tu servidor antes de realizar el cambio en la base de datos. Esto evita disputas y mantiene a la comunidad informada. Documenta la solicitud, el motivo y la fecha en un registro privado de administración.
Disolver un Guild Inactivo
Disolver un guild implica eliminar tres conjuntos de registros relacionados:
BEGIN TRANSACTION;
DELETE FROM GuildMark WHERE GuildName = 'GuildInactivo';
DELETE FROM GuildMember WHERE GuildName = 'GuildInactivo';
DELETE FROM Guild WHERE GuildName = 'GuildInactivo';
COMMIT;
Tras disolver el guild, revisa también las relaciones de alianza que pueda haber tenido. Consulta la tabla GuildAlliance o su equivalente en tu build y elimina las entradas obsoletas.
Ajustar el Score o Puntos de Alianza de un Guild
El score del guild afecta los rankings. Para corregir un valor manualmente tras un bug verificado:
BEGIN TRANSACTION;
UPDATE Guild
SET Score = 15000
WHERE GuildName = 'NombreDelGuild';
COMMIT;
Solo ajusta scores para corregir bugs comprobables, no para favorecer jugadores. Mantén un registro de cada cambio manual de score con el motivo y el nombre del administrador que lo realizó.
Uso de Comandos GM en el Juego
Las ediciones directas de la base de datos son potentes pero arriesgadas. Para las operaciones del día a día, los comandos GM en el juego son más rápidos y seguros. Comandos comunes en la mayoría de los builds:
/ban <AccountID> <Minutos> → ban temporal de cuenta
/unban <AccountID> → levantar un ban
/kick <NombrePersonaje> → desconectar un personaje
/move <NombrePersonaje> <Mapa> <X> <Y> → reubicar un jugador bloqueado
/givitem <NombrePersonaje> <CodigoItem> <Nivel> <Cantidad> → entregar ítem
/guilddisband <NombreGuild> → disolver guild desde el juego
/addgm <AccountID> <Nivel> → otorgar acceso GM
> [!CONSEJO] > Mantén un archivo de texto privado o una página de wiki con todos los comandos GM disponibles en tu build específico, con la sintaxis exacta. La sintaxis varía entre emuladores y seasons. Prueba los comandos nuevos en una cuenta de prueba antes de usarlos con jugadores reales.
Registros y Buenas Prácticas de Auditoría
Cada cambio que realices en cuentas o guilds debe quedar registrado. Como mínimo, mantén una hoja de cálculo o canal privado con:
- Fecha y hora de la acción
- Nombre de administrador que la realizó
- Jugador o guild afectado
- Motivo de la acción
- Consulta SQL o comando utilizado
Muchos builds incluyen una tabla LogGM o AdminLog. Actívala y consúltala con regularidad:
SELECT TOP 100 *
FROM LogGM
ORDER BY LogDate DESC;
El registro consistente te protege de acusaciones falsas, ayuda a detectar patrones de abuso y permite deshacer errores al poder rastrear exactamente qué cambios se realizaron.
Consultas de Mantenimiento Periódico
Ejecuta estas consultas de forma regular para mantener la base de datos en buen estado:
-- Cuentas inactivas por más de 6 meses
SELECT memb___id, LastLoginDate
FROM MEMB_STAT
WHERE LastLoginDate < DATEADD(MONTH, -6, GETDATE())
ORDER BY LastLoginDate ASC;
-- Guilds sin miembros (registros huérfanos)
SELECT g.GuildName
FROM Guild g
LEFT JOIN GuildMember m ON g.GuildName = m.GuildName
WHERE m.Name IS NULL;
-- Personajes sin cuenta asociada (filas huérfanas)
SELECT c.Name, c.AccountID
FROM Character c
LEFT JOIN MEMB_INFO a ON c.AccountID = a.memb___id
WHERE a.memb___id IS NULL;
Limpiar registros huérfanos e inactivos mantiene la base de datos liviana y reduce el riesgo de conflictos cuando los jugadores crean nuevas cuentas o guilds con nombres que fueron usados anteriormente.
Una gestión sólida de cuentas y guilds es la base de un servidor privado bien administrado. Aplica cada cambio mediante transacciones SQL probadas, documenta tus acciones y comunícate con tu comunidad antes de tomar decisiones que afecten sus personajes o grupos.
Perguntas frequentes
¿Cómo restablezco la contraseña de un jugador desde la base de datos?
Conéctate a tu instancia de SQL Server, abre la tabla MEMB_INFO en tu base de datos de cuentas, localiza la fila por memb___id y actualiza el campo memb__pwd con el nuevo valor, en texto plano o hasheado según el método de autenticación de tu servidor. Siempre haz una copia de seguridad de la tabla antes de editar directamente.
¿Puedo transferir un personaje entre cuentas sin perder los ítems?
Sí. Actualiza el campo AccountID en la tabla Character para que apunte a la cuenta de destino, luego verifica que las filas del almacén e inventario del personaje en sus respectivas tablas sigan referenciando el nombre de personaje correcto. Prueba primero con un personaje de poco valor.
¿Cómo disuelvo un guild que está inactivo?
Usa el comando GM /guilddisband <NombreGuild> en el juego si tu emulador lo soporta, o elimina la fila del guild de la tabla Guild y las filas relacionadas en GuildMember y GuildMark. Informa a los jugadores afectados antes de ejecutar la acción.
¿Cuál es la forma más segura de otorgar privilegios GM a un miembro del staff?
Establece el campo AccountLevel en MEMB_INFO al nivel adecuado (comúnmente 3 para Helper, 5 para GM, 8 para Admin según el build), limita los comandos GM disponibles a lo estrictamente necesario para ese rol y audita su uso periódicamente mediante los logs del servidor.