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

[Tweak] The Gunnening #285

Open
wants to merge 11 commits into
base: master
Choose a base branch
from

Conversation

Vaaankas
Copy link
Contributor

@Vaaankas Vaaankas commented Mar 6, 2025

Описание PR

Изменёно описание предметов при осмотре (темнее цветом, наклонный и меньший шрифт)

Огнестрельное оружие претерпело изменения:

  • Убраны счётчики патронов при держании в руке.
  • Убрано отображение кол-ва патронов при осмотре.
  • Добавлено отображение патрона в патроннике и вставленного магазина в оружии при осмотре.
  • У дробовиков и ручных винтовок добавлено отображение статуса затвора (нужно ли перезарядить).
  • Из магазинов, дробовиков, коробок патронов, бандольеров, и т.п. теперь можно доставать патроны на альт+клик.
  • РПГ теперь не нужно "перезаряжать" после выстрела, исправлен баг.
  • Исправлен баг с заряжанием револьверов.
  • Протокинетический дробовик и репитер теперь берутся в две руки.
  • Бульдог (дробовик) теперь имеет затвор как у всех магазинных пушек.
  • У АКМС убрана затворная задержка как у М16.
  • Обновлены звуки перезарядки дробовиков и однозарядных винтовок.

Возвращены звуки взаимодействия с оружием.

Уменьшена визуальная отдача при стрельбе.


Медиа

изображение
изображение
видео


Изменения

🆑 vanx

  • tweak: Изменен шрифт описания при осмотре.
  • tweak: Изменено меню осмотра огнестрельного оружия.
  • tweak: Теперь чтобы увидеть точное количество патронов в магазине оружия нужно достать магазин и осмотреть его.
  • add: Возможность доставать патроны из дробовиков, бандольер, магазинов и коробок на Alt+Клик
  • tweak: Уменьшена визуальная отдача при стрельбе.

@Vaaankas Vaaankas requested a review from Remuchi as a code owner March 6, 2025 16:57
Copy link
Contributor

coderabbitai bot commented Mar 6, 2025

Walkthrough

Внесены изменения в системы оружия: добавлен новый метод Extract в классах GunSystem для клиентской и серверной логики извлечения патронов, с учетом проверки временных условий и наличия сущностей. Модифицированы системы SharedGunSystem для переработки логики взаимодействий, осмотра и альтернативных действий. В компонентах оружия добавлены новые поля (например, Racked и свойство BoltCatch). Также обновлены файлы локализации и YAML-конфигурации для различных типов оружия, включая добавление звуковых эффектов, изменение родительских сущностей и отключение компонента AmmoCounter.

Changes

Файл(ы) Изменения
Content.Client/Weapons/Ranged/Systems/GunSystem.Ballistic.cs
Content.Server/Weapons/Ranged/Systems/GunSystem.Ballistic.cs
Добавлен метод Extract для извлечения патронов. Серверная версия включает вызов _handsSystem.PickupOrDrop и новый dependency на SharedHandsSystem.
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.ChamberMagazine.cs
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Magazine.cs
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
Изменена логика взаимодействий, осмотра и вербов: переименование методов, добавление нового абстрактного метода Extract, обновление цветовых констант и изменение событий (например, замена MapInitEvent на ComponentInit).
Content.Shared/Examine/ExamineSystemShared.cs Переработан метод формирования текста осмотра: описание теперь оборачивается через Loc.GetString и добавляется с помощью AddMarkup.
Content.Shared/Weapons/Ranged/Components/BallisticAmmoProviderComponent.cs
Content.Shared/Weapons/Ranged/Components/ChamberMagazineAmmoProviderComponent.cs
Добавлены новые публичные поля: в BallisticAmmoProviderComponent — поле Racked, в ChamberMagazineAmmoProviderComponent — свойство BoltCatch с необходимыми атрибутами.
Resources/Locale/en-US/_white/examine/examine.ftl
Resources/Locale/en-US/_white/weapons/ranged/gun.ftl
Resources/Locale/ru-RU/_white/examine/examine.ftl
Resources/Locale/ru-RU/_white/weapons/ranged/gun.ftl
В файлах локализации добавлены новые ключи для оформления описаний и статусов оружия, включая обёртки для описаний (examine-entity-description-wrapper) и строки для осмотра состояния оружия.
Resources/Prototypes/Entities/... (Belt, Ammunition, LMG, Launchers, Pistols, Rifles, SMGs, Shotguns, Snipers, Basic/pka) Обновлены YAML-конфигурации: добавлены свойства (например, soundInsert, boltCatch), изменена родительская установка (расширено наследование), отключён компонент AmmoCounter (комментирование строк) и добавлен новый компонент gun_chamber с параметрами для управления затвором.

Suggested reviewers

  • Remuchi
  • DVOniksWyvern

📜 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 3fa87c2 and 7155ceb.

📒 Files selected for processing (2)
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs (10 hunks)
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs (3 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (5)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML map schema validator
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Test Packaging
  • GitHub Check: YAML Linter
🔇 Additional comments (18)
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs (6)

11-11: Хорошее добавление импорта.

Добавление пространства имен Content.Shared.Examine вполне оправдано, так как было добавлено обращение к событию ExaminedEvent.


25-25: Обратите внимание на изменение события инициализации.

Изменение подписки с MapInitEvent на ComponentInit - это значительное изменение в жизненном цикле компонента. ComponentInit вызывается при создании компонента, что может происходить как при загрузке карты, так и во время игры.

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


31-31: Правильное добавление обработчика события ExaminedEvent.

Добавление подписки на событие ExaminedEvent соответствует целям PR по улучшению отображения информации при осмотре оружия.


34-58: Хорошая реализация функции осмотра револьвера.

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

Обратите внимание на следующие моменты:

  1. Метод правильно проверяет, находится ли игрок в диапазоне детального осмотра
  2. Корректно подсчитывает количество заряженных патронов
  3. Использует разные цвета для отображения состояния (загружен/пуст)

42-46: Логика подсчета заряженных патронов выглядит корректной.

Этот код эффективно подсчитывает количество заряженных патронов путем перебора всех камер и проверки их состояния.


449-449: Согласованное изменение сигнатуры метода.

Изменение сигнатуры метода OnRevolverInit соответствует изменению события подписки (с MapInitEvent на ComponentInit).

Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs (12)

3-3: Добавлены новые зависимости для работы с прототипами и системой рук.

Добавление IPrototypeManager и SharedHandsSystem обеспечивает доступ к управлению прототипами и взаимодействию с руками пользователя, что необходимо для новой функциональности извлечения патронов.

Also applies to: 12-12, 20-21


34-35: Улучшена обработка взаимодействий через специализированные события.

Замена общего события GetVerbsEvent<Verb> на специализированные GetVerbsEvent<InteractionVerb> и GetVerbsEvent<AlternativeVerb> позволяет более точно обрабатывать разные типы взаимодействий с оружием.


58-66: Улучшена проверка взаимодействия и добавлено уведомление.

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


115-117: Добавлена дополнительная проверка обработки события.

Раннее прерывание метода, если событие уже обработано или отменено, предотвращает ненужное выполнение кода.


186-201: Переименован и упрощен метод обработки взаимодействий.

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


204-216: Добавлена возможность извлечения патронов через альтернативное действие.

Новый метод AddAlternativeVerb позволяет пользователям извлекать патроны из оружия с помощью альтернативного действия (Alt+Click), что соответствует требованиям PR для улучшения взаимодействия с оружием.


224-258: Улучшена информация при осмотре оружия.

Значительно расширена информация, отображаемая при осмотре оружия:

  • Отображение патрона в патроннике
  • Показ состояния затвора для ручного оружия
  • Различное форматирование для разных состояний

Это повышает информативность интерфейса и делает взаимодействие с оружием более интуитивным.


262-273: Реализована базовая логика извлечения патронов.

Добавлены методы ExtractAction и абстрактный метод Extract, которые обеспечивают базовый функционал для извлечения патронов из оружия. Абстрактный метод должен быть реализован в клиентской и серверной частях системы.


296-297: Добавлено обновление состояния затвора при ручном взведении.

Установка флага Racked = true при ручном взведении оружия обеспечивает корректное отображение состояния затвора при осмотре.


347-354: Добавлена поддержка безгильзовых патронов для оружия с ручным взведением.

Реализована специальная обработка для безгильзовых патронов (DeleteOnSpawn = true) в оружии с ручным взведением, что позволяет корректно обрабатывать разные типы боеприпасов.


356-359: Обновление состояния затвора при выстреле.

Установка флага Racked = false при выстреле правильно отражает состояние затвора, требующего повторного взведения перед следующим выстрелом.


368-377: Улучшена обработка неавтоматического оружия.

Доработана логика для оружия без автоматического цикла (AutoCycle = false), позволяющая корректно обрабатывать как стандартные, так и безгильзовые патроны, с обновлением состояния затвора и правильным добавлением патронов в контейнер.

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 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.
  • @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.

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: 0

🧹 Nitpick comments (4)
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs (4)

58-60: Проверка на BallisticAmmoProviderComponent у используемого объекта.

В текущем состоянии код мгновенно возвращается, если предмет, которым взаимодействуют, сам является поставщиком патронов. Рассмотрите возможность вывода всплывающего сообщения, чтобы проинформировать игрока о невозможности использовать один поставщик патронов для другого без do-after.


186-201: Новый метод AddInteractionVerb.

Хорошо, что цикл отображается только при наличии component.Cycleable. Опционально можно вынести условие if (GetBallisticShots(component) == 0) в отдельную переменную, чтобы повысить читаемость, но это не критично.


261-265: Метод ExtractAction для вызова абстрактного Extract.

Организация кода выглядит аккуратно. При необходимости расширения логики (например, упоминание количества извлечённых патронов) можно рассмотреть применение дополнительных всплывающих уведомлений.


368-377: Логика вставки патрона при отсутствии автодолаживания и при DeleteOnSpawn=false.

Вместо простых if блоков возможно объединить условия для уменьшения вложенности. Например, проверку !cartridge.DeleteOnSpawn можно поднимать выше внутри ветки. Это лишь небольшое замечание для читаемости.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between cad099b and 25305ae.

📒 Files selected for processing (25)
  • Content.Client/Weapons/Ranged/Systems/GunSystem.Ballistic.cs (1 hunks)
  • Content.Server/Weapons/Ranged/Systems/GunSystem.Ballistic.cs (3 hunks)
  • Content.Shared/Examine/ExamineSystemShared.cs (1 hunks)
  • Content.Shared/Weapons/Ranged/Components/BallisticAmmoProviderComponent.cs (1 hunks)
  • Content.Shared/Weapons/Ranged/Components/ChamberMagazineAmmoProviderComponent.cs (1 hunks)
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs (10 hunks)
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.ChamberMagazine.cs (2 hunks)
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs (1 hunks)
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Magazine.cs (1 hunks)
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs (3 hunks)
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs (2 hunks)
  • Resources/Locale/en-US/_white/examine/examine.ftl (1 hunks)
  • Resources/Locale/en-US/_white/weapons/ranged/gun.ftl (1 hunks)
  • Resources/Locale/ru-RU/_white/examine/examine.ftl (1 hunks)
  • Resources/Locale/ru-RU/_white/weapons/ranged/gun.ftl (1 hunks)
  • Resources/Prototypes/Entities/Clothing/Belt/belts.yml (1 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml (1 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml (2 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml (2 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml (1 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml (2 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml (1 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml (4 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml (1 hunks)
  • Resources/Prototypes/_Lavaland/Entities/Objects/Weapons/Guns/Basic/pka.yml (2 hunks)
✅ Files skipped from review due to trivial changes (4)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml
  • Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml
⏰ Context from checks skipped due to timeout of 90000ms (3)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Test Packaging
  • GitHub Check: build (ubuntu-latest)
🔇 Additional comments (52)
Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml (2)

59-59: Отключение счётчика патронов для China Lake

Отключение компонента AmmoCounter соответствует задачам PR по убиранию счётчика патронов при удержании оружия. Изменение согласуется с другими модификациями оружия в этом PR.


103-103: Исправление проблемы с перезарядкой РПГ

Изменение параметра autoCycle на true решает упомянутую в задачах PR проблему, когда РПГ требовал ручной перезарядки после выстрела. Теперь оружие будет автоматически готово к следующему выстрелу.

Resources/Locale/en-US/_white/examine/examine.ftl (1)

49-51: Улучшение форматирования описаний оружия

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

Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Boxes/shotgun.yml (1)

20-21: Добавление звука вставки патронов для дробовика

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

Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Magazine.cs (1)

60-60:

❓ Verification inconclusive

Отключение обработки события для сущности магазина

Закомментирование вызова события для сущности магазина меняет поведение при использовании альтернативного действия. Это, вероятно, связано с новой функциональностью извлечения патронов, упомянутой в PR ("Игроки теперь могут извлекать патроны из дробовиков, патронташей, магазинов и коробок с помощью Alt+Click").

Убедитесь, что это изменение не нарушает другую логику и что новый метод Extract корректно обрабатывает это действие.


🏁 Script executed:

#!/bin/bash
# Поиск использования метода Extract в коде
rg -A 5 -B 2 "Extract\(" --type cs

Length of output: 3304


Проверьте корректность изменения логики альтернативного действия для магазина

  • В файле Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Magazine.cs (строка 60) вызов RaiseLocalEvent(magEnt.Value, args); был закомментирован, что отключает обработку события для сущности магазина.
  • Это изменение влияет на поведение альтернативного действия (Alt+Click) при извлечении патронов. Обратите внимание, что в баллистических системах (например, в файлах SharedGunSystem.Ballistic.cs, GunSystem.Ballistic.cs для сервера и клиента) реализован новый метод Extract, который обрабатывает извлечение.
  • Убедитесь, что для сущности магазина логика извлечения патронов корректно интегрирована с новым подходом (либо альтернативное действие перенаправляется на метод, аналогичный Extract для баллистических систем), и что не возникает неожиданных побочных эффектов из-за отключения вызова события.
Resources/Prototypes/Entities/Clothing/Belt/belts.yml (1)

582-583: Хорошее добавление звукового эффекта.

Отлично, что добавлен звуковой эффект для бандольера при взаимодействии с патронами. Это соответствует общей концепции улучшения обратной связи с пользователем при работе с оружием и боеприпасами.

Content.Shared/Weapons/Ranged/Components/BallisticAmmoProviderComponent.cs (1)

34-34: Добавление состояния взведения для оружия.

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

Content.Shared/Weapons/Ranged/Components/ChamberMagazineAmmoProviderComponent.cs (1)

23-27: Улучшение механики работы затвора.

Отличное дополнение системы оружия. Свойство BoltCatch позволяет реалистично моделировать поведение затворной задержки, когда магазин пуст, что делает обращение с оружием более достоверным.

Resources/Locale/ru-RU/_white/examine/examine.ftl (1)

50-51: Улучшение форматирования описаний при осмотре.

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

Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml (2)

31-31: Добавлено новое свойство для механизма затвора.

Добавление свойства boltCatch: false соответствует указанным в PR изменениям для отображения статуса затвора оружия.


43-43: Отключен компонент счетчика патронов.

Отключение компонента AmmoCounter соответствует одной из основных целей PR - удаление счетчиков патронов при удержании огнестрельного оружия.

Content.Shared/Examine/ExamineSystemShared.cs (1)

270-275: Улучшенное форматирование описаний сущностей.

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

Resources/Locale/ru-RU/_white/weapons/ranged/gun.ftl (1)

1-13: Добавлены локализационные строки для осмотра оружия.

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

Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Interactions.cs (4)

19-20: Логичное улучшение отображения режимов стрельбы.

Добавлена проверка для пропуска отображения информации о режиме стрельбы, если доступен только один режим, что делает интерфейс более лаконичным.


24-27: Удалено отображение скорострельности.

Отключение вывода информации о скорострельности при осмотре оружия упрощает интерфейс и соответствует целям PR по изменению описаний огнестрельного оружия.


32-36: Удалено отображение скорострельности в режиме очереди.

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


38-38: Изменен цвет для отображения количества выстрелов в очереди.

Использование ModeExamineColor вместо FireRateExamineColor обеспечивает более согласованный вид интерфейса осмотра оружия.

Resources/Prototypes/_Lavaland/Entities/Objects/Weapons/Guns/Basic/pka.yml (2)

4-4: Добавление BaseGunWieldable соответствует целям PR.

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


44-44: Добавление BaseGunWieldable соответствует целям PR.

Аналогично предыдущему изменению, добавление BaseGunWieldable в качестве родительского объекта для прото-кинетического повторителя делает его оружием, требующим две руки для использования.

Content.Client/Weapons/Ranged/Systems/GunSystem.Ballistic.cs (1)

53-82: Реализация метода Extract соответствует требованиям PR.

Добавлен метод для извлечения патронов из огнестрельного оружия, что соответствует цели PR по добавлению возможности извлекать патроны с помощью команды Alt+Click. Логика метода корректна и соответствует паттерну других подобных методов в классе.

Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml (2)

18-18: Удаление счетчика патронов соответствует целям PR.

Отключение компонента AmmoCounter для базового винтовочного оружия соответствует требованию PR по удалению счетчиков патронов при удержании огнестрельного оружия.


96-96: Удаление задержки затвора у AKMS соответствует целям PR.

Установка параметра boltCatch в значение false для AKMS убирает задержку затвора, приводя его в соответствие с M16, как указано в целях PR.

Resources/Locale/en-US/_white/weapons/ranged/gun.ftl (2)

1-13: Добавлены строки локализации для осмотра оружия.

Новые строки локализации корректно реализуют изменение описаний для осмотра огнестрельного оружия, включая отображение информации о патроне в патроннике, магазине и состоянии затвора. Использование цветовой разметки [color={$color}] повышает читаемость.


13-13: Добавлена строка локализации для команды извлечения патронов.

Строка локализации 'gun-ballistic-extract' добавлена для поддержки новой функциональности извлечения патронов, как указано в целях PR.

Content.Server/Weapons/Ranged/Systems/GunSystem.Ballistic.cs (3)

2-2: Добавлен новый импорт для работы с системой рук.

Импорт Content.Shared.Hands.EntitySystems необходим для взаимодействия с новой функциональностью извлечения патронов.


13-13: Добавлена зависимость на SharedHandsSystem.

Эта зависимость требуется для реализации новой функции извлечения патронов, чтобы игроки могли подбирать извлеченные патроны.


42-68: Реализация функции извлечения патронов.

Метод Extract добавляет возможность извлекать патроны из оружия с помощью Alt+Click, как указано в задачах PR. Логика извлечения аналогична существующему методу Cycle, но вместо выброса патрона, он передаётся в руки игрока.

Код корректно обрабатывает три сценария:

  1. Извлечение существующего патрона из списка сущностей
  2. Создание нового патрона из прототипа, если есть неиспользованные
  3. Показ уведомления, если патроны отсутствуют
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Revolver.cs (5)

11-11: Добавлен импорт для системы осмотра.

Импорт Content.Shared.Examine необходим для реализации функционала осмотра револьверов.


25-25: Изменён тип события для инициализации револьвера.

Произошла замена события MapInitEvent на ComponentInit, что является более правильным подходом, так как компонент должен инициализироваться при создании, а не только при загрузке карты.


31-31: Добавлена подписка на событие осмотра револьвера.

Подписка на ExaminedEvent позволяет добавить информацию о состоянии револьвера при его осмотре игроком.


34-58: Реализована функция осмотра револьвера.

Метод OnRevolverExamine добавляет информацию о количестве заряженных патронов в револьвере при осмотре. Используются разные цвета для обозначения заряженного и пустого револьвера, что соответствует требованиям PR о "более тёмном цвете шрифта" для описаний.

Функция корректно:

  1. Проверяет, находится ли игрок на достаточном расстоянии для детального осмотра
  2. Подсчитывает количество заряженных камор
  3. Отображает соответствующее сообщение с цветовым форматированием

449-449: Обновлена сигнатура метода инициализации револьвера.

Изменение события с MapInitEvent на ComponentInit в сигнатуре метода соответствует изменению в подписке на событие.

Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml (6)

21-21: Отключен компонент счётчика патронов.

Удаление компонента AmmoCounter соответствует требованию PR: "Удаление счётчиков пуль при удержании огнестрельного оружия."


22-26: Настроены параметры точности для базового дробовика.

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


80-84: Настроены параметры точности для малого дробовика.

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


110-110: Отключен компонент счётчика патронов для дробовика Bulldog.

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


137-144: Добавлен слот для патрона в патроннике.

Создан новый слот gun_chamber для дробовика Bulldog, который позволяет отображать патрон в патроннике при осмотре оружия, что соответствует требованию PR: "Отображение пули в патроннике и вставленного магазина при осмотре."


149-151: Заменён тип провайдера боеприпасов на ChamberMagazineAmmoProvider.

Изменение типа провайдера с MagazineAmmoProvider на ChamberMagazineAmmoProvider и добавление звука перезарядки соответствует требованию PR: "Дробовики теперь показывают состояние затвора, указывая, необходима ли перезарядка."

Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.ChamberMagazine.cs (3)

290-290: Улучшено цветовое отображение состояния затвора.

Изменено использование цветов для отображения состояния затвора, что соответствует требованию PR о более тёмном цвете шрифта и более информативном описании.


293-311: Расширена информация при осмотре оружия с патронником и магазином.

Добавлен код, который отображает информацию о патроне в патроннике и вставленном магазине при осмотре оружия. Это полностью соответствует требованию PR: "Отображение пули в патроннике и вставленного магазина при осмотре."

Реализация корректно:

  1. Получает информацию о патроне в патроннике и магазине
  2. Отображает имя патрона в патроннике с соответствующим цветом
  3. Показывает сообщение о пустом патроннике, если он не заряжен
  4. Отображает информацию о вставленном магазине

422-422: Добавлена проверка на фиксатор затвора.

Добавлено условие проверки component.BoltCatch, которое позволяет затвору оставаться открытым только при выполнении определённых условий. Это соответствует требованию PR о том, что дробовики должны показывать состояние затвора, указывая на необходимость перезарядки.

Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.Ballistic.cs (11)

3-3: Добавление нового пространства имён выглядит корректно.


12-12: Использование Robust.Shared.Prototypes оправдано для работы с прототипами.


20-21: Убедитесь, что новые зависимости действительно задействуются.

Рекомендуется проверить, используются ли _proto и _handsSystem в коде и нет ли лишних зависимостей.


34-35: Обработка событий при помощи InteractionVerb и AlternativeVerb.

Изменение позволяет более конкретно разделять логику взаимодействия (обычные действия и альтернативные). Хорошее решение для лучшей структуры.


63-67: Ограничение заполнения при достижении ёмкости.

Отображение всплывающего сообщения "Full" выглядит уместным. При этом, не забудьте добавить локализацию на будущее («todo locale»).


115-117: Дополнительная проверка в событии DoAfter.

Добавление условия if (args.Handled || args.Cancelled) return; корректно предотвращает повторную обработку события.


203-215: Новый альтернативный глагол для извлечения патронов.

Логика альтернативного действия (Alt-click) для извлечения боеприпасов хорошо вписывается в общий подход взаимодействий. Важно контролировать, чтобы функция Extraction корректно обрабатывала все сценарии.


223-259: Расширенный осмотр оружия с учётом патрона в патроннике и состояния затвора.

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


272-273: Добавление абстрактного метода Extract.

Архитектурно целесообразно вынести реализацию на сервер / клиент отдельно. Убедитесь, что все дочерние классы успешно переопределяют данный метод.


296-296: Сброс затвора в состояние "взвёлся".

Выглядит логичным при ручном взведении. Убедитесь, что другие состояния (например, AutoCycle) не нарушены этим изменением.


347-360: Добавлена поддержка безгильзовых патронов при ручном цикле.

Проверьте, что CartridgeAmmoComponent.DeleteOnSpawn корректно учитывается при переходах состояния затвора. Потенциально могут возникать edge-cases с мгновенными “исчезающими” патронами, проверьте тестами.

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: 0

🧹 Nitpick comments (1)
Resources/Audio/_White/Guns/attributions.yml (1)

9-9: Отсутствует символ новой строки в конце файла.
Статический анализ обнаружил, что в конце файла отсутствует новая строка, что может нарушать стандарты оформления YAML. Рекомендуется добавить новую строку в конец файла для соответствия общим требованиям.

🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 9-9: no new line character at the end of file

(new-line-at-end-of-file)

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 25305ae and 92cc382.

⛔ Files ignored due to path filters (1)
  • Resources/Audio/_White/Guns/shotgun_rack.ogg is excluded by !**/*.ogg
📒 Files selected for processing (4)
  • Resources/Audio/_White/Guns/attributions.yml (1 hunks)
  • Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml (1 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml (6 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml
🧰 Additional context used
🪛 YAMLlint (1.35.1)
Resources/Audio/_White/Guns/attributions.yml

[error] 9-9: no new line character at the end of file

(new-line-at-end-of-file)

⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML Linter
  • GitHub Check: Test Packaging
  • GitHub Check: build (ubuntu-latest)
🔇 Additional comments (2)
Resources/Prototypes/DeltaV/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml (1)

23-24: Новый атрибут soundRack добавлен корректно.
Новый атрибут в компоненте BallisticAmmoProvider задаёт путь к аудиофайлу для эффекта "ракета". Убедитесь, что файл по адресу /Audio/_White/Guns/shotgun_rack.ogg существует и доступен в сборке проекта.

Resources/Audio/_White/Guns/attributions.yml (1)

6-9: Добавлена новая запись для файла shotgun_rack.ogg.
Новая запись в атрибуциях корректно указывает на аудиофайл shotgun_rack.ogg с лицензией CC-BY-NC-SA-4.0, атрибуцией "Made by vanx for WWDP" и источником https://github.com/WWhiteDreamProject/wwdpublic. Проверьте, соответствует ли источник требованиям проекта.

🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 9-9: no new line character at the end of file

(new-line-at-end-of-file)

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: 0

🧹 Nitpick comments (1)
Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Snipers/snipers.yml (1)

15-19: Проверка новых свойств BallisticAmmoProvider

Новые свойства autoCycle и soundRack добавлены в компонент BallisticAmmoProvider. Убедитесь, что значение autoCycle: false соответствует игровым требованиям для данного оружия, а также что путь в свойстве soundRack (/Audio/Weapons/Guns/Cock/batrifle_cock.ogg) корректен. Отрицательное значение volume: -3 следует проверить на соответствие ожидаемому уровню звука. Рекомендуется заменить неинформативный комментарий # WWDP на более понятное описание для будущего сопровождения кода.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 770212e and 203a294.

📒 Files selected for processing (2)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml (5 hunks)
  • Resources/Prototypes/_NF/Entities/Objects/Weapons/Guns/Snipers/snipers.yml (1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml
⏰ Context from checks skipped due to timeout of 90000ms (4)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML Linter
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Test Packaging

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: 0

🧹 Nitpick comments (1)
Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml (1)

110-118: Новые звуковые компоненты для RPG-7
Добавлены компоненты EmitSoundOnPickup, EmitSoundOnDrop и EmitSoundOnLand с ссылками на коллекции звуков RiflesPickUp и RiflesDrop. Обратите внимание, что использование звуков коллекции «Rifles» для RPG-7 может быть неоднозначным с точки зрения тематической согласованности оружия-пускателя; рекомендуется убедиться, что выбранное звучание соответствует ожидаемому аудиофону для данного типа оружия.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 203a294 and 212bb71.

⛔ Files ignored due to path filters (33)
  • Resources/Audio/_White/Equip/Laser/drop1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Laser/pickup1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Laser/pickup2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pistol/drop1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pistol/drop2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pistol/drop3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pistol/pickup1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pistol/pickup2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pistol/pickup3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pistol/pickup4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pulse/drop1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Pulse/pickup1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Revolver/drop1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Revolver/drop2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Revolver/pickup1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Revolver/pickup2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Rifle/drop1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Rifle/drop2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Rifle/pickup1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Rifle/pickup2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Rifle/pickup3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Shotgun/drop1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Shotgun/drop2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Shotgun/pickup1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Shotgun/pickup2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Shotgun/pickup3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Sniper/drop1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Sniper/drop2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Sniper/drop3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Sniper/pickup1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/Sniper/pickup2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/clothingrustle2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Equip/clothingrustle4.ogg is excluded by !**/*.ogg
📒 Files selected for processing (12)
  • Resources/Prototypes/Entities/Clothing/Back/backpacks.yml (1 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml (2 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml (4 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml (3 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml (3 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml (2 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml (3 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml (2 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml (8 hunks)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml (6 hunks)
  • Resources/Prototypes/_Goobstation/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml (1 hunks)
  • Resources/Prototypes/_White/SoundCollections/equip.yml (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • Resources/Prototypes/_Goobstation/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml
🚧 Files skipped from review as they are similar to previous changes (6)
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Pistols/pistols.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Snipers/snipers.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/LMGs/lmgs.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml
⏰ Context from checks skipped due to timeout of 90000ms (5)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML Linter
  • GitHub Check: YAML map schema validator
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Test Packaging
🔇 Additional comments (9)
Resources/Prototypes/_White/SoundCollections/equip.yml (1)

1-87: Проверка структуры звуковых коллекций
Файл успешно определяет все требуемые звуковые коллекции (для Rifles, Pistols, Lasers, Pulse, Snipers, Shotguns и Revolvers). Структура YAML корректна, пути к аудиофайлам заданы единообразно. Рекомендуется убедиться, что BOM (если присутствует в первой строке) не вызывает проблем при парсинге.

Resources/Prototypes/Entities/Objects/Weapons/Guns/Battery/battery_guns.yml (2)

10-12: Добавление звука экипировки
В компоненте Clothing для BaseWeaponBattery добавлен параметр equipSound: /Audio/_White/Equip/clothingrustle4.ogg, что позволит воспроизводить звук при экипировке оружия. Изменение выглядит корректно и соответствует общей стратегии улучшения звуковой обратной связи.


53-61: Новые компоненты звуковых эффектов
Добавлены компоненты EmitSoundOnPickup, EmitSoundOnDrop и EmitSoundOnLand с указанием соответствующих коллекций звуков (LasersPickUp и LasersDrop). Реализация выглядит логичной; убедитесь, что звуковые эффекты данных коллекций подходят по тематике для данного типа оружия.

Resources/Prototypes/Entities/Clothing/Back/backpacks.yml (2)

13-14: Параметр звука при одевании рюкзака
В компоненте Clothing сущности ClothingBackpack добавлен параметр equipSound: /Audio/_White/Equip/clothingrustle4.ogg, что улучшает звуковое сопровождение при экипировке. Изменение выполнено корректно.


17-18: Компонент для звука при поднятии
Добавлен новый компонент EmitSoundOnPickup, который будет воспроизводить звук /Audio/_White/Equip/clothingrustle2.ogg при поднятии рюкзака. Дополнение выглядит уместным и соответствует другим изменениям в системе.

Resources/Prototypes/Entities/Objects/Weapons/Guns/Revolvers/revolvers.yml (2)

18-20: Параметр звука экипировки для револьвера
В компоненте Clothing сущности BaseWeaponRevolver добавлен параметр equipSound: /Audio/_White/Equip/clothingrustle2.ogg. Это изменение должно обеспечить согласованное звуковое сопровождение при экипировке оружия.


71-79: Новые звуковые компоненты для револьвера
Добавлены компоненты EmitSoundOnPickup, EmitSoundOnDrop и EmitSoundOnLand с использованием коллекций RevolversPickUp и RevolversDrop. Реализация корректна и соответствует аналогичным изменениям для других типов оружия.

Resources/Prototypes/Entities/Objects/Weapons/Guns/Launchers/launchers.yml (2)

90-92: Параметр звука экипировки для RPG-7
В компоненте Clothing сущности RPG-7 добавлен параметр equipSound: /Audio/_White/Equip/clothingrustle4.ogg. Это изменение улучшает звуковой фидбэк при экипировке оружия.


104-105: Изменение режима автозацикливания
Свойство autoCycle для RPG-7 изменено с false на true. Рекомендуется проверить, как данное изменение влияет на игровой процесс, чтобы гарантировать, что автоматическая циклизация заряда не нарушает баланс игры.

Copy link
Collaborator

@Remuchi Remuchi left a comment

Choose a reason for hiding this comment

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

Needs to be playtested first


if (GetBallisticShots(component) >= component.Capacity)
{
Popup("Full", uid, args.User); // todo locale
Copy link
Collaborator

Choose a reason for hiding this comment

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

No TODOs in reacy-to-review PRs please

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.

3 participants