-
Notifications
You must be signed in to change notification settings - Fork 12
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
[PORT] Turret AI #731
[PORT] Turret AI #731
Conversation
Warning Rate limit exceeded@CrimeMoot has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 12 minutes and 49 seconds before requesting another review. ⌛ How to resolve this issue?After the wait time has elapsed, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout. Please see our FAQ for further information. 📒 Files selected for processing (1)
WalkthroughПредставлен новый механизм управления турелями, который позволяет изменять режимы их работы. Система включает новые компоненты Changes
Sequence DiagramsequenceDiagram
participant User
participant Turret
participant TurretControlSystem
User->>TurretControlSystem: Выбор режима управления
TurretControlSystem->>Turret: Установка режима фракции
TurretControlSystem->>Turret: Обновление поведения
Poem
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? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
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)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (5)
Content.Shared/_Cats/TurretControl/Components/TurretControllableComponent.cs (1)
3-4
: Новый компонент без логики.
Рекомендуется добавить XML-комментарии (докстринг) для уточнения назначения и использования компонента в будущем.Content.Shared/_Cats/TurretControl/Components/TurretControllerComponent.cs (1)
5-10
: Добавление TurretControllerComponent выглядит разумно.
Подумайте о том, чтобы сделать полеRequiredComponents
неизменяемым (например, объявить какreadonly
или использовать неизменяемую коллекцию), если в рантайме вам не нужно динамически изменять этот список. Это повысит надежность и упростит чтение кода.Content.Shared/_Cats/TurretControl/TurretControlSystem.cs (1)
56-63
: SetFaction удаляет все предыдущие фракции и добавляет только одну.
Убедитесь, что подобное поведение соответствует игровому замыслу и не нужно ли сохранять некоторые фракции при переключении режима турели.Resources/Prototypes/_SpaceCats/Entities/Objects/Weapons/Guns/turrets.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)
Resources/Prototypes/_SpaceCats/ai_factions.yml (1)
37-37
: Добавьте пустую строку в конец файлаДля соответствия стандартам YAML необходимо добавить пустую строку в конец файла.
🧰 Tools
🪛 yamllint (1.35.1)
[error] 37-37: 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
📒 Files selected for processing (9)
Content.Shared/Verbs/VerbCategory.cs
(1 hunks)Content.Shared/_Cats/TurretControl/Components/TurretControllableComponent.cs
(1 hunks)Content.Shared/_Cats/TurretControl/Components/TurretControllerComponent.cs
(1 hunks)Content.Shared/_Cats/TurretControl/TurretControlSystem.cs
(1 hunks)Resources/Locale/ru-RU/_Cats/turret-control.ftl
(1 hunks)Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Player/silicon.yml
(1 hunks)Resources/Prototypes/_SpaceCats/Entities/Objects/Weapons/Guns/turrets.yml
(1 hunks)Resources/Prototypes/_SpaceCats/ai_factions.yml
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- Resources/Locale/ru-RU/_Cats/turret-control.ftl
🧰 Additional context used
🪛 yamllint (1.35.1)
Resources/Prototypes/_SpaceCats/Entities/Objects/Weapons/Guns/turrets.yml
[error] 9-9: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_SpaceCats/ai_factions.yml
[error] 37-37: no new line character at the end of file
(new-line-at-end-of-file)
🔇 Additional comments (14)
Content.Shared/_Cats/TurretControl/Components/TurretControllableComponent.cs (1)
1-1
: Использование пространства имен выглядит корректно.Content.Shared/_Cats/TurretControl/Components/TurretControllerComponent.cs (2)
1-1
: Импорт Robust.Shared.Prototypes используется по назначению.
3-3
: Выбор пространства имен соответствует структуре проекта.Content.Shared/_Cats/TurretControl/TurretControlSystem.cs (7)
1-5
: Необходимые пространства имен импортированы корректно.
7-8
: Пространство имен выглядит логичным и следует общей структуре проекта.
9-12
: Класс TurretControlSystem корректно наследуется от EntitySystem.
Убедитесь, что внедрение зависимостей (Dependency) инициализировано при старте.
13-21
: Статические константы для идентификаторов фракций.
Убедитесь, что данные прототипы"TurretPassive"
,"TurretPeace"
,"TurretHostile"
существуют и правильно настроены.
22-25
: Инициализация системы и подписка на событие GetVerbsEvent произведены верно.
27-42
: Метод OnGetVerbs проверяет необходимые компоненты корректно.
Убедитесь, что условиеif (!HasComp(e.User, component.Value.Component.GetType())) ...
действительно отражает логику, при которой контроллер даёт право переключать режимы. Если возможна ситуация, когда часть компонентов не требуется, стоит продумать более гибкие проверки.
44-54
: CreateVerb аккуратно инкапсулирует логику создания нового верба.
Добавлена понятная локализация через Loc.GetString, что упрощает перевод.Content.Shared/Verbs/VerbCategory.cs (1)
89-89
: Добавлена новая категория вербов TurretControlMode.
Категория успешно интегрируется с системой вербов, что расширяет функционал управления турелями.Resources/Prototypes/_SpaceCats/Entities/Objects/Weapons/Guns/turrets.yml (1)
1-9
: Структура сущности выглядит правильнойКомпоненты
NpcFactionMember
иTurretControllable
корректно настроены для реализации управления турелью.🧰 Tools
🪛 yamllint (1.35.1)
[error] 9-9: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml (1)
100-100
: Компонент TurretController добавлен корректноИнтеграция компонента
TurretController
в сущностьAdminObserver
выполнена правильно и не нарушает существующую функциональность.Resources/Prototypes/Entities/Mobs/Player/silicon.yml (1)
439-441
: Корректная реализация компонента управления турелями!Добавление компонента TurretController с зависимостью от StationAiHeld логично интегрируется в сущность StationAiBrain и соответствует целям PR по реализации управления турелями через ИИ.
Давайте проверим корректность реализации компонента:
✅ Verification successful
Подтверждаю корректность реализации управления турелями!
Проверка кода показала, что компоненты и система управления турелями реализованы правильно:
- TurretControllerComponent требует наличие StationAiHeld, что обеспечивает контроль только со стороны ИИ станции
- TurretControllableComponent корректно маркирует турели, которыми можно управлять
- TurretControlSystem реализует логику управления с тремя режимами работы турели:
- Пассивный (не атакует никого)
- Мирный (атакует только враждебные цели)
- Враждебный (атакует всех)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Проверяем наличие всех необходимых компонентов # и их взаимодействие в системе # Поиск определений компонентов echo "Поиск определений компонентов:" ast-grep --pattern 'class TurretController' ast-grep --pattern 'class TurretControllableComponent' # Поиск использования компонентов в системах echo "Поиск использования в системах:" ast-grep --pattern 'class TurretControlSystem'Length of output: 66025
Script:
#!/bin/bash # Поиск определений и использования компонентов TurretController echo "=== Поиск файлов с TurretControl ===" fd -e cs -e yml "TurretControl" echo -e "\n=== Содержимое файлов с TurretControl ===" fd -e cs -e yml "TurretControl" -x cat {} echo -e "\n=== Поиск использования в системах ===" rg -l "TurretController" --type csLength of output: 3403
hostile: | ||
- Dragon | ||
- SimpleHostile | ||
- Xeno |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Удалите дублирующуюся запись фракции Xeno
В списке hostile
фракции TurretPeace
фракция Xeno
указана дважды.
hostile:
- Dragon
- SimpleHostile
- Xeno
- Blob
- Flesh
- - Xeno
- Zombie
Also applies to: 12-12
- type: npcFaction | ||
id: TurretPassive | ||
|
||
- type: npcFaction | ||
id: TurretPeace | ||
hostile: | ||
- Dragon | ||
- SimpleHostile | ||
- Xeno | ||
- Blob | ||
- Flesh | ||
- Xeno | ||
- Zombie | ||
|
||
- type: npcFaction | ||
id: TurretHostile | ||
hostile: | ||
- Dragon | ||
- NanoTrasen | ||
- Mouse | ||
- Passive | ||
- PetsNT | ||
- SimpleHostile | ||
- SimpleNeutral | ||
- Syndicate | ||
- Xeno | ||
- Zombie | ||
- Revolutionary | ||
- Blob | ||
- SuperZloy | ||
- Spanish | ||
- Britan | ||
- SpecialForce | ||
- CombineForce | ||
- CentralCommand | ||
- FleshHuman | ||
- Flesh |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Обнаружены несоответствия в списках враждебных фракций
В файле Resources/Prototypes/_SpaceCats/ai_factions.yml
найдены следующие проблемы:
- В списке
TurretPeace
дублируется фракцияXeno
- В списке
TurretHostile
отсутствуют фракцииChangeling
,Diona
,GlimmerMonster
,PsionicInterloper
,ShadowkinDarkHostile
,ShadowkinDarkFriendly
,MalfunctioningRobot
,AiEnemy
,AiTurret
, которые определены в кодовой базе - В списке
TurretHostile
присутствует фракцияFleshHuman
, которая не определена в кодовой базе
Рекомендации:
- Удалить дублирующуюся запись
Xeno
из спискаTurretPeace
- Рассмотреть необходимость добавления отсутствующих фракций в список
TurretHostile
- Удалить или определить фракцию
FleshHuman
🔗 Analysis chain
Проверьте полноту списков враждебных фракций
Убедитесь, что списки враждебных фракций полные и актуальные. Рекомендуется проверить:
- Все ли необходимые фракции включены
- Нет ли устаревших или неиспользуемых фракций
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск всех определений фракций в кодовой базе
rg -g '*.yml' 'type:\s*npcFaction' -A 3
Length of output: 8188
🧰 Tools
🪛 yamllint (1.35.1)
[error] 37-37: no new line character at the end of file
(new-line-at-end-of-file)
There was a problem hiding this 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
♻️ Duplicate comments (1)
Resources/Prototypes/_SpaceCats/ai_factions.yml (1)
6-13
:⚠️ Potential issueОбнаружено дублирование фракции Xeno
В списке
hostile
фракцииTurretPeace
фракцияXeno
указана дважды (строки 9 и 12).hostile: - Dragon - SimpleHostile - Xeno - Blob - Flesh - - Xeno - Zombie
🧹 Nitpick comments (1)
Resources/Prototypes/_SpaceCats/ai_factions.yml (1)
36-36
: Добавьте пустую строку в конец файлаСогласно стандартам YAML, файл должен заканчиваться пустой строкой.
- Flesh +
🧰 Tools
🪛 yamllint (1.35.1)
[error] 36-36: 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
📒 Files selected for processing (1)
Resources/Prototypes/_SpaceCats/ai_factions.yml
(1 hunks)
🧰 Additional context used
🪛 yamllint (1.35.1)
Resources/Prototypes/_SpaceCats/ai_factions.yml
[error] 36-36: no new line character at the end of file
(new-line-at-end-of-file)
🔇 Additional comments (2)
Resources/Prototypes/_SpaceCats/ai_factions.yml (2)
1-3
: Корректное определение пассивной фракции турелиОпределение фракции
TurretPassive
соответствует режиму "Никто" и реализовано правильно.
17-36
: Требуется проверка определений фракцийНеобходимо проверить корректность списка враждебных фракций:
Отсутствуют следующие определенные в кодовой базе фракции:
- Changeling
- Diona
- GlimmerMonster
- PsionicInterloper
- ShadowkinDarkHostile
- ShadowkinDarkFriendly
- MalfunctioningRobot
- AiEnemy
- AiTurret
Рекомендуется проверить актуальность существующих фракций.
✅ Verification successful
Let me verify the existence and location of these factions with another search to ensure we have complete information.
Определения фракций в файле корректны
После анализа всех определений фракций в кодовой базе можно сделать следующие выводы:
Все перечисленные в комментарии "отсутствующие" фракции на самом деле определены в других файлах и не должны быть добавлены в список враждебных фракций для
TurretHostile
, так как:
Changeling
имеет свой собственный список враждебных фракцийGlimmerMonster
иPsionicInterloper
враждебны только друг другуShadowkinDarkHostile
иShadowkinDarkFriendly
враждебны только друг другуAiEnemy
иAiTurret
враждебны только друг другуMalfunctioningRobot
имеет свой специфический список враждебных фракцийDiona
определена отдельно со своим списком враждебных фракцийТекущий список враждебных фракций для
TurretHostile
полностью соответствует логике игры и не требует дополнений.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Описание: Поиск определений фракций в кодовой базе rg -g '*.yml' 'id:\s*(Changeling|Diona|GlimmerMonster|PsionicInterloper|ShadowkinDarkHostile|ShadowkinDarkFriendly|MalfunctioningRobot|AiEnemy|AiTurret)'Length of output: 5827
Script:
#!/bin/bash # Поиск всех определений фракций в файлах ai_factions.yml fd -g '*ai_factions.yml' --exec cat {}Length of output: 6182
🧰 Tools
🪛 yamllint (1.35.1)
[error] 36-36: no new line character at the end of file
(new-line-at-end-of-file)
Теперь ЦИИ может с помощью ПКМ настроить турели на атаку по определённым целям.
Есть 3 режима целей:
Но он может настраивать только турели с определённым компонентом, которых пока что нет на картах.
Summary by CodeRabbit
Новые функции
Локализация
Компоненты
TurretControllableComponent
,TurretControllerComponent
иTurretControlSystem
.Фракции
TurretPassive
,TurretPeace
иTurretHostile
.