Kill statistics for private Metin2 server development
Reviewed integration material for the supplied iBeast Kill Statistics archive, whose changelog identifies v1.0.1. It records free-PvP kills by empire, free-PvP deaths, duel wins/losses, boss kills and Metin stones. These counters are display statistics, not an anti-farming mechanism or a safe basis for automatic rewards. The package contains the unchanged original reference plus a separate M2City r1 overlay and a detailed merge guide.

Problems found and r1 corrections
The original child window closes an undefined toolTipSkill, holds a strong parent reference and has a reciprocal OnTop/SetTop relationship with the character window. It refreshes all labels every frame, lacks explicit destruction, and its expand/minimize state can disagree after reopening. Global counters also need resetting on character changes. The r1 window has repeat-safe teardown, a weak close callback, no retained parent or reciprocal raise callback, and refreshes labels only when counters change through the documented packet hook. The new layout uses standard board, titlebar and text widgets, avoiding modifications to the global ui.py and custom circle textures.
The presentation model accepts exactly nine nonnegative signed-32-bit integers and rejects incomplete or malformed updates as a whole. Duel totals use Python integer arithmetic. A free-PvP K/D with zero deaths is shown as -- rather than inventing a denominator of one.
The nine native counter increments now saturate at INT_MAX; negative values loaded from the database normalize to zero. The outgoing statistics structure is zero-initialized. The supplied boss test uses rank >4; the reviewed merge snippet uses the named MOB_RANK_BOSS threshold and monster classification. Confirm those definitions in your branch. Original partial DB query examples are explicitly identified as merge context, not complete replacement SQL/functions.

Installation and compatibility
This is a source integration kit, not a ready server, executable or whole-source replacement. Use INSTALL.txt and merge into a staging fork. The game, DB and client must agree on the nine-counter order, signed 32-bit widths, packet packing, feature flag and a free packet ID; the original suggests ID 59, which may already be used in your source. The player table needs all nine named columns before enabling the feature. Back up and plan a reversible migration; maintain the SELECT/row-parser order and existing save/cache behavior.
Merge the server overlay snippets; preserve the existing duplicate-death guard and duel policy. Free-PvP deaths do not include PvE or duel deaths. Install the reviewed Python files with the documented packet update, login/logout reset and CharacterWindow destruction/visibility hooks. Keep your current character window and native receiver; do not replace whole files with the original examples. Merge locale entries for each supported language. The 360x350 layout uses existing stock widgets; low-resolution placement and long translations require validation in your client.

Validation performed
All 24 supplied text/source files were read. Tests execute the exact revised Python model/window against fake UI objects: bounds, invalid updates, zero-death ratio, change-only label writes, close/reopen, owner release and 100 destruction cycles. The generated layout was checked for unique widget names and bounds, not rendered. All nine exact revised native setter/getter pairs compiled with C++11 warnings as errors in an isolated fixture and passed negative-value and INT_MAX boundary tests. Other native integration and persistence were reviewed statically. No full game/DB/client build, database migration, actual client rendering or gameplay test is claimed. The eight unused original skin textures are retained only inside the original reference archive.

Provenance and rights
Supplied file: iBeast Kill-Statistics.zip. A public listing names an iBeast Kill-Statistics attachment; that supports the resource identity, not identical archive bytes or the listing's tested claim. No media/code was copied from that page. Attribution follows the supplied iBeast naming and changelog. The supplying owner confirmed redistribution; original notices remain and no open-source licence is invented.

Editorial resource — M2City
Version: Owner-supplied legacy integration; M2City r1 (2026-11-04); exact fork unspecified
Rights: Owner explicitly confirmed public redistribution. Preserve original notices; no open-source relicensing.
Validation: 24 supplied text files read. Exact revised Python model/window tested with fake UI: counter bounds, invalid updates, K/D zero, event-only refresh, weak ownership and 100 teardown cycles. Generated layout names/bounds checked, not rendered. Nine exact revised native counter setters/getters compiled in a C++11 isolated fixture and passed negative/INT_MAX tests. No full game/DB/client build or real gameplay test.
Source: Owner-supplied iBeast Kill Statistics v1.0.1; related public listing, not hash equivalence
SHA-256: f5b78e2c4cc62e9757f6e6059e4d1ce8536fce3cfc6dc5df1869558e1664f41f