Brazil's biggest MU Online portal — since 2003
Tutorial Advanced Economy

How to generate automated economy reports for your MU Online server

Build an automated reporting pipeline that monitors Zen in circulation, item inflation, jewel drops, and the overall health of your MU Online server's economy, with ready-to-use SQL queries and configurable alerts.

BR Bruno · Updated on Aug 1, 2025 · ⏱ 17 min read
Quick answer

Every MU Online server economy tends toward inflation if no one is watching the numbers — Zen piles up, jewels pile up, and the item that was rare at launch becomes a commodity within a few months. The difference between a server that keeps its economy healthy for years and one that "dies" from infl

Every MU Online server economy tends toward inflation if no one is watching the numbers — Zen piles up, jewels pile up, and the item that was rare at launch becomes a commodity within a few months. The difference between a server that keeps its economy healthy for years and one that "dies" from inflation in a few months usually isn't the initially configured drop rate, but the ability to detect the imbalance early and act. Automated economy reports are exactly that capability: a set of queries and alerts that run on their own and warn the administrator before the problem becomes visible to every player. This tutorial builds that pipeline from scratch.

Why automate economy reports

Eyeballing the economy — via player feedback on Discord or the administrator's personal impression — always arrives too late. By the time players start complaining that "everything got more expensive," inflation is already at an advanced stage, and the fix (reducing drops, adding a Zen sink) causes more friction than if it had been done early. Automated reports, running daily or weekly, give continuous visibility and allow for small, gradual adjustments instead of abrupt, unpopular corrections.

Essential metrics of a healthy MU economy

MetricWhat it measuresWarning sign
Total Zen in circulationSum of Zen across all accounts + charactersGrowth far above the number of active players
Average Zen per active accountTotal Zen / active accountsSteady rise indicates too little Zen "sink" in the game
Jewels in circulation (by type)Sum of Bless, Soul, Life, Chaos, etc.Growth disproportionate to the number of players
Average price of a key market itemObserved sale price (player shop/marketplace)Steady rise = inflation; sharp drop = saturation
Wealth distribution (top 1% vs. the rest)Zen/items concentrated in the richest accountsExtreme concentration pushes new players away from the market
Zen sink rateZen spent on NPCs, repairs, fees / Zen generated by dropsSink far below generation guarantees inflation

Data sources: where the numbers live

Most MU emulators (IGCN, MuEMU, X-Team) store this information in fairly predictable tables, though names vary:

DataTypical tableRelevant column
Character's ZenCharacterMoney
Zen stored in the warehouse/bankWarehouse or AccountWarehouseMoney
Item inventoryCharacter_Inventory / Warehouse_ItemsItemIndex, ItemLevel
Drop logMonsterDropLog (if it exists)ItemId, Timestamp
Market transaction logMarketLog / PersonalShopLogPrice, ItemId

If your emulator doesn't keep a drop or transaction log by default, it's worth enabling it via configuration (most have the option, even if disabled by default) before you actually need it — without history, you can only analyze the current state, not the trend.

Step 1 — Query for total Zen in circulation

SELECT
    (SELECT COALESCE(SUM(Money), 0) FROM Character) +
    (SELECT COALESCE(SUM(Money), 0) FROM Warehouse) AS total_zen_circulation,
    (SELECT COUNT(DISTINCT AccountID) FROM Character WHERE LastLogin > NOW() - INTERVAL 7 DAY) AS active_accounts_7d;

Run this query daily and store the result in your own historical table (not the game's tables), so you can compare the trend over time:

CREATE TABLE eco_report_daily (
    report_date DATE PRIMARY KEY,
    zen_total BIGINT,
    active_accounts INT,
    zen_avg_per_account DECIMAL(20,2)
);

Step 2 — Query for jewels in circulation by type

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 'Other'
    END AS jewel_name,
    COUNT(*) AS total_quantity
FROM Character_Inventory
WHERE ItemIndex IN (14, 15, 22, 31)
GROUP BY ItemIndex
ORDER BY total_quantity DESC;

Adjust the ItemIndex values to match your emulator's item table — the values above are illustrative and vary by season/client.

Step 3 — Detecting wealth concentration

SELECT AccountID, SUM(Money) AS account_zen
FROM Character
GROUP BY AccountID
ORDER BY account_zen DESC
LIMIT 20;

Compare the sum of these 20 accounts against the total_zen_circulation calculated in Step 1. If the 20 richest accounts hold, say, more than 40% of the total Zen, that's already a sign of imbalance worth investigating — it could be legitimate farming by very dedicated players, or it could signal an exploit/bot operating at scale.

Step 4 — Calculating the Zen sink rate

The "sink" is Zen that leaves circulation (spent on NPCs, item repair, market fees). If your emulator doesn't log this directly, one approximation is comparing total Zen at two points in time against an estimate of generation (average drop × active players):

-- Simple comparison between two daily reports
SELECT
    d2.report_date,
    d2.zen_total - d1.zen_total AS zen_change,
    d2.active_accounts
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;

A constant, growing positive change, with no corresponding growth in new players, is the most direct sign of inflation in progress.

Step 5 — Automating execution (cron/scheduler)

On Linux, schedule the queries via cron, calling a script (PHP, Python, or even a .sql file via mysql -e) that runs the queries and stores the result in the history table:

# crontab -e
0 6 * * * /usr/bin/php /var/www/scripts/eco_report_daily.php >> /var/log/mu_eco_report.log 2>&1

The script (eco_report_daily.php) should: connect to the database, run the queries from Steps 1 through 4, store the result in eco_report_daily, and optionally send a summary to an admin Discord webhook.

Step 6 — Automatic threshold-based alerts

Configure the script to fire an alert (Discord webhook, email) whenever an indicator crosses a defined threshold:

IndicatorSuggested alert threshold
Total Zen change+15% in 7 days with no growth in active players
Concentration in the top 20 accountsAbove 40% of total Zen
A specific jewel in circulation+25% growth in 7 days
Active accounts dropping20%+ drop in a week
if ($zen_percent_change > 0.15 && $player_growth < 0.05) {
    sendDiscordAlert("Inflation alert: Zen grew {$zen_percent_change}% with no proportional player growth.");
}

Step 7 — Turning data into decisions

A report only has value if it leads to action. Establish standard responses for each signal:

Signal detectedRecommended action
Steady Zen inflationAdd a sink (NPC fees, higher reset/reforge cost)
A specific jewel in excessReduce that jewel's drop rate by 10-20%
Extreme wealth concentrationInvestigate top accounts (legitimate farming vs. exploit)
Drop in active playersReview the cause before touching the economy (it may not be economic)

Step 8 — Consolidated weekly report for the team

Beyond the daily automated alerts, put together a weekly summary (even if manual, copying numbers from the history) with a simple chart of total Zen, jewels in circulation, and active accounts over time. Sharing this summary with the whole admin team — not just whoever handles the economy — helps related decisions (events, new item drops) factor in the economy's current state.

Common errors and fixes

SymptomLikely causeFix
Report doesn't run automaticallyMisconfigured cron or file permissionsTest the script manually and review the crontab
Numbers don't match players' perceptionMarket/drop logging disabled, missing dataEnable the relevant logs in the emulator's configuration
Alerts fire too often (false positives)Thresholds set too lowCalibrate thresholds after observing 2-4 weeks of history
Inflation identified but no action takenNo defined response processDocument a standard action for each alert type
Incomplete history after a server outageReport table with no failure handlingAdd error logging and manual re-run for the missed day

Reporting pipeline implementation checklist

  • Historical reports table (eco_report_daily or equivalent) created.
  • Queries for total Zen, jewels in circulation, and wealth concentration validated.
  • Drop/market logs enabled in the emulator, if they weren't already.
  • Automation script scheduled via cron (or the Windows equivalent).
  • Alerts configured with thresholds calibrated after an observation period.
  • Response process documented for each alert type.
  • Weekly summary shared with the admin team.

With automated reports monitoring the economy's health, the next step is to use that data to directly calibrate the server's drop rates and item systems, closing the loop between monitoring and configuration — a good starting point is reviewing the general rates in the MU Online server creation tutorial.

Frequently asked questions

How often should I generate economy reports?

A daily summary report (total Zen in circulation, jewels dropped, top farmers) and a more complete weekly report (inflation comparison, wealth distribution) cover most servers well. During launch periods or major events, it's worth tracking daily for at least two weeks.

Do I need an expensive BI tool for this?

No. Most of the value comes from well-designed SQL queries running periodically, with results exported to a spreadsheet or a simple dashboard (Grafana with a MySQL connector, for example, which is free). Paid BI tools only pay off on very large servers with a dedicated data team.

What counts as 'inflation' in an MU Online context?

It's an increase in the amount of Zen and valuable items (jewels, excellent/ancient items) in circulation without a proportional increase in demand, resulting in a drop in the purchasing power of each unit. If the average price of a Jewel of Bless in Zen consistently rises month over month, that's a sign of inflation.

Do economy reports help identify bots and item duplication?

Yes, indirectly. Abnormal spikes in Zen or items on a specific account, or circulation growth far above the number of active players, are usually the first visible signs of large-scale bot farming or an active duplication exploit.

Is it worth sharing these reports with the community?

A summarized version without sensitive data (e.g., 'we adjusted jewel drop rates because inflation passed X%') builds transparency and trust. Don't share individual account data or numbers that expose vulnerabilities exploitable by malicious players.

BR
Events, maps & items editor

Bruno specializes in MU Online events, maps, bosses and item economy. He documents every detail based on real gameplay.

Keep reading

Related articles