Skip to content

[ADD] Новые эмоуты для панели. Небольшой рефактор панели#76

Merged
Vecortys merged 5 commits into
ArcaneSS14:masterfrom
MataVsn:sex
Jun 22, 2026
Merged

[ADD] Новые эмоуты для панели. Небольшой рефактор панели#76
Vecortys merged 5 commits into
ArcaneSS14:masterfrom
MataVsn:sex

Conversation

@MataVsn

@MataVsn MataVsn commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Описание PR

Новые тэги и новые требования к панели. Тэги на секс игрушки на будущее. Проверка на свободный слот в инвентаре, прим, босые ноги. Категория дружбы была удалена, всё раскидано по категориям. Панель теперь доступна всем, ЕРП интеракции не показываются при ERP - No

anus
AnalLick2 Глубоко вылизать анус
AnalFingering2 Двумя пальцами в анус
ToyButt Использовать игрушку в попе
boobs.yml
BoobsSuck Сосать сосок

butt
ButtMassage Массировать попку
ButtTail Гладить попу хвостом
HandsOnButt Схватить за попку
KissButt Поцеловать попку
SlapButt Шлёпнуть по попе
HornsAssF Водить рогом по попе

ears
BiteEarsHuman Укусить ухо
EarsKiss Поцеловать в ухо
PatEars Погладить ушки
PatEarsHuman Потеребить уши

face
CheeksKiss Поцеловать в щёку
CheeksKissBoth Поцеловать в обе щёки
CheeksPat Похлопать по щекам
CheeksPress Сжать щёки
GentleKiss Нежный поцелуй
KissLips Страстный поцелуй
FaceRubCat Потереться мордочкой о лицо
FaceSitting Сесть лицом
FaceDickSlap Шлёпнуть членом по лицу
LegsSqueezeface Сдавить лицо ляжками
Mewing Замяукать в лицо
friendship.yml
FriendlyFlyingKiss Послать воздушный поцелуй
FriendlyNoseBoop Дать по носику
FriendlyTailPull Потянуть за хвост
KissHand Поцеловать руку
PatShoulder Похлопать по плечу
PetHead Погладить по голове
PlayfulNibble Игриво укусить
HornsPat Погладить рога
Kitty Потереться мордочкой

mouth
FeetMouth Футфетиш

neck
NuzzleNeck Уткнуться в шею
NuzzleNeckVulpa Ткнуться мордочкой в шею
BlowSlap Дать пощёчину

penis
CockBlowjob Сделать минет
CockNearAssTail Водить членом по попе с хвостом
HairFaceFuck Трахать в рот держа за волосы
LegsCockFuckTail Трахать ляжками с хвостом
HornsBlowjobF Лизать рог
pussy.yml
PussyTouch Потрогать вагину
PussyTailFuck Трахать вагину хвостом
ToyPussy Использовать игрушку

Медиа

Тип PR

  • Feature
  • Fix
  • Tweak
  • Balance
  • Refactor
  • Port
  • Translate
  • Resprite

@coderabbitai

coderabbitai Bot commented Jun 21, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@MataVsn, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 54 minutes and 15 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based credits.

🚦 How do rate limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan refill rate.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, the refill rate gradually slows as usage increases. The highest same-day bursts are limited more strictly.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2187863d-1765-4cf8-8e53-09a2f0ccea8e

📥 Commits

Reviewing files that changed from the base of the PR and between c3c12ca and d7b25dc.

📒 Files selected for processing (3)
  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs

Walkthrough

Добавлена тег-based фильтрация ERP-взаимодействий (RequiresERP) на клиенте (ErpPanelWindow) и сервере (ErpPanelSystem) с опросом ErpStatusComponent. Введены два новых типа требований (HeldItemRequirement, EmptyInventorySlotRequirement). Добавлены 5 новых категорий панели, 4 тега предметов и ~50 новых/обновлённых YAML-прототипов взаимодействий.

Changes

ERP Panel: RequiresERP-фильтрация и новые взаимодействия

Layer / File(s) Summary
Контракт PanelInteractionPrototype.Tags и новые требования
Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs, Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs, Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
PanelInteractionPrototype получает поле Tags: HashSet<string>; добавлены HeldItemRequirement (проверяет теги держимых предметов через SharedHandsSystem/TagSystem) и EmptyInventorySlotRequirement (проверяет, что слот инвентаря пуст).
Серверная фильтрация RequiresERP и рефакторинг IsValidUI
Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
Из IsValidUI удалена проверка ErpPreference.No цели. Добавлены константа ErpInteractionTag и хелперы IsErpInteraction/CanUseErp — пер-взаимодействия проверка тега перед кулдауном.
Клиентская фильтрация RequiresERP
Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
В CheckRequirements добавлена ранняя ветка: если взаимодействие помечено RequiresERP и CanUseErp возвращает false, взаимодействие скрывается.
Новые категории панели и теги предметов
Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml, Resources/Prototypes/_Arcane/tags.yml
Удалена категория Friendship; добавлены Head, Hands, Back, Shoulders, Feet. Добавлены теги SexToyAnal, SexToyDildo, SexToyVibrator, SexToyFleshlight.
Проставление RequiresERP и переназначение категорий у существующих прототипов
Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml, boobs.yml, butt.yml, neck.yml, penis.yml, pussy.yml, friendship.yml
Существующим взаимодействиям добавлен тег RequiresERP; Handshake, FingerTap, TailPat, TailHug, HighFive, ShoulderMassage переведены в новые категории.
Новые прототипы взаимодействий
Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml, boobs.yml, butt.yml, ears.yml, face.yml, friendship.yml, mouth.yml, neck.yml, penis.yml, pussy.yml
Добавлено ~50 новых panelInteraction с RequiresERP, sounds, messages, icon, требованиями по видам (SpeciesRequirement), органам (EroticOrganRequirement) и предметам (HeldItemRequirement/EmptyInventorySlotRequirement).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • ArcaneSS14/arcane-station#9: Вводит ErpStatusComponent.Preference и ErpStatusSystem, от которых прямо зависит новая логика CanUseErp в этом PR.
  • ArcaneSS14/arcane-station#10: Исходная реализация ERP-панели; данный PR надстраивает фильтрацию по Tags/RequiresERP поверх неё.

Suggested reviewers

  • Vecortys
🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Заголовок описывает основные изменения PR: добавление новых эмоутов и рефактор панели. Соответствует содержимому changeset.
Description check ✅ Passed Описание релевантно changeset: перечисляет новые интеракции, описывает изменения логики (теги, требования, доступность панели). Достаточно детально для понимания изменений.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml (1)

1-23: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Категория Feet в файле mouth.yml - ошибка организации.

Взаимодействие FeetMouth имеет категорию Feet, но находится в файле mouth.yml. Либо переместить в feet.yml, либо исправить категорию на Mouth (если она должна быть по смыслу).

🤖 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/Interactions/ERP/mouth.yml` around lines 1 - 23,
The FeetMouth interaction has a category field set to "Feet" but is located in
the mouth.yml file, creating an organizational inconsistency. Either move the
entire FeetMouth panel interaction definition to the feet.yml file to match its
category, or change the category field from "Feet" to "Mouth" to align with the
current file location. Ensure that the file organization and category field
remain consistent with the codebase convention.
Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml (1)

123-138: ⚠️ Potential issue | 🟠 Major

BlowSlap: перемещение в face.yml и добавление RequiresERP.

  1. BlowSlap с category: Face находится в neck.yml вместо face.yml — файлы организованы по целевой части тела, переместить в соответствующий файл.
  2. BlowSlap не имеет тега RequiresERP, в то время как другие ERP-взаимодействия в neck.yml его содержат — добавить:
tags:
- RequiresERP
🤖 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/Interactions/ERP/neck.yml` around lines 123 -
138, The BlowSlap interaction has category Face but is defined in neck.yml when
it should be in face.yml based on the file organization by target body part.
Move the entire BlowSlap panelInteraction block (including all properties from
type through icon) from neck.yml to the appropriate location in face.yml.
Additionally, add a tags section with the RequiresERP tag to the BlowSlap
interaction definition to match the pattern used by other ERP interactions in
neck.yml, placing it after the id field and before category for consistency.
🤖 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 `@Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs`:
- Around line 23-24: The constant ErpInteractionTag defined in ErpPanelSystem.cs
is duplicated in the client-side ErpPanelWindow.xaml.cs file, and the helper
methods IsErpInteraction and CanUseErp are also duplicated across server and
client implementations. To eliminate this duplication, move the
ErpInteractionTag constant and the IsErpInteraction and CanUseErp helper methods
to a shared location in the Content.Shared folder (either within
ErpPanelPrototypes.cs or a new dedicated static class). Then update both the
server ErpPanelSystem.cs and client ErpPanelWindow.xaml.cs to reference these
shared implementations instead of maintaining duplicate code.

In `@Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml`:
- Around line 113-264: The nine new panel interactions (FriendlyFlyingKiss,
FriendlyNoseBoop, FriendlyTailPull, KissHand, PatShoulder, PetHead,
PlayfulNibble, HornsPat, and Kitty) are missing the range property that all
other existing interactions in this file explicitly define. Add range: 1 to each
of these new interactions to maintain consistency with the established pattern
and ensure they use the correct interaction distance instead of the default 1.5f
value. Place this property after the icon field in each interaction definition.

In `@Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml`:
- Around line 295-325: The panelInteraction definitions in the penis.yml file
reference icon files that do not exist in the _Arcane/Interface/ErpPanel/
directory. For each interaction that has an icon property (such as the icon path
_Arcane/Interface/ErpPanel/legs_cock_fuckt_tail.png in the LegsCockFuckTail
interaction), either create the corresponding PNG image files in the referenced
directory or update the icon paths to point to existing image files that are
available in your resources.

---

Outside diff comments:
In `@Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml`:
- Around line 1-23: The FeetMouth interaction has a category field set to "Feet"
but is located in the mouth.yml file, creating an organizational inconsistency.
Either move the entire FeetMouth panel interaction definition to the feet.yml
file to match its category, or change the category field from "Feet" to "Mouth"
to align with the current file location. Ensure that the file organization and
category field remain consistent with the codebase convention.

In `@Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml`:
- Around line 123-138: The BlowSlap interaction has category Face but is defined
in neck.yml when it should be in face.yml based on the file organization by
target body part. Move the entire BlowSlap panelInteraction block (including all
properties from type through icon) from neck.yml to the appropriate location in
face.yml. Additionally, add a tags section with the RequiresERP tag to the
BlowSlap interaction definition to match the pattern used by other ERP
interactions in neck.yml, placing it after the id field and before category for
consistency.
🪄 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: 28cb575f-a077-43e9-a303-e6bf4d15ac49

📥 Commits

Reviewing files that changed from the base of the PR and between 5a46255 and 1fde8f8.

📒 Files selected for processing (17)
  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/face.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml
  • Resources/Prototypes/_Arcane/tags.yml
📜 Review details
🧰 Additional context used
📓 Path-based instructions (19)
**/*.cs

📄 CodeRabbit inference engine (GEMINI.md)

**/*.cs: Keep components data-only and behavior in systems
Use On... -> Try... -> Can... -> Do... pattern for gameplay actions
Prefer Entity<T?>, ProtoId<T>, EntProtoId, and localized strings for type usage

**/*.cs: When writing or editing C# gameplay code, load skills: ss14-ecs-components, ss14-ecs-entities, ss14-ecs-prototypes, ss14-ecs-systems, ss14-events, and ss14-prediction.
If the C# change is large or the task needs reviewable notes, load skill ss14-documentation-writing.
If the code touches hot paths, Update(), or frequently raised events, load skill ss14-standard-optimizations.
If the task adds or changes player-facing text, load skills ss14-localization-strings and ss14-localization-code when the change also touches Loc.GetString(...), LocId, popup text, or localized component fields.
If the task touches network events, NetEntity, replicated state routing, or shared/server/client message flow, load skill ss14-netcode.
If the task touches Appearance, GenericVisualizer, visual state enums, or sprite-layer toggles, load skill ss14-graphics-generic-visualizer-appearance.
If the task touches sprites, RSI metadata, overlays, shaders, or custom client visual effects, load skill ss14-sprite-overlays-shaders.
If the task is about learning or explaining SS14 architecture, first features, or where code belongs, load skills ss14-prototype-basics, ss14-ecs-basics, and ss14-client-server-shared.
If the task is about bug hunting, VV, logs, breakpoints, or runtime inspection, load skills ss14-debugging-workflow and ss14-common-api-patterns.
If the task touches common gameplay helpers such as entity-system methods, spawning, prototypes, audio, popups, or random, load skills ss14-common-api-patterns and ss14-audio when the work changes audio routing, sound assets, sound collections, or predicted sound feedback.
If the task ports code or assets from another repository, or needs license or attribution guidance,...

Files:

  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
Content.Shared/**

📄 CodeRabbit inference engine (Content.Shared/AGENTS.md)

Content.Shared/**: Load ss14-naming-conventions agent notes for Content.Shared work
Load ss14-ecs-prototypes, ss14-ecs-components, ss14-ecs-entities, and ss14-ecs-systems agent notes for Content.Shared work
Load ss14-upstream-maintenance agent notes for Content.Shared work
Load ss14-events agent notes for Content.Shared work
Load ss14-prediction and ss14-netcode agent notes for Content.Shared work
Load ss14-localization-code agent notes when shared code emits player text or stores LocId
Load ss14-graphics-generic-visualizer-appearance agent notes when shared gameplay state drives Appearance or GenericVisualizer
Load ss14-audio agent notes when shared components or events carry sound specifiers or predicted audio intent
Load ss14-atmos agent notes when shared components, UI messages, or enums belong to atmos features
Load ss14-transform-physics agent notes for shared coordinates, movement, collision, anchoring, or physics contracts
Load ss14-pvs agent notes for PVS-sensitive shared/network contracts
Load ss14-npc-ai agent notes for shared NPC, HTN, steering, pathfinding, or debug contracts
Shared code must own replicated state, shared events, and prediction-aware logic without adding direct client-only or server-only dependencies

Files:

  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
+(Content.Shared|Content.Server|Content.Client|Content.Goobstation.Shared|Content.Goobstation.Server|Content.Goobstation.Client|Content.Goobstation.Common|Content.Goobstation.Maths|Content.Goobstation.UIKit|Content.Server.Database|Content.Shared.Database|Content.Tests|Content.IntegrationTests)/**/*.cs

📄 CodeRabbit inference engine (.cursor/rules/ss14-csharp.mdc)

+(Content.Shared|Content.Server|Content.Client|Content.Goobstation.Shared|Content.Goobstation.Server|Content.Goobstation.Client|Content.Goobstation.Common|Content.Goobstation.Maths|Content.Goobstation.UIKit|Content.Server.Database|Content.Shared.Database|Content.Tests|Content.IntegrationTests)/**/*.cs: Apply C# ECS style rules from ss14-interaction-flow.md
Apply ss14-csharp-style.md rules for C# code formatting and conventions
Follow ss14-naming-conventions for variable, method, and type naming in C# gameplay code

Files:

  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
{Content.Shared,Content.Goobstation.Shared,Content.Goobstation.Common,Content.Goobstation.Maths,Content.Shared.Database}/**/*.cs

📄 CodeRabbit inference engine (.cursor/rules/ss14-shared.mdc)

{Content.Shared,Content.Goobstation.Shared,Content.Goobstation.Common,Content.Goobstation.Maths,Content.Shared.Database}/**/*.cs: Apply SS14 C# style guidelines from @.agents/rules/ss14-csharp-style.md
Follow SS14 ECS component patterns as defined in @.agents/skills/ss14-ecs-components/SKILL.md
Follow SS14 ECS entity patterns as defined in @.agents/skills/ss14-ecs-entities/SKILL.md
Follow SS14 ECS system patterns as defined in @.agents/skills/ss14-ecs-systems/SKILL.md
Follow SS14 event patterns as defined in @.agents/skills/ss14-events/SKILL.md
Follow SS14 prediction-aware gameplay code patterns as defined in @.agents/skills/ss14-prediction/SKILL.md
Follow SS14 netcode patterns as defined in @.agents/skills/ss14-netcode/SKILL.md
Follow SS14 localization identifier patterns as defined in @.agents/skills/ss14-localization-code/SKILL.md

Files:

  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
**/*.{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:

  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml
  • Resources/Prototypes/_Arcane/tags.yml
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
  • Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml
  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
  • Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/face.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml
  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
{Content.Shared,Content.Goobstation.Shared}/**/*.cs

📄 CodeRabbit inference engine (AGENTS.md)

{Content.Shared,Content.Goobstation.Shared}/**/*.cs: Put main shared data, shared events, networked state, and predicted logic in Content.Shared/; use Content.Goobstation.Shared/ only for code that belongs to that existing module path.
Do not make shared projects depend on client-only or server-only projects.
Predicted systems and their relevant components belong in Content.Shared/. Shared predicted components should use NetworkedComponent, AutoGenerateComponentState, and AutoNetworkedField where appropriate.

Files:

  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
Content.Shared/**/*.cs

⚙️ CodeRabbit configuration file

Content.Shared/**/*.cs: Review Content.Shared as shared gameplay and prediction code:

  • Shared owns replicated state, shared events, prediction, and data both client and server must understand.
  • Flag client-only or server-only dependencies in Shared.
  • For local-player actions, verify prediction support instead of accepting delayed server-only UX.
  • When state is networked, check NetworkedComponent, AutoGenerateComponentState, AutoNetworkedField, and Dirty/DirtyField usage.
  • Prefer entity-system APIs and Entity<T?> / Resolve patterns over ad-hoc tuples or old-style access.
  • Flag EntityUid.Invalid used as a "missing" sentinel.

Files:

  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
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/Interactions/ERP/mouth.yml
  • Resources/Prototypes/_Arcane/tags.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/face.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/categories.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: Load ss14-naming-conventions documentation for Resources work
Load ss14-ecs-prototypes documentation for Resources work
Load ss14-upstream-maintenance documentation for Resources work
Load ss14-prototypes-locale documentation for Resources work
Load ss14-localization-strings documentation for Resources work
Load ss14-sprite-overlays-shaders documentation when working with RSI metadata, textures, sprite layers, overlays, or shader resources
Validate YAML after edits

Run dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOpt to validate YAML and resource edits.

Files:

  • Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml
  • Resources/Prototypes/_Arcane/tags.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/face.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml
Resources/**/*.{yml,ftl}

📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)

Follow SS14 prototype locale integration rules and practices

Files:

  • Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml
  • Resources/Prototypes/_Arcane/tags.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/face.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml
Resources/Prototypes/**/*.yml

📄 CodeRabbit inference engine (AGENTS.md)

Resources/Prototypes/**/*.yml: Put prototypes under the most specific existing subtree in Resources/Prototypes/. If you introduce a new prototype parent tree, put parent prototypes in base.yml and variants in sibling files.
Keep entity prototype field order as type, abstract, parent, id, categories, name, suffix, description, components. Do not insert blank lines between - type: entries inside a components: list. Separate prototype blocks with one blank line.
Prefer suffix for spawn-menu distinctions instead of changing prototype name.

Files:

  • Resources/Prototypes/_Arcane/Interactions/ERP/mouth.yml
  • Resources/Prototypes/_Arcane/tags.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/face.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/categories.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/Interactions/ERP/mouth.yml
  • Resources/Prototypes/_Arcane/tags.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/face.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml
  • Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml
{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.{cs,xaml}

📄 CodeRabbit inference engine (.cursor/rules/ss14-ui.mdc)

{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.{cs,xaml}: Follow SS14 naming conventions when editing UI, XAML, and client-state files
Maintain upstream compatibility when editing SS14 client code
Follow SS14 UI and BUI conventions when implementing UI components and behavior-driven user interfaces

Files:

  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.cs

📄 CodeRabbit inference engine (.cursor/rules/ss14-ui.mdc)

{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.cs: Apply SS14 prediction patterns when working with predicted client-state in SS14 client code
Follow SS14 localization code practices in UI and client-state implementations

Put main client-only visuals, overlays, XAML, and BUI front-ends in Content.Client/; use Content.Goobstation.Client/ or Content.Goobstation.UIKit/ only when matching existing references and ownership.

Files:

  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.{xaml,xaml.cs}

📄 CodeRabbit inference engine (.cursor/rules/ss14-ui.mdc)

Use proper localization strings in SS14 client XAML and UI code

Files:

  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
**/*.xaml{,.cs}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.xaml{,.cs}: If the task edits XAML windows, controls, code-behind, or client UI layout, load skill ss14-ui-xaml.
Keep .xaml paired with .xaml.cs and the relevant BUI/client system.

Files:

  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
Content.Client/**/*.cs

⚙️ CodeRabbit configuration file

Content.Client/**/*.cs: Review Content.Client for presentation-only behavior:

  • Keep authority out of the client.
  • Prefer reading already-networked component state instead of duplicating BUI state unless the pattern requires it.
  • Flag missing localization for player-visible text.
  • Prefer nearby established UI and visual patterns over custom one-off structures.

Files:

  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
{Content.Server,Content.Goobstation.Server}/**/*.cs

📄 CodeRabbit inference engine (AGENTS.md)

Put main server-only authority and non-predicted server simulation in Content.Server/; use Content.Goobstation.Server/ for features already rooted in that module.

Files:

  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
**/*System.cs

📄 CodeRabbit inference engine (AGENTS.md)

Public entity-system APIs that operate on entities should usually take Entity<T?> or EntityUid first and call Resolve(...) early.

Files:

  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
Content.Server/**/*.cs

⚙️ CodeRabbit configuration file

Content.Server/**/*.cs: Review Content.Server for authority and fork-maintenance discipline:

  • Server owns authority, persistence, round logic, and non-predicted side effects.
  • If a player action should feel immediate, call out missing shared prediction rather than accepting a server-only path.
  • Keep upstream diffs narrow and prefer fork-scoped extensions over broad edits to upstream behavior.
  • When player-visible behavior changes, check whether matching prototype and locale updates are missing.

Files:

  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
🧠 Learnings (1)
📚 Learning: 2026-06-04T21:17:36.815Z
Learnt from: MataVsn
Repo: ArcaneSS14/arcane-station PR: 31
File: Content.Client/Fluids/PuddleSystem.cs:41-41
Timestamp: 2026-06-04T21:17:36.815Z
Learning: In this repo (ArcaneSS14/arcane-station), reviewers should use the Arcane inline fork-edit marker naming for single-line edits outside `_Arcane` paths: prefer `// Arcane` or `// Arcane-edit` and do not use `// Orion` for this purpose. Repo-specific AGENTS guidance that mentions `// Orion` does not apply to these single-line changes; only `_Arcane` paths follow the applicable different convention.

Applied to files:

  • Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs
  • Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs
  • Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs
  • Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs
  • Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs
🔇 Additional comments (21)
Content.Shared/_Arcane/ErpPanel/ErpPanelPrototypes.cs (1)

32-34: LGTM!

Content.Shared/_Arcane/ErpPanel/Requirements/HeldItemRequirement.cs (1)

1-27: LGTM!

Content.Shared/_Arcane/ErpPanel/Requirements/EmptyInventorySlotRequirement.cs (1)

1-21: LGTM!

Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs (2)

235-238: LGTM!


261-287: LGTM!

Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs (1)

21-22: LGTM!

Also applies to: 336-338, 363-381

Resources/Prototypes/_Arcane/Interactions/ERP/ears.yml (1)

17-93: LGTM!

Resources/Prototypes/_Arcane/Interactions/ERP/face.yml (1)

1-220: LGTM!

Resources/Prototypes/_Arcane/tags.yml (1)

52-62: LGTM!

Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml (1)

20-193: LGTM!

Also applies to: 199-294, 326-347

Resources/Prototypes/_Arcane/Interactions/ERP/pussy.yml (1)

24-167: LGTM!

Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml (1)

3-3: LGTM!

Also applies to: 18-18, 37-37, 64-64, 98-98

Resources/Prototypes/_Arcane/Interactions/ERP/categories.yml (1)

25-44: Удаление категории Friendship очищено корректно. Проверка подтверждает отсутствие ссылок на удалённую категорию — все panelInteraction записи ссылаются на существующие категории из categories.yml.

Resources/Prototypes/_Arcane/Interactions/ERP/anus.yml (3)

20-21: LGTM!

Also applies to: 47-48, 69-70, 95-96


110-156: LGTM!


157-186: LGTM!

Resources/Prototypes/_Arcane/Interactions/ERP/boobs.yml (1)

19-20: LGTM!

Also applies to: 41-42, 68-69, 95-96, 124-125, 147-148, 179-210

Resources/Prototypes/_Arcane/Interactions/ERP/butt.yml (1)

18-24: LGTM!

Also applies to: 25-44, 45-72, 73-91, 92-111, 112-133, 134-157

Resources/Prototypes/_Arcane/Interactions/ERP/neck.yml (3)

15-16: LGTM!

Also applies to: 35-36, 55-56


81-96: LGTM!

Also applies to: 98-122


60-60: Категория Shoulders существует, но ShoulderMassage — новая сущность, не переназначение.

Категория Shoulders корректно создана в categories.yml. Однако файл был добавлен впервые — ShoulderMassage изначально получил категорию Shoulders, а не был переназначен из Neck. Другие взаимодействия в файле (BiteNeck, LickNeck, KissNeck) корректно используют категорию Neck.

			> Likely an incorrect or invalid review comment.

Comment on lines +23 to +24
private const string ErpInteractionTag = "RequiresERP";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial | ⚡ Quick win

Дублирование константы с клиентом.

Константа ErpInteractionTag продублирована в Content.Client/_Arcane/ErpPanel/ErpPanelWindow.xaml.cs:21. Хелперы IsErpInteraction и CanUseErp тоже идентичны на сервере и клиенте (строки 270-286 здесь, 364-381 в клиенте).

Рассмотри вынос в Shared для переиспользования:

  • Константа → ErpPanelPrototypes.cs или отдельный статический класс
  • Хелперы → extension methods или shared system
🤖 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 `@Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs` around lines 23 - 24, The
constant ErpInteractionTag defined in ErpPanelSystem.cs is duplicated in the
client-side ErpPanelWindow.xaml.cs file, and the helper methods IsErpInteraction
and CanUseErp are also duplicated across server and client implementations. To
eliminate this duplication, move the ErpInteractionTag constant and the
IsErpInteraction and CanUseErp helper methods to a shared location in the
Content.Shared folder (either within ErpPanelPrototypes.cs or a new dedicated
static class). Then update both the server ErpPanelSystem.cs and client
ErpPanelWindow.xaml.cs to reference these shared implementations instead of
maintaining duplicate code.

Comment thread Resources/Prototypes/_Arcane/Interactions/ERP/friendship.yml
Comment thread Resources/Prototypes/_Arcane/Interactions/ERP/penis.yml
Comment thread Content.Server/_Arcane/ErpPanel/ErpPanelSystem.cs Outdated
@Vecortys

Copy link
Copy Markdown
Collaborator

На тест можно забить, я пофиксил в мастере

@MataVsn MataVsn requested a review from Vecortys June 22, 2026 07:45
@Vecortys Vecortys merged commit f2f13d8 into ArcaneSS14:master Jun 22, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants