Skip to content

fix(act): делать заглавной букву целиком, а не первый байт - #3806

Merged
bylins merged 1 commit into
masterfrom
fix/act-cap-utf8
Aug 29, 2026
Merged

fix(act): делать заглавной букву целиком, а не первый байт#3806
bylins merged 1 commit into
masterfrom
fix/act-cap-utf8

Conversation

@bylins

@bylins bylins commented Aug 29, 2026

Copy link
Copy Markdown
Owner

Мородей убил волчицу и получил:

...доведут до смерти кого угодно. ?олчица не была исключением.

Почему

Сообщение в spell_msg.xml записано как \u$N не был$G исключением.\u означает «следующую подстановку с большой буквы». В act() этот признак обрабатывался побайтно:

*buf = a_ucc(*i);
i++;

a_ucc поднимает регистр одного байта, а в UTF-8 русская буква занимает два. Портился ведущий байт — клиент получал обломок вместо «В».

Что сделано

Берём символ целиком по native_text::char_bytes, поднимаем регистр через native_text::capitalize_first и копируем результат — он может оказаться другой длины, для кириллицы той же. Обработка цветовых кодов &X перед буквой не менялась.

Проверено

Сборка чистая, 673 теста зелёные. Юнит-тестом не покрыть: act() требует персонажей и дескриптор; проверять на живом — любое сообщение с \u$N, например смерть от «ледяных пальцев».

🤖 Generated with Claude Code

https://claude.ai/code/session_01XUwDWDnYdXrJdvjDVd36QH

Мородей убил волчицу и получил "...кого угодно. ?олчица не была исключением."

В сообщении стоит "\u$N" -- признак "следующую подстановку с большой буквы".
Обрабатывался он побайтно: a_ucc(*i) переводил в верхний регистр один байт, а в
UTF-8 русская буква занимает два. Ведущий байт портился, и вместо буквы клиент
получал обломок.

Теперь берём символ целиком (native_text::char_bytes), поднимаем регистр через
native_text::capitalize_first и копируем результат: он может оказаться другой
длины, для кириллицы -- той же.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XUwDWDnYdXrJdvjDVd36QH
@bylins
bylins merged commit 4551cab into master Aug 29, 2026
20 checks passed
@bylins
bylins deleted the fix/act-cap-utf8 branch August 29, 2026 14:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant