Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

[FEATURE] Xeno Maid #888

Merged
merged 9 commits into from
Dec 8, 2024
Merged

[FEATURE] Xeno Maid #888

merged 9 commits into from
Dec 8, 2024

Conversation

CrimeMoot
Copy link
Contributor

@CrimeMoot CrimeMoot commented Nov 2, 2024

Описание PR

Теперь КсеноВирус может превратить вас в милую ксено-горничную! Ну, а может и в опасную – как повезёт.
У горничной шанс превращение больше, чем дрон или даже королева!

Медиа

2024-11-02_20-56-35

Тип PR

  • Feature

🆑 CrimeMoot

  • add: В вирус ксено добавлено новое очаровательное превращение в ксено-горничную.

Summary by CodeRabbit

  • Новые функции

    • Добавлены новые заболевания: XenoMaidVirus и FurryVirusPlus.
    • Введены новые компоненты для сущности KsenosXenoQueen, включая механизмы для управления кислотными спреями и генерации растворов.
    • Добавлены новые действия и события, связанные с кислотным спреем для персонажа Xeno.
  • Исправления ошибок

    • Обновлен эффект заболевания XenoVirus с изменением вероятности.
  • Документация

    • Добавлены метаданные для графического ресурса сущности.
  • Изменения стиля

    • Обновлены текстовые записи для новых заболеваний в локализации.

@CrimeMoot CrimeMoot requested a review from Rxup as a code owner November 2, 2024 16:19
@github-actions github-actions bot added Changes: Sprites Should be reviewed or fixed by people who are knowledgeable with spriting or visual design. No C# Нету кода. labels Nov 2, 2024
Copy link
Contributor

github-actions bot commented Nov 2, 2024

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

Resources/Textures/Backmen/Mobs/Aliens/Xenos/maidxenos.rsi

State Old New Status
dead Added
running Added

Edit: diff updated after 7d5c8e0

@CrimeMoot
Copy link
Contributor Author

Впервые за 10 лет я проверил, она работает. Т.к нельзя не проверить горничную.

@CrimeMoot
Copy link
Contributor Author

Заибись проверил. Лан щас

@voko421
Copy link
Contributor

voko421 commented Nov 2, 2024

eat your balls

@Rxup
Copy link
Owner

Rxup commented Nov 3, 2024

@CrimeMoot я думаю сделать новую жижку с таким эффектом, и шансом чтобы получилась нормальная королева, и дать королеве плевать такой жижкой, и при эффекте заражать этой болезнтью :D

@KayzelW KayzelW added the Require Testing Требуется тестирование! label Nov 8, 2024
@CrimeMoot
Copy link
Contributor Author

CrimeMoot commented Nov 9, 2024

При подношение к Оракулу ошибка:

[FATL] unhandled: Robust.Shared.Utility.DebugAssertException: Exception of type 'Robust.Shared.Utility.DebugAssertException' was thrown.
   at Robust.Shared.Utility.DebugTools.Assert(Boolean condition) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Shared\Utility\DebugTools.cs:line 37
   at Content.Shared.Interaction.SharedInteractionSystem.InteractDoAfter(EntityUid user, EntityUid used, Nullable`1 target, EntityCoordinates clickLocation, Boolean canReach, Boolean checkDeletion) in C:\Users\math\Space-Cats-14\Content.Shared\Interaction\SharedInteractionSystem.cs:line 1065
   at Content.Shared.Interaction.SharedInteractionSystem.InteractUsing(EntityUid user, EntityUid used, EntityUid target, EntityCoordinates clickLocation, Boolean checkCanInteract, Boolean checkCanUse) in C:\Users\math\Space-Cats-14\Content.Shared\Interaction\SharedInteractionSystem.cs:line 1025
   at Content.Shared.Interaction.SharedInteractionSystem.UserInteraction(EntityUid user, EntityCoordinates coordinates, Nullable`1 target, Boolean altInteract, Boolean checkCanInteract, Boolean checkAccess, Boolean checkCanUse) in C:\Users\math\Space-Cats-14\Content.Shared\Interaction\SharedInteractionSystem.cs:line 440
   at Content.Shared.Interaction.SharedInteractionSystem.HandleUseInteraction(ICommonSession session, EntityCoordinates coords, EntityUid uid) in C:\Users\math\Space-Cats-14\Content.Shared\Interaction\SharedInteractionSystem.cs:line 314
   at Robust.Shared.Input.Binding.PointerInputCmdHandler.<>c__DisplayClass5_0.<.ctor>b__0(PointerInputCmdArgs& args) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Shared\Input\Binding\InputCmdHandler.cs:line 97
   at Robust.Shared.Input.Binding.PointerInputCmdHandler.HandleCmdMessage(IEntityManager entManager, ICommonSession session, IFullInputCmdMessage message) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Shared\Input\Binding\InputCmdHandler.cs:line 127
   at Robust.Server.GameObjects.InputSystem.InputMessageHandler(InputCmdMessage message, EntitySessionEventArgs eventArgs) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Server\GameObjects\EntitySystems\InputSystem.cs:line 41
   at Robust.Shared.GameObjects.EntityEventBus.<>c__DisplayClass4_0`1.<SubscribeEvent>b__0(Unit& ev) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Shared\GameObjects\EntityEventBus.Broadcast.cs:line 173
   at Robust.Server.GameObjects.ServerEntityManager.TickUpdate(Single frameTime, Boolean noPredictions, Histogram histogram) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Server\GameObjects\ServerEntityManager.cs:line 192
   at Robust.Server.BaseServer.Update(FrameEventArgs frameEventArgs) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Server\BaseServer.cs:line 704
   at Robust.Shared.Timing.GameLoop.Run() in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Shared\Timing\GameLoop.cs:line 235
   at Robust.Server.BaseServer.MainLoop() in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Server\BaseServer.cs:line 571
   at Robust.Server.Program.ParsedMain(CommandLineArgs args, Boolean contentStart, ServerOptions options) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Server\Program.cs:line 74
   at Robust.Server.Program.Start(String[] args, ServerOptions options, Boolean contentStart) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Server\Program.cs:line 42
   at Robust.Server.ContentStart.Start(String[] args) in C:\Users\math\Space-Cats-14\RobustToolbox\Robust.Server\ContentStart.cs:line 10
   at Content.Server.Program.Main(String[] args) in C:\Users\math\Space-Cats-14\Content.Server\Program.cs:line 9

Лучше пока не трогать. @Rxup @KayzelW
Не могу понять. Либо вылет из-за того что он пытается выдать реагент, а реагент изменён новым реагентом.

@Rxup
Copy link
Owner

Rxup commented Nov 9, 2024

SharedInteractionSystem.cs

DebugTools.Assert(!IsDeleted(user) && !IsDeleted(used) && !IsDeleted(target));

@Rxup
Copy link
Owner

Rxup commented Nov 9, 2024

@CrimeMoot
в
private void OnInteractUsing(EntityUid uid, OracleComponent component, InteractUsingEvent args)
нет
args.Handled = true;

должно быть

        QueueDel(args.Used);
        args.Handled = true;

@Rxup
Copy link
Owner

Rxup commented Nov 9, 2024

@CrimeMoot я думаю новую жижку назовем SlermQueenPlus (отсылка к футураме), и сделаем новую болезнь, экшен плевка этой жижки.

@CrimeMoot
Copy link
Contributor Author

CrimeMoot commented Nov 9, 2024

@Rxup прикол в том что я ничего не менял. По этому не могу понять из-за чего ошибка.
Точней. Почему она вообще появилась.

@Rxup
Copy link
Owner

Rxup commented Nov 9, 2024

@Rxup прикол в том что я ничего не менял. По этому не могу понять из-за чего ошибка. Точней. Почему она вообще появилась.

попробуй #888 (comment)

@Roudenn Roudenn added the Needs Refactor Необходимо сделать рефактор, источник: "Поверь мне брат" label Nov 25, 2024
Copy link
Contributor

coderabbitai bot commented Nov 25, 2024

Прохождение

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

Изменения

Файл Изменения
Resources/Prototypes/_Backmen/Diseases/noninfectious.yml Изменена вероятность эффекта DiseasePolymorph для XenoVirus (0.050 → 0.030); добавлена новая болезнь XenoMaidVirus с эффектами и лечением.
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/xeno.yml Добавлена новая сущность MobMaidXeno с различными компонентами для взаимодействия и поведения.
Resources/Prototypes/_Backmen/Polymorphs/xeno.yml Добавлена новая полиморфная конфигурация XenoMaidMorph для MobMaidXeno.
Resources/Textures/Backmen/Mobs/Aliens/Xenos/maidxenos.rsi/meta.json Добавлен новый файл meta.json с метаданными для графического ресурса.
Content.Server/Backmen/Abilities/Xeno/XenoAbilitiesSystem.cs Добавлен класс XenoAbilitiesSystem для управления способностями Xeno; реализованы методы для обработки действия "кислотного плевка".
Content.Shared/Backmen/Shadowkin/Events/ShadowkinEvents.Powers.cs Добавлены новые свойства для управления звуковыми эффектами и затратами энергии в классе ShadowkinDarkSwapEvent.
Content.Server/Backmen/Research/Oracle/OracleSystem.cs Изменен последний элемент в списке RewardReagents с "FluorosulfuricAcid" на "SlermQueenPlus".
Content.Server/Content.Server.csproj Удалены папки _Shitmed\Body\Organ\ и _Shitmed\Body\Systems\ из структуры проекта.
Content.Shared/Backmen/Abilities/Xeno/XenoAcidSpillerComponent.cs Добавлен компонент XenoAcidSpillerComponent для обработки способностей кислотообразования.
Content.Shared/Backmen/Abilities/Xeno/XenoAcidSpitActionEvent.cs Добавлен класс XenoAcidSpitActionEvent для обработки события "кислотного плевка".
Content.Shared/Backmen/Disease/DiseasePrototype.cs Изменен тип свойства Name с string на LocId в классе DiseasePrototype.
Resources/Locale/en-US/backmen/disease/disease-proto.ftl Добавлена новая запись для болезни "Slerm Alpha-virus".
Resources/Prototypes/_Backmen/Diseases/furry_virus.yml Добавлены новые сущности: эмоция BCatMeow и болезнь FurryVirusPlus.
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/TGMC_xeno.yml Добавлены новые компоненты для сущности KsenosXenoQueen, включая XenoAcidSpiller, SolutionContainerManager и Udder.

Стихотворение

В норке новой радость мы нашли,
С вирусами, что в игре ожили.
Служанка ксеноморфа, смех и свет,
Кислотный плевок — вот наш ответ!
Пусть игра цветет, как в сказке,
Мы рады всем изменениям, как в празднике! 🐰✨


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

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

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

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

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai 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: 1

🧹 Outside diff range and nitpick comments (3)
Resources/Prototypes/_Backmen/Polymorphs/xeno.yml (1)

1-11: Добавьте документацию для нового полиморфа

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

  • Особенности поведения MobMaidXeno
  • Условия трансформации
  • Взаимодействие с другими механиками игры
 # XenoVirus
+# MobMaidXeno - трансформирует игрока в ксено-горничную
+# Имеет повышенный шанс трансформации по сравнению с другими формами
 
 - type: polymorph
   id: XenoMaidMorph
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/xeno.yml (1)

79-84: Проверьте баланс регенерации воды

Генерация 10 единиц воды может быть избыточной. Рекомендуется проверить и возможно уменьшить количество.

       reagents:
       - ReagentId: Water
-        Quantity: 10
+        Quantity: 5
Resources/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

📥 Commits

Reviewing files that changed from the base of the PR and between 3921468 and 7a4fa9b.

⛔ 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, необходимо проверить корректность работы системы взаимодействия с новым типом существа.

Comment on lines 130 to 137
probability: 0.070
polymorphId: XenoMaidMorph
polymorphMessage: disease-xeno-polymorph
polymorphSound:
path: /Audio/Animals/cat_meow.ogg
stages:
- 2
- !type:DiseasePolymorph
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Необходимо пересмотреть баланс вероятностей трансформации

Общая вероятность всех трансформаций (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.

Suggested change
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

@github-actions github-actions bot added size/L Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation Changes: No C# and removed size/L labels Nov 30, 2024
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: 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

📥 Commits

Reviewing files that changed from the base of the PR and between 7a4fa9b and 66022d0.

📒 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: ⚠️ Potential issue

Проверьте инициализацию зависимостей

Все зависимости помечены как 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

Comment on lines +43 to +46
private void OnStartup(EntityUid uid, XenoAcidSpillerComponent component, ComponentStartup args)
{
_actions.AddAction(uid, ref component.AcidSpitAction, component.AcidSpitActionId);
}
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Добавьте обработку ошибок при добавлении действия

Метод 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.

Suggested change
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)}");
}
}

Comment on lines +26 to +41
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;
}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Необходима валидация входных параметров

В методе 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.

Suggested change
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;
}

Comment on lines 1 to 5
using Content.Shared.Actions;

namespace Content.Server.Backmen.Abilities.Xeno.Abilities;

public sealed partial class XenoAcidSpitActionEvent : WorldTargetActionEvent {}
Copy link
Contributor

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Базовая структура правильная, но требуется реализация

Класс корректно наследуется от 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.

Comment on lines 1 to 20
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");
}
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Рекомендуется улучшить обработку ошибок

В реализации системы отсутствуют важные проверки:

  • Не проверяется валидность целевых координат (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

@CatBackGround
Copy link
Contributor

CatBackGround commented Dec 5, 2024

Чините эти две хуйни. @CrimeMoot
XenoAcidSpitActionEvent
ActionXenoSpitMaidAcid

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: 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", рекомендуется:

  1. Добавить параметры перезарядки способности (cooldown)
  2. Добавить ограничение на количество использований
  3. Рассмотреть добавление затрат ресурсов при использовании
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

📥 Commits

Reviewing files that changed from the base of the PR and between 66022d0 and 7d5c8e0.

📒 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 улучшает поддержку локализации, но требует проверки:

  1. Все существующие прототипы болезней должны использовать корректные идентификаторы локализации
  2. Компоненты пользовательского интерфейса должны корректно обрабатывать тип LocId
✅ Verification successful

Изменение типа Name подтверждено безопасным

Анализ показывает, что:

  1. Все прототипы болезней используют локализованные идентификаторы в формате disease-proto-* для свойства name
  2. В клиентском коде нет прямых обращений к свойству Name прототипов болезней
  3. Изменение типа с 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

Comment on lines +15 to +16
[DataField]
public EntProtoId BulletSpawnId = "BulletSplashMaidAcid";
Copy link
Contributor

Choose a reason for hiding this comment

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

💡 Codebase verification

Характеристики прототипа пули требуют корректировки

Анализ показал следующие характеристики:

  • Урон от кислоты (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

Comment on lines +17 to +21
- type: disease
parent: FurryVirus
id: FurryVirusPlus
cures: []

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Отсутствие лечения может быть проблематичным

FurryVirusPlus не имеет способов лечения (cures: []). Это может привести к дисбалансу в игровом процессе, так как игроки не смогут вылечиться от болезни.

Хотите, чтобы я предложил список подходящих методов лечения?

@Rxup Rxup merged commit df43832 into Rxup:master Dec 8, 2024
14 checks passed
@CrimeMoot CrimeMoot deleted the XenoVirus branch December 9, 2024 13:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation Changes: No C# Changes: Sprites Should be reviewed or fixed by people who are knowledgeable with spriting or visual design. Needs Refactor Необходимо сделать рефактор, источник: "Поверь мне брат" No C# Нету кода. Require Testing Требуется тестирование! size/L
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants