Administrative announcements for a Metin2 server
This owner-supplied dracaryS Renewal Admin Chat integration provides a staff panel for notice, big notice, map notice and system whisper messages. It contains legacy Python UI and C++ client/game/P2P merge instructions. It is not a compiled server or a claim to the vendor's latest version.

M2City r1 corrections
The supplied client used strcpy for fixed packet fields. The revised sender checks byte lengths and initializes the complete packet. Client, game and peer receive paths reject unterminated text, unsupported message types, malformed language lists and unsafe markup. An invalid language filter is rejected rather than becoming a broadcast to everyone. Outgoing unused packet bytes are zeroed; the P2P text field is consistently 512 bytes. The existing server IsGM check is retained, with a two-second per-GM cooldown.
Fixed the list.find exception and removed the hardcoded original staff names from the panel opener. It now uses the client's GM indicator for convenience; server authorization remains essential. Fixed the undefined buf reference by treating system whispers as literal administrator text. There is no quest/locale-text evaluation and dollar signs remain dollar signs.
The UI uses weak callbacks, hides/releases children, restores after Destroy, updates the length limit when switching modes and reports local network rejection. Language buttons use plain captions, so a custom emoji renderer is not required. Existing colour tags are supported; hyperlinks, emoji markup and control bytes are rejected.

Required branch and installation
Use a legacy C++11 client/game branch with the supplied feature guards and compatible Python UI APIs. Merge all reviewed/ instruction files and the four reviewed/native/ replacement functions. Copy the shared validation header into both client UserInterface and game source folders. Use the exact uiWhisperAdmin.py filename case.
The default packet identifier 116 must be free in each direction. Under 1-byte packing and 4-byte int/DWORD, CG/GC packets are 607 bytes and GG is 611 bytes. Add size assertions in your real build. Rebuild and deploy every client/game/P2P peer together; mixing old and new layouts is unsupported. Keep a backup and matching rollback artifacts. Packet framing must check the complete registered size before calling the handlers.
Language selection requires app.LOCALE_* values to match CHARACTER::GetLanguage. The UI tolerates absent optional locale constants, but a server without the language API still needs an explicit branch adaptation. No selected language means all players. Map notice follows the same numeric map across connected cores, not only the sender's channel. P2P must remain restricted to trusted peers; this patch does not authenticate the P2P network.
Limits are 150 bytes for notices and 511 for whispers, including colour markup. Test your locale encoding, staff policy, disconnects and delivery on every channel before enabling the panel for staff.

Review, validation and attribution
All 20 source/instruction files were read and the 11 original TGA icons decoded. Those icons remain in the original archive for provenance; the revised text-button UI does not install them. The exact four revised native functions and validator compiled against fake engine interfaces, covering packet bounds, zero-filled tails, permissions, language/map routing, non-repeating peer relay and repeated-send suppression. Fake UI tests covered mode limits, language choice, send errors, weak-reference cleanup and 100 reopen/destruction cycles. No full Metin2 build, actual renderer, multi-core deployment or in-game run was performed.
Original author: dracaryS, as credited in the supplied UI. Author's Renewal Admin Chat product page provides an independent feature/attribution reference; it does not establish that this archive matches the current product. The supplied owner confirmed redistribution. Original archive and notices are retained; no open-source licence is invented. INSTALL.txt describes each changed contract and the merge/rollback procedure.

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: Exact four native functions and shared validator compiled in C++11 fake-engine harness: packet bounds/zero tails, GM checks, language/map routing, P2P no-loop and 100-send throttle. Fake UI: mode limits, selected locale, send failure, weak callback GC, 100 reopen and teardown cycles. No full client/game build or live multi-core test. All 11 original TGA icons decoded.
Source: dracaryS product reference; owner-supplied legacy archive, exact revision unspecified
SHA-256: edeabd6aaac8511cba393464e8f23d8b0af0da674cd1025a8a874548b6b9b52e