Como gerar relatórios automáticos de economia para o seu servidor de MU Online
Monte um pipeline de relatórios automáticos que monitora Zen em circulação, inflação de itens, drop de jewels e saúde da economia do seu servidor de MU Online, com queries SQL prontas e alertas configuráveis.
Toda economia de servidor de MU Online tende à inflação se ninguém estiver observando os números — Zen se acumula, jewels se acumulam, e o item que era raro no lançamento vira commodity poucos meses depois. A diferença entre um servidor que mantém a economia saudável por anos e um que "morre" de inf
Toda economia de servidor de MU Online tende à inflação se ninguém estiver observando os números — Zen se acumula, jewels se acumulam, e o item que era raro no lançamento vira commodity poucos meses depois. A diferença entre um servidor que mantém a economia saudável por anos e um que "morre" de inflação em poucos meses geralmente não é a taxa de drop configurada inicialmente, mas sim a capacidade de detectar o desequilíbrio cedo e agir. Relatórios automáticos de economia são exatamente essa capacidade: um conjunto de queries e alertas que rodam sozinhos e avisam o administrador antes que o problema vire visível para todos os jogadores. Este tutorial monta esse pipeline do zero.
Por que automatizar relatórios de economia
Olhar a economia "no olho" — via feedback de jogadores no Discord ou impressão pessoal do administrador — sempre chega tarde. Quando os jogadores começam a reclamar que "o preço de tudo subiu", a inflação já está em estágio avançado e a correção (reduzir drop, adicionar sink de Zen) causa mais atrito do que se tivesse sido feita cedo. Relatórios automáticos, rodando diariamente ou semanalmente, dão visibilidade contínua e permitem ajustes pequenos e graduais em vez de correções bruscas e impopulares.
Métricas essenciais de uma economia de MU saudável
| Métrica | O que mede | Sinal de alerta |
|---|---|---|
| Zen total em circulação | Soma do Zen em todas as contas + personagens | Crescimento muito acima do número de jogadores ativos |
| Zen médio por conta ativa | Zen total / contas ativas | Subida constante indica pouco "sink" de Zen no jogo |
| Jewels em circulação (por tipo) | Soma de Bless, Soul, Life, Chaos, etc. | Crescimento desproporcional ao número de jogadores |
| Preço médio de item-chave no mercado | Preço de venda observado (loja de jogador/marketplace) | Alta constante = inflação; queda brusca = saturação |
| Distribuição de riqueza (top 1% vs. resto) | Zen/itens concentrados nas contas mais ricas | Concentração extrema afasta jogador novo do mercado |
| Taxa de sink de Zen | Zen gasto em NPC, reparo, taxas / Zen gerado por drop | Sink muito abaixo da geração = inflação garantida |
Fontes de dados: onde os números moram
A maioria dos emuladores de MU (IGCN, MuEMU, X-Team) guarda essas informações em tabelas relativamente previsíveis, embora os nomes variem:
| Dado | Tabela típica | Coluna relevante |
|---|---|---|
| Zen do personagem | Character | Money |
| Zen guardado no armazém/banco | Warehouse ou AccountWarehouse | Money |
| Inventário de itens | Character_Inventory / Warehouse_Items | ItemIndex, ItemLevel |
| Log de drop | MonsterDropLog (se existir) | ItemId, Timestamp |
| Log de transação de mercado | MarketLog / PersonalShopLog | Price, ItemId |
Se o seu emulador não mantém log de drop ou transação por padrão, vale a pena habilitar esse log via configuração (a maioria tem a opção, mesmo que desativada por padrão) antes de precisar dele — sem histórico, você só consegue analisar o estado atual, não a tendência.
Passo 1 — Query de Zen total em circulação
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;
Rode essa query diariamente e grave o resultado em uma tabela histórica própria (não nas tabelas do jogo), para poder comparar a evolução ao longo do tempo:
CREATE TABLE eco_report_daily (
report_date DATE PRIMARY KEY,
zen_total BIGINT,
contas_ativas INT,
zen_medio_por_conta DECIMAL(20,2)
);
Passo 2 — Query de jewels em circulação 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 'Outro'
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;
Ajuste os ItemIndex conforme a tabela de itens do seu emulador — os valores acima são ilustrativos e variam por season/cliente.
Passo 3 — Detectando concentração de riqueza
SELECT AccountID, SUM(Money) AS zen_conta
FROM Character
GROUP BY AccountID
ORDER BY zen_conta DESC
LIMIT 20;
Compare a soma dessas 20 contas com o zen_total_circulacao calculado no Passo 1. Se as 20 contas mais ricas concentram, por exemplo, mais de 40% do Zen total, isso já é sinal de desequilíbrio que vale investigar — pode ser farm legítimo de jogadores muito dedicados, ou pode ser sinal de exploit/bot em escala.
Passo 4 — Calculando a taxa de sink de Zen
O "sink" é o Zen que sai de circulação (gasto em NPC, reparo de item, taxa de mercado). Se o seu emulador não loga isso diretamente, uma aproximação é comparar o Zen total em dois pontos no tempo contra uma estimativa de geração (drop médio × jogadores ativos):
-- Comparação simples entre dois relatórios diários
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;
Uma variação positiva constante e crescente, sem correspondência em novos jogadores, é o sinal mais direto de inflação em andamento.
Passo 5 — Automatizando a execução (cron/agendador)
Em Linux, agende as queries via cron chamando um script (PHP, Python ou até um .sql via mysql -e) que roda as consultas e grava o resultado na tabela de histórico:
# crontab -e
0 6 * * * /usr/bin/php /var/www/scripts/eco_report_daily.php >> /var/log/mu_eco_report.log 2>&1
O script (eco_report_daily.php) deve: conectar ao banco, rodar as queries do Passo 1 a 4, gravar o resultado em eco_report_daily, e opcionalmente enviar um resumo para um webhook do Discord administrativo.
Passo 6 — Alertas automáticos por limiar
Configure o script para disparar um alerta (webhook do Discord, e-mail) quando algum indicador ultrapassar um limiar definido:
| Indicador | Limiar de alerta sugerido |
|---|---|
| Variação de Zen total | +15% em 7 dias sem aumento de jogadores ativos |
| Concentração nas top 20 contas | Acima de 40% do Zen total |
| Jewel específica em circulação | Crescimento de +25% em 7 dias |
| Contas ativas caindo | Queda de 20%+ na semana |
if ($variacao_percentual_zen > 0.15 && $crescimento_jogadores < 0.05) {
enviarAlertaDiscord("Alerta de inflação: Zen cresceu {$variacao_percentual_zen}% sem crescimento proporcional de jogadores.");
}
Passo 7 — Transformando dados em decisão
Um relatório só tem valor se leva a uma ação. Estabeleça respostas padrão para cada sinal:
| Sinal detectado | Ação recomendada |
|---|---|
| Inflação de Zen constante | Adicionar sink (taxa de NPC, custo de reset/reforma maior) |
| Jewel específica em excesso | Reduzir taxa de drop daquela jewel em 10-20% |
| Concentração de riqueza extrema | Investigar contas do topo (farm legítimo vs. exploit) |
| Queda de jogadores ativos | Revisar causa antes de mexer na economia (pode não ser econômico) |
Passo 8 — Relatório semanal consolidado para a equipe
Além dos alertas diários automáticos, monte um resumo semanal (mesmo que manual, copiando os números do histórico) com gráfico simples de evolução de Zen total, jewels em circulação e contas ativas. Compartilhar esse resumo com toda a equipe de administração — não só quem cuida da economia — ajuda decisões relacionadas (eventos, drop de itens novos) a considerar o estado atual da economia.
Erros comuns e soluções
| Sintoma | Causa provável | Solução |
|---|---|---|
| Relatório não roda automaticamente | Cron mal configurado ou permissão de arquivo | Teste o script manualmente e revise o crontab |
| Números não batem com percepção dos jogadores | Log de mercado/drop desativado, faltando dados | Habilite os logs relevantes na configuração do emulador |
| Alertas disparando demais (falso positivo) | Limiares configurados baixos demais | Calibre os limiares observando 2-4 semanas de histórico primeiro |
| Inflação identificada mas sem ação | Falta de processo de resposta definido | Documente ação padrão para cada tipo de alerta |
| Histórico incompleto após queda de servidor | Tabela de relatório sem tratamento de falha | Adicione log de erro e reexecução manual do dia perdido |
Checklist de implementação do pipeline de relatórios
- Tabela histórica de relatórios (
eco_report_dailyou equivalente) criada. - Queries de Zen total, jewels em circulação e concentração de riqueza validadas.
- Logs de drop/mercado habilitados no emulador, se ainda não estavam.
- Script de automação agendado via cron (ou equivalente no Windows).
- Alertas configurados com limiares calibrados após período de observação.
- Processo de resposta documentado para cada tipo de alerta.
- Resumo semanal compartilhado com a equipe de administração.
Com os relatórios automáticos monitorando a saúde da economia, o próximo passo é usar esses dados para calibrar diretamente as taxas de drop e os sistemas de itens do servidor, fechando o ciclo entre monitoramento e configuração — um bom ponto de partida é revisar as taxas gerais no tutorial de criação de servidor de MU Online.
Perguntas frequentes
Com que frequência devo gerar relatórios de economia?
Um relatório diário resumido (Zen total em circulação, jewels dropados, top farmadores) e um relatório semanal mais completo (comparativo de inflação, distribuição de riqueza) cobrem bem a maioria dos servidores. Em períodos de lançamento ou evento grande, vale acompanhar diariamente por pelo menos duas semanas.
Preciso de uma ferramenta de BI cara para isso?
Não. A maior parte do valor vem de queries SQL bem desenhadas rodando periodicamente, com o resultado exportado para uma planilha ou um dashboard simples (Grafana com conector MySQL, por exemplo, que é gratuito). Ferramentas de BI pagas só compensam em servidores muito grandes com equipe dedicada de dados.
O que é considerado 'inflação' no contexto de MU Online?
É o aumento da quantidade de Zen e itens de valor (jewels, itens excellent/ancient) em circulação sem aumento proporcional de demanda, resultando em queda do poder de compra de cada unidade. Se o preço médio de uma Jewel of Bless em Zen sobe consistentemente mês a mês, é sinal de inflação.
Relatórios de economia ajudam a identificar bots e duplicação de item?
Sim, indiretamente. Picos anormais de Zen ou item em uma conta específica, ou crescimento de circulação muito acima do número de jogadores ativos, costumam ser os primeiros sinais visíveis de bot farmando em escala ou de um exploit de duplicação sendo usado ativamente.
Vale a pena compartilhar esses relatórios com a comunidade?
Uma versão resumida e sem dados sensíveis (ex.: 'ajustamos o drop de jewel porque a inflação passou de X%') gera transparência e confiança. Não compartilhe dados de contas individuais ou números que exponham vulnerabilidades exploráveis por jogadores mal-intencionados.