848ede6a4b
Three Lua surfaces answered unlike 1.12.1: - A Font object's `[0]` was a number, so saved variables and `type(v[0])` guards treated fonts unlike every other object. - `CopyFontObject` pushed the source's values and held them. - Guild and charter names went to the server with no client name check. Reference: the saved-variable writer reads `[0]` as a light userdata (`0x704623`). `0x7841d0` merges what the source holds, then holds nothing (`0x7841f4`) and follows the source's font. `0x6c9b70` runs the name validator with a space as its one extra character, the profanity lists on, and a 24-unit cap. `0x4f51ec` maps its codes to the refusal lines. Changed: Fonts take the object id counter, and the loader's `parent=` tests the Frame type. A font node keeps its held word apart from its values. The guild check runs before the send. Tests pin each. Fixes #1997 Fixes #1983 Fixes #1399 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>