Skip to content

Вампиры (Я люблю мальчиков)#5785

Open
Saukykouko wants to merge 156 commits into
Fluffy-Frontier:masterfrom
Saukykouko:bloodsucker
Open

Вампиры (Я люблю мальчиков)#5785
Saukykouko wants to merge 156 commits into
Fluffy-Frontier:masterfrom
Saukykouko:bloodsucker

Conversation

@Saukykouko
Copy link
Copy Markdown
Contributor

@Saukykouko Saukykouko commented Mar 8, 2026

О Pull Request

Добавляет вампиров

@Saukykouko
Copy link
Copy Markdown
Contributor Author

оставьте помариноваться, я пингану когда надо будет трогать

@Saukykouko
Copy link
Copy Markdown
Contributor Author

Шиншилла

@mogeoko
Copy link
Copy Markdown
Contributor

mogeoko commented Mar 12, 2026

изображение

… рыдулара салагеит, аха нас сеиҭаиит, иара абри ахәмарраҿы вампирс сҟалеит, шәсыцхраа
@Saukykouko
Copy link
Copy Markdown
Contributor Author

терпим

@Ruslanllll
Copy link
Copy Markdown
Collaborator

@claude Проверь код на соответствие стандартам описанным в modular_nova
/readme.md и .github
/CONTRIBUTING.md и всех прочих указаных в них файлах и напиши максимально подробное и развернутое ревью

@claude
Copy link
Copy Markdown

claude Bot commented May 17, 2026

Claude finished @Ruslanllll's task in 7m 46s —— View job


Ревью PR: Вампиры

Задачи:

  • Инициализация
  • Читаю документацию стандартов (CLAUDE.md, modular_nova/readme.md, .github/CONTRIBUTING.md)
  • Читаю изменения в PR
  • Анализирую соответствие стандартам модульности
  • Пишу подробное ревью

Общий вывод

PR добавляет систему вампиров значительного объёма (~11 700 строк). Основная структура модуля правильная — код находится в tff_modular/modules/vampire/, иконки в icons/, немодульные переопределения в tff_modular/master_files/. Тем не менее, имеется ряд критических, структурных и стилевых проблем, которые необходимо исправить.


🔴 КРИТИЧЕСКИЕ ПРОБЛЕМЫ (блокируют мерж)

1. Синтаксическая ошибка в config/dynamic.toml:721

["Vampire LateJoin]   ← ОШИБКА: отсутствует закрывающая кавычка

Должно быть: ["Vampire LateJoin"]. Это может вызвать ошибку парсинга TOML при загрузке конфигурации.

Fix this →

2. Отсутствует readme.md в модуле

tff_modular/modules/vampire/ не содержит файла readme.md, который обязателен для сложных модулей согласно modular_nova/readme.md:

"Such modules, unless very simple, need to have a readme.md in their folder"

Должен содержать: ссылки на PR, описание модуля, список изменённых файлов ядра с описанием изменений, кредиты.

3. Дублирование переменной hijack_speed в tff_modular/modules/vampire/datum_vampire.dm

/datum/antagonist/vampire
    hijack_speed = 0.5   // строка 7 — НИКОГДА не используется
    ...
    hijack_speed = 0     // строка 13 — перезаписывает предыдущее значение

Первое объявление бессмысленно и должно быть удалено.

Fix this →


🟠 СТРУКТУРНЫЕ НАРУШЕНИЯ МОДУЛЬНОСТИ

4. COMSIG_LIVING_PET_ANIMAL отправляется из немодульного файла

Сигнал определён модульно в code/__DEFINES/~ff_defines/vampire.dm:229, но отправляется из TG-файла ядра code/modules/mob/living/basic/basic_defense.dm:19,77:

SEND_SIGNAL(user, COMSIG_LIVING_PET_ANIMAL, src) // TFF ADDITION START

Это правомерно было отмечено Ruslanllll. Реализацию сигнала следует перенести в переопределение в tff_modular/master_files/. Сигнал должен быть добавлен через override прока в master_files, а не прямым вмешательством в TG-файл.

5. Несогласованность форматов комментариев для немодульных изменений

Модуль использует смесь разных форматов:

  • // TFF EDIT (sequence_scanner.dm, polling.dm, health_analyzer.dm)
  • // TFF ADDITION START/END (heretic/influences.dm, xenobiology/_status_effects.dm, basic_defense.dm)
  • // FLUFFY FRONTIER ADDITION (sql_ban_system.dm, crafting.dm)
  • // NOVA EDIT (используется в остальной части кодовой базы)

Согласно modular_nova/readme.md, стандарт — это // NOVA EDIT CHANGE, // NOVA EDIT ADDITION START/END, // NOVA EDIT REMOVAL START/END. Форк может использовать свой префикс (TFF/FLUFFY FRONTIER), но он должен быть единообразным по всему модулю. Текущая смесь из трёх разных форматов недопустима.

6. tff_modular/modules/vampire/vamp_society.dm — весь файл закомментирован

Согласно modular_nova/readme.md:

"If you are commenting out redundant code in modules, do not comment it out, instead, delete it."

Файл представляет собой один большой закомментированный SUBSYSTEM_DEF. Его нужно либо реализовать, либо удалить.

7. Закомментированный RegisterSignal в datum_vampire.dm

// RegisterSignal(current_mob, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved))

То же правило — закомментированный код в модуле должен быть удалён, не закомментирован.

8. Несоответствие name в latejoin ruleset

В tff_modular/modules/vampire/dynamic.dm:

/datum/dynamic_ruleset/latejoin/vampire
    name = "Vampiric Accident"  // ← должно быть "Vampire LateJoin"
    config_tag = "Vampiric LateJoin"  // ← не совпадает с TOML-ключом "Vampire LateJoin"

name совпадает с midround рулесетом, а config_tag не совпадает с TOML-ключом. Это сломает dynamic ruleset для latejoin вампиров.


🟡 ПРОБЛЕМЫ КАЧЕСТВА КОДА

9. Copy-paste баг в life_vampire.dm:72-73

current.adjust_organ_loss(ORGAN_SLOT_EARS, -1 * (actual_regen * 4))
current.adjust_organ_loss(ORGAN_SLOT_EARS, -1 * (actual_regen * 4))  // ← дубликат!

ORGAN_SLOT_EARS вызывается дважды подряд с одинаковыми параметрами. Вероятно, одна из строк должна быть для другого слота органа.

Fix this →

10. Тавтологичный else if в datum_vampire.dm (около строки 294-298)

if(!broke_masquerade)
    .["Break Masq"] = ...
    .["Add Infraction"] = ...
else if(broke_masquerade)  // ← если !broke_masquerade == FALSE, то broke_masquerade всегда TRUE
    .["Fix Masq"] = ...

Должно быть просто else.

Fix this →

11. Нарушение style guide: #define ui_team_finder — строчные буквы

В code/__DEFINES/~ff_defines/vampire.dm:

#define ui_team_finder "CENTER,CENTER"

Согласно STYLE.md: "With little exception, macros should be SCREAMING_SNAKE_CASE."
Должно быть: #define UI_TEAM_FINDER "CENTER,CENTER"

12. Tab-aligned defines в clans/malkavian.dm

#define REVELATION_MIN_COOLDOWN	20 SECONDS
#define REVELATION_MAX_COOLDOWN	1 MINUTES

Используются табуляции для выравнивания. STYLE.md: "Do not use tabs/spaces for indentation in the middle of a code line."

13. raw input() в datum_vampire.dm:408

var/levels = input("How many unspent Ranks...") as null | num

STANDARDS.md требует: "Player input must always be escaped safely, we recommend you use stripped_input in all cases". Хотя это admin_add(), правильнее использовать stripped_input().

14. BLOODSUCKER_RESTRICTED_SPECIES — создаёт новый список при каждом вызове

#define BLOODSUCKER_RESTRICTED_SPECIES list( \
    /datum/species/synthetic, \
    ...
)

Этот макрос создаёт новый список каждый раз при его вызове (в dynamic.dm это происходит при каждой проверке кандидата). Лучше использовать var/static/list или глобальную переменную.

15. Несоответствие сигнатуры и вызова handle_healing() в life_vampire.dm

Процедура объявлена как proc/handle_healing() (без параметров), но вызывается с handle_healing(seconds_per_tick). В DM это не ошибка компиляции, но параметр seconds_per_tick игнорируется, хотя явно должен использоваться для frame-independent логики регенерации (согласно STANDARDS.md о delta-time).


🔵 НЕЗНАЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ

16. Введённый COMSIG не документирован должным образом

COMSIG_LIVING_PET_ANIMAL и COMSIG_LIVING_APPRAISE_ART объявлены в ~ff_defines/vampire.dm — файле с данными исключительно для вампиров. Общие (non-vampire-specific) сигналы следовало бы вынести в отдельный файл ~ff_defines/signals.dm или аналогичный.

17. vamp_society.dm vs society.dm — дублирование файлов

Есть два файла: society.dm и vamp_society.dm, причём последний полностью закомментирован. Это создаёт путаницу.

18. Описание PR неполное

PR body содержит только "Добавляет вампиров", что не удовлетворяет требованию CONTRIBUTING.md о разделе "Why It's Good For The Game" с аргументами в пользу изменений.


✅ ЧТО СДЕЛАНО ПРАВИЛЬНО

  • Основная структура модуля (tff_modular/modules/vampire/) корректна
  • Иконки находятся в правильной директории icons/
  • Немодульные переопределения вынесены в tff_modular/master_files/ с правильной структурой директорий
  • Использование SIGNAL_HANDLER в proc'ах-обработчиках сигналов
  • Применение PROC_REF, TYPE_PROC_REF для RegisterSignal
  • Конфигурационные записи в tff_modular/modules/vampire/config.dm (а не в ядровых файлах)
  • VAMPIRE_TESTING guard для CI
  • #undef для локальных defines в malkavian.dm
  • Глобальные переменные вынесены в code/_globalvars/~ff_globalvars/
  • Активное использование дефайнов вместо magic numbers

Итого: критических проблем 3 (синтаксическая ошибка в TOML, отсутствие readme, дублирование переменной), структурных — 5, проблем качества кода — 7. Большинство можно исправить относительно быстро. Основные "blocker"-проблемы для мержа — readme.md и TOML-ошибка.

@Saukykouko
Copy link
Copy Markdown
Contributor Author

кто все эти люди

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants