Skip to content

Add scp 066#961

Draft
666XxttimurkaxX666 wants to merge 17 commits into
space-sunrise:masterfrom
666XxttimurkaxX666:add-scp-066
Draft

Add scp 066#961
666XxttimurkaxX666 wants to merge 17 commits into
space-sunrise:masterfrom
666XxttimurkaxX666:add-scp-066

Conversation

@666XxttimurkaxX666

@666XxttimurkaxX666 666XxttimurkaxX666 commented Apr 18, 2026

Copy link
Copy Markdown
Contributor

Краткое описание | Short description

если что это нпс но за него может играть и просто игрок

изначально в раунде он добрый и безопасный, но если 066 получит слишком много урона или на нем используют ретрактор для извлечения нитей то он станет злым

еще у него есть свой ангар

дрд он не сильно влияет на игру ты можешь выдать ему гост роль если в виде нпс не подходит

Ссылка на багрепорт/Предложение | Related Issue/Bug Report

Медиа (Видео/Скриншоты) | Media (Video/Screenshots)

Скриншот-20260422-204744

Changelog

🆑 TIMUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUURq

  • add: добавлен SCP-066

Summary by CodeRabbit

  • Новые функции

    • Добавлен SCP-066 с дружественным и враждебным вариантами, наборами действий (шесть эффектов: спавн предметов, открытие дверей, отключение света и т.п.) и механикой полиморфа.
    • Ретрактор: инструмент взаимодействия для получения образцов с задержкой и кулдауном.
  • Контент

    • Новые сущности: мобы (friendly/hostile), контейнеры/клетка для SCP-066, материал «лента», постеры и указатели, звукоколлекции и спрайты/текстуры.
    • Новые прототипы действий и маркеры спауна.
  • Документация

    • Раздел SCP-066 в руководстве продвинутых исследований.
  • Локализация

    • Добавлены русские строки для всех новых сущностей и действий.

@github-actions

github-actions Bot commented Apr 18, 2026

Copy link
Copy Markdown
Contributor

RSI Diff Bot; head commit 2be26b0 merging into 4fc185b
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/_Scp/Actions/scp-066.rsi

State Old New Status
airlock Added
light Added

Resources/Textures/_Scp/Mobs/Scp/scp-066.rsi

State Old New Status
scp-066friendly Added
scp-066hostile Added

Resources/Textures/_Scp/Objects/Misc/scp066_cage.rsi

State Old New Status
base Added
closed Added
open Added

Resources/Textures/_Scp/Objects/Research/research_material.rsi

State Old New Status
scp066-ribbon Added

Resources/Textures/_Scp/Structures/Wallmounts/scp-posters.rsi

State Old New Status
scp066 Added

Resources/Textures/_Scp/Structures/Wallmounts/signs-directional.rsi

State Old New Status
066 Added

Edit: diff updated after 2be26b0

@coderabbitai

coderabbitai Bot commented Apr 18, 2026

Copy link
Copy Markdown
Contributor

Warning

Rate limit exceeded

@666XxttimurkaxX666 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 25 minutes and 11 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: f766cb08-6b4d-4ef4-844b-e957f4548c91

📥 Commits

Reviewing files that changed from the base of the PR and between 6a069d0 and 2be26b0.

📒 Files selected for processing (5)
  • Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml
  • Resources/Prototypes/_Scp/Actions/scp066.yml
  • Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml
  • Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml
  • Resources/Prototypes/_Scp/tags.yml
📝 Walkthrough

Walkthrough

Добавлен контент для SCP-066: новые зарегистрированные компоненты, моб‑прототипы (дружелюбный/враждебный), действия/спеллы, предметы и контейнеры, локализация (ru-RU), текстуры/звукоколлекции, полиморф и сопутствующие prototype/yaml/meta файлы. Мелкие кодовые файлы изменены только по BOM/форматированию.

Changes

Cohort / File(s) Summary
Компоненты C# (малые правки BOM)
Content.Shared/_Scp/Research/Interact/ScpInteractSystem.cs, Content.Shared/_Scp/Research/ScpResearchEvents.cs
Только изменение BOM/скрытых символов и небольшие пробельные правки; логика/сигнатуры публичных сущностей не изменялись.
Новые ECS‑компоненты
Content.Shared/_Scp/Scp066/Scp066Component.cs
Добавлены Scp066FriendlyComponent и Scp066HostileComponent с атрибутом [RegisterComponent].
Мобы и маркеры
Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml, Resources/Prototypes/_Scp/Entities/Markers/scp.yml
Добавлены прототипы Scp066Friendly и Scp066Hostile с HTN/AI, звуками и поведением; маркер SpawnScp066 с ConditionalSpawner.
Действия/инструменты (YAML)
Resources/Prototypes/_Scp/Actions/scp066.yml, Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml
Новые action‑прототипы для спавна предметов/эффектов; Retractor получил ScpInteractTool, DoAfter конфигурацию, cooldown и связанное событие/GuideHelp.
Полиморфы, теги и коллекции звуков
Resources/Prototypes/_Scp/Polymorphs/scp066.yml, Resources/Prototypes/_Scp/SoundCollections/Scp/scp066.yml, Resources/Prototypes/_Scp/tags.yml
Добавлен полиморф Scp066Polymorph (враждебная форма), две soundCollection записи и тег Scp066Ribbon.
Объекты, клетки и материалы
Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml, Resources/Prototypes/_Scp/Entities/Objects/ScpParts/parts.yml
Добавлен CrateScpCageScp066, новый складской прототип и исследовательский материал Scp066Ribbon; обновлены спрайты/стейты клеток.
Указатели, плакаты и UI‑контент
Resources/Prototypes/_Scp/Entities/Structures/Wallmounts/Signs/signs.yml, .../posters.yml, Resources/ServerInfo/_Scp/Guidebook/Research/ResearchAdvanced.xml
Добавлены прототипы плаката и указателя SCP-066 и раздел в гайдбуке про ретрактор.
Локализация ru‑RU
Resources/Locale/ru-RU/_prototypes/_scp/actions/scp066.ftl, .../entities/.../*
Добавлены русские строки для действий, мобов, объектов, плакатов, лент и админских ящиков.
Текстуры и meta.json
Resources/Textures/_Scp/.../*meta.json, Resources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/meta.json
Добавлены/обновлены meta.json для спрайтов SCP-066, ленты, постеров и клетки; новые состояния/стейты анимаций.
Каталог/MTF и админ‑прототипы
Resources/Prototypes/_Scp/Catalog/mtf_uplink_catalog.yml, Resources/Prototypes/_Scp/Entities/Mobs/Player/MTFs/Common.yml
Добавлен товар в uplink и прототип заполненного административного контейнера для SCP-066.

Sequence Diagram(s)

sequenceDiagram
  participant Player as "Игрок"
  participant Action as "Action/DoAfter"
  participant Spawn as "SpawnSystem"
  participant Polym as "PolymorphSystem"
  participant Guide as "Guide/Inventory"

  Player->>Action: инициирует действие/DoAfter (Retractor / spell)
  Action->>Spawn: запрос на InstantSpawn (при наличии ToSpawn)
  Spawn-->>Player: создаёт сущности (Cake/Plushie/Bees/EMP и т.д.)
  alt Spawning produced polymorph trigger
    Player->>Polym: применить Polymorph (Scp066Polymorph) / forced
    Polym-->>Spawn: заменить/конвертировать в Scp066Hostile
  end
  Spawn->>Guide: выдать/обновить GuideHelp или материал (Scp066Ribbon)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested labels

🔊 Аудио 🔊

Poem

🐰 Я — кролик, держу лент в пучок,

шепчет 066: «спавни им вдруг пирог»,
Ретрактор взял образец, и миг — упс! — вражда,
дружелюбный стал грозен в полиморфе тогда,
прыг-скок, код живёт — и в проектах весна.


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (3 errors, 1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Ss14 Yaml/Ftl Rules ❌ Error PR нарушает правило обслуживания upstream, напрямую модифицируя ванильный SS14 файл surgery.yml, добавляя SCP-компоненты к Retractor без использования _Sunrise override. Создать _Sunrise override с RetractorSunrise наследующей от ванильного Retractor, перенести SCP-компоненты туда и вернуть surgery.yml в исходное состояние.
Ss14 Prototype ↔ Ftl Parity ❌ Error PR содержит несоответствие между прототипами сущностей и записями локализации FTL. Заполнить placeholder значения для Scp066Friendly и Scp066Hostile; добавить FTL запись для CrateScpCageFolded173; восстановить missing .suffix атрибут для CrateAdministrationCrateScpCageScp173.
Ss14 Prediction Safety ❌ Error Метод OnInteractSuccessful использует IRobustRandom._random.Next() без защиты от _timing.ApplyingState, нарушая детерминизм при повторе состояния. Добавить || _timing.ApplyingState к условию на строке 90 в ScpInteractSystem.cs для обеспечения безопасности при повторе состояния.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive Заголовок «Add scp 066» носит общий характер и слишком краткий, чтобы четко описать основной контент изменений, хотя и связан с реальными изменениями в PR. Рекомендуется переформулировать заголовок более описательно, например: «Add SCP-066 entity with friendly/hostile states and actions» или «Implement SCP-066 NPC with dual state mechanics».
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Ss14 Bridge Sync ✅ Passed Pull request does not modify canonical rule or skill files under .agent/rules/ or .agent/skills/; all 40+ changed files are game content files in Content.Server/, Content.Shared/, and Resources/ directories.
Ss14 C# Rules ✅ Passed Все три изменённых файла C# соответствуют правилам SS14 и соглашениям об именовании. Классы правильно названы и наследуют из соответствующих базовых классов.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

::error in /Prototypes/_Scp/Actions/scp066.yml(12,12) SoundSpecifier value is not a valid resource path!
::error in /Prototypes/_Scp/Actions/scp066.yml(-1,-1) File not found. (/Audio/_Scp/Scp066/party1.ogg)

что с этой хуйней в линтере нужно делать

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

Почему ты почти всё используешь в ЙАМЛ вместо C#

а чо бы и нет

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

АЗЗАЗАЗАЗАХАХАХА БЛЯТЬ, ЗАБЫЛ ЗАГЛАВНУЮ

где

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 16

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Content.Shared/_Scp/Research/Interact/ScpInteractSystem.cs`:
- Around line 102-126: The cooldown (scp.Comp.TimeLastInteracted) and entity
dirty flag are written only after a possible early return in the server-side
block, so move or perform the update before any server-side spawn/trigger that
can return early: set scp.Comp.TimeLastInteracted = _timing.CurTime, call
Dirty(scp), and set args.Handled = true prior to invoking Spawn(...) or
_trigger.Trigger(scp) (inside the _net.IsServer branch and when
args.ShouldTriggerPolymorph is true) so the cooldown persists even if the
trigger replaces the entity.

In `@Resources/Locale/ru-RU/_prototypes/_scp/actions/scp066.ftl`:
- Around line 1-12: The action keys (ent-Scp066SpawnCake,
ent-Scp066SpawnPlushieCat, ent-Scp066SpawnDelightGlass, ent-Scp066DisableLights,
ent-Scp066OpenDoors, ent-Scp066SpawnAngryBee) should use lowercase initial
letters per FTL localization rules — rename the left-hand key strings to start
with a lowercase letter (e.g., ent-Scp066spawnCake -> ent-Scp066spawncake or
preferably follow existing naming convention like ent-Scp066spawnCake ->
ent-Scp066spawnCake but with only the action word lowercased), while leaving
each corresponding .desc value as a full sentence starting with a capital
letter; update all six entries consistently.

In `@Resources/Prototypes/_Scp/Actions/scp066.yml`:
- Around line 57-72: The entity prototype Scp066OpenDoors is missing the
inheritance from BaseAction, so it won't inherit default action properties;
update the Scp066OpenDoors entity to include parent: BaseAction (above or
alongside the id/name fields) so it inherits the base defaults used by other
SCP-066 action prototypes; keep the existing components (Action, InstantAction)
and fields (useDelay, icon, raiseOnUser, event) intact.

In `@Resources/Prototypes/_Scp/Entities/Markers/scp.yml`:
- Around line 153-155: The prototype ID "Scp066-F" used under the
ConditionalSpawner prototypes list is hyphenated and must be renamed to
CamelCase; change the prototype declaration and every reference to use a
CamelCase identifier (e.g., Scp066Friendly) and update the ConditionalSpawner
entry that references Scp066-F (and any other occurrences) to the new CamelCase
name so all links (prototype definition, spawners, and any other lookups) remain
consistent.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml`:
- Around line 100-123: The "Hostile" variant still uses a passive faction and
HTN: change the NpcFactionMember entry that lists SimpleNeutral to a hostile
faction (e.g., SimpleHostile or your project's hostile faction name) and replace
the HTN rootTask HugBotCompound with the appropriate hostile/combat HTN (e.g.,
CombatCompound/HostileCompound) so Scp066-H uses an attack-oriented faction and
behavior; update both the type: NpcFactionMember factions list and the type: HTN
rootTask to reference the hostile identifiers.
- Around line 2-5: Rename prototype IDs Scp066-F and Scp066-H to CamelCase
(e.g., Scp066F / Scp066H) and add English fallback fields name, description, and
suffix in scp066.yml (and the other affected prototype files) so they provide
player-facing defaults; update any references to the old IDs in SpawnScp066 and
Scp066Polymorph to the new CamelCase IDs, ensure parent: BaseScpFriendly
remains, and verify suffix, name, and description values are present and
sensible for each new entity prototype.
- Around line 114-116: В файле с описанием Scp066-H добавьте конечный порог
урона в блоке MobThresholds: сейчас там только "0: Alive", а сущность получает
компонент Damageable, поэтому необходимо добавить финальный переход (например
значение порога -> "Destructible" или "Dead" в зависимости от используемой метки
в проекте) чтобы форма становилась разрушимой/умершей при накоплении урона;
найдите блок MobThresholds для Scp066-H и допишите соответствующую пару
порог:Состояние (аналогично нужно исправить и для второго упомянутого варианта в
тех же строках 144-146).

In `@Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml`:
- Around line 143-164: Проверьте и при необходимости исправьте whitelist у
сущности CrateScpCageScp066: сейчас разрешены оба компонента Scp066Friendly и
Scp066Hostile — либо оставьте так осознанно, либо ограничьте whitelist одним
корректным типом (например, только Scp066Friendly) и гарантируйте в коде
обработки полиморфа (F → H) корректную обработку перемещения/закрытия внутри
клетки (убедитесь, что механики, которые проверяют наличие компонента, учитывают
возможную смену типа); отдельно приведите fallback name в запись name: SCP-066
cage для консистентности с остальными SCP (например, сравнить с
CrateScpCageScp173 как эталон).

In `@Resources/Prototypes/_Scp/Entities/Objects/ScpParts/parts.yml`:
- Around line 38-50: В прототипе Scp066Ribbon в компоненте Tag замените неверный
тег "Scp066ribbon" на корректный CamelCase "Scp066Ribbon" (ссылка: id
Scp066Ribbon и компонент Tag с текущим тегом), и при необходимости
синхронизируйте одинаковое имя тега в Resources/Prototypes/_Scp/tags.yml
(замените запись "Scp066ribbon" на "Scp066Ribbon"), чтобы имена идентификаторов
соответствовали соглашению проекта.

In `@Resources/Prototypes/_Scp/Entities/Structures/Wallmounts/Signs/posters.yml`:
- Line 677: Переименуйте prototype ID PosterSCP066 в CamelCase PosterScp066;
затем синхронно переименуйте соответствующий ключ локализации ent-PosterSCP066 →
ent-PosterScp066 и обновите все ссылки/ссылочные имена в проекте (включая любые
YAML-ключи, ссылки в других прототипах и локализационные файлы) так, чтобы везде
использовался новый регистрозависимый идентификатор PosterScp066.

In `@Resources/Prototypes/_Scp/Polymorphs/scp066.yml`:
- Line 4: Переименуйте значение поля entity в prototype из "Scp066-H" в
CamelCase (например Scp066Hostile) — обновите сам prototype (поле entity в
scp066.yml) и затем массово замените все ссылки/ссылки на идентификатор Scp066-H
в проекте, чтобы использовать новый CamelCase ID (например Scp066Hostile);
убедитесь, что никаких дефисов/нижних подчёркиваний/всех заглавных/нижних
регистров не осталось и что все зависимые прототипы/сценарии/реперные ссылки
используют новое имя.

In `@Resources/Prototypes/_Scp/tags.yml`:
- Around line 90-92: Rename the Tag id from Scp066ribbon to Scp066Ribbon in
Resources/Prototypes/_Scp/tags.yml (fix the lowercase "r" to follow CamelCase)
and remove the trailing space on the tag line, then update the corresponding
reference in Resources/Prototypes/_Scp/Entities/Objects/ScpParts/parts.yml so
any mention of Scp066ribbon is replaced with Scp066Ribbon (ensure the identifier
matches exactly).

In `@Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml`:
- Line 213: В файле указан параметр cooldown в сущности (ключ cooldown) со
значением 600, тогда как комментарий гласит "5 минут"; исправьте рассинхрон:
если нужен 5-минутный кулдаун — поменяйте значение cooldown на 300, иначе
оставьте 600 и обновите комментарий рядом с ключом (запись комментария у ключа
cooldown в surgery.yml) чтобы корректно отражала 10 минут.

In `@Resources/Textures/_Scp/Mobs/Scp/scp-066.rsi/meta.json`:
- Around line 3-4: В этом файле метаданных поле license отличается от другой RSI
того же автора; приведите обе записи к единому значению (рекомендуется
"CC-BY-SA-3.0") и убедитесь, что поле copyright явно указывает реальное имя или
ник автора, который подтверждает согласие с этой лицензией; обновите "license"
и, при необходимости, измените "copyright" в
Resources/Textures/_Scp/Mobs/Scp/scp-066.rsi/meta.json (и синхронно проверьте
Resources/Textures/_Scp/Actions/scp-066.rsi/meta.json) так, чтобы оба файла
содержали одинаковую лицензию и корректный авторский идентификатор.

In `@Resources/Textures/_Scp/Structures/Wallmounts/scp-posters.rsi/meta.json`:
- Line 15: Строка с записью { "name": "scp066" } в meta.json использует
таб-отступ вместо пробелов; замените начальный таб на согласованный пробельный
отступ, соответствующий стилю проекта (как в signs-directional.rsi/meta.json),
чтобы убрать смешанные отступы и сохранить единообразие файла.

In
`@Resources/Textures/_Scp/Structures/Wallmounts/signs-directional.rsi/meta.json`:
- Line 15: В файле
Resources/Textures/_Scp/Structures/Wallmounts/signs-directional.rsi в строке с
объектом { "name": "066", "directions": 4 } используется табуляция вместо
пробелов; замените таб на те же пробельные отступы, что и в соседних строках
(использовать пробелы для выравнивания JSON), сохраните форматирование объекта
"name":"066" и "directions":4, и при желании прогоните файл через
форматтер/линтер чтобы убедиться в единообразии отступов.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4d77c097-2b6b-4f55-ac02-71d0fc78181a

📥 Commits

Reviewing files that changed from the base of the PR and between 4fc185b and be041d5.

⛔ Files ignored due to path filters (17)
  • Resources/Audio/_Scp/Scp066/Beethoven.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Friendly/Notes1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Friendly/Notes2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Friendly/Notes3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/Eric1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/Notes1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/Notes2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/Notes3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/Notes4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Party1.ogg is excluded by !**/*.ogg
  • Resources/Textures/_Scp/Actions/scp-066.rsi/airlock.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Actions/scp-066.rsi/light.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Mobs/Scp/scp-066.rsi/scp-066friendly.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Mobs/Scp/scp-066.rsi/scp-066hostile.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Objects/Research/research_material.rsi/scp066-ribbon.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Structures/Wallmounts/scp-posters.rsi/scp066.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Structures/Wallmounts/signs-directional.rsi/066.png is excluded by !**/*.png
📒 Files selected for processing (25)
  • Content.Shared/_Scp/Research/Interact/ScpInteractSystem.cs
  • Content.Shared/_Scp/Research/ScpResearchEvents.cs
  • Content.Shared/_Scp/Scp066/Scp066Component.cs
  • Resources/Locale/ru-RU/_prototypes/_scp/actions/scp066.ftl
  • Resources/Locale/ru-RU/_prototypes/_scp/entities/objects/misc/scp_cage.ftl
  • Resources/Locale/ru-RU/_prototypes/_scp/entities/objects/scpparts/parts.ftl
  • Resources/Locale/ru-RU/_prototypes/_scp/entities/structures/wallmounts/signs/posters.ftl
  • Resources/Locale/ru-RU/_prototypes/_scp/entities/structures/wallmounts/signs/signs.ftl
  • Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml
  • Resources/Prototypes/_Scp/Actions/scp066.yml
  • Resources/Prototypes/_Scp/Entities/Markers/scp.yml
  • Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml
  • Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml
  • Resources/Prototypes/_Scp/Entities/Objects/ScpParts/parts.yml
  • Resources/Prototypes/_Scp/Entities/Structures/Wallmounts/Signs/posters.yml
  • Resources/Prototypes/_Scp/Entities/Structures/Wallmounts/Signs/signs.yml
  • Resources/Prototypes/_Scp/Polymorphs/scp066.yml
  • Resources/Prototypes/_Scp/SoundCollections/Scp/scp066.yml
  • Resources/Prototypes/_Scp/tags.yml
  • Resources/ServerInfo/_Scp/Guidebook/Research/ResearchAdvanced.xml
  • Resources/Textures/_Scp/Actions/scp-066.rsi/meta.json
  • Resources/Textures/_Scp/Mobs/Scp/scp-066.rsi/meta.json
  • Resources/Textures/_Scp/Objects/Research/research_material.rsi/meta.json
  • Resources/Textures/_Scp/Structures/Wallmounts/scp-posters.rsi/meta.json
  • Resources/Textures/_Scp/Structures/Wallmounts/signs-directional.rsi/meta.json

Comment thread Content.Shared/_Scp/Research/Interact/ScpInteractSystem.cs
Comment thread Resources/Locale/ru-RU/_prototypes/_scp/actions/scp066.ftl Outdated
Comment thread Resources/Prototypes/_Scp/Actions/scp066.yml
Comment thread Resources/Prototypes/_Scp/Entities/Markers/scp.yml Outdated
Comment thread Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml Outdated
Comment thread Resources/Prototypes/_Scp/tags.yml Outdated
Comment thread Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml
Comment thread Resources/Textures/_Scp/Mobs/Scp/scp-066.rsi/meta.json

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (3)
Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml (3)

100-102: ⚠️ Potential issue | 🟠 Major

Hostile-вариант всё ещё не получает hostile-поведение.

Scp066Hostile остаётся в SimpleNeutral и запускает HugBotCompound, поэтому конфигурация всё ещё выглядит пассивной и расходится с заявленным “becomes hostile”. Переведите его на hostile faction/HTN или переименуйте режим как нейтрально-дизраптивный.

As per coding guidelines, Start root-behavior from the priority branch (combat/goal), then fallback (idle/follow).

Also applies to: 120-123

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` around lines 100
- 102, Scp066Hostile is still configured as NpcFactionMember with SimpleNeutral
and thus runs HugBotCompound (passive); change its faction to the hostile
faction/HTN or rename the mode to a neutral-disruptive name so behavior matches
“becomes hostile”; additionally update the root-behavior definitions so the
priority (combat/goal) branch is hooked as the start/root behavior and the
idle/follow branch is only a fallback (apply the same fix to the other similar
block referenced around the second occurrence).

114-116: ⚠️ Potential issue | 🟠 Major

Добавьте конечный порог смерти для hostile-формы.

Scp066Hostile получает Damageable, но MobThresholds содержит только 0: Alive; без Dead/аналогичного terminal threshold форма выглядит неубиваемой после превращения.

Минимальное исправление, если hostile-форма должна умирать от урона
   - type: MobThresholds
     thresholds:
+      200: Dead

Also applies to: 144-146

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` around lines 114
- 116, MobThresholds for Scp066Hostile only defines a non-terminal "Alive"
threshold so the hostile form becomes effectively unkillable; add a terminal
death threshold (e.g., a "Dead" threshold entry with the appropriate terminal
value used by your threshold system) to the MobThresholds block for
Scp066Hostile so Damageable can transition to dead, and make the same change in
the other occurrence noted (lines ~144-146); keep the threshold key/name
consistent with your engine's terminal state naming (Dead/Death) and ensure
Scp066Hostile references the updated MobThresholds.

1-5: ⚠️ Potential issue | 🟠 Major

Доведите fallback-поля сущностей до реальных строк.

Line 5 и Line 90 всё ещё используют name: ???, а у новых player-facing entity-прототипов нет description. FTL не заменяет обязательные английские YAML fallback-значения на случай отсутствующей/битой локали.

Возможное исправление fallback-полей
 - type: entity
   id: Scp066Friendly
-  suffix: SCP-066-friendly
+  suffix: SCP-066 friendly
   parent: BaseScpFriendly
-  name: ???
+  name: SCP-066
+  description: A friendly anomalous ball of yarn.
@@
 - type: entity
   id: Scp066Hostile
-  suffix: SCP-066-hostile
+  suffix: SCP-066 hostile
   parent: BaseScp
-  name: ???
+  name: SCP-066
+  description: A hostile anomalous ball of yarn.

As per coding guidelines, Entity prototype YAML files must have English name, description, and suffix fields as fallback values, matching the English FTL localization.

Also applies to: 86-90

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` around lines 1 -
5, The entity prototype Scp066Friendly currently uses placeholder fallback
values (name: ???) and is missing an English description; change the fallback
fields for id Scp066Friendly (and the duplicate block at the other prototype
instance) to real English strings that match the English FTL localization: set a
descriptive English name (e.g., "SCP-066"), add a matching English description
field with a brief player-facing description, and ensure the suffix field is a
proper English fallback (not "???"); update the YAML fields name, description,
and suffix in the Scp066Friendly / BaseScpFriendly prototype entries
accordingly.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Resources/Locale/ru-RU/_prototypes/_scp/entities/mobs/npcs/scp/scp066.ftl`:
- Around line 1-2: Replace the placeholder "???" for ent-Scp066Hostile and
ent-Scp066Friendly with full Russian localization entries: provide a
human-facing name string for each key (ent-Scp066Hostile and
ent-Scp066Friendly), add corresponding .desc attributes containing the entity
description, and add .suffix attributes for the editor suffix (using the
ent-{PrototypeID} pattern), so the file contains entries like ent-Scp066Hostile,
ent-Scp066Hostile.desc, ent-Scp066Hostile.suffix and the same for
ent-Scp066Friendly with appropriate Russian text.

---

Duplicate comments:
In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml`:
- Around line 100-102: Scp066Hostile is still configured as NpcFactionMember
with SimpleNeutral and thus runs HugBotCompound (passive); change its faction to
the hostile faction/HTN or rename the mode to a neutral-disruptive name so
behavior matches “becomes hostile”; additionally update the root-behavior
definitions so the priority (combat/goal) branch is hooked as the start/root
behavior and the idle/follow branch is only a fallback (apply the same fix to
the other similar block referenced around the second occurrence).
- Around line 114-116: MobThresholds for Scp066Hostile only defines a
non-terminal "Alive" threshold so the hostile form becomes effectively
unkillable; add a terminal death threshold (e.g., a "Dead" threshold entry with
the appropriate terminal value used by your threshold system) to the
MobThresholds block for Scp066Hostile so Damageable can transition to dead, and
make the same change in the other occurrence noted (lines ~144-146); keep the
threshold key/name consistent with your engine's terminal state naming
(Dead/Death) and ensure Scp066Hostile references the updated MobThresholds.
- Around line 1-5: The entity prototype Scp066Friendly currently uses
placeholder fallback values (name: ???) and is missing an English description;
change the fallback fields for id Scp066Friendly (and the duplicate block at the
other prototype instance) to real English strings that match the English FTL
localization: set a descriptive English name (e.g., "SCP-066"), add a matching
English description field with a brief player-facing description, and ensure the
suffix field is a proper English fallback (not "???"); update the YAML fields
name, description, and suffix in the Scp066Friendly / BaseScpFriendly prototype
entries accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4891f7d3-6466-4dcc-b746-45582bc504f5

📥 Commits

Reviewing files that changed from the base of the PR and between be041d5 and 751cfaf.

📒 Files selected for processing (7)
  • Content.Shared/_Scp/Research/Interact/ScpInteractSystem.cs
  • Resources/Locale/ru-RU/_prototypes/_scp/actions/scp066.ftl
  • Resources/Locale/ru-RU/_prototypes/_scp/entities/mobs/npcs/scp/scp066.ftl
  • Resources/Prototypes/_Scp/Actions/scp066.yml
  • Resources/Prototypes/_Scp/Entities/Markers/scp.yml
  • Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml
  • Resources/Prototypes/_Scp/Polymorphs/scp066.yml

Comment thread Content.Shared/_Scp/Research/Interact/ScpInteractSystem.cs Outdated
Comment thread Content.Shared/_Scp/Research/Interact/ScpInteractSystem.cs Outdated
Comment thread Resources/Audio/_Scp/Scp066/Idle/Friendly/Notes1.ogg
Comment thread Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml Outdated
Comment thread Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml Outdated
Comment thread Resources/Prototypes/_Scp/Polymorphs/scp066.yml
Comment thread Resources/Prototypes/_Scp/tags.yml Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (3)
Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml (3)

97-117: ⚠️ Potential issue | 🟠 Major

Сделайте hostile-вариант действительно враждебным.

Line 99 оставляет Scp066Hostile во фракции SimpleNeutral, а Line 117 использует HugBotCompound, то есть hostile-форма всё ещё выглядит как пассивный NPC. Это расходится с заявленным поведением “becomes hostile”; выберите существующую hostile-фракцию и combat/hostile HTN-компаунд либо переименуйте режим как небоевой. As per coding guidelines, Start root-behavior from the priority branch (combat/goal), then fallback (idle/follow).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` around lines 97
- 117, The hostile variant is still set to SimpleNeutral and uses the passive
HTN HugBotCompound; change the NpcFactionMember entry for Scp066Hostile to a
proper hostile combat faction (replace SimpleNeutral with an existing hostile
faction name) and update the HTN rootTask to a combat/hostile compound (e.g.,
swap HugBotCompound for the project's combat/hostile compound) so behavior
starts from the combat/goal branch then falls back to idle/follow; ensure you
modify the NpcFactionMember (factions:) and HTN (rootTask:) entries accordingly.

2-5: ⚠️ Potential issue | 🟠 Major

Замените ??? и добавьте fallback-описания.

Оба прототипа player-facing: name: ??? может попасть в UI/админ-спавн при отсутствии или поломке FTL, а description сейчас отсутствует. Также лучше сделать suffix читаемым fallback-текстом без склейки через дефис.

Возможная правка
   id: Scp066Friendly
-  suffix: SCP-066-friendly
+  suffix: SCP-066 friendly
   parent: BaseScpFriendly
-  name: ???
+  name: SCP-066
+  description: A friendly anomalous ball of yarn.
...
   id: Scp066Hostile
-  suffix: SCP-066-hostile
+  suffix: SCP-066 hostile
   parent: BaseScp
-  name: ???
+  name: SCP-066
+  description: A hostile anomalous ball of yarn.

As per coding guidelines, Entity prototype YAML files must have English name, description, and suffix fields as fallback values.

Also applies to: 84-87

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` around lines 2 -
5, Replace the placeholder name "???" in the Scp066Friendly prototype (id:
Scp066Friendly) with a proper English fallback name (e.g., "SCP-066
(Friendly)"), add a human-readable fallback description field (description:
"Short English description for UI/admin spawn when FTL is missing"), and make
the suffix a readable fallback string without a hyphen (suffix: "SCP-066
Friendly"); apply the same fixes to the other prototype referenced at lines
84-87 so every player-facing prototype includes English name, description, and a
non-hyphenated suffix fallback.

111-140: ⚠️ Potential issue | 🟠 Major

Добавьте конечный порог смерти для hostile-формы.

Scp066Hostile получает Damageable, но MobThresholds содержит только 0: Alive, и отдельного Destructible-перехода здесь нет. После превращения hostile-форма может стать фактически неубиваемой, что особенно критично для варианта, которым может управлять игрок.

Минимальная правка
   - type: MobThresholds
     thresholds:
+      200: Dead
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` around lines 111
- 140, MobThresholds for the hostile form only has "0: Alive", so add a final
death threshold entry under the existing MobThresholds block that maps the
low/end health value to the Destructible/Dead transition used by the state
machine (so the Damageable component can actually kill the hostile form); update
the thresholds mapping in scp066.yml's MobThresholds to include that final
threshold name (e.g., a Destructible or Dead state) with an appropriate numeric
cutoff matching the Damageable system so the NPC transitions to death when
health falls below it.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml`:
- Around line 97-117: The hostile variant is still set to SimpleNeutral and uses
the passive HTN HugBotCompound; change the NpcFactionMember entry for
Scp066Hostile to a proper hostile combat faction (replace SimpleNeutral with an
existing hostile faction name) and update the HTN rootTask to a combat/hostile
compound (e.g., swap HugBotCompound for the project's combat/hostile compound)
so behavior starts from the combat/goal branch then falls back to idle/follow;
ensure you modify the NpcFactionMember (factions:) and HTN (rootTask:) entries
accordingly.
- Around line 2-5: Replace the placeholder name "???" in the Scp066Friendly
prototype (id: Scp066Friendly) with a proper English fallback name (e.g.,
"SCP-066 (Friendly)"), add a human-readable fallback description field
(description: "Short English description for UI/admin spawn when FTL is
missing"), and make the suffix a readable fallback string without a hyphen
(suffix: "SCP-066 Friendly"); apply the same fixes to the other prototype
referenced at lines 84-87 so every player-facing prototype includes English
name, description, and a non-hyphenated suffix fallback.
- Around line 111-140: MobThresholds for the hostile form only has "0: Alive",
so add a final death threshold entry under the existing MobThresholds block that
maps the low/end health value to the Destructible/Dead transition used by the
state machine (so the Damageable component can actually kill the hostile form);
update the thresholds mapping in scp066.yml's MobThresholds to include that
final threshold name (e.g., a Destructible or Dead state) with an appropriate
numeric cutoff matching the Damageable system so the NPC transitions to death
when health falls below it.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 88fc7f5d-97d3-4b7e-a19b-aeb572447651

📥 Commits

Reviewing files that changed from the base of the PR and between 751cfaf and 5c86186.

📒 Files selected for processing (4)
  • Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml
  • Resources/Prototypes/_Scp/Entities/Objects/ScpParts/parts.yml
  • Resources/Prototypes/_Scp/SoundCollections/Scp/scp066.yml
  • Resources/Prototypes/_Scp/tags.yml

…/posters.yml

Co-authored-by: ThereDrD <88589686+ThereDrD0@users.noreply.github.com>
@ThereDrD0

Copy link
Copy Markdown
Collaborator

@666XxttimurkaxX666 доделывать будешь?

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

@666XxttimurkaxX666 доделывать будешь?

ну типо да но типо и нет
тут же единственное осталось пофиксить C# а я в нем не разбираюсь

@ThereDrD0

Copy link
Copy Markdown
Collaborator

@666XxttimurkaxX666 доделывать будешь?

ну типо да но типо и нет тут же единственное осталось пофиксить C# а я в нем не разбираюсь

Отправь ИИ этот код с моим комментарием и любой ИИ тебе скажет как это исправить. В дискорде можешь перед коммитом спросить еще

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

ну вот вроде

@ThereDrD0

Copy link
Copy Markdown
Collaborator

Бля ну ты даешь, это кто тебе высрал

@ThereDrD0

Copy link
Copy Markdown
Collaborator

Короче я сам сделаю тебе триггер и замержу в мастер, удали у себя пока код. Потом вмержишь мастер с моим кодом и сделаешь что тебе нужно

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

Бля ну ты даешь, это кто тебе высрал

tun tun sahur AI code

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

Короче я сам сделаю тебе триггер и замержу в мастер, удали у себя пока код. Потом вмержишь мастер с моим кодом и сделаешь что тебе нужно

хорошо

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

♻️ Duplicate comments (3)
Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml (3)

5-5: ⚠️ Potential issue | 🟠 Major

Замените name: ??? на английский fallback и добавьте description.

??? попадёт в player-facing UI при отсутствии/поломке FTL-локализации, а у новых entity-прототипов также отсутствует обязательный fallback description. Это уже отмечалось в предыдущем ревью и не было исправлено.

Предлагаемая правка
   id: Scp066Friendly
   suffix: SCP-066 Friendly
   parent: BaseScpFriendly
-  name: ???
+  name: scp-066
+  description: A friendly anomalous ball of yarn.
   id: Scp066Hostile
   suffix: SCP-066 Hostile
   parent: BaseScp
-  name: ???
+  name: scp-066
+  description: A hostile anomalous ball of yarn.

As per coding guidelines, «Entity prototype YAML files must have English name, description, and suffix fields as fallback values, matching the English FTL localization».

Also applies to: 87-87

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` at line 5,
Replace the placeholder "name: ???" with an English fallback name and add the
required English fallback fields "description" and "suffix" in this entity
prototype YAML (ensure the values match the English FTL localization for this
entity); update the "name", "description", and "suffix" keys for the scp066
prototype so the player-facing UI has proper fallbacks if localization fails.

111-113: ⚠️ Potential issue | 🟠 Major

Scp066Hostile неубиваем — нет ни порога смерти, ни Destructible.

В MobThresholds указан только 0: Alive, а блока Destructible для hostile-формы нет (в отличие от friendly, где есть DamageTrigger на 200 → полиморф). При этом компонент Damageable присутствует, то есть урон копится, но никакого финального состояния не наступает — особенно критично, если в эту форму попадёт игрок: убить такого «врага» нельзя в принципе.

Минимальная правка
   - type: MobThresholds
     thresholds:
+      200: Dead
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` around lines 111
- 113, В форме Scp066Hostile указан только MobThresholds с "0: Alive" и
присутствует компонент Damageable, поэтому юнит не умирает — добавьте в этот
блок недостающий порог смерти и/или блок Destructible: в сущности Scp066Hostile
расширьте thresholds (например добавить ключ с порогом, соответствующим
накопленному урону → Dead) и добавьте секцию Destructible/DestructionBehavior
аналогичную friendly-форме (или используйте DamageTrigger, как в friendly с
порогом 200 → полиморф), чтобы при достижении нужного урона
исчезала/переводилась в финальное состояние.

97-99: ⚠️ Potential issue | 🟠 Major

Hostile-вариант по-прежнему пассивен — поведение не соответствует PR.

Комментарий # все еще пассивен на строке 99 прямо фиксирует, что Scp066Hostile остался в SimpleNeutral, а rootTask всё ещё HugBotCompound (тот же, что у friendly-формы). По описанию PR форма должна становиться враждебной после получения избыточного урона/использования ретрактора, а полиморф ведёт именно сюда (Scp066PolymorphScp066Hostile). В текущем виде после полиморфа сущность будет вести себя так же, как friendly, и игрок/NPC получит «hostile»-форму, которая не атакует.

Выберите hostile faction (например, SimpleHostile) и подходящий combat-HTN, либо переименуйте/опишите вариант так, чтобы было ясно, что это нейтральная disruptive-форма без атак.

Also applies to: 114-117

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml` around lines 97
- 99, Scp066Hostile is still configured as SimpleNeutral and uses the friendly
rootTask HugBotCompound, so it never behaves hostile after polymorph; update the
Scp066Hostile entity to use a hostile faction (e.g., replace factions: -
SimpleNeutral with - SimpleHostile) and swap the rootTask from HugBotCompound to
an appropriate combat HTN (or another hostile behavior tree) so the polymorphed
form attacks, or alternatively rename/describe the variant (Scp066Hostile) as a
neutral disruptive form in its yaml and keep current behaviour to avoid
confusion; ensure changes reference Scp066Hostile, SimpleNeutral, SimpleHostile,
HugBotCompound, and Scp066Polymorph.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@Resources/Locale/ru-RU/_prototypes/_scp/entities/mobs/player/mtfs/Common.ftl`:
- Around line 33-37: В FTL-фрагменте атрибут .suffix случайно привязан к
ent-CrateAdministrationCrateScpCageScp066 после вставки новой записи; верните
или добавьте строку .suffix = Заполненный под
ent-CrateAdministrationCrateScpCageScp173 так, чтобы
ent-CrateAdministrationCrateScpCageScp173 снова имел .suffix = Заполненный
(оставьте или добавьте при необходимости отдельный .suffix для
ent-CrateAdministrationCrateScpCageScp066, если он тоже должен иметь суффикс).

In `@Resources/Prototypes/_Scp/Actions/scp066.yml`:
- Line 18: Уберите завершающие пробелы в значениях ключа prototype: — например
строки с prototype: FoodCakeBirthdaySlice, PlushieWhiteCat,
DrinkDoctorsDelightGlass, MobAngryBee и AdminInstantEffectEMP имеют trailing
whitespace; отредактируйте эти значения, удалив пробелы после идентификаторов
(ищите ключ prototype: и обрезайте правые пробелы в значениях), затем сохраните
файл и прогоните линтер/diff, чтобы убедиться, что лишние пробелы исчезли.
- Around line 10-15: В блоке прототипа замените сокращённую форму sound:
"/Audio/_Scp/Scp066/party1.ogg" на явную форму с ключом path, т.е. преобразуйте
значение ключа sound в мапу с полем path, сохранив тот же путь и отступы под
ключом type: Action (см. ключи sound, useDelay и icon в текущем блоке) —
используйте именно ключ path (или collection: если это коллекция) согласно
гайдлайнам репозитория.

In `@Resources/Prototypes/_Scp/Catalog/mtf_uplink_catalog.yml`:
- Around line 2219-2227: Listing ScpUplinkCrateAdministrationCrateScpCageScp066
reuses the same icon state (closed_scp_cage) from mtf_store_icon.rsi as the
Scp173 variant, making them indistinguishable; add a new sprite state in
mtf_store_icon.rsi (e.g., closed_scp_cage_066 or similar unique name) with the
distinct icon for SCP-066 and update the listing's icon state reference from
closed_scp_cage to the new state so the two listings are visually different in
the store.

In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml`:
- Line 85: Normalize the suffix value to match the style used by Scp066Friendly:
replace the current "SCP-066-hostile" value for the suffix key with the same
casing and spacing convention as "SCP-066 Friendly" (e.g., "SCP-066 Hostile") so
both prototypes use consistent "SCP-066 <Status>" formatting; update the suffix
field in scp066.yml accordingly.

In `@Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml`:
- Around line 140-154: Флаги deployed в Deployable-компоненте инвертированы: у
развёрнутой сущности CrateScpCageScp173 стоит deployed: false, а у сложенной
CrateScpCageFolded173 — deployed: true; исправьте значения в соответствующих
сущностях/компонтах Deployable — установить deployed: true для
CrateScpCageScp173 и deployed: false для CrateScpCageFolded173, оставив
остальные поля (requiredTools, deployStates и т.п.) без изменений.
- Around line 34-37: Remove the commented-out Deployable component block from
the BaseCrateScpCage YAML (the lines showing "#  - type: Deployable" and its
indented properties); delete those commented lines entirely so there is no
dead/commented component left in scp_cage.yml, ensuring Deployable remains
defined only on the concrete crates (CrateScpCageScp173 / CrateScpCageFolded173)
and no edit markers or commented code remain.

---

Duplicate comments:
In `@Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml`:
- Line 5: Replace the placeholder "name: ???" with an English fallback name and
add the required English fallback fields "description" and "suffix" in this
entity prototype YAML (ensure the values match the English FTL localization for
this entity); update the "name", "description", and "suffix" keys for the scp066
prototype so the player-facing UI has proper fallbacks if localization fails.
- Around line 111-113: В форме Scp066Hostile указан только MobThresholds с "0:
Alive" и присутствует компонент Damageable, поэтому юнит не умирает — добавьте в
этот блок недостающий порог смерти и/или блок Destructible: в сущности
Scp066Hostile расширьте thresholds (например добавить ключ с порогом,
соответствующим накопленному урону → Dead) и добавьте секцию
Destructible/DestructionBehavior аналогичную friendly-форме (или используйте
DamageTrigger, как в friendly с порогом 200 → полиморф), чтобы при достижении
нужного урона исчезала/переводилась в финальное состояние.
- Around line 97-99: Scp066Hostile is still configured as SimpleNeutral and uses
the friendly rootTask HugBotCompound, so it never behaves hostile after
polymorph; update the Scp066Hostile entity to use a hostile faction (e.g.,
replace factions: - SimpleNeutral with - SimpleHostile) and swap the rootTask
from HugBotCompound to an appropriate combat HTN (or another hostile behavior
tree) so the polymorphed form attacks, or alternatively rename/describe the
variant (Scp066Hostile) as a neutral disruptive form in its yaml and keep
current behaviour to avoid confusion; ensure changes reference Scp066Hostile,
SimpleNeutral, SimpleHostile, HugBotCompound, and Scp066Polymorph.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 15232fe6-b5c4-4b12-8b2e-afa46a5f3a02

📥 Commits

Reviewing files that changed from the base of the PR and between 5c86186 and 6a069d0.

⛔ Files ignored due to path filters (16)
  • Resources/Audio/_Scp/Scp066/Idle/Friendly/notes1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Friendly/notes2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Friendly/notes3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/eric1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/notes1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/notes2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/notes3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/Idle/Hostile/notes4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/beethoven.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Scp/Scp066/party1.ogg is excluded by !**/*.ogg
  • Resources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/base.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/closed.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/open.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Objects/Misc/scp173_cage.rsi/base.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Objects/Misc/scp173_cage.rsi/closed.png is excluded by !**/*.png
  • Resources/Textures/_Scp/Objects/Misc/scp173_cage.rsi/open.png is excluded by !**/*.png
📒 Files selected for processing (13)
  • Content.Shared/_Scp/Research/Interact/ScpInteractSystem.cs
  • Content.Shared/_Scp/Research/ScpResearchEvents.cs
  • Resources/Locale/ru-RU/_prototypes/_scp/entities/mobs/player/mtfs/Common.ftl
  • Resources/Locale/ru-RU/_prototypes/_scp/entities/objects/misc/scp_cage.ftl
  • Resources/Prototypes/Entities/Objects/Specific/Medical/surgery.yml
  • Resources/Prototypes/_Scp/Actions/scp066.yml
  • Resources/Prototypes/_Scp/Catalog/mtf_uplink_catalog.yml
  • Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml
  • Resources/Prototypes/_Scp/Entities/Mobs/Player/MTFs/Common.yml
  • Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml
  • Resources/Prototypes/_Scp/Entities/Structures/Wallmounts/Signs/posters.yml
  • Resources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/meta.json
  • Resources/Textures/_Scp/Objects/Misc/scp173_cage.rsi/meta.json

Comment thread Resources/Prototypes/_Scp/Actions/scp066.yml
Comment thread Resources/Prototypes/_Scp/Actions/scp066.yml
Comment thread Resources/Prototypes/_Scp/Catalog/mtf_uplink_catalog.yml
Comment thread Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml Outdated
Comment thread Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml
Comment thread Resources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.yml
@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

жиреющий кролик умри

@ThereDrD0 ThereDrD0 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это и останется только ждать пока я сделаю код

Comment thread Content.Shared/_Scp/Scp066/Scp066Component.cs Outdated
Comment thread Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml
@666XxttimurkaxX666

666XxttimurkaxX666 commented Apr 28, 2026

Copy link
Copy Markdown
Contributor Author

@ThereDrD0 щас основной долгострой лишь только с механикой отрыва нитки от 066.
можно ли просто через триггеры сделать взаимодействие с ретрактором и спавн ниток чтобы быстрее замержить?

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

@ThereDrD0 щас основной долгострой лишь только с механикой отрыва нитки от 066. можно ли просто через триггеры сделать взаимодействие с ретрактором и спавн ниток чтобы быстрее замержить?

если что 066 все еще может стать злым другим способом, отрезать нить может быть и не обязательным

@ThereDrD0

Copy link
Copy Markdown
Collaborator

Оставь ПР просто, я сделаю когда сделаю и сам вставлю код в 066

@github-actions

Copy link
Copy Markdown
Contributor

Этот PR содержит конфликты, пожалуйста, разрешите их, прежде чем мы сможем его оценить.

@666XxttimurkaxX666

Copy link
Copy Markdown
Contributor Author

@WardexOfficial в драфт

@WardexOfficial
WardexOfficial marked this pull request as draft May 29, 2026 09:36
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.

2 participants