Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature] Syringe gun! #1018

Merged
merged 3 commits into from
Jan 25, 2025
Merged

[Feature] Syringe gun! #1018

merged 3 commits into from
Jan 25, 2025

Conversation

Roudenn
Copy link
Collaborator

@Roudenn Roudenn commented Jan 25, 2025

Порт шприцемёта с Goobstation
Goob-Station/Goob-Station#967

Summary by CodeRabbit

Примечания к выпуску

  • Новые возможности

    • Добавлен новый тип оружия: шприц-пистолет с различными модификациями (обычный, быстрый, дротиковый)
    • Введена новая технология исследований "Медицинская защита"
    • Расширены возможности инъекций для шприцев
    • Добавлены новые предметы в каталог: "Шприц-пистолет дротиковый"
  • Улучшения

    • Обновлены рецепты для лабораторных станков
    • Добавлены новые предметы в инвентарь начальника медицинской службы
    • Расширена локализация для различных игровых сущностей
    • Улучшено взаимодействие шприцев с броней
  • Исправления

    • Оптимизирована система инъекций
    • Улучшена логика взаимодействия шприцев с бронированными целями
    • Улучшена обработка ошибок в системе стрельбы

gluesniffler and others added 2 commits January 25, 2025 12:06
syringe ops real (Rxup#967)

* ebin syringeops

* its fucking real

* 1984

* Update BaseSolutionInjectOnEventComponent.cs

minor spelling mistake webeditops
@Roudenn Roudenn requested a review from Rxup as a code owner January 25, 2025 09:24
Copy link
Contributor

coderabbitai bot commented Jan 25, 2025

Caution

Review failed

The pull request is closed.

"""

Walkthrough

Этот набор изменений добавляет новую функциональность, связанную с системой шприц-пистолетов. Основные нововведения включают создание новых компонентов, систем и сущностей для оружия, использующего шприцы в качестве боеприпасов. Изменения затрагивают механику инъекций, возможность прокалывания брони и добавляют новые типы оружия, такие как обычный шприц-пистолет, быстрый шприц-пистолет и дротиковый шприц-пистолет.

Changes

Файл Изменения
Content.Server/Chemistry/Components/BaseSolutionInjectOnEventComponent.cs Добавлен новый булевый параметр Shot
Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs Обновлена логика инъекций и внедрения, добавлен контроль прокалывания брони для шприцев
Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs Удалена подписка на событие инициализации карты
Content.Server/Weapons/Ranged/Systems/GunSystem.cs Модификации в системе стрельбы, улучшена обработка событий
Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs Добавлена новая система для шприц-пистолета
Content.Shared/_Goobstation/Weapons/Ranged/SyringeGunComponent.cs Добавлен новый компонент шприц-пистолета с параметром PierceArmor
Resources/Locale/en-US/store/uplink-catalog.ftl Добавлен новый предмет "Dart Syringe Gun"
Resources/Locale/ru-RU/backmen/entities/syringe_gun.ftl Добавлены новые локализации для различных типов шприц-пистолетов
Resources/Locale/ru-RU/backmen/research/technologies.ftl Добавлен новый элемент для технологии медицинской защиты
Resources/Prototypes/Catalog/Fills/Lockers/heads.yml Добавлены новые предметы в ящики для главного медицинского офицера
Resources/Prototypes/Entities/Objects/Specific/chemistry.yml Добавлены новые компоненты для шприцев, позволяющие им действовать как снаряды
Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml Добавлены новые сущности шприц-пистолетов с уникальными характеристиками
Resources/Prototypes/Research/civilianservices.yml Добавлен новый элемент технологии "MedicalDefense"
Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml Обновлены требования и стартовое снаряжение для главного медицинского офицера
Resources/Prototypes/_Backmen/Catalog/uplink_catalog.yml Добавлен новый продукт "UplinkDartSyringeGun", удалён "UplinkCorpiumSyringe"
Resources/Prototypes/_Goobstation/Catalog/Fills/Belt/belts.yml Добавлен новый пояс для главного медицинского офицера
Resources/Prototypes/_Goobstation/Catalog/Fills/Boxes/medical.yml Добавлен новый "pax syringe box" для хранения шприцев
Resources/Prototypes/_Goobstation/Entities/Clothing/Belt/belts.yml Добавлен новый стильный пояс для главного медицинского офицера
Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Medical/healing.yml Добавлен новый медицинский шприц SyringePax
Resources/Textures/_Goobstation/Clothing/Belt/cmowebbing.rsi/meta.json Добавлен новый файл метаданных для текстуры пояса
Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json Добавлен новый файл метаданных для шприц-пистолета

Poem

🐰 Шприц летит, как стрела,
Точно метит сквозь броню!
Медицина – наша сила,
Наука бьёт наповал!
Пусть дротик знания несёт! 🔬
"""


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 34dbf79 and e60aec8.

📒 Files selected for processing (1)
  • Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs (1 hunks)

Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR. (Beta)
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added S: Untriaged size/M Changes: Sprites Should be reviewed or fixed by people who are knowledgeable with spriting or visual design. Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation and removed size/M labels Jan 25, 2025
Copy link
Contributor

github-actions bot commented Jan 25, 2025

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

Resources/Textures/_Goobstation/Clothing/Belt/cmowebbing.rsi

State Old New Status
equipped-BELT Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi

State Old New Status
dart-syringe-gun Added
inhand-left Added
inhand-right Added
rapid-syringe-gun Added
syringe-gun Added

Edit: diff updated after e60aec8

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

🧹 Nitpick comments (2)
Resources/Prototypes/Entities/Objects/Specific/chemistry.yml (1)

372-389: Оптимизируйте физические фикстуры

Использование двух разных фикстур (круг и AABB) может быть избыточным. Достаточно использовать одну фикстуру типа AABB для оптимизации производительности.

  - type: Fixtures
    fixtures:
-     fix1:
-       shape: !type:PhysShapeCircle
-         radius: 0.2
-       density: 5
-       mask:
-       - ItemMask
-       restitution: 0.3
-       friction: 0.2
      projectile:
        shape:
          !type:PhysShapeAabb
          bounds: "-0.1,-0.3,0.1,0.3"
        hard: false
        mask:
        - Impassable
        - BulletImpassable
+       density: 5
+       restitution: 0.3
+       friction: 0.2
Resources/Prototypes/_Backmen/Recipes/Lathes/medical.yml (1)

4-4: Время создания требует корректировки

Оба рецепта имеют одинаковое время создания (5 единиц), несмотря на то, что RapidSyringeGun требует вдвое больше материалов. Рекомендуется увеличить время создания для RapidSyringeGun.

Also applies to: 15-15

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d366ab5 and 34dbf79.

⛔ Files ignored due to path filters (9)
  • Resources/Textures/_Goobstation/Clothing/Belt/cmowebbing.rsi/equipped-BELT.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Clothing/Belt/cmowebbing.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Clothing/Belt/cmowebbing.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Clothing/Belt/cmowebbing.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/dart-syringe-gun.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/rapid-syringe-gun.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/syringe-gun.png is excluded by !**/*.png
📒 Files selected for processing (25)
  • Content.Server/Chemistry/Components/BaseSolutionInjectOnEventComponent.cs (1 hunks)
  • Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs (4 hunks)
  • Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs (0 hunks)
  • Content.Server/Weapons/Ranged/Systems/GunSystem.cs (1 hunks)
  • Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs (1 hunks)
  • Content.Shared/_Goobstation/Weapons/Ranged/SyringeGunComponent.cs (1 hunks)
  • Resources/Locale/en-US/store/uplink-catalog.ftl (1 hunks)
  • Resources/Locale/ru-RU/backmen/entities/syringe_gun.ftl (1 hunks)
  • Resources/Locale/ru-RU/backmen/research/technologies.ftl (1 hunks)
  • Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/specific/medical/healing.ftl (1 hunks)
  • Resources/Prototypes/Catalog/Fills/Lockers/heads.yml (1 hunks)
  • Resources/Prototypes/Entities/Objects/Specific/chemistry.yml (5 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml (1 hunks)
  • Resources/Prototypes/Entities/Structures/Machines/lathe.yml (3 hunks)
  • Resources/Prototypes/Research/civilianservices.yml (1 hunks)
  • Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Catalog/uplink_catalog.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml (1 hunks)
  • Resources/Prototypes/_Backmen/Recipes/Lathes/medical.yml (1 hunks)
  • Resources/Prototypes/_Goobstation/Catalog/Fills/Belt/belts.yml (1 hunks)
  • Resources/Prototypes/_Goobstation/Catalog/Fills/Boxes/medical.yml (1 hunks)
  • Resources/Prototypes/_Goobstation/Entities/Clothing/Belt/belts.yml (1 hunks)
  • Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Medical/healing.yml (1 hunks)
  • Resources/Textures/_Goobstation/Clothing/Belt/cmowebbing.rsi/meta.json (1 hunks)
  • Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json (1 hunks)
💤 Files with no reviewable changes (1)
  • Content.Server/Chemistry/EntitySystems/SolutionInjectWhileEmbeddedSystem.cs
✅ Files skipped from review due to trivial changes (4)
  • Resources/Locale/ru-RU/backmen/research/technologies.ftl
  • Resources/Textures/_Goobstation/Clothing/Belt/cmowebbing.rsi/meta.json
  • Resources/Textures/_Goobstation/Objects/Weapons/Guns/Cannons/syringe_gun.rsi/meta.json
  • Resources/Locale/ru-RU/backmen/entities/syringe_gun.ftl
⏰ Context from checks skipped due to timeout of 300000ms (3)
  • GitHub Check: Test Packaging
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (ubuntu-latest)
🔇 Additional comments (29)
Resources/Prototypes/Entities/Objects/Specific/chemistry.yml (1)

362-395: Проверьте параметры физики снаряда

Физические параметры снаряда могут потребовать балансировки:

  • Минимальная скорость 3 единицы может быть слишком низкой для эффективного использования
  • Урон от прокола 5 единиц кажется небольшим для оружия
  • Время извлечения 0.25 секунд может быть слишком быстрым

Рекомендуется:

  1. Провести тестирование баланса параметров
  2. Рассмотреть возможность вынесения этих значений в отдельный конфигурационный файл для упрощения балансировки
Content.Shared/_Goobstation/Weapons/Ranged/SyringeGunComponent.cs (1)

5-13: Компонент реализован корректно!

Компонент имеет четкую документацию и следует паттернам ECS. Свойство PierceArmor логично используется для настройки пробития брони.

Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs (1)

12-15: Система реализована корректно!

Подписка на события и инициализация выполнены правильно.

Content.Server/Chemistry/Components/BaseSolutionInjectOnEventComponent.cs (1)

61-65: Свойство Shot добавлено корректно!

Новое свойство хорошо задокументировано и логично интегрируется с существующей функциональностью компонента.

Resources/Locale/ru-RU/ss14-ru/prototypes/entities/objects/specific/medical/healing.ftl (1)

174-176: Локализация добавлена корректно!

Новая запись для SyringePax следует существующему формату и содержит корректный перевод.

Content.Server/Chemistry/EntitySystems/SolutionInjectOnEventSystem.cs (3)

44-47: Добавлена логика для обработки шприцев

Новая логика предотвращает прокалывание брони для брошенных шприцев, что является правильным балансом игровой механики.


104-104: Исправление состояния выстрела при блокировке бронёй

Корректное обновление состояния Shot при блокировании инъекции бронёй.


142-151: Улучшена логика извлечения раствора

Реализована дифференцированная логика для извлечения раствора в зависимости от состояния выстрела. Это предотвращает возможные эксплойты с повторным использованием растворов.

Content.Server/Weapons/Ranged/Systems/GunSystem.cs (1)

119-119: Обновлено отслеживание выпущенных снарядов

Корректное присваивание списка выпущенных снарядов в событии AmmoShotEvent.

Resources/Locale/en-US/store/uplink-catalog.ftl (1)

216-218: Добавлен новый предмет: Шприцевой пистолет

Описание чётко объясняет функциональность оружия и его способность пробивать броню.

Resources/Prototypes/_Goobstation/Catalog/Fills/Boxes/medical.yml (1)

1-14: Корректно определён новый тип коробки со шприцами

Сущность правильно наследуется от BoxCardboard и включает все необходимые компоненты. Спрайты и содержимое определены корректно.

Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Medical/healing.yml (2)

1-1: Комментарий вызывает беспокойство

Комментарий "I am making a grave mistake aren't I?" указывает на неуверенность в реализации. Необходимо уточнить причины беспокойства и убедиться в правильности дизайна.


11-15: Проверить баланс и существование реагента

Необходимо проверить:

  1. Существует ли реагент "Pax" в системе
  2. Является ли объем в 15 единиц сбалансированным значением
✅ Verification successful

Реагент проверен и сбалансирован

  • Реагент "Pax" существует в системе (определён в toxins.yml)
  • Количество 15 единиц является сбалансированным, что подтверждается существующими примерами использования:
    • 30 единиц в химических бутылках
    • 2 единицы в потребляемых предметах (сигареты, продукты)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверяем существование реагента Pax
rg -l "ReagentId:\s*Pax" Resources/Prototypes/

Length of output: 348


Script:

#!/bin/bash
# Search for Pax reagent definition
echo "=== Searching for Pax reagent definition ==="
rg -l "Pax" Resources/Prototypes/Reagents/

# Search for all Pax quantities to compare balance
echo -e "\n=== Searching for Pax quantities ==="
rg "ReagentId:\s*Pax" -A 1 Resources/Prototypes/

Length of output: 1129

Resources/Prototypes/_Backmen/Recipes/Lathes/medical.yml (1)

5-10: Проверить баланс материалов

Необходимо проверить:

  1. Соответствие стоимости материалов другому оружию аналогичного типа
  2. Обоснованность использования редких материалов (Gold, Plasma)

Also applies to: 16-21

✅ Verification successful

Баланс материалов соответствует нормам

  • Стоимость материалов (Steel/Glass/Plastic: 500-1000, Gold/Plasma: 100-200) соответствует другим продвинутым устройствам в игре
  • Использование Gold и Plasma обосновано - эти материалы регулярно применяются в высокотехнологичных рецептах других отделов (робототехника, хирургия, охрана)
  • Повышенная стоимость материалов для RapidSyringeGun оправдана его улучшенными характеристиками
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск других рецептов оружия для сравнения стоимости
rg -A 10 "type: latheRecipe.*result:.*Gun" Resources/Prototypes/

Length of output: 66


Script:

#!/bin/bash
# Поиск всех рецептов для медицинского латного станка
rg -l "medical\.yml" Resources/Prototypes/
rg "type: latheRecipe" Resources/Prototypes/_Backmen/Recipes/Lathes/medical.yml -A 10
rg "type: latheRecipe" Resources/Prototypes/Recipes/Lathes/medical.yml -A 10

# Поиск использования Gold и Plasma в других рецептах
rg "Gold:|Plasma:" Resources/Prototypes/*/Recipes/Lathes/ -B 2 -A 2

Length of output: 20671

Resources/Prototypes/_Goobstation/Entities/Clothing/Belt/belts.yml (2)

8-10: Проверить наличие спрайта

Необходимо проверить существование файла спрайта по пути _Goobstation/Clothing/Belt/cmowebbing.rsi.

✅ Verification successful

Спрайт найден и путь корректен

Файл спрайта cmowebbing.rsi существует по указанному пути в директории Resources/Textures/_Goobstation/Clothing/Belt/.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск файла спрайта
fd "cmowebbing.rsi$" Resources/Textures/

Length of output: 104


15-16: Проверить размер хранилища

Размер сетки 6x2 требует сравнения с другими подобными предметами для обеспечения баланса.

✅ Verification successful

Размер хранилища сбалансирован

Сетка размером 6x2 соответствует балансу игры, так как:

  • Сопоставима с базовым ремнем (7x1)
  • Меньше ремня главного инженера (9x1)
  • Больше кобуры (3x1), что оправдано ролью
  • Значительно меньше специализированных ремней (например, 15x1 у пояса для жезлов)
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск других поясов для сравнения размера хранилища
rg -A 5 "type: Storage.*grid:" Resources/Prototypes/

Length of output: 54


Script:

#!/bin/bash
# Поиск файлов с поясами и их конфигурацией
echo "=== Поиск файлов поясов ==="
fd "belt.*\.yml" Resources/Prototypes/

echo -e "\n=== Поиск определений сетки в файлах ==="
rg "grid:\s*\n\s*-" Resources/Prototypes/ -A 2

echo -e "\n=== Поиск компонентов хранилища ==="
rg "components:" -A 5 Resources/Prototypes/**/belt*.yml

Length of output: 1091


Script:

#!/bin/bash
# Поиск определений хранилища и сетки в файлах поясов
echo "=== Поиск в файлах поясов ==="
rg -U "grid:|components:" -A 5 \
    Resources/Prototypes/Catalog/Fills/Items/belt.yml \
    Resources/Prototypes/Entities/Clothing/Belt/base_clothingbelt.yml \
    Resources/Prototypes/Entities/Clothing/Belt/belts.yml \
    Resources/Prototypes/_Backmen/Catalog/Fills/Items/Belts/belts.yml \
    Resources/Prototypes/_Backmen/Entities/Clothing/Belt/belts.yml \
    Resources/Prototypes/_Goobstation/Catalog/Fills/Belt/belts.yml \
    Resources/Prototypes/_Goobstation/Entities/Clothing/Belt/belts.yml

Length of output: 61567

Resources/Prototypes/_Goobstation/Catalog/Fills/Belt/belts.yml (1)

8-18: Проверить содержимое и баланс

Необходимо проверить:

  1. Существование всех указанных предметов в системе
  2. Баланс количества EmergencyMedipen (3 шт.)
  3. Сравнить содержимое с другими медицинскими поясами
✅ Verification successful

Содержимое пояса главврача сбалансировано

Проверка показала:

  • Все предметы корректно определены в системе
  • Количество EmergencyMedipen (3 шт.) соответствует стандартному поясу парамедика
  • Наличие хирургических инструментов оправдано ролью главврача
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверка существования предметов
for item in EnergyCautery EnergyScalpel AdvancedRetractor BoneGel Brutepack Ointment Bloodpack Gauze EmergencyMedipen; do
    echo "Checking $item..."
    rg "id: $item" Resources/Prototypes/
done

# Поиск других заполненных медицинских поясов для сравнения
rg -A 10 "parent: ClothingBelt.*Medical.*StorageFill" Resources/Prototypes/

Length of output: 13646


Script:

#!/bin/bash
# Search for medical belt contents more specifically
rg "StorageFill" Resources/Prototypes/_Goobstation/Catalog/Fills/Belt/belts.yml -A 15
rg "StorageFill" Resources/Prototypes/Catalog/Fills/Items/belt.yml -A 15

Length of output: 3948

Resources/Prototypes/Roles/Jobs/Medical/chief_medical_officer.yml (1)

63-63: Проверить баланс экипировки

Замена стандартного медицинского пояса на военный разгрузочный жилет может нарушить баланс между главами отделов. Необходимо сравнить с экипировкой других руководителей.

✅ Verification successful

Баланс экипировки подтвержден

Военный разгрузочный жилет для Главврача является обоснованным выбором, так как:

  • Другие главы отделов имеют специализированное снаряжение, соответствующее их роли
  • Быстрый доступ к медицинскому оборудованию критически важен в экстренных ситуациях
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск экипировки других глав отделов
rg -A 10 "type: startingGear.*equipment:" Resources/Prototypes/Roles/Jobs/

Length of output: 76


Script:

#!/bin/bash
# Search for belt equipment in department head files
fd "chief|head" Resources/Prototypes/Roles/Jobs/ -t f -x rg -B 2 -A 2 "belt: .*" {}

Length of output: 459

Resources/Prototypes/_Backmen/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml (3)

1-36: Проверьте баланс оружия и механику инъекций.

Базовая реализация шприц-пистолета выглядит корректно, но требуется тщательное тестирование механики инъекций и баланса оружия в игровых условиях.

Рекомендуется:

  1. Добавить ограничение на типы растворов, которые можно использовать
  2. Реализовать механику задержки между инъекциями
  3. Добавить визуальную и звуковую обратную связь при успешной инъекции

38-57: Требуется балансировка увеличенной скорострельности.

Увеличенная скорострельность (1.5) и больший магазин могут создать проблемы с балансом. Необходимо тщательное тестирование.

Рекомендуется:

  1. Рассмотреть добавление штрафа к точности
  2. Добавить увеличенное время перезарядки
  3. Ограничить типы совместимых растворов

58-84: Проверьте механику пробития брони и реализуйте TODO.

Функционал пробития брони требует особого внимания с точки зрения баланса. Также необходимо реализовать описанный в TODO функционал автоматической регенерации дротиков.

Хотите, чтобы я помог с реализацией автоматической регенерации дротиков и резервуара на 100 единиц?

Resources/Prototypes/Entities/Objects/Weapons/Guns/pneumatic_cannon.yml (1)

Line range hint 106-183: Проверьте интеграцию с существующими системами.

Реализация шприц-пистолета как пневматического оружия выглядит логично, но требуется проверка совместимости с:

  1. Системой повреждений
  2. Системой химии
  3. Существующими типами боеприпасов

Запустите следующий скрипт для проверки интеграции:

Resources/Prototypes/_Backmen/Catalog/uplink_catalog.yml (1)

165-183: Проверьте баланс стоимости и ограничения доступа.

Стоимость в 30 ТК и ограничение по медицинским ролям требуют проверки:

  1. Сравните с аналогичным оружием той же стоимости
  2. Убедитесь, что список ролей оптимален

Рекомендуется также добавить предупреждение о потенциальной опасности оружия в описание.

Resources/Prototypes/Research/civilianservices.yml (1)

191-203: Проверьте место в дереве исследований.

Размещение технологии в гражданских службах требует обоснования:

  1. Возможно, лучше подойдет военная ветка исследований
  2. Стоимость 10000 может быть занижена для такого оружия

Рекомендуется:

  1. Пересмотреть категорию технологии
  2. Увеличить стоимость исследования
  3. Добавить предварительные требования из военной ветки
Resources/Prototypes/Entities/Structures/Machines/lathe.yml (4)

968-968: Проверьте доступность шприц-пистолета в медицинском отделе.

Добавление шприц-пистолета в статические рецепты MedicalTechFab может вызвать проблемы с балансом, так как это потенциально опасное оружие становится доступным медицинскому персоналу.

Рекомендуется рассмотреть следующие аспекты:

  1. Ограничение доступа к рецепту через систему исследований
  2. Добавление требования повышенного уровня доступа
  3. Перемещение рецепта в динамические рецепты вместо статических

976-976: Проверьте ограничения на создание быстрого шприц-пистолета в медицинском отделе.

Добавление быстрого шприц-пистолета в динамические рецепты MedicalTechFab требует тщательной проверки баланса и ограничений.

Рекомендуется:

  1. Добавить высокие требования к материалам
  2. Рассмотреть возможность добавления дополнительных условий разблокировки рецепта
  3. Проверить совместимость с существующими системами контроля доступа

789-789: Проверьте баланс доступности шприц-пистолета в SecurityTechFab.

Добавление шприц-пистолета в статические рецепты SecurityTechFab делает его легкодоступным для службы безопасности. Убедитесь, что это соответствует игровому балансу.

Запустите следующий скрипт для проверки баланса:

✅ Verification successful

Баланс шприц-пистолета соответствует игровой механике

Анализ показывает, что оружие имеет правильные ограничения доступа:

  • Базовая версия помечена как медицинская контрабанда
  • Улучшенные версии требуют исследований или доступны только синдикату
  • Размер магазина и скорострельность сбалансированы для каждой версии
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Проверка баланса шприц-пистолета

# Поиск других рецептов оружия в SecurityTechFab для сравнения
rg -A 5 "staticRecipes:" "Resources/Prototypes/Entities/Structures/Machines/lathe.yml" | grep -E "Gun|Weapon"

# Поиск характеристик шприц-пистолета
rg "SyringeGun" "Resources/Prototypes/Entities/Objects/Weapons/"

Length of output: 265


Script:

#!/bin/bash
# Search for all lathe recipes in SecurityTechFab and MedicalTechFab
echo "=== SecurityTechFab Recipes ==="
rg -A 20 "SecurityTechFab:" Resources/Prototypes/Entities/Structures/Machines/lathe.yml

echo -e "\n=== MedicalTechFab Recipes ==="
rg -A 20 "MedicalTechFab:" Resources/Prototypes/Entities/Structures/Machines/lathe.yml

echo -e "\n=== Syringe Gun Properties ==="
rg -l "SyringeGun" Resources/Prototypes/Entities/Objects/Weapons/ | xargs cat

echo -e "\n=== Related Ammo Types ==="
rg -l "SyringeGunAmmo" Resources/Prototypes/ | xargs cat

Length of output: 41525


846-846: Проверьте требования для создания быстрого шприц-пистолета.

Добавление быстрого шприц-пистолета в динамические рецепты SecurityTechFab требует проверки баланса и требований для его создания.

Запустите следующий скрипт для проверки требований:

✅ Verification successful

Требования для создания быстрого шприц-пистолета подтверждены

Для создания требуется:

  • Исследование технологии "MedicalDefense" (Tier 2, 10000 очков)
  • Материалы:
    • Сталь: 1000
    • Стекло: 1000
    • Пластик: 1000
    • Золото: 200
    • Плазма: 200

Баланс рецепта корректен - требует вдвое больше ресурсов чем базовая версия и значительных исследовательских инвестиций.

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Описание: Проверка требований для быстрого шприц-пистолета

# Поиск рецепта быстрого шприц-пистолета
rg "RapidSyringeGun" "Resources/Prototypes/Recipes/"

Length of output: 50


Script:

#!/bin/bash
# Поиск всех упоминаний RapidSyringeGun
echo "=== Поиск упоминаний RapidSyringeGun ==="
rg "RapidSyringeGun" -l

echo -e "\n=== Поиск рецептов SecurityTechFab ==="
rg "SecurityTechFab" "Resources/Prototypes/Recipes/"

echo -e "\n=== Поиск прототипа оружия ==="
rg "RapidSyringeGun" "Resources/Prototypes/Entities/"

Length of output: 937


Script:

#!/bin/bash
echo "=== Рецепт шприц-пистолета ==="
cat "Resources/Prototypes/_Backmen/Recipes/Lathes/medical.yml"

echo -e "\n=== Исследовательские требования ==="
cat "Resources/Prototypes/Research/civilianservices.yml"

echo -e "\n=== Прототип оружия ==="
cat "Resources/Prototypes/_Backmen/Entities/Objects/Weapons/pneumatic_cannon.yml"

Length of output: 6190

Resources/Prototypes/Catalog/Fills/Lockers/heads.yml (1)

247-248: Необходимо рассмотреть баланс и безопасность новых предметов

Добавление RapidSyringeGun и BoxSyringePax в шкафчик Главврача может создать проблемы с балансом и потенциально быть использовано для грифинга.

Рекомендации:

  1. Рассмотреть возможность добавления системы логирования использования шприц-пистолета
  2. Добавить механизм отслеживания использованных транквилизаторов
  3. Возможно, стоит ограничить доступ к быстрому шприц-пистолету, оставив только обычную версию

Давайте проверим, есть ли какие-либо ограничения или системы логирования в реализации:

✅ Verification successful

Существующие системы безопасности достаточны

После анализа кодовой базы обнаружено, что игра уже имеет встроенные системы мониторинга и безопасности для шприц-пистолета:

  • Отслеживание всех химических инъекций через SharedInjectorSystem
  • Система логирования событий боя
  • Мониторинг передачи растворов через SolutionTransferSystem

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

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Проверяем реализацию систем безопасности для шприц-пистолета

# Поиск компонентов логирования
echo "Поиск компонентов логирования:"
rg -l "logging|log system" --type cs

# Поиск систем отслеживания использования
echo "Поиск систем отслеживания:"
ast-grep --pattern 'class $_ {
  $$$
  track($$$) {
    $$$
  }
  $$$
}'

Length of output: 1175


Script:

#!/bin/bash
# Поиск реализации шприц-пистолета и связанных систем
echo "Поиск реализации шприц-пистолета:"
rg -l "syringe.*gun|rapid.*syringe" --type-not yml

# Поиск систем отслеживания медицинского оборудования
echo "Поиск систем медицинского мониторинга:"
rg -l "medical.*track|medicine.*log|syringe.*track" --type cs

# Поиск систем логирования оружия
echo "Поиск систем логирования оружия:"
rg -l "weapon.*log|combat.*log|attack.*log" --type cs

# Поиск прототипа шприц-пистолета
echo "Поиск прототипа шприц-пистолета:"
rg -l "RapidSyringeGun" --type yml

Length of output: 634


Script:

#!/bin/bash
# Поиск реализации шприц-пистолета
echo "Поиск файлов шприц-пистолета:"
rg -l "syringe.*gun|rapid.*syringe"

# Поиск систем боя и оружия
echo "Поиск систем боя:"
rg -l "combat.*system|weapon.*system|projectile.*system" --type cs

# Поиск систем инъекций
echo "Поиск систем инъекций:"
rg -l "inject|chemical.*transfer|solution.*transfer" --type cs

# Поиск определений прототипов
echo "Поиск прототипов оружия:"
fd -e yml | xargs rg "RapidSyringeGun|BoxSyringePax" -l

Length of output: 6260

@@ -409,7 +445,7 @@
offset: "-0.1,0"
minimumSpeed: 3
removalTime: 0.25
embedOnThrow: false
embedOnThrow: true
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Исправьте дублирование конфигурации

В сущности MiniSyringe дублируются параметры EmbeddableProjectile из родительской сущности BaseSyringe. Рекомендуется удалить дублирование.

  - type: EmbeddableProjectile
-   offset: "-0.1,0"
-   minimumSpeed: 3
-   removalTime: 0.25
    embedOnThrow: true

Committable suggestion skipped: line range outside the PR's diff.

@@ -374,6 +408,7 @@
- type: Tag
tags:
- Syringe
- SyringeGunAmmo # GoobStation
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Обнаружена проблема с тегом SyringeGunAmmo

Тег SyringeGunAmmo добавлен к сущностям, но отсутствует проверка этого тега в системе шприц-пистолета (SyringeGunSystem). Это может привести к тому, что шприц-пистолет будет принимать неправильные типы боеприпасов.

  • Добавьте проверку тега SyringeGunAmmo в Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs
  • Или используйте существующую систему валидации боеприпасов из базового класса GunSystem
🔗 Analysis chain

Проверьте использование тега SyringeGunAmmo

Тег SyringeGunAmmo добавлен к базовым сущностям шприцев. Убедитесь, что система шприц-пистолета корректно фильтрует боеприпасы по этому тегу.

Also applies to: 424-424

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Поиск использования тега SyringeGunAmmo в системах
rg -l "SyringeGunAmmo" --type cs

Length of output: 32


Script:

#!/bin/bash
# Поиск тега во всех файлах
echo "=== Searching for SyringeGunAmmo in all files ==="
rg "SyringeGunAmmo" -l

# Поиск файлов, связанных со шприц-пистолетом
echo -e "\n=== Searching for syringe gun related files ==="
rg -l -i "syringe.*gun|gun.*syringe"

# Поиск систем оружия и боеприпасов
echo -e "\n=== Searching for weapon/ammo systems ==="
fd -e cs -e yml ".*[Gg]un.*System|.*[Aa]mmo.*System|.*[Ww]eapon.*System"

Length of output: 5104


Script:

#!/bin/bash
# Проверка содержимого системы шприц-пистолета
echo "=== SyringeGunSystem implementation ==="
ast-grep --pattern 'class SyringeGunSystem {
  $$$
}'

# Проверка определения тега
echo -e "\n=== Tag definition ==="
rg "SyringeGunAmmo" Resources/Prototypes/tags.yml -C 2

Length of output: 307


Script:

#!/bin/bash
# Проверка реализации системы шприц-пистолета
echo "=== SyringeGunSystem content ==="
rg -A 10 "SyringeGunSystem" Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs

# Поиск проверок тегов в файле
echo -e "\n=== Tag checks in system ==="
rg "HasTag|EnsureTag" Content.Server/_Goobstation/Weapons/Ranged/SyringeGunSystem.cs

Length of output: 649


Script:

#!/bin/bash
# Проверка компонента шприц-пистолета
echo "=== SyringeGunComponent content ==="
rg -A 10 "SyringeGunComponent" Content.Shared/_Goobstation/Weapons/Ranged/SyringeGunComponent.cs

# Поиск использования тега в базовой системе оружия
echo -e "\n=== Gun system tag checks ==="
rg "SyringeGunAmmo" Content.Server/Weapons/Ranged/Systems/GunSystem.cs Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs

Length of output: 489

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@KayzelW KayzelW merged commit 50ca47e into Rxup:master Jan 25, 2025
12 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation Changes: Sprites Should be reviewed or fixed by people who are knowledgeable with spriting or visual design. S: Untriaged size/M
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants