Add scp 066#961
Conversation
|
RSI Diff Bot; head commit 2be26b0 merging into 4fc185b Resources/Textures/_Scp/Mobs/Scp/scp-066.rsi
Resources/Textures/_Scp/Objects/Misc/scp066_cage.rsi
Resources/Textures/_Scp/Objects/Research/research_material.rsi
|
|
Warning Rate limit exceeded
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 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 configurationConfiguration used: Path: .coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Run ID: 📒 Files selected for processing (5)
📝 WalkthroughWalkthroughДобавлен контент для SCP-066: новые зарегистрированные компоненты, моб‑прототипы (дружелюбный/враждебный), действия/спеллы, предметы и контейнеры, локализация (ru-RU), текстуры/звукоколлекции, полиморф и сопутствующие prototype/yaml/meta файлы. Мелкие кодовые файлы изменены только по BOM/форматированию. Changes
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)
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Suggested labels
Poem
Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (3 errors, 1 warning, 1 inconclusive)
✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
|
::error in /Prototypes/_Scp/Actions/scp066.yml(12,12) SoundSpecifier value is not a valid resource path! что с этой хуйней в линтере нужно делать |
а чо бы и нет |
где |
There was a problem hiding this comment.
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
⛔ Files ignored due to path filters (17)
Resources/Audio/_Scp/Scp066/Beethoven.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Friendly/Notes1.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Friendly/Notes2.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Friendly/Notes3.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/Eric1.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/Notes1.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/Notes2.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/Notes3.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/Notes4.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Party1.oggis excluded by!**/*.oggResources/Textures/_Scp/Actions/scp-066.rsi/airlock.pngis excluded by!**/*.pngResources/Textures/_Scp/Actions/scp-066.rsi/light.pngis excluded by!**/*.pngResources/Textures/_Scp/Mobs/Scp/scp-066.rsi/scp-066friendly.pngis excluded by!**/*.pngResources/Textures/_Scp/Mobs/Scp/scp-066.rsi/scp-066hostile.pngis excluded by!**/*.pngResources/Textures/_Scp/Objects/Research/research_material.rsi/scp066-ribbon.pngis excluded by!**/*.pngResources/Textures/_Scp/Structures/Wallmounts/scp-posters.rsi/scp066.pngis excluded by!**/*.pngResources/Textures/_Scp/Structures/Wallmounts/signs-directional.rsi/066.pngis excluded by!**/*.png
📒 Files selected for processing (25)
Content.Shared/_Scp/Research/Interact/ScpInteractSystem.csContent.Shared/_Scp/Research/ScpResearchEvents.csContent.Shared/_Scp/Scp066/Scp066Component.csResources/Locale/ru-RU/_prototypes/_scp/actions/scp066.ftlResources/Locale/ru-RU/_prototypes/_scp/entities/objects/misc/scp_cage.ftlResources/Locale/ru-RU/_prototypes/_scp/entities/objects/scpparts/parts.ftlResources/Locale/ru-RU/_prototypes/_scp/entities/structures/wallmounts/signs/posters.ftlResources/Locale/ru-RU/_prototypes/_scp/entities/structures/wallmounts/signs/signs.ftlResources/Prototypes/Entities/Objects/Specific/Medical/surgery.ymlResources/Prototypes/_Scp/Actions/scp066.ymlResources/Prototypes/_Scp/Entities/Markers/scp.ymlResources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.ymlResources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.ymlResources/Prototypes/_Scp/Entities/Objects/ScpParts/parts.ymlResources/Prototypes/_Scp/Entities/Structures/Wallmounts/Signs/posters.ymlResources/Prototypes/_Scp/Entities/Structures/Wallmounts/Signs/signs.ymlResources/Prototypes/_Scp/Polymorphs/scp066.ymlResources/Prototypes/_Scp/SoundCollections/Scp/scp066.ymlResources/Prototypes/_Scp/tags.ymlResources/ServerInfo/_Scp/Guidebook/Research/ResearchAdvanced.xmlResources/Textures/_Scp/Actions/scp-066.rsi/meta.jsonResources/Textures/_Scp/Mobs/Scp/scp-066.rsi/meta.jsonResources/Textures/_Scp/Objects/Research/research_material.rsi/meta.jsonResources/Textures/_Scp/Structures/Wallmounts/scp-posters.rsi/meta.jsonResources/Textures/_Scp/Structures/Wallmounts/signs-directional.rsi/meta.json
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (3)
Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.yml (3)
100-102:⚠️ Potential issue | 🟠 MajorHostile-вариант всё ещё не получает 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: DeadAlso 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
📒 Files selected for processing (7)
Content.Shared/_Scp/Research/Interact/ScpInteractSystem.csResources/Locale/ru-RU/_prototypes/_scp/actions/scp066.ftlResources/Locale/ru-RU/_prototypes/_scp/entities/mobs/npcs/scp/scp066.ftlResources/Prototypes/_Scp/Actions/scp066.ymlResources/Prototypes/_Scp/Entities/Markers/scp.ymlResources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.ymlResources/Prototypes/_Scp/Polymorphs/scp066.yml
There was a problem hiding this comment.
♻️ 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
📒 Files selected for processing (4)
Resources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.ymlResources/Prototypes/_Scp/Entities/Objects/ScpParts/parts.ymlResources/Prototypes/_Scp/SoundCollections/Scp/scp066.ymlResources/Prototypes/_Scp/tags.yml
…/posters.yml Co-authored-by: ThereDrD <88589686+ThereDrD0@users.noreply.github.com>
|
@666XxttimurkaxX666 доделывать будешь? |
ну типо да но типо и нет |
Отправь ИИ этот код с моим комментарием и любой ИИ тебе скажет как это исправить. В дискорде можешь перед коммитом спросить еще |
|
ну вот вроде |
|
Бля ну ты даешь, это кто тебе высрал |
|
Короче я сам сделаю тебе триггер и замержу в мастер, удали у себя пока код. Потом вмержишь мастер с моим кодом и сделаешь что тебе нужно |
tun tun sahur AI code |
хорошо |
There was a problem hiding this comment.
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-прототипов также отсутствует обязательный fallbackdescription. Это уже отмечалось в предыдущем ревью и не было исправлено.Предлагаемая правка
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, andsuffixfields 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 | 🟠 MajorHostile-вариант по-прежнему пассивен — поведение не соответствует PR.
Комментарий
# все еще пассивенна строке 99 прямо фиксирует, чтоScp066Hostileостался вSimpleNeutral, аrootTaskвсё ещёHugBotCompound(тот же, что у friendly-формы). По описанию PR форма должна становиться враждебной после получения избыточного урона/использования ретрактора, а полиморф ведёт именно сюда (Scp066Polymorph→Scp066Hostile). В текущем виде после полиморфа сущность будет вести себя так же, как 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
⛔ Files ignored due to path filters (16)
Resources/Audio/_Scp/Scp066/Idle/Friendly/notes1.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Friendly/notes2.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Friendly/notes3.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/eric1.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/notes1.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/notes2.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/notes3.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/Idle/Hostile/notes4.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/beethoven.oggis excluded by!**/*.oggResources/Audio/_Scp/Scp066/party1.oggis excluded by!**/*.oggResources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/base.pngis excluded by!**/*.pngResources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/closed.pngis excluded by!**/*.pngResources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/open.pngis excluded by!**/*.pngResources/Textures/_Scp/Objects/Misc/scp173_cage.rsi/base.pngis excluded by!**/*.pngResources/Textures/_Scp/Objects/Misc/scp173_cage.rsi/closed.pngis excluded by!**/*.pngResources/Textures/_Scp/Objects/Misc/scp173_cage.rsi/open.pngis excluded by!**/*.png
📒 Files selected for processing (13)
Content.Shared/_Scp/Research/Interact/ScpInteractSystem.csContent.Shared/_Scp/Research/ScpResearchEvents.csResources/Locale/ru-RU/_prototypes/_scp/entities/mobs/player/mtfs/Common.ftlResources/Locale/ru-RU/_prototypes/_scp/entities/objects/misc/scp_cage.ftlResources/Prototypes/Entities/Objects/Specific/Medical/surgery.ymlResources/Prototypes/_Scp/Actions/scp066.ymlResources/Prototypes/_Scp/Catalog/mtf_uplink_catalog.ymlResources/Prototypes/_Scp/Entities/Mobs/NPCs/Scp/scp066.ymlResources/Prototypes/_Scp/Entities/Mobs/Player/MTFs/Common.ymlResources/Prototypes/_Scp/Entities/Objects/Misc/scp_cage.ymlResources/Prototypes/_Scp/Entities/Structures/Wallmounts/Signs/posters.ymlResources/Textures/_Scp/Objects/Misc/scp066_cage.rsi/meta.jsonResources/Textures/_Scp/Objects/Misc/scp173_cage.rsi/meta.json
|
жиреющий кролик умри |
ThereDrD0
left a comment
There was a problem hiding this comment.
Это и останется только ждать пока я сделаю код
|
@ThereDrD0 щас основной долгострой лишь только с механикой отрыва нитки от 066. |
если что 066 все еще может стать злым другим способом, отрезать нить может быть и не обязательным |
|
Оставь ПР просто, я сделаю когда сделаю и сам вставлю код в 066 |
|
Этот PR содержит конфликты, пожалуйста, разрешите их, прежде чем мы сможем его оценить. |
|
@WardexOfficial в драфт |










Краткое описание | Short description
если что это нпс но за него может играть и просто игрок
изначально в раунде он добрый и безопасный, но если 066 получит слишком много урона или на нем используют ретрактор для извлечения нитей то он станет злым
еще у него есть свой ангар
дрд он не сильно влияет на игру ты можешь выдать ему гост роль если в виде нпс не подходит
Ссылка на багрепорт/Предложение | Related Issue/Bug Report
Медиа (Видео/Скриншоты) | Media (Video/Screenshots)
Changelog
🆑 TIMUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUURq
Summary by CodeRabbit
Новые функции
Контент
Документация
Локализация