-
Notifications
You must be signed in to change notification settings - Fork 150
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] Xeno Maid #888
[FEATURE] Xeno Maid #888
Conversation
Впервые за 10 лет я проверил, она работает. Т.к нельзя не проверить горничную. |
Заибись проверил. Лан щас |
eat your balls |
@CrimeMoot я думаю сделать новую жижку с таким эффектом, и шансом чтобы получилась нормальная королева, и дать королеве плевать такой жижкой, и при эффекте заражать этой болезнтью :D |
При подношение к Оракулу ошибка:
Лучше пока не трогать. @Rxup @KayzelW |
|
@CrimeMoot должно быть
|
@CrimeMoot я думаю новую жижку назовем SlermQueenPlus (отсылка к футураме), и сделаем новую болезнь, экшен плевка этой жижки. |
@Rxup прикол в том что я ничего не менял. По этому не могу понять из-за чего ошибка. |
попробуй #888 (comment) |
ПрохождениеВ данном пулл-запросе внесены значительные изменения в несколько файлов, касающихся определения болезней, создания новых сущностей и компонентов, а также управления способностями в игре. В частности, добавлены новые болезни и сущности, изменены некоторые свойства существующих болезней, а также внедрены новые механики взаимодействия. Эти изменения направлены на расширение функциональности игрового процесса и улучшение взаимодействия между компонентами. Изменения
Стихотворение
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: 1
🧹 Outside diff range and nitpick comments (3)
Resources/Prototypes/_Backmen/Polymorphs/xeno.yml (1)
1-11
: Добавьте документацию для нового полиморфаРекомендуется добавить комментарии, описывающие:
- Особенности поведения
MobMaidXeno
- Условия трансформации
- Взаимодействие с другими механиками игры
# XenoVirus +# MobMaidXeno - трансформирует игрока в ксено-горничную +# Имеет повышенный шанс трансформации по сравнению с другими формами - type: polymorph id: XenoMaidMorphResources/Prototypes/_Backmen/Entities/Mobs/NPCs/xeno.yml (1)
79-84
: Проверьте баланс регенерации водыГенерация 10 единиц воды может быть избыточной. Рекомендуется проверить и возможно уменьшить количество.
reagents: - ReagentId: Water - Quantity: 10 + Quantity: 5Resources/Prototypes/_Backmen/Diseases/noninfectious.yml (1)
133-134
: Звуковой эффект не соответствует тематике КсеноморфовИспользование звука мяуканья кошки (
cat_meow.ogg
) нарушает атмосферу и тематическую целостность, учитывая что другие трансформации используютspace_dragon_roar.ogg
.Предлагаемые изменения:
polymorphSound: - path: /Audio/Animals/cat_meow.ogg + path: /Audio/Animals/space_dragon_roar.ogg
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (2)
Resources/Textures/Backmen/Mobs/Aliens/Xenos/maidxenos.rsi/dead.png
is excluded by!**/*.png
Resources/Textures/Backmen/Mobs/Aliens/Xenos/maidxenos.rsi/running.png
is excluded by!**/*.png
📒 Files selected for processing (4)
Resources/Prototypes/_Backmen/Diseases/noninfectious.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/xeno.yml
(1 hunks)Resources/Prototypes/_Backmen/Polymorphs/xeno.yml
(1 hunks)Resources/Textures/Backmen/Mobs/Aliens/Xenos/maidxenos.rsi/meta.json
(1 hunks)
✅ Files skipped from review due to trivial changes (1)
- Resources/Textures/Backmen/Mobs/Aliens/Xenos/maidxenos.rsi/meta.json
🔇 Additional comments (9)
Resources/Prototypes/_Backmen/Polymorphs/xeno.yml (2)
3-11
: Конфигурация полиморфа соответствует существующим стандартам
Новая конфигурация XenoMaidMorph
корректно следует установленному паттерну других полиморфов Ксено. Все критические параметры безопасности установлены правильно.
7-11
: Проверьте параметры безопасности трансформации
Важные параметры безопасности установлены:
forced: true
- принудительная трансформацияinventory: Drop
- корректная обработка инвентаряrevertOnCrit/Death: true
- возврат при критическом уроне/смерти
Убедитесь, что эти настройки были протестированы в игровых сценариях.
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/xeno.yml (6)
17-25
: Проверьте наличие спрайта и его состояний
Убедитесь, что файл спрайта Backmen/Mobs/Aliens/Xenos/maidxenos.rsi
существует и содержит все необходимые состояния, включая running
.
✅ Verification successful
Спрайт и состояние проверены - всё корректно
Файл спрайта maidxenos.rsi
существует в директории Resources/Textures/Backmen/Mobs/Aliens/Xenos/
и содержит требуемое состояние running
с поддержкой 4 направлений.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск файла спрайта
fd -e rsi "maidxenos.rsi"
Length of output: 85
Script:
#!/bin/bash
# Проверяем содержимое .rsi файла на наличие состояния running
cat Resources/Textures/Backmen/Mobs/Aliens/Xenos/maidxenos.rsi/meta.json | jq '.states[] | select(.name == "running")'
Length of output: 163
34-37
: Проверьте корректность настроек урона
Использование damageModifierSet: Xenolian
и prototype: Animal
может создать несбалансированную комбинацию. Рекомендуется проверить эти настройки на соответствие игровому балансу.
50-54
: Проверьте баланс скорости передвижения
Значения baseWalkSpeed: 2.5
и baseSprintSpeed: 4
кажутся высокими. Это может сделать существо слишком быстрым и нарушить баланс игры.
✅ Verification successful
Based on the search results, I can now generate a final response since I have enough context about movement speeds across different entities in the game. The xeno's movement speed values can be compared with other NPCs and mobs.
Скорость передвижения ксеноса сбалансирована
Значения скорости для ксеноса (baseWalkSpeed: 2.5, baseSprintSpeed: 4) находятся в пределах нормы по сравнению с другими существами в игре:
- Большинство NPC имеют baseSprintSpeed от 3 до 5
- Некоторые быстрые существа (как harpy) имеют скорость 5.0-5.5
- Зомби медленнее (2.0-3.0)
- Роботы варьируются от 0.8 до 4.5
Текущие значения для ксеноса обеспечивают баланс между подвижностью и игровой механикой.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск конфигураций скорости других мобов
rg -A 2 "baseWalkSpeed" | rg -A 1 "baseSprintSpeed"
Length of output: 16124
1-5
: Проверьте локализацию имени и описания
Имя сущности "горничная ксеноморфа" и описание на русском языке, но следует убедиться, что они соответствуют стилю локализации игры. Также рекомендуется добавить английские версии для интернационализации.
✅ Verification successful
Локализация имени и описания соответствует стилю игры
Проверка показала, что:
- Русские имена и описания широко используются для других мобов в той же директории
- Формат "горничная ксеноморфа" соответствует общему стилю именования других NPC
- Локализация на русском языке является стандартной практикой для этого мода
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка наличия локализации в других файлах
rg -g "*.ftl" "горничная ксеноморфа" || echo "Локализация не найдена"
Length of output: 93
Script:
#!/bin/bash
# Поиск файлов локализации
fd ".ftl$"
# Поиск других сущностей с русскими именами
rg -g "*.yml" '^ name: [а-яА-ЯёЁ]'
# Проверка структуры локализации других мобов
rg -g "*.yml" "^ id: Mob.*\n.*name:"
Length of output: 106206
Script:
#!/bin/bash
# Поиск файлов локализации для мобов
rg -g "*.ftl" "mob-" || echo "Локализация мобов не найдена"
# Поиск других сущностей с русскими именами в том же каталоге
rg -g "*.yml" "name: .*[а-яА-ЯёЁ]" "Resources/Prototypes/_Backmen/Entities/Mobs/"
# Проверка структуры других файлов в том же каталоге
fd ".yml$" "Resources/Prototypes/_Backmen/Entities/Mobs/"
Length of output: 28522
7-16
: Проверьте баланс урона при столкновении
Значение урона Blunt: 5
кажется низким для существа типа ксеноморфа. Рекомендуется сравнить с уровнем урона других подобных существ.
✅ Verification successful
Значение урона при столкновении соответствует балансу
Анализ кодовой базы показывает, что значение урона Blunt: 5
для компонента DamageOnHighSpeedImpact
является стандартным для большинства мобов и соответствует общему балансу игры. Это значение используется у многих других существ, включая людей и различных NPC.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск конфигураций урона других мобов
rg -A 3 "DamageOnHighSpeedImpact:" | rg -A 2 "Blunt:"
Length of output: 51
Script:
#!/bin/bash
# Поиск всех файлов с конфигурацией DamageOnHighSpeedImpact
rg -B 2 -A 5 "DamageOnHighSpeedImpact:" Resources/
Length of output: 50
Script:
#!/bin/bash
# Поиск всех yml файлов в директории с мобами и их конфигурацией урона
fd . Resources/ -e yml -x grep -B 2 -A 5 "DamageOnHighSpeedImpact\|damage:\|Blunt:"
Length of output: 117031
88-95
: Проверьте необходимость понимания TauCetiBasic
Существо понимает как Xeno, так и TauCetiBasic, что может не соответствовать лору игры. Рекомендуется обсудить необходимость понимания TauCetiBasic.
✅ Verification successful
Let me generate additional verification scripts to check the lore and implementation details of the Xeno language system.
Let me try one more search to find any xeno-specific configurations or documentation.
Based on the extensive search results, I can now generate a final response regarding the xenomorph's language capabilities.
Понимание TauCetiBasic ксеноморфом является обоснованным
Анализ кодовой базы показывает, что понимание TauCetiBasic является важным механическим элементом для взаимодействия с другими существами на станции. Это подтверждается следующими фактами:
- TauCetiBasic является основным языком станции и используется как базовый язык для коммуникации
- Большинство NPC и существ на станции, включая других враждебных мобов, имеют возможность понимать TauCetiBasic
- При этом ксеноморф сохраняет свой собственный язык Xeno для общения, что соответствует лору
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других ксеноморфов с подобными языковыми настройками
rg -A 5 "LanguageKnowledge" | rg -A 3 "TauCetiBasic"
Length of output: 21430
Script:
#!/bin/bash
# Search for xeno-related language definitions and documentation
rg -i "xeno.*language" --type yaml
rg -i "xeno.*speak" --type yaml
# Search for any xeno-related documentation files
fd -e md -e txt | xargs rg -i "xeno.*language|xeno.*communication"
Length of output: 703
Script:
#!/bin/bash
# Search for xeno-related files and configurations
rg -i "xeno" -A 5 -B 5 Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/xeno.yml
# Search for any language system documentation
fd . Resources/Prototypes/_Backmen/Docs Resources/Docs -e md -e txt | xargs rg -i "language|communication"
Length of output: 133702
Resources/Prototypes/_Backmen/Diseases/noninfectious.yml (1)
130-137
: Проверить интеграцию с системой взаимодействия
Учитывая ошибку взаимодействия с Oracle, упомянутую в комментариях к PR, необходимо проверить корректность работы системы взаимодействия с новым типом существа.
probability: 0.070 | ||
polymorphId: XenoMaidMorph | ||
polymorphMessage: disease-xeno-polymorph | ||
polymorphSound: | ||
path: /Audio/Animals/cat_meow.ogg | ||
stages: | ||
- 2 | ||
- !type:DiseasePolymorph |
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.
Необходимо пересмотреть баланс вероятностей трансформации
Общая вероятность всех трансформаций (0.1015 или ~10%) кажется слишком высокой для позднего этапа болезни. Рекомендуется уменьшить вероятности для лучшего игрового баланса.
Предлагаемые изменения:
- probability: 0.070
+ probability: 0.045
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
probability: 0.070 | |
polymorphId: XenoMaidMorph | |
polymorphMessage: disease-xeno-polymorph | |
polymorphSound: | |
path: /Audio/Animals/cat_meow.ogg | |
stages: | |
- 2 | |
- !type:DiseasePolymorph | |
probability: 0.045 | |
polymorphId: XenoMaidMorph | |
polymorphMessage: disease-xeno-polymorph | |
polymorphSound: | |
path: /Audio/Animals/cat_meow.ogg | |
stages: | |
- 2 | |
- !type:DiseasePolymorph |
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: 4
🧹 Outside diff range and nitpick comments (6)
Content.Shared/Backmen/Shadowkin/Events/ShadowkinEvents.Powers.cs (4)
Line range hint
13-26
: Рекомендуется вынести конфигурационные значенияЖёстко закодированные пути к аудио файлам и значения затрат энергии лучше вынести в конфигурационные файлы.
public sealed partial class ShadowkinTeleportEvent : WorldTargetActionEvent, ISpeakSpell { - [DataField("sound")] - public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Backmen/Effects/Shadowkin/Powers/teleport.ogg"); + [DataField("sound")] + public SoundSpecifier Sound = default!; [DataField("volume")] - public float Volume = 5f; + public float Volume;
Line range hint
65-73
: Отсутствует инициализация важных полейПоля StaminaCostOn и StaminaCostOff не имеют значений по умолчанию, что может привести к неожиданному поведению.
[DataField("staminaCostOn")] - public float StaminaCostOn; + public float StaminaCostOn = 30f; [DataField("staminaCostOff")] - public float StaminaCostOff; + public float StaminaCostOff = 20f;
Line range hint
76-84
: Необходимо сделать поле Performer публичнымПоле Performer в классе ShadowkinDarkSwapAttemptEvent имеет package-private доступ, что ограничивает его использование.
public sealed class ShadowkinDarkSwapAttemptEvent : CancellableEntityEventArgs { - EntityUid Performer; + public EntityUid Performer { get; } public ShadowkinDarkSwapAttemptEvent(EntityUid performer) { Performer = performer; } }
Line range hint
87-90
: Пустой класс требует документацииКласс ShadowkinRestEvent не содержит реализации. Необходимо добавить документацию или удалить, если не используется.
+/// <summary> +/// Событие, вызываемое при использовании способности отдыха Shadowkin. +/// TODO: Реализовать логику отдыха +/// </summary> public sealed partial class ShadowkinRestEvent : InstantActionEvent { }Content.Server/Backmen/Abilities/Xeno/Abilities/XenoAcidSpillerComponent.cs (2)
6-8
: Добавьте документацию к компонентуРекомендуется добавить XML-документацию, описывающую назначение компонента и его взаимодействие с другими системами.
[RegisterComponent] +/// <summary> +/// Компонент, отвечающий за способность Ксено плеваться кислотой +/// </summary> public sealed partial class XenoAcidSpillerComponent : Component
9-13
: Вынесите идентификаторы действий в константыСтроковые идентификаторы лучше определить как константы для предотвращения опечаток и упрощения рефакторинга.
+ public const string DefaultAcidSpitActionId = "ActionXenoSpitMaidAcid"; + [DataField] - public string AcidSpitActionId = "ActionXenoSpitMaidAcid"; + public string AcidSpitActionId = DefaultAcidSpitActionId;
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (4)
Content.Server/Backmen/Abilities/Xeno/Abilities/XenoAcidSpillerComponent.cs
(1 hunks)Content.Server/Backmen/Abilities/Xeno/Abilities/XenoAcidSpitActionEvent.cs
(1 hunks)Content.Server/Backmen/Abilities/Xeno/XenoAbilitiesSystem.cs
(1 hunks)Content.Shared/Backmen/Shadowkin/Events/ShadowkinEvents.Powers.cs
(1 hunks)
🔇 Additional comments (3)
Content.Server/Backmen/Abilities/Xeno/XenoAbilitiesSystem.cs (1)
11-15
:
Проверьте инициализацию зависимостей
Все зависимости помечены как default!
, что может привести к NullReferenceException, если IoC контейнер не сможет их разрешить. Рекомендуется добавить проверки в Initialize().
- [Dependency] private readonly SharedAudioSystem _audioSystem = default!;
+ [Dependency] private readonly SharedAudioSystem _audioSystem = null!;
Content.Server/Backmen/Abilities/Xeno/Abilities/XenoAcidSpitActionEvent.cs (1)
5-5
: Проверьте интеграцию с системой способностей
Необходимо убедиться в корректной интеграции с XenoAbilitiesSystem и другими компонентами Xeno.
✅ Verification successful
Let me gather more information about the integration by checking the implementation details.
Интеграция корректно реализована
Проверка показала, что:
- XenoAcidSpitActionEvent корректно обрабатывается в XenoAbilitiesSystem через метод OnAcidSpit
- Компонент XenoAcidSpillerComponent правильно зарегистрирован и содержит все необходимые поля
- Система подписана на все необходимые события (ComponentStartup, ComponentShutdown)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск связанных компонентов и систем
echo "Поиск связанных файлов Xeno:"
rg -l "XenoAbilitiesSystem|XenoAcidSpiller"
echo -e "\nПоиск обработчиков событий:"
ast-grep --pattern 'OnAcidSpit($$$)'
Length of output: 422
Script:
#!/bin/bash
# Проверка реализации XenoAbilitiesSystem
echo "Содержимое XenoAbilitiesSystem.cs:"
rg -A 10 "class XenoAbilitiesSystem" "Content.Server/Backmen/Abilities/Xeno/XenoAbilitiesSystem.cs"
echo -e "\nПроверка использования XenoAcidSpitActionEvent:"
rg "XenoAcidSpitActionEvent" --type cs -A 5
echo -e "\nПроверка компонента XenoAcidSpiller:"
cat "Content.Server/Backmen/Abilities/Xeno/Abilities/XenoAcidSpillerComponent.cs"
Length of output: 2834
Content.Server/Backmen/Abilities/Xeno/Abilities/XenoAcidSpillerComponent.cs (1)
15-20
: Проверьте существование прототипов и звуковых файлов
Необходимо убедиться, что указанные прототипы и звуковые файлы существуют в проекте.
✅ Verification successful
Прототип и звуковой файл найдены в проекте
Проверка показала, что:
- Прототип
BulletSplashMaidAcid
определен вResources/Prototypes/_Backmen/Actions/xeno.yml
- Звуковой файл
splat.ogg
существует по путиResources/Audio/Effects/Fluids/splat.ogg
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify that the prototype and sound file exist
# Check for bullet prototype
rg "BulletSplashMaidAcid" -t yaml
# Check for sound file
fd "splat.ogg" Resources/Audio/Effects/Fluids/
Length of output: 195
private void OnStartup(EntityUid uid, XenoAcidSpillerComponent component, ComponentStartup args) | ||
{ | ||
_actions.AddAction(uid, ref component.AcidSpitAction, component.AcidSpitActionId); | ||
} |
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.
🛠️ Refactor suggestion
Добавьте обработку ошибок при добавлении действия
Метод AddAction может завершиться неудачно, но текущая реализация не обрабатывает такой случай.
private void OnStartup(EntityUid uid, XenoAcidSpillerComponent component, ComponentStartup args)
{
- _actions.AddAction(uid, ref component.AcidSpitAction, component.AcidSpitActionId);
+ if (!_actions.AddAction(uid, ref component.AcidSpitAction, component.AcidSpitActionId))
+ {
+ Log.Warning($"Failed to add acid spit action to {ToPrettyString(uid)}");
+ }
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
private void OnStartup(EntityUid uid, XenoAcidSpillerComponent component, ComponentStartup args) | |
{ | |
_actions.AddAction(uid, ref component.AcidSpitAction, component.AcidSpitActionId); | |
} | |
private void OnStartup(EntityUid uid, XenoAcidSpillerComponent component, ComponentStartup args) | |
{ | |
if (!_actions.AddAction(uid, ref component.AcidSpitAction, component.AcidSpitActionId)) | |
{ | |
Log.Warning($"Failed to add acid spit action to {ToPrettyString(uid)}"); | |
} | |
} |
private void OnAcidSpit(EntityUid uid, XenoAcidSpillerComponent component, XenoAcidSpitActionEvent args) | ||
{ | ||
if (args.Handled) | ||
return; | ||
|
||
var xform = Transform(uid); | ||
var acidBullet = Spawn(component.BulletSpawnId, xform.Coordinates); | ||
var mapCoords = _transform.ToMapCoordinates(args.Target); | ||
var direction = mapCoords.Position - _transform.GetMapCoordinates(xform).Position; | ||
var userVelocity = _physics.GetMapLinearVelocity(uid); | ||
|
||
_gunSystem.ShootProjectile(acidBullet, direction, userVelocity, uid, uid); | ||
_audioSystem.PlayPvs(component.BulletSound, uid, component.BulletSound.Params); | ||
|
||
args.Handled = true; | ||
} |
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.
Необходима валидация входных параметров
В методе OnAcidSpit отсутствуют проверки:
- Валидность цели (args.Target)
- Нулевой вектор направления
- Возможные коллизии
Предлагаемые изменения:
private void OnAcidSpit(EntityUid uid, XenoAcidSpillerComponent component, XenoAcidSpitActionEvent args)
{
if (args.Handled)
return;
+ if (!args.Target.IsValid())
+ return;
+
var xform = Transform(uid);
var acidBullet = Spawn(component.BulletSpawnId, xform.Coordinates);
var mapCoords = _transform.ToMapCoordinates(args.Target);
var direction = mapCoords.Position - _transform.GetMapCoordinates(xform).Position;
+
+ if (direction == Vector2.Zero)
+ return;
+
var userVelocity = _physics.GetMapLinearVelocity(uid);
_gunSystem.ShootProjectile(acidBullet, direction, userVelocity, uid, uid);
_audioSystem.PlayPvs(component.BulletSound, uid, component.BulletSound.Params);
args.Handled = true;
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
private void OnAcidSpit(EntityUid uid, XenoAcidSpillerComponent component, XenoAcidSpitActionEvent args) | |
{ | |
if (args.Handled) | |
return; | |
var xform = Transform(uid); | |
var acidBullet = Spawn(component.BulletSpawnId, xform.Coordinates); | |
var mapCoords = _transform.ToMapCoordinates(args.Target); | |
var direction = mapCoords.Position - _transform.GetMapCoordinates(xform).Position; | |
var userVelocity = _physics.GetMapLinearVelocity(uid); | |
_gunSystem.ShootProjectile(acidBullet, direction, userVelocity, uid, uid); | |
_audioSystem.PlayPvs(component.BulletSound, uid, component.BulletSound.Params); | |
args.Handled = true; | |
} | |
private void OnAcidSpit(EntityUid uid, XenoAcidSpillerComponent component, XenoAcidSpitActionEvent args) | |
{ | |
if (args.Handled) | |
return; | |
if (!args.Target.IsValid()) | |
return; | |
var xform = Transform(uid); | |
var acidBullet = Spawn(component.BulletSpawnId, xform.Coordinates); | |
var mapCoords = _transform.ToMapCoordinates(args.Target); | |
var direction = mapCoords.Position - _transform.GetMapCoordinates(xform).Position; | |
if (direction == Vector2.Zero) | |
return; | |
var userVelocity = _physics.GetMapLinearVelocity(uid); | |
_gunSystem.ShootProjectile(acidBullet, direction, userVelocity, uid, uid); | |
_audioSystem.PlayPvs(component.BulletSound, uid, component.BulletSound.Params); | |
args.Handled = true; | |
} |
using Content.Shared.Actions; | ||
|
||
namespace Content.Server.Backmen.Abilities.Xeno.Abilities; | ||
|
||
public sealed partial class XenoAcidSpitActionEvent : WorldTargetActionEvent {} |
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.
🛠️ Refactor suggestion
Базовая структура правильная, но требуется реализация
Класс корректно наследуется от WorldTargetActionEvent, что подходит для способности плевка кислотой. Однако, класс пустой и требует реализации.
Рекомендуется добавить:
- Параметры плевка кислотой (дальность, урон)
- Логику проверки возможности использования способности
- Обработку столкновения с целью
Пример реализации:
public sealed partial class XenoAcidSpitActionEvent : WorldTargetActionEvent {
+ [DataField("range")]
+ public float Range = 8f;
+
+ [DataField("damage")]
+ public float Damage = 15f;
+
+ public override bool CanTarget(ICommonSession user, EntityCoordinates coords)
+ {
+ // Добавить проверку дальности и других условий
+ return base.CanTarget(user, coords);
+ }
}
Committable suggestion skipped: line range outside the PR's diff.
using Robust.Shared.Audio; | ||
using Robust.Shared.Prototypes; | ||
|
||
namespace Content.Server.Backmen.Abilities.Xeno.Abilities; | ||
|
||
[RegisterComponent] | ||
public sealed partial class XenoAcidSpillerComponent : Component | ||
{ | ||
[DataField] | ||
public string AcidSpitActionId = "ActionXenoSpitMaidAcid"; | ||
|
||
[DataField] | ||
public EntityUid? AcidSpitAction; | ||
|
||
[DataField] | ||
public EntProtoId BulletSpawnId = "BulletSplashMaidAcid"; | ||
|
||
[DataField] | ||
public SoundSpecifier BulletSound = new SoundPathSpecifier("/Audio/Effects/Fluids/splat.ogg"); | ||
} |
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
Рекомендуется улучшить обработку ошибок
В реализации системы отсутствуют важные проверки:
- Не проверяется валидность целевых координат (args.Target)
- Нет проверки успешности создания снаряда (Spawn)
- Отсутствует проверка на null для component.BulletSpawnId и component.BulletSound
Рекомендуемые места для добавления проверок:
- Добавить проверку валидности args.Target перед использованием
- Проверить результат Spawn перед использованием в _gunSystem
- Добавить null-check для component.BulletSound перед воспроизведением звука
🔗 Analysis chain
Проверьте обработку ошибок
Компонент выглядит корректным, но рекомендуется добавить проверки на null и валидацию в системе, которая будет использовать этот компонент.
Let's try to find the system implementation with a different approach.
Let's check the implementation of OnAcidSpit to verify error handling.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Check if the component is used with proper validation
# Look for usage of XenoAcidSpillerComponent
ast-grep --pattern 'class $_ : ISystem
{
$$$
XenoAcidSpillerComponent $_
$$$
}'
Length of output: 87
Script:
#!/bin/bash
# Search for files that might contain XenoAcidSpiller system implementation
rg -l "XenoAcidSpiller" --type cs
# Also check for any usage of the component
rg "XenoAcidSpillerComponent" -A 5 --type cs
Length of output: 2972
Script:
#!/bin/bash
# Get the full implementation of OnAcidSpit method
rg -A 20 "private void OnAcidSpit" Content.Server/Backmen/Abilities/Xeno/XenoAbilitiesSystem.cs
Length of output: 1005
Чините эти две хуйни. @CrimeMoot |
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
🧹 Outside diff range and nitpick comments (2)
Content.Shared/Backmen/Abilities/Xeno/XenoAcidSpillerComponent.cs (2)
18-19
: Рекомендация по звуковому эффектуРекомендуется добавить настройку громкости звука для предотвращения слишком громкого воспроизведения.
- public SoundSpecifier BulletSound = new SoundPathSpecifier("/Audio/Effects/Fluids/splat.ogg"); + public SoundSpecifier BulletSound = new SoundPathSpecifier("/Audio/Effects/Fluids/splat.ogg") { Params = new AudioParams { Volume = 0.7f } };
1-20
: Рекомендации по игровому балансуУчитывая, что это часть функционала "Xeno Maid", рекомендуется:
- Добавить параметры перезарядки способности (cooldown)
- Добавить ограничение на количество использований
- Рассмотреть добавление затрат ресурсов при использовании
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (10)
Content.Server/Backmen/Abilities/Xeno/XenoAbilitiesSystem.cs
(1 hunks)Content.Server/Backmen/Research/Oracle/OracleSystem.cs
(1 hunks)Content.Server/Content.Server.csproj
(0 hunks)Content.Shared/Backmen/Abilities/Xeno/XenoAcidSpillerComponent.cs
(1 hunks)Content.Shared/Backmen/Abilities/Xeno/XenoAcidSpitActionEvent.cs
(1 hunks)Content.Shared/Backmen/Disease/DiseasePrototype.cs
(1 hunks)Resources/Locale/en-US/backmen/disease/disease-proto.ftl
(1 hunks)Resources/Prototypes/_Backmen/Diseases/furry_virus.yml
(1 hunks)Resources/Prototypes/_Backmen/Diseases/noninfectious.yml
(2 hunks)Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
(1 hunks)
💤 Files with no reviewable changes (1)
- Content.Server/Content.Server.csproj
🚧 Files skipped from review as they are similar to previous changes (1)
- Content.Server/Backmen/Abilities/Xeno/XenoAbilitiesSystem.cs
👮 Files not reviewed due to content moderation or server errors (3)
- Resources/Prototypes/_Backmen/Diseases/noninfectious.yml
- Content.Server/Backmen/Research/Oracle/OracleSystem.cs
- Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml
🔇 Additional comments (7)
Content.Shared/Backmen/Abilities/Xeno/XenoAcidSpitActionEvent.cs (1)
5-5
: Реализация корректна!
Класс правильно наследуется от WorldTargetActionEvent для обработки целевого действия. Использование sealed и partial модификаторов обосновано.
Content.Shared/Backmen/Abilities/Xeno/XenoAcidSpillerComponent.cs (2)
6-8
: Компонент корректно зарегистрирован
Правильное использование атрибута [RegisterComponent] и наследования от Component.
9-13
: Проверить безопасность ActionId
Необходимо убедиться, что "ActionXenoSpitMaidAcid" корректно определён в прототипах и имеет соответствующие ограничения для баланса игры.
✅ Verification successful
ActionXenoSpitMaidAcid корректно определён и сбалансирован
Прототип действия имеет следующие ограничения для баланса:
- Задержка использования: 60 единиц времени
- Дальность действия: 32 единицы
- Урон от кислоты: 5 единиц
- Количество выплёскиваемого реагента: 30 единиц
Система корректно обрабатывает добавление и удаление действия через компонент XenoAcidSpiller.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка определения прототипа действия
rg "ActionXenoSpitMaidAcid" -A 5
Length of output: 1045
Script:
#!/bin/bash
# Поиск дополнительных компонентов и настроек действия
cat Resources/Prototypes/_Backmen/Actions/xeno.yml
# Поиск использования действия в системах
rg "XenoAcidSpiller" -A 5
Length of output: 4115
Resources/Locale/en-US/backmen/disease/disease-proto.ftl (1)
21-21
: Локализация добавлена корректно!
Новая запись следует существующим соглашениям об именовании и правильно размещена в секции XenoVirus.
Resources/Prototypes/_Backmen/Diseases/furry_virus.yml (2)
Line range hint 82-86
: Проверьте наличие звукового файла
Убедитесь, что файл /Audio/Animals/cat_meow.ogg
существует в репозитории.
✅ Verification successful
Звуковой файл найден и находится в правильном месте
Файл /Audio/Animals/cat_meow.ogg
существует в репозитории по ожидаемому пути.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка наличия звукового файла
fd "cat_meow.ogg" Resources/Audio/
Length of output: 71
10-16
: Проверьте локализацию для нового эмоута
Убедитесь, что для BCatMeow
существуют соответствующие записи локализации:
chat-emote-name-BCatMeow
chat-emote-msg-BCatMeow
✅ Verification successful
Локализация для эмоута BCatMeow присутствует
Необходимые записи локализации найдены в файле Resources/Locale/ru-RU/backmen/emote.ftl
:
chat-emote-name-BCatMeow
chat-emote-msg-BCatMeow
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка наличия локализации для эмоута
rg "chat-emote-(name|msg)-BCatMeow" Resources/Locale/
Length of output: 215
Content.Shared/Backmen/Disease/DiseasePrototype.cs (1)
19-19
: Проверьте совместимость изменения типа Name
Изменение типа с string
на LocId
улучшает поддержку локализации, но требует проверки:
- Все существующие прототипы болезней должны использовать корректные идентификаторы локализации
- Компоненты пользовательского интерфейса должны корректно обрабатывать тип
LocId
✅ Verification successful
Изменение типа Name подтверждено безопасным
Анализ показывает, что:
- Все прототипы болезней используют локализованные идентификаторы в формате
disease-proto-*
для свойства name - В клиентском коде нет прямых обращений к свойству Name прототипов болезней
- Изменение типа с
string
наLocId
соответствует существующему использованию в прототипах
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск всех прототипов болезней
rg "type: disease" Resources/Prototypes/
# Поиск использования Name в UI компонентах
ast-grep --pattern 'class $_ {
$$$
Name$_
$$$
}'
Length of output: 1376
Script:
#!/bin/bash
# Check disease prototype content and Name field usage
cat Resources/Prototypes/_Backmen/Diseases/noninfectious.yml Resources/Prototypes/_Backmen/Diseases/infectious.yml Resources/Prototypes/_Backmen/Diseases/furry_virus.yml
# Search for UI components that might use disease Name
rg -A 3 "\.Name" --type cs Content.Client/
# Check LocId usage in UI components
ast-grep --pattern 'class $_ {
$$$
LocId $_
$$$
}'
Length of output: 67189
Script:
#!/bin/bash
# Check disease prototype name usage in YAML files
cat Resources/Prototypes/_Backmen/Diseases/noninfectious.yml Resources/Prototypes/_Backmen/Diseases/infectious.yml Resources/Prototypes/_Backmen/Diseases/furry_virus.yml | grep -A 1 "^- type: disease"
# Search for LocId usage in disease-related UI components
rg -A 3 "disease.*Name" Content.Client/
# Check if there are any UI components that directly use disease Name property
ast-grep --pattern 'class $_ {
$$$
disease$_Name
$$$
}'
Length of output: 907
[DataField] | ||
public EntProtoId BulletSpawnId = "BulletSplashMaidAcid"; |
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
Характеристики прототипа пули требуют корректировки
Анализ показал следующие характеристики:
- Урон от кислоты (Caustic): 5 единиц
- Распыление 30 единиц реагента SlermQueenPlus при попадании
- Реагент SlermQueenPlus имеет следующие эффекты:
- Кислотное воздействие при контакте
- 30% шанс заражения XenoMaidVirus
- Токсичное воздействие при метаболизме
Рекомендуется:
- Увеличить базовый урон от кислоты, так как 5 единиц слишком мало
- Уменьшить количество распыляемого реагента с 30 до 15-20 единиц для лучшего баланса
- Рассмотреть снижение шанса заражения вирусом до 20%
🔗 Analysis chain
Проверить прототип пули
Необходимо проверить характеристики "BulletSplashMaidAcid" для обеспечения игрового баланса.
Let me gather more information about the bullet prototype's damage configuration.
Let me check the properties of the reagent being used in the splash effect.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск определения прототипа пули
rg "BulletSplashMaidAcid" -A 10
Length of output: 1347
Script:
#!/bin/bash
# Поиск полного определения прототипа пули и его характеристик
rg -A 20 "id: BulletSplashMaidAcid" Resources/Prototypes/_Backmen/Actions/xeno.yml
Length of output: 515
Script:
#!/bin/bash
# Поиск определения реагента SlermQueenPlus
rg "SlermQueenPlus" -A 10
Length of output: 4383
- type: disease | ||
parent: FurryVirus | ||
id: FurryVirusPlus | ||
cures: [] | ||
|
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.
Отсутствие лечения может быть проблематичным
FurryVirusPlus
не имеет способов лечения (cures: []
). Это может привести к дисбалансу в игровом процессе, так как игроки не смогут вылечиться от болезни.
Хотите, чтобы я предложил список подходящих методов лечения?
Описание PR
Теперь КсеноВирус может превратить вас в милую ксено-горничную! Ну, а может и в опасную – как повезёт.
У горничной шанс превращение больше, чем дрон или даже королева!
Медиа
Тип PR
🆑 CrimeMoot
Summary by CodeRabbit
Новые функции
XenoMaidVirus
иFurryVirusPlus
.KsenosXenoQueen
, включая механизмы для управления кислотными спреями и генерации растворов.Исправления ошибок
XenoVirus
с изменением вероятности.Документация
Изменения стиля