Preview supplied with this Metin2 resource

Metin2 chat category filters with reviewed preferences and lifecycle
For administrators and client developers maintaining a legacy Python 2.7 Metin2 fork. This is Owsap's owner-supplied Chatting Window Renewal (Mini Version): a revised chat bar and settings for General, Group, Guild, Shout, System, Message, Dice, EXP, Items and Currency. It is an integration kit, not serverfiles or a complete client. Extra tab/language labels in the original locale do not mean those features are implemented.

M2City r1 fixes
The original loads local preferences through pickle, sets a successful-load flag before validation, leaves file handles open and mixes unsaved settings with active filters. The revised helper reads only a bounded 18-byte format containing ten booleans; it never imports or reads legacy pickle data. Paths are derived from a hash of a configured server ID and character name, preventing names from becoming arbitrary file paths. No password is stored.
Save commits only on success and reports a write failure without closing or applying the draft. Cancel/close restore the saved settings. Confirmed Reset changes the draft and still requires Save. A character change cannot save another character's draft. One previous generation supports recovery after interrupted replacement; this does not claim crash-atomic or concurrent-process storage.
The added EXP/Item/Money types are now disabled when the chat log switches from Info to another category. The original only enabled them, allowing unwanted system lines to remain in other views. A duplicated native search context incorrectly used item2 where the replacement used item; that context now matches the correct item branch while preserving the original locale bytes.
Settings use weak owner/callback references. Teardown closes the outstanding confirmation, releases widgets and dictionaries, and detaches the parent. Repeated Reset clicks no longer create competing dialogs. The normal ChatWindow owner still controls lifetime; this package does not create another global chat singleton.

Artwork and installation
All 25 supplied SUB definitions were checked. The common atlas is supplied one directory above the SUB files; references now use its explicit pack path. Bottom buttons previously referenced an absent Windows.dds. They now use blank chat-tab images already supplied, with checked English labels and matching positions. The checkbox uses the supplied checked texture. Border filename case and expanded-image repeat values are corrected. The preview is an offline layout composition, not an in-game screenshot.
Read INSTALL.txt. Extract the original to staging, overlay reviewed/, then merge the instruction fragments into your own existing files. Do not replace complete native/root files with tutorial fragments or apply both versions. Add m2chat_options.py, set a unique SERVER_KEY, install the lowercase uiscript path and merge locales. Preserve standard base UI APIs and normal chat phase teardown. Client and server chat enums/flags must match; compile both sides and reconcile existing custom message IDs. Longer translated button labels need a layout check.

Validation and boundaries
17 source/text files reviewed, 25 SUB configs inspected, 28 images decoded. Eight isolated Python 3 test groups passed, including all 1024 preference combinations, malformed files, interrupted-save recovery, draft/save/cancel/reset behavior, character changes, category transitions and 100 create/open/reset/destroy cycles. Four-resolution bounds/assets checks and legacy grammar parses passed. Test source and results are included.
No full Metin2 client/server compilation, actual Python 2 engine run, live packet flow or GPU rendering was performed. Before shipping, test flags on/off, all real chat categories, reconnect, write failures and translations in your actual staging client. No database migration or server economy change is part of this kit.

Credit and provenance
Original source headers credit Owsap, Copyright 2021 Owsap Productions. The unmodified archive and notices are retained. An exact public upstream revision could not be independently established. M2City authored the r1 corrections, review and tests; public redistribution was confirmed by the supplying owner, without claiming a new blanket open-source licence.

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: 17 source/text files read; 25 SUB configs checked/repaired; 28 images decoded. Eight synthetic Python 3 groups pass, including 1024 settings combinations and 100 UI lifecycles; four layout resolutions and legacy grammar checks pass. No full client/server build, Python 2 engine, live packets or GPU test.
Source: Owner-supplied archive, reviewed files and retained notices; exact upstream release not established
SHA-256: 37a2f799ab8d95b081e2bac57737418f7acee44aca9ed4a0cbec1be314f178de