A Metin2 donate system that actually reaches the game
Why direct SQL edits don't reach a live Metin2 server, and how item_award and the Dragon Coin columns do
By Forgeport · Published 21 August 2026
Most homemade Metin2 donate systems deliver by editing the player's rows in MySQL. It looks correct in the database and doesn't arrive in the game — the same trap every game with a database cache sets, sprung the same way.
DBCache eats your UPDATE
A running Metin2 core holds an online player's items, name and position in memory, in DBCache. A
direct UPDATE of a player row is real in SQL and invisible in the game until a cache restart
and a relog — which a live server doesn't have to offer. Panels built on direct writes "work"
in testing on an idle server and fail exactly when it matters, with a paying player online.
The queue the game already ships
The right mechanism is built into the game itself: player.item_award. The core polls that table
on its own five-second cycle, moves the item into the in-game gift box, and stamps the row when
the player claims it. Insert with mall = 1 and the item lands in the Item Shop storage —
claimable on any character of the account, online or offline. That gives a donate system three
properties for free:
- No game-side changes. No source edits, no extender — the queue is stock.
- Account-keyed delivery. The gift box is addressed by login, so there's no "wrong character" and no online/offline window to get right.
- A natural idempotency hook. Give each grant a stable id in the
whycolumn and guard the insert with it, and a retried delivery writes nothing instead of delivering twice.
The two donation currencies are the one exception: account.cash (Dragon Coins) and
account.mileage (Dragon Marks) are applied by the core in real time, so a plain UPDATE on
the account row is correct there — as long as something above it makes retries safe, since an
UPDATE has no built-in replay guard.
How Forgeport does it
Forgeport's Metin2 connector is a sidecar process that speaks exactly this dialect: it runs next
to your server, reaches it only over MySQL, inserts into item_award for items and credits the
two currency columns for coins, with an idempotency journal wrapping the currency credits. One
portal.toml file describes your base — nothing is compiled into the game's C++ core.
Stated plainly: Metin2 support is in beta. Every mechanism above was measured on one reference base (old-metin2, the maintained Linux port of the 2014 files) — but "Metin2" is really a family of file-bases with different schemas and, above all, different password hashing, so on your base the profile's marked lines need checking, and rough edges are possible until more live servers have run it. The Metin2 server guide documents every query, the password-format table and the end-to-end tests to run; the capabilities reference shows what a Metin2 connector can and cannot advertise; and the Metin2 player portal page summarizes the hosted side.