Skip to content

refactor(entities): drop global buffers from obj_data.cpp (#3814) - #3916

Merged
bylins merged 1 commit into
masterfrom
refactor/global-buffers-obj-data
Sep 15, 2026
Merged

bylins merged 1 commit into
masterfrom
refactor/global-buffers-obj-data

Conversation

@bylins

@bylins bylins commented Sep 15, 2026

Copy link
Copy Markdown
Owner

Что сделано

Убраны 13 обращений к глобальным buf/buf2:

dec_timer(): *buf2 = '\0' был мёртвым кодом — нигде дальше в функции не читался (проверил по всей функции). Удалён.

print_obj_affects() (обе перегрузки — std::string и SendMsgToChar): идентичная логика продублирована в общий namespace-хелпер FormatObjAffect(). sprinttype+buf2 заменены на GetTypeName (без копирования).

Заодно поймал реальный баг: memmove(buf2, buf2+1, strlen(buf2)-1) для отрезания ведущей '*' у типов вида "*не используется" копировал на один байт МЕНЬШЕ, чем нужно, и оставлял задвоенным последний символ ("*multiplier.exp""multiplier.expp", проверил отдельным тестом на C). std::string::erase делает это корректно. Мелкий, но видимый игрокам/билдерам баг в отображении аффектов предмета.

Цвет: kColorNrm&w (не &n) — функция вызывается из obj_enchant.cpp и identify.cpp, это тот же мэппер-чувствительный вывод аффектов, что чинили в PR #3897. Проверил итоговую fmt-строку отдельным прогоном — структура посимвольно совпадает со старой (только kColorNrm&w).

Поведение сообщений не менялось, кроме двух намеренных исправлений (мёртвый код, off-by-one в memmove).

Тестирование

  • ninja -C build -j$(nproc/2) — сборка чистая, без предупреждений.
  • cd build && ./tests/tests — 709 passed, 3 skipped (как и раньше).

🤖 Generated with Claude Code

https://claude.ai/code/session_01EqYwcH5WHkChspte77RyyF

Убраны 13 обращений к глобальным buf/buf2:

- dec_timer(): *buf2 = '\0' был мёртвым кодом - нигде дальше в функции
  не читался (проверено по всей функции). Удалён.

- print_obj_affects() (обе перегрузки - std::string и SendMsgToChar):
  идентичная логика продублирована в общий namespace-хелпер
  FormatObjAffect(). sprinttype+buf2 заменены на GetTypeName (без
  копирования). Заодно поймал реальный баг: memmove(buf2, buf2+1,
  strlen(buf2)-1) для отрезания ведущей '*' у типов вида
  "*не используется" копировал на один байт МЕНЬШЕ, чем нужно, и
  оставлял задвоенным последний символ ("*multiplier.exp" ->
  "multiplier.expp", проверил отдельным тестом на C). std::string::erase
  делает это корректно. Мелкий, но видимый игрокам/билдерам баг в
  отображении аффектов предмета.

Цвет: kColorNrm -> &w (не &n) - функция вызывается из obj_enchant.cpp и
identify.cpp, это тот же мэппер-чувствительный вывод аффектов, что
чинили в PR #3897 (см. память project_color_nrm_vs_normal). Проверил
итоговую fmt-строку отдельным прогоном - структура посимвольно совпадает
со старой (только kColorNrm -> &w).

Поведение сообщений не менялось, кроме двух намеренных исправлений
(мёртвый код, off-by-one в memmove). Собрано с -Dbuild_tests=true,
709/709 тестов, 3 skipped как обычно.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EqYwcH5WHkChspte77RyyF
@bylins
bylins merged commit a529c1a into master Sep 15, 2026
20 checks passed
@bylins
bylins deleted the refactor/global-buffers-obj-data branch September 15, 2026 10:38
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