Cómo generar reportes automáticos de economía para tu servidor de MU Online
Arma un pipeline de reportes automáticos que monitorea el Zen en circulación, la inflación de ítems, el drop de jewels y la salud de la economía de tu servidor de MU Online, con consultas SQL listas y alertas configurables.
Toda economía de un servidor de MU Online tiende a la inflación si nadie está observando los números — el Zen se acumula, las jewels se acumulan, y el ítem que era raro en el lanzamiento se convierte en commodity pocos meses después. La diferencia entre un servidor que mantiene la economía saludable
Toda economía de un servidor de MU Online tiende a la inflación si nadie está observando los números — el Zen se acumula, las jewels se acumulan, y el ítem que era raro en el lanzamiento se convierte en commodity pocos meses después. La diferencia entre un servidor que mantiene la economía saludable por años y uno que "muere" de inflación en pocos meses generalmente no es la tasa de drop configurada inicialmente, sino la capacidad de detectar el desequilibrio a tiempo y actuar. Los reportes automáticos de economía son exactamente esa capacidad: un conjunto de consultas y alertas que corren solas y avisan al administrador antes de que el problema se vuelva visible para todos los jugadores. Este tutorial arma ese pipeline desde cero.
Por qué automatizar los reportes de economía
Mirar la economía "a ojo" — vía feedback de jugadores en Discord o impresión personal del administrador — siempre llega tarde. Cuando los jugadores empiezan a quejarse de que "el precio de todo subió", la inflación ya está en etapa avanzada y la corrección (reducir el drop, agregar un sink de Zen) causa más fricción de la que habría causado si se hubiera hecho a tiempo. Los reportes automáticos, corriendo diaria o semanalmente, dan visibilidad continua y permiten ajustes pequeños y graduales en vez de correcciones bruscas e impopulares.
Métricas esenciales de una economía de MU saludable
| Métrica | Qué mide | Señal de alerta |
|---|---|---|
| Zen total en circulación | Suma del Zen en todas las cuentas + personajes | Crecimiento muy por encima del número de jugadores activos |
| Zen promedio por cuenta activa | Zen total / cuentas activas | Subida constante indica poco "sink" de Zen en el juego |
| Jewels en circulación (por tipo) | Suma de Bless, Soul, Life, Chaos, etc. | Crecimiento desproporcionado al número de jugadores |
| Precio promedio de ítem clave en el mercado | Precio de venta observado (tienda de jugador/marketplace) | Alza constante = inflación; caída brusca = saturación |
| Distribución de riqueza (top 1% vs. resto) | Zen/ítems concentrados en las cuentas más ricas | Concentración extrema aleja al jugador nuevo del mercado |
| Tasa de sink de Zen | Zen gastado en NPC, reparación, tasas / Zen generado por drop | Sink muy por debajo de la generación = inflación garantizada |
Fuentes de datos: dónde viven los números
La mayoría de los emuladores de MU (IGCN, MuEMU, X-Team) guarda esta información en tablas relativamente previsibles, aunque los nombres varían:
| Dato | Tabla típica | Columna relevante |
|---|---|---|
| Zen del personaje | Character | Money |
| Zen guardado en el almacén/banco | Warehouse o AccountWarehouse | Money |
| Inventario de ítems | Character_Inventory / Warehouse_Items | ItemIndex, ItemLevel |
| Log de drop | MonsterDropLog (si existe) | ItemId, Timestamp |
| Log de transacción de mercado | MarketLog / PersonalShopLog | Price, ItemId |
Si tu emulador no mantiene log de drop o transacción por defecto, vale la pena habilitar ese log vía configuración (la mayoría tiene la opción, aunque desactivada por defecto) antes de necesitarlo — sin historial, solo puedes analizar el estado actual, no la tendencia.
Paso 1 — Consulta de Zen total en circulación
SELECT
(SELECT COALESCE(SUM(Money), 0) FROM Character) +
(SELECT COALESCE(SUM(Money), 0) FROM Warehouse) AS zen_total_circulacao,
(SELECT COUNT(DISTINCT AccountID) FROM Character WHERE LastLogin > NOW() - INTERVAL 7 DAY) AS contas_ativas_7d;
Corre esta consulta diariamente y guarda el resultado en una tabla histórica propia (no en las tablas del juego), para poder comparar la evolución a lo largo del tiempo:
CREATE TABLE eco_report_daily (
report_date DATE PRIMARY KEY,
zen_total BIGINT,
contas_ativas INT,
zen_medio_por_conta DECIMAL(20,2)
);
Paso 2 — Consulta de jewels en circulación por tipo
SELECT
ItemIndex,
CASE ItemIndex
WHEN 14 THEN 'Jewel of Bless'
WHEN 15 THEN 'Jewel of Soul'
WHEN 22 THEN 'Jewel of Life'
WHEN 31 THEN 'Jewel of Chaos'
ELSE 'Otro'
END AS jewel_nome,
COUNT(*) AS quantidade_total
FROM Character_Inventory
WHERE ItemIndex IN (14, 15, 22, 31)
GROUP BY ItemIndex
ORDER BY quantidade_total DESC;
Ajusta los ItemIndex según la tabla de ítems de tu emulador — los valores anteriores son ilustrativos y varían según season/cliente.
Paso 3 — Detectando concentración de riqueza
SELECT AccountID, SUM(Money) AS zen_conta
FROM Character
GROUP BY AccountID
ORDER BY zen_conta DESC
LIMIT 20;
Compara la suma de esas 20 cuentas con el zen_total_circulacao calculado en el Paso 1. Si las 20 cuentas más ricas concentran, por ejemplo, más del 40% del Zen total, esto ya es señal de desequilibrio que vale la pena investigar — puede ser farm legítimo de jugadores muy dedicados, o puede ser señal de exploit/bot a escala.
Paso 4 — Calculando la tasa de sink de Zen
El "sink" es el Zen que sale de circulación (gastado en NPC, reparación de ítem, tasa de mercado). Si tu emulador no registra esto directamente, una aproximación es comparar el Zen total en dos puntos en el tiempo contra una estimación de generación (drop promedio × jugadores activos):
-- Comparación simple entre dos reportes diarios
SELECT
d2.report_date,
d2.zen_total - d1.zen_total AS variacao_zen,
d2.contas_ativas
FROM eco_report_daily d1
JOIN eco_report_daily d2 ON d2.report_date = d1.report_date + INTERVAL 1 DAY
ORDER BY d2.report_date DESC
LIMIT 30;
Una variación positiva constante y creciente, sin correspondencia con jugadores nuevos, es la señal más directa de inflación en curso.
Paso 5 — Automatizando la ejecución (cron/planificador)
En Linux, programa las consultas vía cron llamando a un script (PHP, Python o incluso un .sql vía mysql -e) que corre las consultas y guarda el resultado en la tabla de historial:
# crontab -e
0 6 * * * /usr/bin/php /var/www/scripts/eco_report_daily.php >> /var/log/mu_eco_report.log 2>&1
El script (eco_report_daily.php) debe: conectarse a la base de datos, correr las consultas del Paso 1 al 4, guardar el resultado en eco_report_daily, y opcionalmente enviar un resumen a un webhook del Discord administrativo.
Paso 6 — Alertas automáticas por umbral
Configura el script para disparar una alerta (webhook de Discord, correo) cuando algún indicador supere un umbral definido:
| Indicador | Umbral de alerta sugerido |
|---|---|
| Variación de Zen total | +15% en 7 días sin aumento de jugadores activos |
| Concentración en las top 20 cuentas | Por encima del 40% del Zen total |
| Jewel específica en circulación | Crecimiento de +25% en 7 días |
| Cuentas activas cayendo | Caída de 20%+ en la semana |
if ($variacao_percentual_zen > 0.15 && $crescimento_jogadores < 0.05) {
enviarAlertaDiscord("Alerta de inflación: el Zen creció {$variacao_percentual_zen}% sin crecimiento proporcional de jugadores.");
}
Paso 7 — Transformando datos en decisiones
Un reporte solo tiene valor si lleva a una acción. Establece respuestas estándar para cada señal:
| Señal detectada | Acción recomendada |
|---|---|
| Inflación de Zen constante | Agregar sink (tasa de NPC, mayor costo de reset/reforma) |
| Jewel específica en exceso | Reducir la tasa de drop de esa jewel en 10-20% |
| Concentración extrema de riqueza | Investigar las cuentas del tope (farm legítimo vs. exploit) |
| Caída de jugadores activos | Revisar la causa antes de tocar la economía (puede no ser económica) |
Paso 8 — Reporte semanal consolidado para el equipo
Además de las alertas diarias automáticas, arma un resumen semanal (aunque sea manual, copiando los números del historial) con un gráfico simple de evolución de Zen total, jewels en circulación y cuentas activas. Compartir este resumen con todo el equipo de administración — no solo quien se encarga de la economía — ayuda a que las decisiones relacionadas (eventos, drop de ítems nuevos) consideren el estado actual de la economía.
Errores comunes y soluciones
| Síntoma | Causa probable | Solución |
|---|---|---|
| El reporte no corre automáticamente | Cron mal configurado o permiso de archivo | Prueba el script manualmente y revisa el crontab |
| Los números no coinciden con la percepción de los jugadores | Log de mercado/drop desactivado, faltan datos | Habilita los logs relevantes en la configuración del emulador |
| Alertas disparándose demasiado (falso positivo) | Umbrales configurados demasiado bajos | Calibra los umbrales observando 2-4 semanas de historial primero |
| Inflación identificada pero sin acción | Falta de proceso de respuesta definido | Documenta la acción estándar para cada tipo de alerta |
| Historial incompleto tras una caída del servidor | Tabla de reporte sin manejo de fallas | Agrega log de error y reejecución manual del día perdido |
Lista de verificación de implementación del pipeline de reportes
- Tabla histórica de reportes (
eco_report_dailyo equivalente) creada. - Consultas de Zen total, jewels en circulación y concentración de riqueza validadas.
- Logs de drop/mercado habilitados en el emulador, si aún no lo estaban.
- Script de automatización programado vía cron (o equivalente en Windows).
- Alertas configuradas con umbrales calibrados tras un período de observación.
- Proceso de respuesta documentado para cada tipo de alerta.
- Resumen semanal compartido con el equipo de administración.
Con los reportes automáticos monitoreando la salud de la economía, el siguiente paso es usar esos datos para calibrar directamente las tasas de drop y los sistemas de ítems del servidor, cerrando el ciclo entre monitoreo y configuración — un buen punto de partida es revisar las tasas generales en el tutorial de creación de servidor de MU Online.
Preguntas frecuentes
¿Con qué frecuencia debo generar reportes de economía?
Un reporte diario resumido (Zen total en circulación, jewels dropeadas, top farmeadores) y un reporte semanal más completo (comparativo de inflación, distribución de riqueza) cubren bien a la mayoría de los servidores. En períodos de lanzamiento o evento grande, vale la pena revisar diariamente durante al menos dos semanas.
¿Necesito una herramienta de BI cara para esto?
No. La mayor parte del valor viene de consultas SQL bien diseñadas que corren periódicamente, con el resultado exportado a una hoja de cálculo o un dashboard simple (Grafana con conector MySQL, por ejemplo, que es gratuito). Las herramientas de BI de pago solo compensan en servidores muy grandes con equipo dedicado de datos.
¿Qué se considera 'inflación' en el contexto de MU Online?
Es el aumento de la cantidad de Zen e ítems de valor (jewels, ítems excellent/ancient) en circulación sin un aumento proporcional de la demanda, resultando en la caída del poder de compra de cada unidad. Si el precio promedio de una Jewel of Bless en Zen sube consistentemente mes a mes, es señal de inflación.
¿Los reportes de economía ayudan a identificar bots y duplicación de ítems?
Sí, indirectamente. Picos anormales de Zen o ítems en una cuenta específica, o un crecimiento de circulación muy por encima del número de jugadores activos, suelen ser las primeras señales visibles de un bot farmeando a escala o de un exploit de duplicación siendo usado activamente.
¿Vale la pena compartir estos reportes con la comunidad?
Una versión resumida y sin datos sensibles (ej.: 'ajustamos el drop de jewel porque la inflación superó el X%') genera transparencia y confianza. No compartas datos de cuentas individuales ni números que expongan vulnerabilidades explotables por jugadores malintencionados.