What this integration does
Presents a client window for first-time skill-path selection, with a quest letter from level 5 and a server command that applies the choice. It is intended for administrators maintaining matching client/server source. This is not a skill-reset service or an existing-character group-change system.

M2City r1 fixes
The original command accepted any nonzero byte parsed from chat and omitted braces: ClearSkill, the success message and the update could run even for an invalid choice. The reviewed command requires a player character, level 5 or higher, no existing group, a known job and exactly group 1 or 2. Wolfman only accepts group 1. Signed, wrapped, trailing and extra-argument values are rejected before mutation. The open command uses the same eligibility checks.
Client fixes replace the missing EmptyFunc callback, correct comparisons against GetRealRace that forgot to call it, avoid an absent second Wolfman class label, and handle unknown race IDs. Skill bindings are refreshed when the actor/window opens. Server-command registration is feature-gated, so a disabled feature does not reference a missing window.

Merge and policy requirements
Apply reviewed source/Python instructions without replacing unrelated parts of game.py or the command table. Keep ENABLE_SKILL_SELECT_FEATURE consistent on both sides and align ENABLE_WOLFMAN_CHARACTER with your actual job enums. The preview assumes classic race IDs 0–8 and skill bases; custom races need an explicit mapping. Configure the sixth-skill option to match your client. Compile the supplied selection quest with your own qc and prevent competing selection quests from registering a second flow.
ClearSkill is deliberately retained after a valid first-time selection. Review your fork's reset semantics and custom skills before integration; allocation of initial skill points remains branch-specific. Test initial login, the level-5 letter, all jobs, relog and repeated command attempts in staging. No DB migration is included or claimed necessary for the standard group field.

Validation and attribution
All 14 supplied text/source files were read. Native command tests with a fake character covered 480 combinations plus malformed/repeated input; invalid attempts did not clear skills. Fake UI checks covered races -1 through 10, five/six-skill options, unknown classes and Wolfman's second-choice rejection. These are isolated tests, not a complete client/server build or quest compiler run. The archive name attributes the integration to iBeast; exact upstream revision/checksum was not independently established. Original archive retained; M2City claims only the listed fixes and tests. Owner confirmed public redistribution.

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: Native command compiled with fake CHARACTER and tested 480 job/level/existing-group/choice/PC combinations plus malformed and repeated input; invalid attempts do not clear skills. Fake UI tested races -1..10, five/six-skill options, Wolfman second-choice blocking and unknown races. No real client/server build, quest compile or skill-reset integration test.
Source: Owner-supplied archive, reviewed files and retained notices; exact upstream release not established
SHA-256: 5cf20ccc08f20ec08a9fcb9220e4319dc92e50dd65fe1064eb902f89a263f58d