[Feature] Пилот СБ как роль. Замах на полноценную интеграцию#124
[Feature] Пилот СБ как роль. Замах на полноценную интеграцию#124Alazell wants to merge 10 commits into
Conversation
|
RSI Diff Bot; head commit 741fe23 merging into 4837ebd Resources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi
Resources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi
Resources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi
Resources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi
|
Главное изменение
Resources / localization
Validation / risk
WalkthroughДобавлена новая роль SecurityPilot с сопутствующими прототипами, локализацией, лоадаутами, PDA/ID-картой, наполнением локера и ресурсными метаданными. В ChangesРоль Security Pilot и связанный контент
Estimated code review effort: 3 (Moderate) | ~25 minutes 🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Warning Review ran into problems🔥 ProblemsGit: Failed to clone repository. Please run the 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 |
|
НЕЕЕЕТ RSI ВАЛИДАТОР УМЕР, НЕЕЕТ!!! НЕЕЕЕЕЕТТТ!! 😭😭😭 |
There was a problem hiding this comment.
Actionable comments posted: 13
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Resources/Locale/en-US/job/job-names.ftl`:
- Line 156: The localization update only added the role-timer entry
`JobSecurityPilot`, but the `security_pilot.yml` prototype also expects the
job-name and job-description keys. Add the missing `job-name-pilot` under the
existing job-name section and define `job-description-pilot` elsewhere in this
file with the appropriate localized text, keeping the new keys consistent with
the existing `JobSecurityPilot` naming pattern.
In `@Resources/Locale/ru-RU/job/job-names.ftl`:
- Line 3: Add the missing localization entry for the pilot job description in
the ru-RU locale file: `job-description-pilot` is referenced by the pilot
prototype, so update the same translation bundle that contains `job-name-pilot`
to include the description key and its Russian text. Keep the new key consistent
with the existing job-name/job-description naming pattern so the pilot prototype
resolves both strings correctly.
In `@Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml`:
- Around line 22-27: The entity prototype in LockerPilotFilled has fields out of
the required order. Reorder the prototype in this snippet to match the coding
guidelines: keep type first, then parent, then id, then name, then suffix, with
components last; use the existing LockerPilotFilled, LockerSecurity, and
security pilot locker entries as the anchors while preserving the same values.
In `@Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml`:
- Around line 4-5: The pilotglasses prototype still uses placeholder WIP values
for its displayed text, so replace the current name and description in the
pilotglasses entity prototype with real localized fallback text. Update the
prototype’s direct name/description entries to use the en-US fallback content,
matching the `_Arcane` prototype pattern, so players no longer see WIP when
inspecting the item.
In `@Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.yml`:
- Around line 4-5: Replace the placeholder WIP values in the pilot_beret
prototype with real en-US fallback text. Update the `name` and `description`
fields in `pilot_beret.yml` so `_Arcane` entities no longer expose WIP to
players, and make sure the corresponding `ru-RU` localization entry is added
under the `_arcane` prototype locale path. Use the `pilot_beret` prototype as
the reference point when updating both the prototype and its localization.
In `@Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml`:
- Around line 4-5: The pilot mask prototype still uses placeholder WIP values
for both name and description, so replace them with the real en-US fallback text
directly in the YAML before release. Update the fields in the pilotmask
prototype to use finalized localized content instead of the WIP placeholders,
keeping the `_Arcane` prototype metadata consistent with the rest of the entity
definitions.
In `@Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.yml`:
- Around line 26-27: The prototype metadata still uses placeholder WIP values,
so update the affected clothing prototype entries to replace name and
description with proper en-US fallback text before release. Fix the fields in
the jumpsuit prototype definitions under the _Arcane clothing uniforms YAML so
the actual localized fallback content is embedded instead of WIP, keeping the
existing prototype structure intact.
In `@Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml`:
- Around line 1-30: Add ru-RU localization entries for the PilotPDA prototype so
it no longer falls back to en-US. Update the ru-RU pda.ftl localization file to
include matching keys for ent-PilotPDA and ent-PilotPDA.desc, using the existing
PilotPDA entity definition in the pda.yml prototype as the reference for the
entity name and description.
In `@Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml`:
- Line 9: The ID card prototype is referencing a sprite state name that does not
match the state defined in the RSI metadata, so the overlay will not render.
Update the identifier used in identification_cards.yml to match the state name
defined in the id_cards.rsi meta (or rename the meta state to match the YAML),
keeping the names consistent between the prototype and the sprite metadata.
In `@Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.yml`:
- Around line 3-4: Add the missing en-US localization entries for the Security
pilot job so the prototype keys resolve correctly: update the localization
assets referenced by job-name-pilot and job-description-pilot, ensuring both
strings exist in the en-US job names file and that the same two keys are also
present in ru-RU if they are used there. Verify the Security job prototype’s
name and description keys match the localization IDs exactly, and add the
missing job-description-pilot entry alongside job-name-pilot.
In `@Resources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.json`:
- Around line 1-38: The RSI meta.json formatting uses 2-space indentation
instead of the required 4-space indentation for Resources/**/*.json. Reformat
the entire pilotmask.rsi/meta.json file to use consistent 4-space indentation
while preserving the existing JSON structure and values, especially the states
array entries.
In
`@Resources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.json`:
- Line 3: The license value in pilotuniform.rsi’s meta.json is inconsistent with
the other RSI assets in this PR. Update the license entry in the pilotuniform
metadata to match the same CC-BY-SA version used by pilot_glasses and pilotmask,
unless the 4.0 value is intentionally required; if so, keep it and ensure the
asset set is consistently documented.
In `@Resources/Textures/Objects/Misc/id_cards.rsi/meta.json`:
- Around line 122-124: The meta JSON for the ID card states is malformed because
the new idpilot entry is missing the opening object brace after the previous
idparamedic state. Fix the structure in the id_cards.rsi metadata by inserting
the missing state object delimiter so the sequence around idparamedic and
idpilot remains valid JSON, and verify the surrounding state entries in the same
meta file still form a proper array of objects.
🪄 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 Plus
Run ID: 0574a77e-e035-4856-ba04-b278cd133d74
⛔ Files ignored due to path filters (21)
Resources/Textures/Objects/Misc/id_cards.rsi/idpilot.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/equipped-EYES.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/icon.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/inhand-left.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/inhand-right.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/equipped-HELMET.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/icon.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/inhand-left.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/inhand-right.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/equipped-MASK-reptilian.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/equipped-MASK-vox.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/equipped-MASK-vulpkanin.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/equipped-MASK.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/icon.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/inhand-left.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/inhand-right.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/equipped-INNERCLOTHING.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/icon.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/inhand-left.pngis excluded by!**/*.pngResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/inhand-right.pngis excluded by!**/*.pngResources/Textures/_Arcane/Interface/Misc/job_icons.rsi/SecurityPilot.pngis excluded by!**/*.png
📒 Files selected for processing (23)
Resources/Locale/en-US/job/job-names.ftlResources/Locale/ru-RU/job/job-names.ftlResources/Prototypes/Loadouts/Jobs/Security/security_officer.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/Roles/Jobs/departments.ymlResources/Prototypes/Roles/play_time_trackers.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.ymlResources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Textures/Objects/Misc/id_cards.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.jsonResources/Textures/_Arcane/Interface/Misc/job_icons.rsi/meta.json
💤 Files with no reviewable changes (1)
- Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
- GitHub Check: build (ubuntu-latest)
- GitHub Check: YAML Linter
- GitHub Check: YAML map schema validator
- GitHub Check: Test Packaging
- GitHub Check: build (ubuntu-latest)
⚠️ CI failures not shown inline (2)
GitHub Actions: RSI Validator / Validate RSIs: [Feature] Пилот СБ как роль. Замах на полноценную интеграцию
Conclusion: failure
##[group]Run python3 RobustToolbox/Schemas/validate_rsis.py Resources/
�[36;1mpython3 RobustToolbox/Schemas/validate_rsis.py Resources/�[0m
shell: /usr/bin/bash -e {0}
##[endgroup]
Resources/Textures/Objects/Misc/id_cards.rsi: Failed to read meta.json: Expecting ',' delimiter: line 124 column 13 (char 2242)
##[error]Process completed with exit code 1.
GitHub Actions: RSI Validator / 0_Validate RSIs.txt: [Feature] Пилот СБ как роль. Замах на полноценную интеграцию
Conclusion: failure
##[group]Run python3 RobustToolbox/Schemas/validate_rsis.py Resources/
�[36;1mpython3 RobustToolbox/Schemas/validate_rsis.py Resources/�[0m
shell: /usr/bin/bash -e {0}
##[endgroup]
Resources/Textures/Objects/Misc/id_cards.rsi: Failed to read meta.json: Expecting ',' delimiter: line 124 column 13 (char 2242)
##[error]Process completed with exit code 1.
🧰 Additional context used
📓 Path-based instructions (9)
Resources/**/*.{yml,ftl,json}
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Resources/**/*.{yml,ftl,json}: Follow SS14 naming conventions when editing prototype, localization, and resource files
Follow SS14 upstream maintenance practices when editing resource files
Files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Textures/_Arcane/Interface/Misc/job_icons.rsi/meta.jsonResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/meta.jsonResources/Prototypes/Roles/play_time_trackers.ymlResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.jsonResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Locale/en-US/job/job-names.ftlResources/Locale/ru-RU/job/job-names.ftlResources/Prototypes/Roles/Jobs/departments.ymlResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/meta.jsonResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Textures/Objects/Misc/id_cards.rsi/meta.jsonResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
Resources/**/*.yml
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Resources/**/*.yml: Follow SS14 ECS prototype patterns and conventions
Follow SS14 graphics generic visualizer appearance conventions and patterns
Resources/**/*.yml: Loadss14-naming-conventionsdocumentation for Resources work
Loadss14-ecs-prototypesdocumentation for Resources work
Loadss14-upstream-maintenancedocumentation for Resources work
Loadss14-prototypes-localedocumentation for Resources work
Loadss14-localization-stringsdocumentation for Resources work
Loadss14-sprite-overlays-shadersdocumentation when working with RSI metadata, textures, sprite layers, overlays, or shader resources
Validate YAML after editsRun
dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOptto validate YAML and resource edits.
Files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/Roles/play_time_trackers.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/Roles/Jobs/departments.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
Resources/**/*.{yml,ftl}
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Follow SS14 prototype locale integration rules and practices
Files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/Roles/play_time_trackers.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Locale/en-US/job/job-names.ftlResources/Locale/ru-RU/job/job-names.ftlResources/Prototypes/Roles/Jobs/departments.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
**/*.{cs,xaml,yml,yaml}
📄 CodeRabbit inference engine (AGENTS.md)
If the task adds tests or you need to choose the right test layer, load skill
ss14-tests-authoring.
Files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/Roles/play_time_trackers.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/Roles/Jobs/departments.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
Resources/Prototypes/**/*.yml
📄 CodeRabbit inference engine (AGENTS.md)
Resources/Prototypes/**/*.yml: Put prototypes under the most specific existing subtree inResources/Prototypes/. If you introduce a new prototype parent tree, put parent prototypes inbase.ymland variants in sibling files.
Keep entity prototype field order astype,abstract,parent,id,categories,name,suffix,description,components. Do not insert blank lines between- type:entries inside acomponents:list. Separate prototype blocks with one blank line.
Prefersuffixfor spawn-menu distinctions instead of changing prototypename.
Files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/Roles/play_time_trackers.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/Roles/Jobs/departments.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
⚙️ CodeRabbit configuration file
Resources/Prototypes/**/*.yml: Review SS14 prototypes carefully:
- Use the narrowest existing subtree and avoid duplicating nearby prototype files or parent trees.
- Keep entity field order as: type, abstract, parent, id, categories, name, suffix, description, components.
- Prefer base.yml for parent trees and sibling files for variants.
- Do not add blank lines inside components lists.
- Call out broken inheritance, risky prototype ID changes, missing paired locale updates, and Appearance / GenericVisualizer mismatches.
Files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/Roles/play_time_trackers.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/Roles/Jobs/departments.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
Resources/**/*.json
📄 CodeRabbit inference engine (AGENTS.md)
Keep RSI
meta.jsonordered asversion,license,copyright,size,stateswith 4-space indentation.
Files:
Resources/Textures/_Arcane/Interface/Misc/job_icons.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/meta.jsonResources/Textures/Objects/Misc/id_cards.rsi/meta.json
⚙️ CodeRabbit configuration file
Resources/**/*.json: Review resource JSON files for path correctness and consistency.
For RSI meta.json files, check ordering, state/layout consistency, and whether referenced prototypes or visualizers still match the available states.
Files:
Resources/Textures/_Arcane/Interface/Misc/job_icons.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/meta.jsonResources/Textures/Objects/Misc/id_cards.rsi/meta.json
Resources/**/*.ftl
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Follow SS14 localization string standards and formatting rules
Files:
Resources/Locale/en-US/job/job-names.ftlResources/Locale/ru-RU/job/job-names.ftl
**/*.ftl
📄 CodeRabbit inference engine (AGENTS.md)
Use specific
kebab-caselocalization IDs.
Files:
Resources/Locale/en-US/job/job-names.ftlResources/Locale/ru-RU/job/job-names.ftl
Resources/Locale/**/*.ftl
📄 CodeRabbit inference engine (AGENTS.md)
Resources/Locale/**/*.ftl: Add or update FTL entries underResources/Locale/, starting withen-US; add/update matchingru-RUentries when the same feature already maintains Russian locale or the change is Orion-facing and you can do so without guessing translations.
Use specifickebab-caselocalization IDs.
Files:
Resources/Locale/en-US/job/job-names.ftlResources/Locale/ru-RU/job/job-names.ftl
⚙️ CodeRabbit configuration file
Resources/Locale/**/*.ftl: Treat localization as mandatory:
- Every player-facing string should be localized.
- Prefer specific kebab-case keys.
- Flag raw strings in code or gameplay/resource changes that are missing locale updates.
- Check consistency when prototype names, descriptions, markings, or UI text changed.
Files:
Resources/Locale/en-US/job/job-names.ftlResources/Locale/ru-RU/job/job-names.ftl
🧠 Learnings (6)
📚 Learning: 2026-06-29T05:34:31.137Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-station PR: 99
File: Resources/Prototypes/Entities/Clothing/Belt/belts.yml:973-974
Timestamp: 2026-06-29T05:34:31.137Z
Learning: В SS14 YAML-прототипах для компонента `Storage` поле `grid` задаёт **включительные** координаты прямоугольника. При подсчёте вместимости учитывайте оффсет-инклюзивность: прямоугольник `x1,y1,x2,y2` означает размеры `width = (x2 - x1 + 1)` и `height = (y2 - y1 + 1)`, а число ячеек `width * height`. Например, `0,0,0,0` = 1 ячейка, а `0,0,6,2` = (6-0+1)*(2-0+1)=7*3=21. При ревью файлов наподобие `Resources/Prototypes/Entities/Clothing/Belt/belts.yml` не интерпретируйте `x2/y2` как эксклюзивные (чтобы не ошибиться на 1 в ширине/высоте).
Applied to files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/Roles/play_time_trackers.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/Roles/Jobs/departments.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
📚 Learning: 2026-07-05T18:40:45.199Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-station PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-05T18:40:45.199Z
Learning: For ArcaneSS14/arcane-station custom `_Arcane`/`_Orion` entity prototypes under `Resources/Prototypes/_Arcane/` or `Resources/Prototypes/_Orion/`, embed `name` and `description` directly in the prototype `.yml` as the `en-US` fallback text (do not add a separate `en-US` locale override). Then localize only `ru-RU` by adding `ent-<EntityId>` and `ent-<EntityId>.desc` keys in `Resources/Locale/ru-RU/ss14-ru/prototypes/_arcane/...` or `.../_orion/...`, mirroring the entity `.yml` path. By contrast, vanilla-derived entities (e.g., a base `Medkit`) should omit `name`/`description` from the `.yml` entirely and instead provide both `en-US` and `ru-RU` localized `prototypes/...` entries in `Resources/Locale/{en-US,ru-RU}/ss14-ru/prototypes/...`.
Applied to files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
📚 Learning: 2026-07-05T23:32:09.578Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-old PR: 117
File: Resources/Prototypes/_Arcane/Entities/Objects/Devices/pinpointer.yml:23-28
Timestamp: 2026-07-05T23:32:09.578Z
Learning: When editing ArcaneSS14/arcane-old prototype YAML related to pinpointers and tags:
- Pinpointer auto-locate vs manual retarget: `PinpointerComponent.Whitelist` controls auto-locate. If `Whitelist` is `null`, the pinpointer `Update` auto-locate logic returns early and will not search for a target; leaving it unset is safe from unintended auto-targeting. Manual retargeting during `OnAfterInteract` is governed by `RetargetingWhitelist`/`RetargetingBlacklist` (not `Whitelist`).
- Emag behavior: in `SharedPinpointerSystem.OnEmagged`, if `canRetarget: true` then `RetargetingWhitelist` is set to `null` (removing retarget restrictions, effectively allowing any retarget target); set `canEmag: false` to prevent emagging if needed.
- Tag prototype registration: any new `Tag` prototype IDs referenced in YAML (e.g., entities with `type: Tag` or `EntityWhitelist.tags`) must have a corresponding prototype declared as `- type: Tag` (commonly in `Resources/Prototypes/_Arcane/tags.yml` or an equivalent...
Applied to files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
📚 Learning: 2026-07-06T05:08:05.731Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-06T05:08:05.731Z
Learning: When reviewing ArcaneSS14 “_Arcane” prototype changes (especially entity id renames/swaps made via # Arcane-Edit in vanilla-mirrored YAML files), ensure locale/localization handling matches these rules:
1) If a renamed/swapped entity id occurs via a vanilla-mirrored YAML file but the entity is treated as “_Arcane”, add the new id’s localized strings under the corresponding “_Arcane” locale path (e.g., Resources/Locale/<lang>/ss14-ru/prototypes/_arcane/...). Treat this as an explicit exception to the YAML living outside the _Arcane folder.
2) If the old vanilla id is released and then reused by a new “_Arcane” entity, do not create duplicate locale entries for that id under _Arcane; the pre-existing vanilla-mirrored locale entries already apply.
3) For “_Arcane” entity .ftl files, do not reference a parent/base prototype’s locale key (e.g., a base description key) unless that base prototype is defined within the same mirrored YAML path. If the base is abstract or defined elsewhere (e.g....
Applied to files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
📚 Learning: 2026-07-07T17:55:50.395Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Content.Client/Chemistry/UI/ChemMasterWindow.xaml.cs:192-194
Timestamp: 2026-07-07T17:55:50.395Z
Learning: When reviewing ArcaneSS14/arcane-old changes related to `MobState` thresholds/visuals/actions, treat the `Critical` enum value as requiring explicit mappings (it no longer implicitly behaves as an alias of `SoftCritical`). If any YAML prototype `thresholds:` (for `MobThresholdsComponent.Thresholds`) uses the bare `Critical` key (e.g., `MobThresholdsComponent.Thresholds: { Critical: ... }` for entities like `MobMouseCancer`), ensure the prototype (or referenced config) provides corresponding explicit `StateAlertDict` entries and any required `MobStateActions.actions` and `DamageStateVisuals.states` mappings for `Critical`. Otherwise, review should expect failures because the default `StateAlertDict` in `MobThresholdsComponent.cs` typically maps only `Alive`, `SoftCritical`, `HardCritical`, and `Dead`—not `Critical`.
Applied to files:
Resources/Prototypes/_Arcane/StatusIcon/job.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/Roles/play_time_trackers.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/Roles/Jobs/departments.ymlResources/Prototypes/_Arcane/Entities/Objects/Devices/pda.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/Loadouts/role_loadouts.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
📚 Learning: 2026-06-19T22:21:36.179Z
Learnt from: MataVsn
Repo: ArcaneSS14/arcane-station PR: 69
File: Resources/Textures/_Arcane/Mobs/Silicon/Medical/k4tmed.rsi/meta.json:14-16
Timestamp: 2026-06-19T22:21:36.179Z
Learning: When reviewing RSI texture meta.json files under Resources/Textures/_Arcane (including borg chassis variants like k4t*.rsi), do not flag a difference in `directions` for rest-state entries. If the state name is a rest state (e.g., `*-rest`) for these borg chassis sprites, `directions: 1` is an intentional art choice and should not be treated as a mismatch against other variants that use `directions: 4`. Only raise an issue if the `directions` value is invalid for the file/spec (e.g., not the expected numeric options) or if it occurs on non-rest states.
Applied to files:
Resources/Textures/_Arcane/Interface/Misc/job_icons.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/meta.json
🪛 Biome (2.5.1)
Resources/Textures/Objects/Misc/id_cards.rsi/meta.json
[error] 124-124: expected , but instead found :
(parse)
[error] 124-124: expected , but instead found "idpilot"
(parse)
🪛 GitHub Actions: RSI Validator / 0_Validate RSIs.txt
Resources/Textures/Objects/Misc/id_cards.rsi/meta.json
[error] 124-124: Schema validation failed: Failed to read meta.json. JSON parse error: Expecting ',' delimiter: line 124 column 13 (char 2242).
🪛 GitHub Actions: RSI Validator / Validate RSIs
Resources/Textures/Objects/Misc/id_cards.rsi/meta.json
[error] 124-124: Failed to read meta.json: Expecting ',' delimiter: line 124 column 13 (char 2242).
🔇 Additional comments (12)
Resources/Prototypes/Roles/Jobs/departments.yml (1)
263-263: LGTM!Resources/Prototypes/Roles/play_time_trackers.yml (1)
165-167: LGTM!Resources/Prototypes/_Arcane/StatusIcon/job.yml (1)
1-7: LGTM!Resources/Textures/_Arcane/Clothing/Head/pilot_beret.rsi/meta.json (1)
1-26: LGTM!Resources/Textures/_Arcane/Interface/Misc/job_icons.rsi/meta.json (1)
1-14: LGTM!Resources/Prototypes/Loadouts/role_loadouts.yml (1)
847-876: 🗄️ Data Integrity & IntegrationЗамечание неактуально: кастомные группы уже есть в
Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml.
SecurityPilotHead,SecurityPilotJumpsuit,SecurityPilotPDAиSecurityPilotBeltопределены, поэтому этот loadout не сломан.> Likely an incorrect or invalid review comment.Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml (1)
1-21: 🗄️ Data Integrity & IntegrationЗамечание лишнее: все entity ID существуют.
ClothingUniformPilotJumpsuit,ClothingMaskGasSecurityPilot,ClothingHeadsetAltSecurityRegular,PanicButton,ClothingBeltCorporateJudoFilledи остальные ссылки есть в прототипах; риска паденияYAMLLinterиз-за отсутствующего ID тут нет.> Likely an incorrect or invalid review comment.Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml (1)
2-2: 🔒 Security & PrivacyКомбинация родителей здесь допустима.
ClothingEyesGlassesSecurityContraDetectуже даёт security HUD и contraband detector, аClothingEyesGlassesMesonдобавляет только meson-эффект; конфликтаEye/Clothingне видно.> Likely an incorrect or invalid review comment.Resources/Textures/_Arcane/Clothing/Eyes/Glasses/pilot_glasses.rsi/meta.json (1)
1-26: LGTM!Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml (1)
13-21: 🎯 Functional CorrectnessПроверьте баланс брони на маске.
Heat: 0.5даёт 50% снижение урона от огня — это очень сильный показатель для предмета, занимающего слот MASK. СтандартныйClothingMaskGasобычно не имеет брони вообще. Убедитесь, что это намеренное дизайн-решение для пилота СБ.Resources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.yml (1)
1-19: LGTM!Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml (1)
8-40: 🎯 Functional CorrectnessПроверьте наличие локализации для имён loadout-групп.
Имена групп (
loadout-group-pilot-jumpsuit,loadout-group-pilot-head,loadout-group-pilot-PDA,loadout-group-pilot-belt) требуют соответствующих FTL-записей. В предоставленных файлах нет FTL с этими ключами. Убедитесь, что локализация добавлена, иначе игроки увидят сырые ключи.Source: Path instructions
|
Заполни пожалуйста локализацию (и замени WIP) |
|
@coderabbitai |
|
Tip For best results, initiate chat on the files or code changes.
( ・ω・)ノ ✏️ Learnings added
|
|
@coderabbitai что там до локализации? я жду файлики. Или моё второе сообщение перебило твой разбор промта? |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
for f in \
"Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml" \
"Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.yml" \
"Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml" \
"Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.yml" \
"Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml" \
"Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.yml"; do
echo "=== $f ==="
cat -n "$f" || true
echo
done
echo "=== ru-RU entities locale files (sample structure) ==="
fd -e ftl . Resources/Locale/ru-RU/entities/clothing -x echo {} 2>/dev/null | head -50
echo "=== search similar glasses/mask/beret loc entries ==="
rg -n "ClothingEyesGlassesMeson|ClothingHeadHatBeretCaptainWhite|ClothingMaskGas\b|ClothingUniformBase" Resources/Locale/ru-RU -A2 -B2 | head -100Length of output: 7653 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== job-descriptions ftl (search job-description-pilot) ==="
rg -n "job-description-pilot|job-name-pilot" Resources/Locale -A1 -B1
echo "=== check if clothing entities use direct name or loc reference (search a few known ids in Locale) ==="
rg -n "ClothingEyesGlassesMeson|ClothingHeadHatBeretCaptainWhite|BaseSecurityPDA" Resources/Locale 2>/dev/null | head -20
echo "=== check pda.yml locale for similar PDA name pattern e.g. security pilot PDA is literal, check other PDA entities file for style ==="
rg -n "PDA\." Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml | head -5
sed -n '1,60p' Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml
echo "=== job-descriptions.ftl files ==="
fd job-descriptions Resources/Locale
cat -n Resources/Locale/en-US/job/job-descriptions.ftl | rg -n "officer|security" -A1 -B1 | head -40
cat -n Resources/Locale/ru-RU/job/job-descriptions.ftl 2>/dev/null | rg -n "officer|security|пилот" -A1 -B1 | head -40Length of output: 2585 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find job-descriptions ftl files ==="
fd -e ftl job-description Resources/Locale
echo "=== en-US job-descriptions.ftl sample ==="
sed -n '1,40p' Resources/Locale/en-US/job/job-descriptions.ftl 2>/dev/null
echo "=== ru-RU job-descriptions.ftl sample ==="
sed -n '1,40p' Resources/Locale/ru-RU/job/job-descriptions.ftl 2>/dev/null
echo "=== ss14-ru mask ftl files ==="
fd -e ftl . Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/mask 2>/dev/null
fd -e ftl . Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/mask 2>/dev/null
echo "=== ss14-ru jumpsuits ftl files ==="
fd -e ftl . Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/uniforms 2>/dev/null
fd -e ftl . Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/uniforms 2>/dev/null
echo "=== sample content of glasses.ftl and hats.ftl for format ==="
sed -n '1,15p' Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/eyes/glasses.ftl
sed -n '1,15p' Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/eyes/glasses.ftl
sed -n '1,15p' Resources/Locale/en-US/ss14-ru/prototypes/_orion/entities/clothing/head/hats.ftl
sed -n '1,15p' Resources/Locale/ru-RU/ss14-ru/prototypes/_orion/entities/clothing/head/hats.ftl
echo "=== check ClothingMaskGas base ent loc (for description reference) ==="
rg -n "ent-ClothingMaskGas\b" Resources/Locale -A2
echo "=== check ClothingUniformBase or similar for jumpsuit desc pattern ==="
rg -n "ent-ClothingUniformBlueShieldCommon" Resources/Locale -A2Length of output: 2140 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== en-US job-description.ftl ==="
grep -n "security\|pilot" Resources/Locale/en-US/job/job-description.ftl -i
echo "=== ru-RU job-description.ftl ==="
grep -n "security\|пилот\|офицер" Resources/Locale/ru-RU/job/job-description.ftl -i
echo "=== full context around security officer entry en-US ==="
grep -n "job-description-security\|job-description-officer" -A1 -B1 Resources/Locale/en-US/job/job-description.ftl
grep -n "job-description-security\|job-description-officer" -A1 -B1 Resources/Locale/ru-RU/job/job-description.ftl
echo "=== ss14-ru mask/jumpsuits ftl files ==="
fd -e ftl . Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/mask
fd -e ftl . Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/mask
fd -e ftl . Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/uniforms
fd -e ftl . Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/uniforms
echo "=== glasses.ftl / hats.ftl content ==="
sed -n '1,15p' Resources/Locale/en-US/ss14-ru/prototypes/entities/clothing/eyes/glasses.ftl
echo "---"
sed -n '1,15p' Resources/Locale/ru-RU/ss14-ru/prototypes/entities/clothing/eyes/glasses.ftl
echo "---"
sed -n '1,15p' Resources/Locale/en-US/ss14-ru/prototypes/_orion/entities/clothing/head/hats.ftl
echo "---"
sed -n '1,15p' Resources/Locale/ru-RU/ss14-ru/prototypes/_orion/entities/clothing/head/hats.ftl
echo "=== ClothingMaskGas base and ClothingUniformBlueShieldCommon loc ==="
rg -n "ent-ClothingMaskGas\b" Resources/Locale -A2
rg -n "ent-ClothingUniformBlueShieldCommon" Resources/Locale -A2Length of output: 5141 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find mask ftl files ==="
fd -e ftl mask Resources/Locale
echo "=== find jumpsuit ftl files ==="
fd -e ftl -i jumpsuit Resources/Locale | head -20
echo "=== search ent-ClothingMaskGas ==="
rg -n "ent-ClothingMaskGas" Resources/Locale
echo "=== search ent-ClothingUniformBlueShieldCommon ==="
rg -n "ent-ClothingUniformBlueShieldCommon" Resources/Locale
echo "=== check pilotglasses etc for existing partial loc entries maybe already added ==="
rg -n "SecurityPilot|PilotBeret|PilotJumpsuit|PilotPDA" Resources/LocaleLength of output: 10567 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== list _Arcane locale dirs ==="
fd . Resources/Locale/ru-RU/_Arcane -t d
echo "---"
fd . Resources/Locale/en-US/_Arcane -t d 2>/dev/null
echo "=== existing _Arcane entities files ==="
fd -e ftl . Resources/Locale/ru-RU/_Arcane/entities 2>/dev/null
echo "---en-US---"
fd -e ftl . Resources/Locale/en-US/_Arcane/entities 2>/dev/null
echo "=== jumpsuit.ftl full content ==="
cat -n Resources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftl
echo "=== check for existing pda / identification cards Arcane loc (PilotPDA / SecurityPilotIDCard) ==="
rg -n "PilotPDA|SecurityPilotIDCard" Resources/LocaleLength of output: 10379 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== hats.ftl ru-RU full ==="
cat -n Resources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftl
echo "=== check devices/pda ru-RU _Arcane dir ==="
fd . Resources/Locale/ru-RU/_Arcane/entities/objects 2>/dev/null
fd -e ftl . Resources/Locale/ru-RU -i -g '*pda*' 2>/dev/null | grep -i arcane
echo "=== check identification_cards Arcane loc ==="
fd -e ftl . Resources/Locale/ru-RU -i -g '*identification*' 2>/dev/null
rg -n "BaseSecurityPDA|ent-Pda" Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/devices/pda.ftl
echo "=== check existing SecurityPilotIDCard/PilotPDA anywhere in yml for naming consistency ==="
rg -n "job-description-officer\b" Resources/LocaleLength of output: 2295
Черновой текст на английском/русском — предложил рабочий вариант, можешь поправить формулировки под лор. План
Формулировки — черновик, лор-текст лучше поправить под тебя перед мержем. Failed to handle agent chat message. Please try again. |
|
@coderabbitai |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
files=(
"Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml"
"Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.yml"
"Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml"
"Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.yml"
"Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml"
"Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.yml"
)
printf '\n== Target files ==\n'
for f in "${files[@]}"; do
printf '\n--- %s ---\n' "$f"
sed -n '1,220p' "$f"
done
printf '\n== WIP occurrences in prototypes ==\n'
rg -n -C2 '\bWIP\b' Resources/Prototypes/_ArcaneLength of output: 8404 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '\n== Outline for nearby clothing/device/job prototype files ==\n'
fd -i 'security.*pilot|pilot|pda|beret|glasses|mask|jumpsuit|security_officer' Resources/Prototypes -t f | sort | sed -n '1,120p'
printf '\n== Security job prototypes (names/descriptions) ==\n'
rg -n -C2 'id: Security|name: |description: |job-description-|job-name-' Resources/Prototypes/Resources 2>/dev/null || true
printf '\n== Nearby Arcane prototypes with name/description style ==\n'
for f in \
"Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml" \
"Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.yml" \
"Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml"; do
[ -f "$f" ] && { printf '\n--- %s ---\n' "$f"; sed -n '1,220p' "$f"; }
done
printf '\n== Other PDAs / security-related entity names ==\n'
rg -n -C2 'BaseSecurityPDA|type: entity|PresetIdCard|job: Security|name: |description: ' Resources/Prototypes --glob '*.yml' | sed -n '1,260p'Length of output: 22542 🏁 Script executed: #!/bin/bash
set -euo pipefail
printf '\n== Job locale keys related to security pilot ==\n'
rg -n -C2 'SecurityPilot|job-name-pilot|job-description' Resources/Locale Resources/Prototypes --glob '*.ftl' --glob '*.yml'
printf '\n== Nearby job locale examples ==\n'
for f in \
"Resources/Locale/en-US/job/job-names.ftl" \
"Resources/Locale/ru-RU/job/job-names.ftl"; do
[ -f "$f" ] && { printf '\n--- %s ---\n' "$f"; sed -n '1,220p' "$f"; }
done
printf '\n== Job prototypes using description keys ==\n'
rg -n -C2 'description: job-description-|description: .*pilot|description: .*security' Resources/Prototypes --glob '*.yml' | sed -n '1,220p'Length of output: 113952
Коротко по фактам:
Failed to handle agent chat message. Please try again. |
ну заполни ты пожалуйста локализацию.. |
|
Tip For best results, initiate chat on the files or code changes.
Кратко предложенный план (без служебных тегов, чтобы не спровоцировать тот же сбой):
Если сообщение снова упадёт — сформулирую как отдельный последующий комментарий, разбив на части.
(´・ω・`)
|
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
for f in \
Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml \
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.yml \
Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml \
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.yml \
Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml \
Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.yml
do
echo "===== $f ====="
cat -n "$f" 2>/dev/null || echo "NOT FOUND"
echo
doneLength of output: 7109 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "--- en-US job-names ---"
rg -n "job-name-pilot|JobSecurityPilot" Resources/Locale/en-US/job/job-names.ftl || echo "none"
echo "--- en-US job-descriptions ---"
fd job-descriptions.ftl Resources/Locale/en-US | xargs -I{} sh -c 'echo {}; rg -n "pilot" {}' || echo "none"
echo "--- ru-RU job-names ---"
rg -n "job-name-pilot|JobSecurityPilot" Resources/Locale/ru-RU/job/job-names.ftl || echo "none"
echo "--- ru-RU job-descriptions ---"
fd job-descriptions.ftl Resources/Locale/ru-RU | xargs -I{} sh -c 'echo {}; rg -n "pilot" {}' || echo "none"Length of output: 924 🏁 Script executed: #!/bin/bash
set -euo pipefail
fd job-descriptions.ftl Resources/Locale
echo "---"
fd . Resources/Locale/en-US/jobLength of output: 698 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "--- en-US job-description.ftl (grep pilot) ---"
rg -n "pilot" Resources/Locale/en-US/job/job-description.ftl || echo "none found"
echo "--- sample entries en-US ---"
sed -n '1,15p' Resources/Locale/en-US/job/job-description.ftl
echo "--- ru-RU job-description.ftl ---"
fd job-description.ftl Resources/Locale/ru-RU
rg -n "pilot" Resources/Locale/ru-RU/job/job-description.ftl || echo "none found"Length of output: 2255
Важно: в Баг: Готовые правки (name — со строчной, description — с заглавной, EN): 1. - name: WIP
- description: WIP
+ name: security pilot glasses
+ description: Glasses issued to security pilots for improved threat detection.2. - name: WIP
- description: WIP
+ name: security pilot beret
+ description: A beret worn by pilots of the security department.3. - name: WIP
- description: WIP
+ name: security pilot gas mask
+ description: A gas mask worn by security pilots for respiratory protection.4. - name: WIP
- description: WIP
+ name: security pilot jumpsuit
+ description: A jumpsuit worn by security pilots.5. +job-description-pilot = Escort security vehicles, patrol restricted areas, and provide rapid backup for officers stationed at remote outposts.6. +job-description-pilot = Сопровождайте служебный транспорт СБ, патрулируйте закрытые зоны и оказывайте быструю поддержку офицерам на удалённых постах.Если хочешь, чтобы я оформил эти правки как `` и подготовил патч сразу для коммита — скажи. ✏️ Learnings added
|
|
Tip For best results, initiate chat on the files or code changes.
Формулировки черновые — поправь под лор перед мержем. Если снова упадёт с той же ошибкой — похоже на баг платформы, не связанный с контентом; можешь применить диффы вручную из этого сообщения. (っ˘̩╭╮˘̩)っ
|
|
ужас. моя проблема. я тороплюсь |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (3)
Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml (1)
1-10: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winДобавьте ru-RU локализацию для
ClothingEyesGlassesSecurityPilot— нужныent-ClothingEyesGlassesSecurityPilotиent-ClothingEyesGlassesSecurityPilot.descвResources/Locale/ru-RU/ss14-ru/prototypes/_arcane/Entities/Clothing/Eyes/.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml` around lines 1 - 10, Add ru-RU localization entries for the `ClothingEyesGlassesSecurityPilot` entity by creating the missing `ent-ClothingEyesGlassesSecurityPilot` and `ent-ClothingEyesGlassesSecurityPilot.desc` strings in the ru-RU prototype locale folder. Keep the translation aligned with the existing entity definition in `pilotglasses.yml`, and ensure both the display name and description are covered.Source: Learnings
Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml (1)
22-31: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winДобавьте
descriptionвLockerPilotFilled. Для_Arcaneentity-прототиповnameиdescriptionдолжны быть заданы прямо в YAML.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml` around lines 22 - 31, Add a description to LockerPilotFilled in the security_pilot.yml prototype, since _Arcane entity prototypes must define both name and description directly in YAML. Update the LockerPilotFilled entity definition alongside the existing name field so the prototype includes the required description text.Source: Learnings
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml (1)
1-11: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winДобавьте
descriptionвSecurityPilotIDCard. Сейчас прототип унаследует общий текст отIDCardStandard; для_Arcaneописание должно быть задано прямо в YAML как fallback.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml` around lines 1 - 11, Add an explicit description to SecurityPilotIDCard in the YAML prototype instead of relying on the inherited text from IDCardStandard. Update the SecurityPilotIDCard entity definition alongside its existing name, Sprite, and PresetIdCard components so that _Arcane has a direct fallback description in the prototype.Source: Learnings
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml`:
- Around line 22-31: Add a description to LockerPilotFilled in the
security_pilot.yml prototype, since _Arcane entity prototypes must define both
name and description directly in YAML. Update the LockerPilotFilled entity
definition alongside the existing name field so the prototype includes the
required description text.
In `@Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml`:
- Around line 1-10: Add ru-RU localization entries for the
`ClothingEyesGlassesSecurityPilot` entity by creating the missing
`ent-ClothingEyesGlassesSecurityPilot` and
`ent-ClothingEyesGlassesSecurityPilot.desc` strings in the ru-RU prototype
locale folder. Keep the translation aligned with the existing entity definition
in `pilotglasses.yml`, and ensure both the display name and description are
covered.
In `@Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml`:
- Around line 1-11: Add an explicit description to SecurityPilotIDCard in the
YAML prototype instead of relying on the inherited text from IDCardStandard.
Update the SecurityPilotIDCard entity definition alongside its existing name,
Sprite, and PresetIdCard components so that _Arcane has a direct fallback
description in the prototype.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 30884cd7-2a0a-435d-8b88-7bfc6ebb4397
📒 Files selected for processing (11)
Resources/Locale/en-US/job/job-description.ftlResources/Locale/ru-RU/job/job-description.ftlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Textures/Objects/Misc/id_cards.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.json
📜 Review details
🧰 Additional context used
📓 Path-based instructions (9)
Resources/**/*.{yml,ftl,json}
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Resources/**/*.{yml,ftl,json}: Follow SS14 naming conventions when editing prototype, localization, and resource files
Follow SS14 upstream maintenance practices when editing resource files
Files:
Resources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/Objects/Misc/id_cards.rsi/meta.jsonResources/Locale/en-US/job/job-description.ftlResources/Locale/ru-RU/job/job-description.ftlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.jsonResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
Resources/**/*.json
📄 CodeRabbit inference engine (AGENTS.md)
Keep RSI
meta.jsonordered asversion,license,copyright,size,stateswith 4-space indentation.
Files:
Resources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/Objects/Misc/id_cards.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.json
⚙️ CodeRabbit configuration file
Resources/**/*.json: Review resource JSON files for path correctness and consistency.
For RSI meta.json files, check ordering, state/layout consistency, and whether referenced prototypes or visualizers still match the available states.
Files:
Resources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/Objects/Misc/id_cards.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.json
Resources/**/*.ftl
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Follow SS14 localization string standards and formatting rules
Files:
Resources/Locale/en-US/job/job-description.ftlResources/Locale/ru-RU/job/job-description.ftl
Resources/**/*.{yml,ftl}
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Follow SS14 prototype locale integration rules and practices
Files:
Resources/Locale/en-US/job/job-description.ftlResources/Locale/ru-RU/job/job-description.ftlResources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
**/*.ftl
📄 CodeRabbit inference engine (AGENTS.md)
Use specific
kebab-caselocalization IDs.
Files:
Resources/Locale/en-US/job/job-description.ftlResources/Locale/ru-RU/job/job-description.ftl
Resources/Locale/**/*.ftl
📄 CodeRabbit inference engine (AGENTS.md)
Resources/Locale/**/*.ftl: Add or update FTL entries underResources/Locale/, starting withen-US; add/update matchingru-RUentries when the same feature already maintains Russian locale or the change is Orion-facing and you can do so without guessing translations.
Use specifickebab-caselocalization IDs.
Files:
Resources/Locale/en-US/job/job-description.ftlResources/Locale/ru-RU/job/job-description.ftl
⚙️ CodeRabbit configuration file
Resources/Locale/**/*.ftl: Treat localization as mandatory:
- Every player-facing string should be localized.
- Prefer specific kebab-case keys.
- Flag raw strings in code or gameplay/resource changes that are missing locale updates.
- Check consistency when prototype names, descriptions, markings, or UI text changed.
Files:
Resources/Locale/en-US/job/job-description.ftlResources/Locale/ru-RU/job/job-description.ftl
Resources/**/*.yml
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Resources/**/*.yml: Follow SS14 ECS prototype patterns and conventions
Follow SS14 graphics generic visualizer appearance conventions and patterns
Resources/**/*.yml: Loadss14-naming-conventionsdocumentation for Resources work
Loadss14-ecs-prototypesdocumentation for Resources work
Loadss14-upstream-maintenancedocumentation for Resources work
Loadss14-prototypes-localedocumentation for Resources work
Loadss14-localization-stringsdocumentation for Resources work
Loadss14-sprite-overlays-shadersdocumentation when working with RSI metadata, textures, sprite layers, overlays, or shader resources
Validate YAML after editsRun
dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOptto validate YAML and resource edits.
Files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
**/*.{cs,xaml,yml,yaml}
📄 CodeRabbit inference engine (AGENTS.md)
If the task adds tests or you need to choose the right test layer, load skill
ss14-tests-authoring.
Files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
Resources/Prototypes/**/*.yml
📄 CodeRabbit inference engine (AGENTS.md)
Resources/Prototypes/**/*.yml: Put prototypes under the most specific existing subtree inResources/Prototypes/. If you introduce a new prototype parent tree, put parent prototypes inbase.ymland variants in sibling files.
Keep entity prototype field order astype,abstract,parent,id,categories,name,suffix,description,components. Do not insert blank lines between- type:entries inside acomponents:list. Separate prototype blocks with one blank line.
Prefersuffixfor spawn-menu distinctions instead of changing prototypename.
Files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
⚙️ CodeRabbit configuration file
Resources/Prototypes/**/*.yml: Review SS14 prototypes carefully:
- Use the narrowest existing subtree and avoid duplicating nearby prototype files or parent trees.
- Keep entity field order as: type, abstract, parent, id, categories, name, suffix, description, components.
- Prefer base.yml for parent trees and sibling files for variants.
- Do not add blank lines inside components lists.
- Call out broken inheritance, risky prototype ID changes, missing paired locale updates, and Appearance / GenericVisualizer mismatches.
Files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
🧠 Learnings (6)
📚 Learning: 2026-06-19T22:21:36.179Z
Learnt from: MataVsn
Repo: ArcaneSS14/arcane-station PR: 69
File: Resources/Textures/_Arcane/Mobs/Silicon/Medical/k4tmed.rsi/meta.json:14-16
Timestamp: 2026-06-19T22:21:36.179Z
Learning: When reviewing RSI texture meta.json files under Resources/Textures/_Arcane (including borg chassis variants like k4t*.rsi), do not flag a difference in `directions` for rest-state entries. If the state name is a rest state (e.g., `*-rest`) for these borg chassis sprites, `directions: 1` is an intentional art choice and should not be treated as a mismatch against other variants that use `directions: 4`. Only raise an issue if the `directions` value is invalid for the file/spec (e.g., not the expected numeric options) or if it occurs on non-rest states.
Applied to files:
Resources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.jsonResources/Textures/_Arcane/Clothing/Uniforms/Jumpsuits/pilotuniform.rsi/meta.json
📚 Learning: 2026-06-29T05:34:31.137Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-station PR: 99
File: Resources/Prototypes/Entities/Clothing/Belt/belts.yml:973-974
Timestamp: 2026-06-29T05:34:31.137Z
Learning: В SS14 YAML-прототипах для компонента `Storage` поле `grid` задаёт **включительные** координаты прямоугольника. При подсчёте вместимости учитывайте оффсет-инклюзивность: прямоугольник `x1,y1,x2,y2` означает размеры `width = (x2 - x1 + 1)` и `height = (y2 - y1 + 1)`, а число ячеек `width * height`. Например, `0,0,0,0` = 1 ячейка, а `0,0,6,2` = (6-0+1)*(2-0+1)=7*3=21. При ревью файлов наподобие `Resources/Prototypes/Entities/Clothing/Belt/belts.yml` не интерпретируйте `x2/y2` как эксклюзивные (чтобы не ошибиться на 1 в ширине/высоте).
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
📚 Learning: 2026-07-05T18:40:45.199Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-station PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-05T18:40:45.199Z
Learning: For ArcaneSS14/arcane-station custom `_Arcane`/`_Orion` entity prototypes under `Resources/Prototypes/_Arcane/` or `Resources/Prototypes/_Orion/`, embed `name` and `description` directly in the prototype `.yml` as the `en-US` fallback text (do not add a separate `en-US` locale override). Then localize only `ru-RU` by adding `ent-<EntityId>` and `ent-<EntityId>.desc` keys in `Resources/Locale/ru-RU/ss14-ru/prototypes/_arcane/...` or `.../_orion/...`, mirroring the entity `.yml` path. By contrast, vanilla-derived entities (e.g., a base `Medkit`) should omit `name`/`description` from the `.yml` entirely and instead provide both `en-US` and `ru-RU` localized `prototypes/...` entries in `Resources/Locale/{en-US,ru-RU}/ss14-ru/prototypes/...`.
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
📚 Learning: 2026-07-05T23:32:09.578Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-old PR: 117
File: Resources/Prototypes/_Arcane/Entities/Objects/Devices/pinpointer.yml:23-28
Timestamp: 2026-07-05T23:32:09.578Z
Learning: When editing ArcaneSS14/arcane-old prototype YAML related to pinpointers and tags:
- Pinpointer auto-locate vs manual retarget: `PinpointerComponent.Whitelist` controls auto-locate. If `Whitelist` is `null`, the pinpointer `Update` auto-locate logic returns early and will not search for a target; leaving it unset is safe from unintended auto-targeting. Manual retargeting during `OnAfterInteract` is governed by `RetargetingWhitelist`/`RetargetingBlacklist` (not `Whitelist`).
- Emag behavior: in `SharedPinpointerSystem.OnEmagged`, if `canRetarget: true` then `RetargetingWhitelist` is set to `null` (removing retarget restrictions, effectively allowing any retarget target); set `canEmag: false` to prevent emagging if needed.
- Tag prototype registration: any new `Tag` prototype IDs referenced in YAML (e.g., entities with `type: Tag` or `EntityWhitelist.tags`) must have a corresponding prototype declared as `- type: Tag` (commonly in `Resources/Prototypes/_Arcane/tags.yml` or an equivalent...
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
📚 Learning: 2026-07-06T05:08:05.731Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-06T05:08:05.731Z
Learning: When reviewing ArcaneSS14 “_Arcane” prototype changes (especially entity id renames/swaps made via # Arcane-Edit in vanilla-mirrored YAML files), ensure locale/localization handling matches these rules:
1) If a renamed/swapped entity id occurs via a vanilla-mirrored YAML file but the entity is treated as “_Arcane”, add the new id’s localized strings under the corresponding “_Arcane” locale path (e.g., Resources/Locale/<lang>/ss14-ru/prototypes/_arcane/...). Treat this as an explicit exception to the YAML living outside the _Arcane folder.
2) If the old vanilla id is released and then reused by a new “_Arcane” entity, do not create duplicate locale entries for that id under _Arcane; the pre-existing vanilla-mirrored locale entries already apply.
3) For “_Arcane” entity .ftl files, do not reference a parent/base prototype’s locale key (e.g., a base description key) unless that base prototype is defined within the same mirrored YAML path. If the base is abstract or defined elsewhere (e.g....
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
📚 Learning: 2026-07-07T17:55:50.395Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Content.Client/Chemistry/UI/ChemMasterWindow.xaml.cs:192-194
Timestamp: 2026-07-07T17:55:50.395Z
Learning: When reviewing ArcaneSS14/arcane-old changes related to `MobState` thresholds/visuals/actions, treat the `Critical` enum value as requiring explicit mappings (it no longer implicitly behaves as an alias of `SoftCritical`). If any YAML prototype `thresholds:` (for `MobThresholdsComponent.Thresholds`) uses the bare `Critical` key (e.g., `MobThresholdsComponent.Thresholds: { Critical: ... }` for entities like `MobMouseCancer`), ensure the prototype (or referenced config) provides corresponding explicit `StateAlertDict` entries and any required `MobStateActions.actions` and `DamageStateVisuals.states` mappings for `Critical`. Otherwise, review should expect failures because the default `StateAlertDict` in `MobThresholdsComponent.cs` typically maps only `Alive`, `SoftCritical`, `HardCritical`, and `Dead`—not `Critical`.
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Head/pilot_beret.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
🔇 Additional comments (5)
Resources/Locale/en-US/job/job-description.ftl (1)
68-68: LGTM!Resources/Locale/ru-RU/job/job-description.ftl (1)
37-37: LGTM!Resources/Textures/Objects/Misc/id_cards.rsi/meta.json (1)
124-126: LGTM! JSON-синтаксис исправлен, стейтidpilotкорректно добавлен и соответствует ссылке вidentification_cards.yml.Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.yml (1)
23-32: 🎯 Functional Correctness | ⚡ Quick winИсправьте
name/descriptionуClothingUniformPilotJumpsuit.Сейчас строки скопированы от противогаза, поэтому в игре комбинезон будет называться и описываться неверно.
🛠️ Предлагаемое исправление
- name: security pilot gas mask - description: A gas mask worn by security pilots for respiratory protection. + name: security pilot jumpsuit + description: A jumpsuit worn by security pilots.Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml (1)
22-27: 🩺 Stability & AvailabilityЗамечание неактуально:
SecurityBreathMaskиGasMaskуже объявлены вResources/Prototypes/_Goobstation/tags.yml.> Likely an incorrect or invalid review comment.
|
Пуро не зря вырезал сканнер контры. |
|
@coderabbitai |
уберу не вопрос |
|
Спрайт кпк пилота? Глянь на остальные. Это оьычный конструктор без лишних спрайтов |
@UmbiMax всмысле конструктор?.. это я не понял чутка |
|
По поводу ПДА пилота. Спрайты КПК настраиваются как в конструкторе. Глянь на их код. В тринашке для других разработчиков очень удобно сделали, но и само собой портировали сюда |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== Find all _Arcane entity yml files with name/description (literal, not loc keys) ==="
grep -rlP '^\s*name:\s' Resources/Prototypes/_Arcane --include='*.yml' | sort
echo ""
echo "=== For each, show id/name/description lines ==="
for f in $(grep -rlP '^\s*name:\s' Resources/Prototypes/_Arcane --include='*.yml' | sort); do
echo "--- $f ---"
grep -nP '^\s*(- type: entity|id:|name:|description:)\s*' "$f"
echo
doneLength of output: 65872 🏁 Script executed: #!/bin/bash
set -euo pipefail
ids=(
ClothingEyesGlassesSecurityPilot
ClothingHeadPilotBeret
ClothingMaskGasSecurityPilot
ClothingUniformPilotJumpsuit
PilotPDA
SecurityPilotIDCard
LockerPilotFilled
)
for id in "${ids[@]}"; do
echo "=== $id ==="
rg -n "ent-$id\b" Resources/Locale || echo "NOT FOUND in any locale"
echo
done
echo "=== job-description-pilot / job-name-pilot presence check (both locales) ==="
rg -n "job-description-pilot|job-name-pilot" Resources/Locale/en-US/job/job-description.ftl Resources/Locale/en-US/job/job-names.ftl Resources/Locale/ru-RU/job/job-description.ftl Resources/Locale/ru-RU/job/job-names.ftl
echo "=== Check jumpsuits.yml current content for ClothingUniformPilotJumpsuit bug ==="
sed -n '23,35p' Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.yml
echo "=== Check identification_cards.yml full block ==="
sed -n '1,15p' Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml
echo "=== Check pda.yml full block ==="
sed -n '1,30p' Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml
echo "=== Check security_pilot locker fill file ==="
sed -n '1,32p' Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlLength of output: 4800
Баг (нужно исправить в первую очередь)
name: security pilot gas mask
description: A gas mask worn by security pilots for respiratory protection.Надо: name: security pilot jumpsuit
description: A flight suit tailored for security pilots.job-name-pilot / job-description-pilotУже есть в обоих локалях (en-US, ru-RU) — ок, не трогаем. Отсутствующие ru-RU переводы (
|
А ну.. да, вижу |
|
Я на перерыв, продолжу завтра. Один хер мапперов ждать придётся |
|
Мне бы снова глянуть на все спрайты КПК у СБ. Подберу для тебя вариацию |
|
@coderabbitai |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== pilotglasses.yml ==="
cat -n Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml
echo "=== pilotmask.yml ==="
cat -n Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.yml
echo "=== check ClothingEyesGlassesMeson (parent) for slot/layer info ==="
rg -n "ClothingEyesGlassesMeson\b" Resources/Prototypes -A15 | head -60
echo "=== check HideLayerClothing usage and slots enum for eyes/mask precedence ==="
rg -n "HideLayerClothing" Resources/Prototypes/_Arcane -A5
echo "=== search for existing glasses that render over mask (precedent in base game) ==="
rg -n "equipped-EYES|equipped-MASK" Resources/Prototypes --include='*.yml' | head -5
echo "=== check inventory.yml or slot definitions for EYES/MASK layer draw order ==="
fd -i inventory Resources/Prototypes -t f | head -20Length of output: 8824 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find human inventory template ==="
fd -i human Resources/Prototypes/Entities/Mobs/Species -t f 2>/dev/null
fd -i inventoryTemplate Resources/Prototypes -t f 2>/dev/null
echo "=== search inventory template yml with EYES/MASK slot order ==="
rg -n "EYES|MASK" Resources/Prototypes/Inventory 2>/dev/null -A2 -B2
echo "=== list inventory dir ==="
fd . Resources/Prototypes/Inventory -t f 2>/dev/nullLength of output: 901 🏁 Script executed: #!/bin/bash
set -euo pipefail
fd -i inventory Resources/Prototypes -t d
fd -e yml . Resources/Prototypes -p '*nventory*' 2>/dev/null
rg -n "type: inventoryTemplate" Resources/Prototypes -lLength of output: 163681 🏁 Script executed: #!/bin/bash
set -euo pipefail
cat -n Resources/Prototypes/InventoryTemplates/human_inventory_template.yml | grep -n -A6 "id: eyes\|id: mask"
echo "=== full slots with drawDepth/order ==="
sed -n '1,200p' Resources/Prototypes/InventoryTemplates/human_inventory_template.ymlLength of output: 581 🏁 Script executed: #!/bin/bash
set -euo pipefail
cat -n Resources/Prototypes/InventoryTemplates/human_inventory_template.ymlLength of output: 7390 🏁 Script executed: #!/bin/bash
set -euo pipefail
rg -n "HumanoidVisualLayers\." Content.Shared 2>/dev/null | grep -i "eyes\|mask" | head -20
echo "---"
fd -i "HumanoidVisualLayers" -e cs 2>/dev/null
echo "--- search ClientClothingSystem or slot layer order ---"
rg -n "class ClientClothingSystem" -A5 2>/dev/null
fd -i "ClothingSystem" -e cs 2>/dev/null | grep -i clientLength of output: 1121 🏁 Script executed: #!/bin/bash
set -euo pipefail
cat -n Content.Shared/Humanoid/HumanoidVisualLayersExtension.cs | sed -n '1,90p'Length of output: 5430
Факты по коду:
Вывод: доп. код/компоненты не требуются, должно сработать по умолчанию. Проверь визуально в игре (заспавни (・∀・) |
|
@coderabbitai |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find human species prototype with sprites list ==="
fd -i human.yml Resources/Prototypes/Entities/Mobs/Species
echo "---"
cat -n Resources/Prototypes/Entities/Mobs/Species/human.yml 2>/dev/null | head -80
echo "=== find SpeciesBaseSprites or similar generic sprite layer list prototype ==="
rg -n "type: speciesBaseSprites" Resources/Prototypes -l
rg -n "type: speciesBaseSprites" Resources/Prototypes -A40 | head -150
echo "=== search HumanoidVisualLayers enum full declaration order (C#) ==="
fd -i "HumanoidVisualLayers.cs" -e cs
cat -n Content.Shared/Humanoid/HumanoidVisualLayers.cs 2>/dev/null | head -60Length of output: 25244 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find ClientClothingSystem ==="
fd -i "ClothingSystem" -e cs | grep -i client
echo "=== dump relevant methods ==="
f=$(fd -i "ClientClothingSystem.cs" -e cs | head -1)
echo "File: $f"
cat -n "$f" | sed -n '1,400p'Length of output: 20657 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find GetActualMapLayerEvent definition and usages ==="
rg -n "GetActualMapLayerEvent" --type=cs -A10
echo "=== check loadout_groups.yml pilot groups order ==="
rg -n "SecurityPilotHead|SecurityPilotJumpsuit|PilotUtility|SecurityPilotPDA|SecurityPilotBelt" Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml -A8
echo "=== check security_pilot.yml startingGear order (glasses vs mask) ==="
grep -n "eyes:\|mask:\|jumpsuit:" Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlLength of output: 898 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find GetActualMapLayerEvent definition and usages (no type filter) ==="
rg -n "GetActualMapLayerEvent" -g '*.cs' -A10 || echo "none"
echo "=== check loadout_groups.yml pilot groups (grep separately to avoid combined failure) ==="
rg -n "SecurityPilotHead" Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml -A8 || echo "none1"
rg -n "SecurityPilotJumpsuit" Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml -A8 || echo "none2"
echo "=== check security_pilot.yml startingGear (eyes/mask/jumpsuit) ==="
grep -n "eyes:\|mask:\|jumpsuit:\|equipment:" Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.yml || echo "none3"
echo "=== HideClothingLayerClothingSystem for reference on layering hooks ==="
cat -n Content.Goobstation.Client/Clothing/EntitySystems/HideClothingLayerClothingSystem.cs 2>/dev/null | head -80Length of output: 1094 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== broad search variations ==="
rg -n "ActualMapLayer" -g '*.cs' -A6 || echo "none-actual"
rg -n "MapLayerEvent" -g '*.cs' -A6 || echo "none-maplayerevent"
echo "=== fallback: search whole repo without glob restriction ==="
grep -rn "GetActualMapLayerEvent" --include="*.cs" . || echo "none-grep"Length of output: 581 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== confirm ClientClothingSystem.cs still present ==="
test -f Content.Client/Clothing/ClientClothingSystem.cs && echo FOUND || echo MISSING
echo "=== grep line context again directly ==="
grep -n "GetActualMapLayerEvent" Content.Client/Clothing/ClientClothingSystem.cs
echo "=== find its definition across repo ==="
grep -rn "record.*GetActualMapLayerEvent\|struct.*GetActualMapLayerEvent\|class.*GetActualMapLayerEvent" . --include="*.cs"Length of output: 949 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find subscribers to GetActualMapLayerEvent ==="
grep -rn "GetActualMapLayerEvent" --include="*.cs" .
echo "=== show full event definition file ==="
cat -n Content.Goobstation.Common/Clothing/GetActualMapLayerEvent.csLength of output: 1464 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== SharedAltClothingLayerSystem.cs full ==="
cat -n Content.Goobstation.Shared/Clothing/Systems/SharedAltClothingLayerSystem.cs
echo "=== AltClothingLayerComponent definition ==="
fd -i "AltClothingLayerComponent" -e cs
grep -rn "class AltClothingLayerComponent" --include="*.cs" -A20 .
echo "=== existing yaml usages of AltClothingLayer component ==="
rg -n "AltClothingLayer" Resources/Prototypes -A5Length of output: 7005 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== ClothingMaskGas prototype (parent) ==="
rg -n "id: ClothingMaskGas\b" Resources/Prototypes -A40 | head -60
echo "=== check maskalt / equipped-MASKALT states usage in other masks RSI meta for reference ==="
rg -rn "equipped-MASKALT" Resources/Textures --include="*.json" | head -10
rg -n "equipped-MASKALT" Resources/Prototypes 2>/dev/null
echo "=== check pilotmask.rsi meta.json full for states ==="
cat -n Resources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.json
echo "=== check pilotmask.yml full current content ==="
cat -n Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlLength of output: 6647 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== find ClothingMaskGas base entity definition (id: ClothingMaskGas exactly) ==="
rg -n "^\s*id: ClothingMaskGas$" Resources/Prototypes -A40
echo "=== maskalt state usage across textures json ==="
rg -n "equipped-MASKALT" Resources/Textures -g '*.json'
echo "=== pilotmask.rsi meta.json ==="
cat -n Resources/Textures/_Arcane/Clothing/Mask/pilotmask.rsi/meta.json
echo "=== current pilotmask.yml ==="
cat -n Resources/Prototypes/_Arcane/Entities/Clothing/Mask/pilotmask.ymlLength of output: 4326 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== search for 'maskalt' anywhere in C# and yaml ==="
grep -rn "maskalt" --include="*.cs" -i . || echo none-cs
grep -rn "maskalt" --include="*.yml" -i . || echo none-yml
echo "=== base_clothingmask.yml full for context ==="
cat -n Resources/Prototypes/Entities/Clothing/Masks/base_clothingmask.yml | head -70
echo "=== check HumanoidAppearanceSystem or similar for initial 'maskalt' bookmark reservation ==="
grep -rn "\"maskalt\"\|'maskalt'" --include="*.cs" -i .Length of output: 5976 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== ClothingMaskGas full definition with parent line ==="
sed -n '155,200p' Resources/Prototypes/Entities/Clothing/Masks/masks.yml
echo "=== verify AltClothingLayer inherited chain (search ClothingMaskBase used as parent anywhere near masks.yml) ==="
grep -n "parent: ClothingMaskBase\|parent: \[.*ClothingMaskBase" Resources/Prototypes/Entities/Clothing/Masks/masks.yml
echo "=== base.yml maskalt sprite layer position relative to eyes/hair (species sprite list order) ==="
sed -n '280,320p' Resources/Prototypes/Entities/Mobs/Species/base.yml
echo "=== loc key alt-clothing-component-mask-alt / default ==="
rg -n "alt-clothing-component-mask-alt|alt-clothing-component-mask-default" Resources/LocaleLength of output: 4700
Технически:
Вывод: чтобы очки реально рисовались поверх маски, нужен новый pseudo-slot bookmark (по аналогии с Такое лучше не тащить в этот PR точечным патчем. Хочешь, заведу отдельный issue с описанием задачи (для мейнтейнеров/будущего PR), либо оставляем как есть (маска поверх очков — стандартное поведение движка)? (・_・;) |
|
придётся смириться, @coderabbitai. жди моих коммитов касаемо задач в этом PR |
|
Tip For best results, initiate chat on the files or code changes.
(・ω・)ノ |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml (1)
25-34: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winДобавьте
descriptionдляLockerPilotFilled.Сейчас у
_Arcane-прототипа есть толькоname; по правилам здесь нужен и явныйdescriptionв YAML, иначе examine будет пустым и ru-RU fallback останется неполным. Based on learnings: custom_Arcaneentity prototypes underResources/Prototypes/_Arcane/embednameanddescriptiondirectly in the prototype.ymlas the en-US fallback text.♻️ Предлагаемая правка
name: security pilot locker suffix: Filled + description: A security pilot locker stocked with spare gear. components:🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml` around lines 25 - 34, `LockerPilotFilled` is missing an explicit `description`, so add one directly in the `LockerPilotFilled` prototype alongside `name` in the `_Arcane` YAML. Update the `security_pilot.yml` prototype definition itself (the `LockerPilotFilled` entity block) to include a fallback `description` text matching the pattern used by other `_Arcane` prototypes.Source: Learnings
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml`:
- Around line 25-34: `LockerPilotFilled` is missing an explicit `description`,
so add one directly in the `LockerPilotFilled` prototype alongside `name` in the
`_Arcane` YAML. Update the `security_pilot.yml` prototype definition itself (the
`LockerPilotFilled` entity block) to include a fallback `description` text
matching the pattern used by other `_Arcane` prototypes.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 303f0360-2f08-4764-85f9-4b6640044d7f
📒 Files selected for processing (8)
Resources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftlResources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.yml
📜 Review details
🧰 Additional context used
📓 Path-based instructions (8)
Resources/**/*.{yml,ftl,json}
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Resources/**/*.{yml,ftl,json}: Follow SS14 naming conventions when editing prototype, localization, and resource files
Follow SS14 upstream maintenance practices when editing resource files
Files:
Resources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftlResources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
Resources/**/*.ftl
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Follow SS14 localization string standards and formatting rules
Files:
Resources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftlResources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftl
Resources/**/*.{yml,ftl}
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Follow SS14 prototype locale integration rules and practices
Files:
Resources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftlResources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
**/*.ftl
📄 CodeRabbit inference engine (AGENTS.md)
Use specific
kebab-caselocalization IDs.
Files:
Resources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftlResources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftl
Resources/Locale/**/*.ftl
📄 CodeRabbit inference engine (AGENTS.md)
Resources/Locale/**/*.ftl: Add or update FTL entries underResources/Locale/, starting withen-US; add/update matchingru-RUentries when the same feature already maintains Russian locale or the change is Orion-facing and you can do so without guessing translations.
Use specifickebab-caselocalization IDs.
Files:
Resources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftlResources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftl
⚙️ CodeRabbit configuration file
Resources/Locale/**/*.ftl: Treat localization as mandatory:
- Every player-facing string should be localized.
- Prefer specific kebab-case keys.
- Flag raw strings in code or gameplay/resource changes that are missing locale updates.
- Check consistency when prototype names, descriptions, markings, or UI text changed.
Files:
Resources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftlResources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftl
Resources/**/*.yml
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Resources/**/*.yml: Follow SS14 ECS prototype patterns and conventions
Follow SS14 graphics generic visualizer appearance conventions and patterns
Resources/**/*.yml: Loadss14-naming-conventionsdocumentation for Resources work
Loadss14-ecs-prototypesdocumentation for Resources work
Loadss14-upstream-maintenancedocumentation for Resources work
Loadss14-prototypes-localedocumentation for Resources work
Loadss14-localization-stringsdocumentation for Resources work
Loadss14-sprite-overlays-shadersdocumentation when working with RSI metadata, textures, sprite layers, overlays, or shader resources
Validate YAML after editsRun
dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOptto validate YAML and resource edits.
Files:
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
**/*.{cs,xaml,yml,yaml}
📄 CodeRabbit inference engine (AGENTS.md)
If the task adds tests or you need to choose the right test layer, load skill
ss14-tests-authoring.
Files:
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
Resources/Prototypes/**/*.yml
📄 CodeRabbit inference engine (AGENTS.md)
Resources/Prototypes/**/*.yml: Put prototypes under the most specific existing subtree inResources/Prototypes/. If you introduce a new prototype parent tree, put parent prototypes inbase.ymland variants in sibling files.
Keep entity prototype field order astype,abstract,parent,id,categories,name,suffix,description,components. Do not insert blank lines between- type:entries inside acomponents:list. Separate prototype blocks with one blank line.
Prefersuffixfor spawn-menu distinctions instead of changing prototypename.
Files:
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
⚙️ CodeRabbit configuration file
Resources/Prototypes/**/*.yml: Review SS14 prototypes carefully:
- Use the narrowest existing subtree and avoid duplicating nearby prototype files or parent trees.
- Keep entity field order as: type, abstract, parent, id, categories, name, suffix, description, components.
- Prefer base.yml for parent trees and sibling files for variants.
- Do not add blank lines inside components lists.
- Call out broken inheritance, risky prototype ID changes, missing paired locale updates, and Appearance / GenericVisualizer mismatches.
Files:
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
🧠 Learnings (5)
📚 Learning: 2026-07-06T05:08:05.731Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-06T05:08:05.731Z
Learning: When reviewing ArcaneSS14 “_Arcane” prototype changes (especially entity id renames/swaps made via # Arcane-Edit in vanilla-mirrored YAML files), ensure locale/localization handling matches these rules:
1) If a renamed/swapped entity id occurs via a vanilla-mirrored YAML file but the entity is treated as “_Arcane”, add the new id’s localized strings under the corresponding “_Arcane” locale path (e.g., Resources/Locale/<lang>/ss14-ru/prototypes/_arcane/...). Treat this as an explicit exception to the YAML living outside the _Arcane folder.
2) If the old vanilla id is released and then reused by a new “_Arcane” entity, do not create duplicate locale entries for that id under _Arcane; the pre-existing vanilla-mirrored locale entries already apply.
3) For “_Arcane” entity .ftl files, do not reference a parent/base prototype’s locale key (e.g., a base description key) unless that base prototype is defined within the same mirrored YAML path. If the base is abstract or defined elsewhere (e.g....
Applied to files:
Resources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftlResources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftlResources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftlResources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
📚 Learning: 2026-06-29T05:34:31.137Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-station PR: 99
File: Resources/Prototypes/Entities/Clothing/Belt/belts.yml:973-974
Timestamp: 2026-06-29T05:34:31.137Z
Learning: В SS14 YAML-прототипах для компонента `Storage` поле `grid` задаёт **включительные** координаты прямоугольника. При подсчёте вместимости учитывайте оффсет-инклюзивность: прямоугольник `x1,y1,x2,y2` означает размеры `width = (x2 - x1 + 1)` и `height = (y2 - y1 + 1)`, а число ячеек `width * height`. Например, `0,0,0,0` = 1 ячейка, а `0,0,6,2` = (6-0+1)*(2-0+1)=7*3=21. При ревью файлов наподобие `Resources/Prototypes/Entities/Clothing/Belt/belts.yml` не интерпретируйте `x2/y2` как эксклюзивные (чтобы не ошибиться на 1 в ширине/высоте).
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
📚 Learning: 2026-07-05T18:40:45.199Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-station PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-05T18:40:45.199Z
Learning: For ArcaneSS14/arcane-station custom `_Arcane`/`_Orion` entity prototypes under `Resources/Prototypes/_Arcane/` or `Resources/Prototypes/_Orion/`, embed `name` and `description` directly in the prototype `.yml` as the `en-US` fallback text (do not add a separate `en-US` locale override). Then localize only `ru-RU` by adding `ent-<EntityId>` and `ent-<EntityId>.desc` keys in `Resources/Locale/ru-RU/ss14-ru/prototypes/_arcane/...` or `.../_orion/...`, mirroring the entity `.yml` path. By contrast, vanilla-derived entities (e.g., a base `Medkit`) should omit `name`/`description` from the `.yml` entirely and instead provide both `en-US` and `ru-RU` localized `prototypes/...` entries in `Resources/Locale/{en-US,ru-RU}/ss14-ru/prototypes/...`.
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
📚 Learning: 2026-07-05T23:32:09.578Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-old PR: 117
File: Resources/Prototypes/_Arcane/Entities/Objects/Devices/pinpointer.yml:23-28
Timestamp: 2026-07-05T23:32:09.578Z
Learning: When editing ArcaneSS14/arcane-old prototype YAML related to pinpointers and tags:
- Pinpointer auto-locate vs manual retarget: `PinpointerComponent.Whitelist` controls auto-locate. If `Whitelist` is `null`, the pinpointer `Update` auto-locate logic returns early and will not search for a target; leaving it unset is safe from unintended auto-targeting. Manual retargeting during `OnAfterInteract` is governed by `RetargetingWhitelist`/`RetargetingBlacklist` (not `Whitelist`).
- Emag behavior: in `SharedPinpointerSystem.OnEmagged`, if `canRetarget: true` then `RetargetingWhitelist` is set to `null` (removing retarget restrictions, effectively allowing any retarget target); set `canEmag: false` to prevent emagging if needed.
- Tag prototype registration: any new `Tag` prototype IDs referenced in YAML (e.g., entities with `type: Tag` or `EntityWhitelist.tags`) must have a corresponding prototype declared as `- type: Tag` (commonly in `Resources/Prototypes/_Arcane/tags.yml` or an equivalent...
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
📚 Learning: 2026-07-07T17:55:50.395Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Content.Client/Chemistry/UI/ChemMasterWindow.xaml.cs:192-194
Timestamp: 2026-07-07T17:55:50.395Z
Learning: When reviewing ArcaneSS14/arcane-old changes related to `MobState` thresholds/visuals/actions, treat the `Critical` enum value as requiring explicit mappings (it no longer implicitly behaves as an alias of `SoftCritical`). If any YAML prototype `thresholds:` (for `MobThresholdsComponent.Thresholds`) uses the bare `Critical` key (e.g., `MobThresholdsComponent.Thresholds: { Critical: ... }` for entities like `MobMouseCancer`), ensure the prototype (or referenced config) provides corresponding explicit `StateAlertDict` entries and any required `MobStateActions.actions` and `DamageStateVisuals.states` mappings for `Critical`. Otherwise, review should expect failures because the default `StateAlertDict` in `MobThresholdsComponent.cs` typically maps only `Alive`, `SoftCritical`, `HardCritical`, and `Dead`—not `Critical`.
Applied to files:
Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.ymlResources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.ymlResources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
🔇 Additional comments (8)
Resources/Prototypes/_Arcane/Entities/Clothing/Eyes/pilotglasses.yml (1)
1-10: LGTM!Resources/Prototypes/_Arcane/Entities/Clothing/Uniforms/jumpsuits.yml (1)
23-32: LGTM!Resources/Locale/ru-RU/_Arcane/entities/clothing/eyes/glasses.ftl (1)
1-2: LGTM!Resources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftl (1)
7-8: LGTM!Resources/Locale/ru-RU/_Arcane/entities/clothing/mask/gasmasks.ftl (1)
1-2: LGTM!Resources/Locale/ru-RU/_Arcane/entities/clothing/uniforms/jumpsuit.ftl (1)
7-8: LGTM!Resources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftl (1)
1-2: LGTM!Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml (1)
1-24: LGTM!
|
@coderabbitai сформируй ftl на английском и русском для loadout-group пилота, найдёшь в коммитах. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== _Arcane loadout_groups.yml (pilot section) ==="
grep -n -A5 "SecurityPilot" Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
echo ""
echo "=== full loadout_groups.yml for context ==="
cat -n Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
echo ""
echo "=== check id -> loc key convention (look at existing group, e.g. Patron) ==="
rg -n "id: Patron\b" Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml -A3
rg -n "loadout-group-patron" Resources/Locale -i
echo ""
echo "=== search for security-pilot loc keys already present ==="
rg -n "loadout-group-security-pilot|loadout-group-securitypilot|SecurityPilotJumpsuit|SecurityPilotHead|SecurityPilotPDA|SecurityPilotBelt" Resources/Locale -i
echo ""
echo "=== check how loadoutGroup id converts to loc key (search LoadoutGroupPrototype or usage code) ==="
grep -rn "loadout-group-" Resources/Locale/en-US/preferences/loadout-groups.ftl | grep -i pilot
grep -rn "loadout-group-" Resources/Locale/ru-RU/preferences/loadout-groups.ftl | grep -i pilot
echo ""
echo "=== check LoadoutGroupPrototype code for Name/loc convention ==="
rg -n "class LoadoutGroupPrototype" -A20 --include='*.cs' . 2>/dev/null || grep -rn "class LoadoutGroupPrototype" -A20 --include="*.cs" .Length of output: 3734
Готовые FTL (регистр Новый файл loadout-group-pilot-jumpsuit = Pilot jumpsuit
loadout-group-pilot-head = Pilot head
loadout-group-pilot-PDA = Pilot PDA
loadout-group-pilot-belt = Pilot beltНовый файл loadout-group-pilot-jumpsuit = Пилот, комбинезон
loadout-group-pilot-head = Пилот, голова
loadout-group-pilot-PDA = Пилот, ПДА
loadout-group-pilot-belt = Пилот, поясПуть — по аналогии с Без этих строк в интерфейсе выбора лоадаутов у игрока будет отображаться голый id ключа вместо названия. |
|
@coderabbitai
|
|
Oops, something went wrong! Please try again later. 🐰 💔 |
|
hell maann |
дублирую в надежде отсутствия ошибки |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== SecurityPilotIDCard yml ==="
cat -n Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml
echo "=== LockerPilotFilled yml ==="
cat -n Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
echo "=== search ent-SecurityPilotIDCard / ent-LockerPilotFilled in locale ==="
rg -n "ent-SecurityPilotIDCard|ent-LockerPilotFilled" Resources/Locale || echo "NOT FOUND"
echo "=== compare with other id cards for full name style ==="
rg -n "^\s*- type: entity" -A5 Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml
echo "=== PresetIdCard component definition ==="
grep -rn "class PresetIdCardComponent" --include="*.cs" -A20 .Length of output: 3463 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== PresetIdCard system ==="
fd -i "PresetIdCard" -e cs
f=$(fd -i "PresetIdCardSystem.cs" -e cs | head -1)
echo "File: $f"
cat -n "$f"
echo "=== IdCardSystem: name assignment on equip/spawn ==="
fd -i "IdCardSystem.cs" -e cs
grep -rn "class IdCardSystem" --include="*.cs" -A5
echo "=== search where StartingGear / loadout equips ID and sets name from mind/profile ==="
grep -rn "IdCard.*FullName\|FullName.*IdCard\|SetIdCardData\|SetupIdCard\|TryFindIdCard" --include="*.cs" . | head -40Length of output: 12192 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== search where ID card name is set from profile during spawn ==="
grep -rn "TryChangeFullName" --include="*.cs" . | head -20
echo "=== StationSpawningSystem: equip starting gear and set id name ==="
grep -rln "class StationSpawningSystem" --include="*.cs" .
grep -rn "IdCard\|FullName" Content.Server/Station/Systems/StationSpawningSystem.cs | head -30
echo "=== check EquipStartingGear function ==="
grep -rn "EquipStartingGear\|SetupStartingItemName\|SetOwnerName" --include="*.cs" . | head -20Length of output: 5288 🏁 Script executed: #!/bin/bash
set -euo pipefail
sed -n '200,310p' Content.Server/Station/Systems/StationSpawningSystem.csLength of output: 4491 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== human inventory template id/pda slots ==="
grep -n "id: id\|id: pda\|id: idcard" -A5 Resources/Prototypes/InventoryTemplates/human_inventory_template.yml
echo "=== security_pilot loadout equipment for PDA ==="
cat -n Resources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.yml
echo "=== loadout_groups.yml SecurityPilotPDA ==="
grep -n -A6 "SecurityPilotPDA" Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
echo "=== role_loadouts.yml JobSecurityPilot ==="
grep -n -A30 "id: JobSecurityPilot" Resources/Prototypes/Loadouts/role_loadouts.yml
echo "=== LoadoutPrototype equipment field mapping to slot (search LoadoutPrototype class) ==="
grep -rn "class LoadoutPrototype" --include="*.cs" -A30 .Length of output: 1113 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== human inventory template id/pda slots ==="
grep -n "id: id\b\|id: pocket\|- name: id\b" Resources/Prototypes/InventoryTemplates/human_inventory_template.yml || true
cat -n Resources/Prototypes/InventoryTemplates/human_inventory_template.yml | sed -n '1,80p'
echo "=== security_pilot loadout equipment for PDA ==="
cat -n Resources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.yml || true
echo "=== loadout_groups.yml SecurityPilotPDA ==="
grep -n -A6 "SecurityPilotPDA" Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml || true
echo "=== role_loadouts.yml JobSecurityPilot ==="
grep -n -A30 "id: JobSecurityPilot" Resources/Prototypes/Loadouts/role_loadouts.yml || true
echo "=== LoadoutPrototype equipment field mapping to slot ==="
grep -rn "class LoadoutPrototype" --include="*.cs" . || trueLength of output: 6199 🏁 Script executed: #!/bin/bash
set -uo pipefail
sed -n '80,140p' Resources/Prototypes/InventoryTemplates/human_inventory_template.ymlLength of output: 1839 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== PdaComponent definition ==="
grep -rn "class PdaComponent" --include="*.cs" -A40 .
echo "=== PDA system: initial ID card insertion logic ==="
grep -rn "IdCard\b" Content.Server/PDA/PdaSystem.cs | head -30
sed -n '1,60p' Content.Server/PDA/PdaSystem.csLength of output: 8415 🏁 Script executed: #!/bin/bash
set -uo pipefail
sed -n '150,205p' Content.Server/Station/Systems/StationSpawningSystem.csLength of output: 2863 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== job prototype id in security_pilot.yml ==="
grep -n "id: SecurityPilot\b" Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.yml
echo "=== LoadoutSystem.GetJobPrototype ==="
grep -rn "static.*GetJobPrototype" --include="*.cs" -A10 .
echo "=== full security_pilot.yml Jobs file for context ==="
cat -n Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.ymlLength of output: 3233 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== find security officer loadout ID group ==="
grep -n -A6 "SecurityID\b" Resources/Prototypes/Loadouts/loadout_groups.yml || true
grep -rn "equipment:" -A2 Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml | head -40
echo "=== compare loadout entries with 'id:' equipment key elsewhere (working examples) ==="
grep -rn "^\s*id:\s*\w" Resources/Prototypes/Loadouts/Jobs --include='*.yml' -B3 | grep -B3 "equipment" | head -60
grep -rln "id: .*ID\b" Resources/Prototypes/Loadouts/Jobs --include='*.yml' | head -10
echo "=== check RoleLoadout.SetDefault for auto-pick logic ==="
grep -rn "public void SetDefault" --include="*.cs" -A40 .Length of output: 7793 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== loadout_groups.yml Arcane pilot groups full ==="
cat -n Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
echo "=== compare to security officer ID group MinLimit (vanilla) ==="
grep -n -B2 -A6 "id: SecurityID\b" Resources/Prototypes/Loadouts/loadout_groups.yml || true
grep -n "SecurityPDA\|SecurityID" Resources/Prototypes/Loadouts/loadout_groups.yml -A6 -B2
echo "=== LoadoutGroupPrototype MinLimit default ==="
grep -rn "class LoadoutGroupPrototype" --include="*.cs" -A30 .Length of output: 5024 🏁 Script executed: #!/bin/bash
set -uo pipefail
grep -n -B3 -A6 "^\s*id: SecurityPDA$" Resources/Prototypes/Loadouts/Jobs/Security/security_officer.ymlLength of output: 498
Локализация: ID-карта и локер пилотаОба id литеральные ( # Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml
name: security pilot ID card # SecurityPilotIDCard
# Resources/Prototypes/_Arcane/Catalog/Fills/Lockers/security_pilot.yml
name: security pilot locker # LockerPilotFilledEn-US не нужен (текст уже в yml). Черновик ru-RU ( ent-SecurityPilotIDCard = ID-карта пилота СБ
ent-LockerPilotFilled = локер пилота СББаг с именем на ID-картеПроверил цепочку Сверил конфиг # _Arcane/Loadouts/Jobs/Security/security_pilot.yml
- type: loadout
id: PilotPDA
equipment:
id: PilotPDA # ровно как equipment: id: SecurityPDA у SecurityPDA-loadoutГруппа Вывод: конфигурация прототипов у пилота идентична рабочему vanilla-паттерну, регрессии в самом контенте PR не вижу. Баг, скорее всего, не в проверенных .yml. Гипотеза: в описании PR упомянут "возможный спавн через криокапсулу" — если пилот заспавнен не через штатный Уточни, пожалуйста:
С этим смогу точнее локализовать причину. ✏️ Learnings added
|
|
@coderabbitai |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== Current pilot job/loadout prototypes ==="
for f in \
Resources/Prototypes/_Arcane/Jobs/Security/security_pilot.yml \
Resources/Prototypes/_Arcane/Loadouts/Jobs/Security/security_pilot.yml \
Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml \
Resources/Prototypes/_Arcane/Entities/Objects/Devices/pda.yml \
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml
do
echo ""
echo "--- $f ---"
cat -n "$f"
done
echo ""
echo "=== Pilot-related locale presence ==="
rg -n "ent-PilotPDA|ent-SecurityPilotIDCard|ent-LockerPilotFilled|loadout-group-pilot-|job-name-pilot|job-description-pilot" Resources/Locale || true
echo ""
echo "=== Compare with working security officer PDA/loadout ==="
for f in \
Resources/Prototypes/Loadouts/Jobs/Security/security_officer.yml \
Resources/Prototypes/Jobs/Security/security_officer.yml \
Resources/Prototypes/Entities/Objects/Devices/pda.yml
do
[ -f "$f" ] || continue
echo ""
echo "--- $f ---"
rg -n -C3 "SecurityPDA|PresetIdCard|Pda:|id: SecurityOfficer|startingGear|job: SecurityOfficer|equipment:" "$f" || true
done
echo ""
echo "=== Where ID/PDA data is assigned during spawn ==="
rg -n -C4 "SetPdaAndIdCardData|SetIdCardName|TryChangeFullName|TryFindIdCard|PresetIdCard" Content.Server Content.Shared Content.Goobstation --glob '*.cs'
echo ""
echo "=== StationSpawningSystem relevant slice ==="
sed -n '140,280p' Content.Server/Station/Systems/StationSpawningSystem.cs
echo ""
echo "=== PdaSystem relevant slice ==="
sed -n '1,260p' Content.Server/PDA/PdaSystem.cs
echo ""
echo "=== PresetIdCard system relevant slice ==="
preset="$(fd -i 'PresetIdCardSystem.cs' Content.Server Content.Shared Content.Goobstation -t f | head -1)"
if [ -n "${preset:-}" ]; then
echo "--- $preset ---"
sed -n '1,260p' "$preset"
fiLength of output: 49357 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== JobSecurityPilot role loadout section ==="
rg -n -C20 "id: JobSecurityPilot|SecurityPilotPDA|SecurityPilotJumpsuit|SecurityPilotHead|SecurityPilotBelt" Resources/Prototypes/Loadouts/role_loadouts.yml Resources/Prototypes/_Arcane/Loadouts/loadout_groups.yml
echo ""
echo "=== StationSpawningSystem.SetPdaAndIdCardData full method ==="
sed -n '286,340p' Content.Server/Station/Systems/StationSpawningSystem.cs
echo ""
echo "=== SharedIdCardSystem.TryGetIdCard / TryFindIdCard relevant slice ==="
sed -n '167,240p' Content.Shared/Access/Systems/SharedIdCardSystem.cs
echo ""
echo "=== PdaSystem helper that extracts ID from PDA ==="
rg -n -C6 "TryGetIdCard|ContainedId|PdaComponent" Content.Server/PDA/PdaSystem.cs Content.Shared/Access/Systems/SharedIdCardSystem.cs
echo ""
echo "=== Search debug/admin equip path ==="
rg -n -C4 "debug.*equip|Equip.*debug|StartingGear|roleLoadout|loadout.*verb|equip.*verb|Job.*equip" Content.Server Content.Shared --glob '*.cs'
echo ""
echo "=== Pilot PDA and pilot ID ru-RU locale files ==="
for f in \
Resources/Locale/ru-RU/_Arcane/entities/objects/devices/pda.ftl \
Resources/Locale/ru-RU/_Arcane/entities/objects/misc/identification_cards.ftl \
Resources/Locale/ru-RU/_Arcane/entities/objects/misc/lockers.ftl
do
[ -f "$f" ] || continue
echo "--- $f ---"
cat -n "$f"
doneLength of output: 83180
1) ЛокализацияТут всё проще:
Значит английский текст, который ты видишь, почти наверняка идёт не от КПК, а от карты пилота. Не хватает ru-RU:ent-SecurityPilotIDCard = ID-карта пилота СБ
ent-LockerPilotFilled = локер пилота СБПо en-USОтдельный en-US FTL для них не обязателен, потому что сейчас английский уже задан прямо в YAML:
То есть:
2) Почему не записывается имя/фамилия на IDВот это уже кодовая проблема. Что видно по коду
public void SetPdaAndIdCardData(EntityUid entity, string characterName, JobPrototype jobPrototype, EntityUid? station)
{
if (!InventorySystem.TryGetSlotEntity(entity, "id", out var idUid))
return;
var cardId = idUid.Value;
if (TryComp<PdaComponent>(idUid, out var pdaComponent) && pdaComponent.ContainedId != null)
cardId = pdaComponent.ContainedId.Value;
if (!TryComp<IdCardComponent>(cardId, out var card))
return;
_cardSystem.TryChangeFullName(cardId, characterName, card);
...
}Слабое местоЭтот код:
То есть логика очень хрупкая. Почему баг бьётся и в roundstart, и в debug "экипировка"По выводу видно ещё одно важное место:
Итог: Debug "экипировка"С высокой вероятностью:
RoundstartТут вызов есть, но он может ломаться из-за порядка инициализации:
Что бы я правилНе контент, а именно код. Правильное направлениеНадо централизовать назначение имени/должности/иконки на ID и вызывать это:
Минимально здравый ориентирСейчас в А уже есть готовая универсальная логика:
Она умеет искать:
То есть ориентир такой:
ПрактическиСейчас у тебя есть:
Если хочешь, следующим сообщением я могу уже сформировать точный план правки по файлам, без воды:
(╥﹏╥) ✏️ Learnings added
|
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml (1)
3-13: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick winДобавьте
descriptionпрямо в прототип.Для
_Arcane-entity английский fallback должен жить в YAML, а не в отдельномen-USoverride;ru-RUфайл тоже не должен тянутьent-IDCardStandard.desc. Сейчас локализация расползлась по слоям. Based on learnings: custom_Arcaneprototypes should embedname/descriptiondirectly in YAML and only localizeru-RU.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml` around lines 3 - 13, The SecurityPilotIDCard prototype is missing an inline description, so the English fallback is still split into localization overrides. Add the `description` directly to the `_Arcane` YAML prototype alongside `name`, and keep localization limited to `ru-RU` only; update the `SecurityPilotIDCard` prototype so it no longer relies on `ent-IDCardStandard.desc` from a separate `en-US` override.Sources: Path instructions, Learnings
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Resources/Locale/en-US/_Arcane/loadouts/security_pilot.ftl`:
- Around line 1-4: Rename the localization ID in the loadout-group pilot entries
from the mixed-case PDA key to a kebab-case lowercase form, and update any
matching references so the Fluent keys stay consistent. Apply the same key
change in the ru-RU localization copy to keep both locales synchronized, using
the existing loadout-group-pilot-* symbols as the guide.
In
`@Resources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml`:
- Around line 90-91: The PresetIdCard entry points to a non-existent job name,
so fix the typo in the job field to use the valid Blueshield Officer identifier
referenced by PresetIdCard. Update the offending identification_cards prototype
entry so the preset resolves to an existing job definition and card
loading/issuance can work correctly.
---
Outside diff comments:
In `@Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml`:
- Around line 3-13: The SecurityPilotIDCard prototype is missing an inline
description, so the English fallback is still split into localization overrides.
Add the `description` directly to the `_Arcane` YAML prototype alongside `name`,
and keep localization limited to `ru-RU` only; update the `SecurityPilotIDCard`
prototype so it no longer relies on `ent-IDCardStandard.desc` from a separate
`en-US` override.
🪄 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 Plus
Run ID: 51378170-539b-431b-8823-b35dbce3c3de
📒 Files selected for processing (8)
Resources/Locale/en-US/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Locale/ru-RU/_Arcane/catalog/fills/lockers/pilot.ftlResources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftlResources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftlResources/Locale/ru-RU/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
📜 Review details
🧰 Additional context used
📓 Path-based instructions (8)
Resources/**/*.{yml,ftl,json}
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Resources/**/*.{yml,ftl,json}: Follow SS14 naming conventions when editing prototype, localization, and resource files
Follow SS14 upstream maintenance practices when editing resource files
Files:
Resources/Locale/ru-RU/_Arcane/catalog/fills/lockers/pilot.ftlResources/Locale/ru-RU/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftlResources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
Resources/**/*.ftl
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Follow SS14 localization string standards and formatting rules
Files:
Resources/Locale/ru-RU/_Arcane/catalog/fills/lockers/pilot.ftlResources/Locale/ru-RU/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftlResources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftl
Resources/**/*.{yml,ftl}
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Follow SS14 prototype locale integration rules and practices
Files:
Resources/Locale/ru-RU/_Arcane/catalog/fills/lockers/pilot.ftlResources/Locale/ru-RU/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftlResources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
**/*.ftl
📄 CodeRabbit inference engine (AGENTS.md)
Use specific
kebab-caselocalization IDs.
Files:
Resources/Locale/ru-RU/_Arcane/catalog/fills/lockers/pilot.ftlResources/Locale/ru-RU/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftlResources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftl
Resources/Locale/**/*.ftl
📄 CodeRabbit inference engine (AGENTS.md)
Resources/Locale/**/*.ftl: Add or update FTL entries underResources/Locale/, starting withen-US; add/update matchingru-RUentries when the same feature already maintains Russian locale or the change is Orion-facing and you can do so without guessing translations.
Use specifickebab-caselocalization IDs.
Files:
Resources/Locale/ru-RU/_Arcane/catalog/fills/lockers/pilot.ftlResources/Locale/ru-RU/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftlResources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftl
⚙️ CodeRabbit configuration file
Resources/Locale/**/*.ftl: Treat localization as mandatory:
- Every player-facing string should be localized.
- Prefer specific kebab-case keys.
- Flag raw strings in code or gameplay/resource changes that are missing locale updates.
- Check consistency when prototype names, descriptions, markings, or UI text changed.
Files:
Resources/Locale/ru-RU/_Arcane/catalog/fills/lockers/pilot.ftlResources/Locale/ru-RU/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftlResources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftlResources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftl
Resources/**/*.yml
📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)
Resources/**/*.yml: Follow SS14 ECS prototype patterns and conventions
Follow SS14 graphics generic visualizer appearance conventions and patterns
Resources/**/*.yml: Loadss14-naming-conventionsdocumentation for Resources work
Loadss14-ecs-prototypesdocumentation for Resources work
Loadss14-upstream-maintenancedocumentation for Resources work
Loadss14-prototypes-localedocumentation for Resources work
Loadss14-localization-stringsdocumentation for Resources work
Loadss14-sprite-overlays-shadersdocumentation when working with RSI metadata, textures, sprite layers, overlays, or shader resources
Validate YAML after editsRun
dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOptto validate YAML and resource edits.
Files:
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
**/*.{cs,xaml,yml,yaml}
📄 CodeRabbit inference engine (AGENTS.md)
If the task adds tests or you need to choose the right test layer, load skill
ss14-tests-authoring.
Files:
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
Resources/Prototypes/**/*.yml
📄 CodeRabbit inference engine (AGENTS.md)
Resources/Prototypes/**/*.yml: Put prototypes under the most specific existing subtree inResources/Prototypes/. If you introduce a new prototype parent tree, put parent prototypes inbase.ymland variants in sibling files.
Keep entity prototype field order astype,abstract,parent,id,categories,name,suffix,description,components. Do not insert blank lines between- type:entries inside acomponents:list. Separate prototype blocks with one blank line.
Prefersuffixfor spawn-menu distinctions instead of changing prototypename.
Files:
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
⚙️ CodeRabbit configuration file
Resources/Prototypes/**/*.yml: Review SS14 prototypes carefully:
- Use the narrowest existing subtree and avoid duplicating nearby prototype files or parent trees.
- Keep entity field order as: type, abstract, parent, id, categories, name, suffix, description, components.
- Prefer base.yml for parent trees and sibling files for variants.
- Do not add blank lines inside components lists.
- Call out broken inheritance, risky prototype ID changes, missing paired locale updates, and Appearance / GenericVisualizer mismatches.
Files:
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
🧠 Learnings (5)
📚 Learning: 2026-07-06T05:08:05.731Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-06T05:08:05.731Z
Learning: When reviewing ArcaneSS14 “_Arcane” prototype changes (especially entity id renames/swaps made via # Arcane-Edit in vanilla-mirrored YAML files), ensure locale/localization handling matches these rules:
1) If a renamed/swapped entity id occurs via a vanilla-mirrored YAML file but the entity is treated as “_Arcane”, add the new id’s localized strings under the corresponding “_Arcane” locale path (e.g., Resources/Locale/<lang>/ss14-ru/prototypes/_arcane/...). Treat this as an explicit exception to the YAML living outside the _Arcane folder.
2) If the old vanilla id is released and then reused by a new “_Arcane” entity, do not create duplicate locale entries for that id under _Arcane; the pre-existing vanilla-mirrored locale entries already apply.
3) For “_Arcane” entity .ftl files, do not reference a parent/base prototype’s locale key (e.g., a base description key) unless that base prototype is defined within the same mirrored YAML path. If the base is abstract or defined elsewhere (e.g....
Applied to files:
Resources/Locale/ru-RU/_Arcane/catalog/fills/lockers/pilot.ftlResources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftlResources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftlResources/Locale/en-US/_Arcane/loadouts/security_pilot.ftlResources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml
📚 Learning: 2026-06-29T05:34:31.137Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-station PR: 99
File: Resources/Prototypes/Entities/Clothing/Belt/belts.yml:973-974
Timestamp: 2026-06-29T05:34:31.137Z
Learning: В SS14 YAML-прототипах для компонента `Storage` поле `grid` задаёт **включительные** координаты прямоугольника. При подсчёте вместимости учитывайте оффсет-инклюзивность: прямоугольник `x1,y1,x2,y2` означает размеры `width = (x2 - x1 + 1)` и `height = (y2 - y1 + 1)`, а число ячеек `width * height`. Например, `0,0,0,0` = 1 ячейка, а `0,0,6,2` = (6-0+1)*(2-0+1)=7*3=21. При ревью файлов наподобие `Resources/Prototypes/Entities/Clothing/Belt/belts.yml` не интерпретируйте `x2/y2` как эксклюзивные (чтобы не ошибиться на 1 в ширине/высоте).
Applied to files:
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
📚 Learning: 2026-07-05T18:40:45.199Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-station PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-05T18:40:45.199Z
Learning: For ArcaneSS14/arcane-station custom `_Arcane`/`_Orion` entity prototypes under `Resources/Prototypes/_Arcane/` or `Resources/Prototypes/_Orion/`, embed `name` and `description` directly in the prototype `.yml` as the `en-US` fallback text (do not add a separate `en-US` locale override). Then localize only `ru-RU` by adding `ent-<EntityId>` and `ent-<EntityId>.desc` keys in `Resources/Locale/ru-RU/ss14-ru/prototypes/_arcane/...` or `.../_orion/...`, mirroring the entity `.yml` path. By contrast, vanilla-derived entities (e.g., a base `Medkit`) should omit `name`/`description` from the `.yml` entirely and instead provide both `en-US` and `ru-RU` localized `prototypes/...` entries in `Resources/Locale/{en-US,ru-RU}/ss14-ru/prototypes/...`.
Applied to files:
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml
📚 Learning: 2026-07-05T23:32:09.578Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-old PR: 117
File: Resources/Prototypes/_Arcane/Entities/Objects/Devices/pinpointer.yml:23-28
Timestamp: 2026-07-05T23:32:09.578Z
Learning: When editing ArcaneSS14/arcane-old prototype YAML related to pinpointers and tags:
- Pinpointer auto-locate vs manual retarget: `PinpointerComponent.Whitelist` controls auto-locate. If `Whitelist` is `null`, the pinpointer `Update` auto-locate logic returns early and will not search for a target; leaving it unset is safe from unintended auto-targeting. Manual retargeting during `OnAfterInteract` is governed by `RetargetingWhitelist`/`RetargetingBlacklist` (not `Whitelist`).
- Emag behavior: in `SharedPinpointerSystem.OnEmagged`, if `canRetarget: true` then `RetargetingWhitelist` is set to `null` (removing retarget restrictions, effectively allowing any retarget target); set `canEmag: false` to prevent emagging if needed.
- Tag prototype registration: any new `Tag` prototype IDs referenced in YAML (e.g., entities with `type: Tag` or `EntityWhitelist.tags`) must have a corresponding prototype declared as `- type: Tag` (commonly in `Resources/Prototypes/_Arcane/tags.yml` or an equivalent...
Applied to files:
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.yml
📚 Learning: 2026-07-07T17:55:50.395Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Content.Client/Chemistry/UI/ChemMasterWindow.xaml.cs:192-194
Timestamp: 2026-07-07T17:55:50.395Z
Learning: When reviewing ArcaneSS14/arcane-old changes related to `MobState` thresholds/visuals/actions, treat the `Critical` enum value as requiring explicit mappings (it no longer implicitly behaves as an alias of `SoftCritical`). If any YAML prototype `thresholds:` (for `MobThresholdsComponent.Thresholds`) uses the bare `Critical` key (e.g., `MobThresholdsComponent.Thresholds: { Critical: ... }` for entities like `MobMouseCancer`), ensure the prototype (or referenced config) provides corresponding explicit `StateAlertDict` entries and any required `MobStateActions.actions` and `DamageStateVisuals.states` mappings for `Critical`. Otherwise, review should expect failures because the default `StateAlertDict` in `MobThresholdsComponent.cs` typically maps only `Alive`, `SoftCritical`, `HardCritical`, and `Dead`—not `Critical`.
Applied to files:
Resources/Prototypes/_Arcane/Entities/Objects/Misc/identification_cards.ymlResources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
🔇 Additional comments (3)
Resources/Locale/ru-RU/ss14-ru/prototypes/_arcane/entities/objects/misc/identification_cards.ftl (1)
1-2: Дубликат:ent-IDCardStandard.descздесь лишний.См. комментарий к прототипу: для
_Arcaneнужен явный русский текст, а не внешний base-key.Sources: Path instructions, Learnings
Resources/Locale/ru-RU/_Arcane/loadouts/security_pilot.ftl (1)
1-4: Дубликат: ключ не kebab-case.Синхронизируйте
loadout-group-pilot-pda.Source: Coding guidelines
Resources/Locale/ru-RU/_Arcane/entities/structures/storage/closets/lockers/lockers.ftl (1)
1-2: 📐 Maintainability & Code QualityПроверьте
ent-LockerBase.desc.Если
LockerBaseопределён вне этого_Arcaneпути, описание нельзя наследовать через внешний locale-key; нужен явный текст. Based on learnings: do not reference a parent/base prototype’s locale key unless that base prototype is defined within the same mirrored YAML path.Sources: Path instructions, Learnings
















Описание PR
Простите я немного не в себе и мозги плавятся, слишком много файлов трогал за короткий промежуток.
Ну... Начнём...
Этоо.. Пилот СБ, я попросил спрайтеров сделать комбез/очки/противогаз/берет. Я добавил их. Иконку должности и ID карту я заспрайтил самостоятельно, КПК остался нетронутым.
Для пилота для мапперов сделал шкаф, и там есть запасные вещи с считай пилот-хайриском.
Лодаут есть.. Спавн полагаю будет через криокапсулы (хотя я не уверен, я парент брал от офицера. может повезёт?)
Ожидаются:
Баги:
Медиа
Тип PR