-
Notifications
You must be signed in to change notification settings - Fork 154
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
[Fix, Feature] Some Fixes, sponsor traits #968
Conversation
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: 8
🧹 Outside diff range and nitpick comments (14)
Content.Client/Access/UI/AccessOverriderWindow.xaml.cs (1)
91-92
: Улучшение безопасности типов при проверке доступаИзменения корректно обрабатывают новую структуру данных, извлекая Id из объектов доступа.
Для оптимизации производительности, предлагаю кэшировать результат Select:
- button.Pressed = state.TargetAccessReaderIdAccessList?.Select(x => x.Id).Contains(accessName) ?? false; - button.Disabled = (!state.AllowedModifyAccessList?.Select(x => x.Id).Contains(accessName)) ?? true; + var targetIds = state.TargetAccessReaderIdAccessList?.Select(x => x.Id).ToList(); + var allowedIds = state.AllowedModifyAccessList?.Select(x => x.Id).ToList(); + button.Pressed = targetIds?.Contains(accessName) ?? false; + button.Disabled = (!allowedIds?.Contains(accessName)) ?? true;Content.Server/Backmen/Traits/Specific/Giant/TraitGiantComponent.cs (2)
3-5
: Добавьте документацию к компонентуРекомендуется добавить XML-документацию, описывающую назначение компонента и его взаимодействие с другими системами.
Предлагаемые изменения:
[RegisterComponent] +/// <summary> +/// Компонент, определяющий масштаб для гигантских существ. +/// Используется системой TraitGiantSystem для изменения размера сущности. +/// </summary> public sealed partial class TraitGiantComponent : Component
1-8
: Рассмотрите добавление интерфейса для трейтовПоскольку это часть системы трейтов, рекомендуется:
- Создать общий интерфейс для всех трейтов
- Реализовать механизм приоритетов для случаев конфликта трейтов
- Добавить систему валидации совместимости трейтов
Content.Shared/Backmen/Cocoon/CocoonDoAfterEvent.cs (2)
6-9
: Рекомендуется добавить документацию для классаДобавьте XML-документацию для описания назначения класса и его использования в системе коконов. Это улучшит понимание кода для других разработчиков.
Предлагаемые изменения:
[Serializable, NetSerializable] +/// <summary> +/// Событие, возникающее при попытке создания кокона. +/// </summary> public sealed partial class CocoonDoAfterEvent : SimpleDoAfterEvent { }
1-14
: Рассмотреть необходимость валидацииТекущая реализация классов пуста. Возможно, следует добавить базовую валидацию или свойства для передачи дополнительных данных между клиентом и сервером.
Хотите, чтобы я предложил пример реализации с валидацией и необходимыми свойствами?
Content.Server/Backmen/Cocoon/CocoonerSystem.cs (2)
98-114
: Рассмотрите использование разных иконок для действий "Cocoon" и "Uncocoon"В методах
AddCocoonVerb
иAddUnCocoonVerb
для обоих действий используется одна и та же иконка/Textures/Interface/Actions/web.png
. Рекомендуется использовать разные иконки, чтобы игроки могли легко различать эти действия в интерфейсе.Also applies to: 116-132
178-189
: Используйте константы для строковых значений "mumble"Вместо повторяющегося использования строкового литерала
"mumble"
, лучше определить его как константу или использовать перечисление (enum). Это улучшит читаемость и поддерживаемость кода.Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs (1)
119-120
: Конструктор содержит слишком много параметровКонструктор класса
HumanoidProfileEditor
имеет большое количество параметров, что может усложнить поддержку и чтение кода. Рассмотрите возможность использования паттерна Dependency Injection для уменьшения количества передаваемых параметров или объединения связанных параметров в объекты конфигурации.Resources/Prototypes/_Backmen/Traits/specific.yml (1)
8-9
: Несоответствие в форматировании комментариевВ строках 8 и 9 присутствуют комментарии, оформленные по-разному: без пробела и с пробелом после знака
#
. Рекомендуется использовать единообразное форматирование комментариев для лучшей читаемости кода.Исправленное форматирование:
- - BSSDrone #backmen: bssdrone + - BSSDrone # backmen: bssdroneContent.Shared/Traits/TraitPrototype.cs (1)
22-26
: Улучшите описание свойства SponsorOnlyТекущее описание свойства
SponsorOnly
недостаточно информативно. Рекомендуется уточнить комментарий, чтобы ясно понимать назначение свойства.Предлагаемое исправление:
- /// <summary> - /// Is sponsorOnly - /// </summary> + /// <summary> + /// Определяет, доступен ли этот трейт только для спонсоров. + /// </summary>Content.Server/Backmen/Cocoon/CocoonerComponent.cs (1)
5-6
: Добавьте документацию для компонентаРекомендуется добавить XML-документацию, объясняющую назначение компонента и его роль в системе коконов. Это улучшит понимание кода другими разработчиками.
+/// <summary> +/// Компонент, отвечающий за возможность создания коконов +/// </summary> [RegisterComponent, NetworkedComponent] public sealed partial class CocoonerComponent : ComponentContent.Server/Backmen/Arachne/ArachneSystem.cs (3)
148-151
: Улучшить читаемость проверки физикиСложное условие проверки препятствий можно вынести в отдельный метод для улучшения читаемости.
Предлагаю следующий рефакторинг:
-((Resolve(entity, ref physics, false) && - (physics.CollisionLayer & (int)CollisionGroup.Impassable) != 0) - && !(TryComp<DoorComponent>(entity, out var door) && - door.State != DoorState.Closed)) +private bool IsImpassableObstacle(EntityUid entity, PhysicsComponent? physics = null) +{ + if (!Resolve(entity, ref physics, false)) + return false; + + if ((physics.CollisionLayer & (int)CollisionGroup.Impassable) == 0) + return false; + + // Открытые двери не считаются препятствием + if (TryComp<DoorComponent>(entity, out var door) && door.State != DoorState.Closed) + return false; + + return true; +}
115-118
: Стандартизировать сообщения об ошибкахВсе сообщения об ошибках используют одинаковый формат PopupEntity с типом MediumCaution, что хорошо для консистентности. Однако можно вынести повторяющийся код в вспомогательный метод.
Предлагаю создать вспомогательный метод:
+private void ShowErrorPopup(EntityUid performer, string message) +{ + _popupSystem.PopupEntity( + Loc.GetString(message), + performer, + performer, + Shared.Popups.PopupType.MediumCaution); +}Also applies to: 124-127, 136-139, 153-156
161-172
: Оптимизировать отправку сообщенийКод отправки сообщений о создании паутины содержит дублирование логики фильтрации. Рекомендуется вынести общую логику в отдельный метод.
Предлагаю следующий рефакторинг:
+private Filter CreateMessageFilter(EntityUid source, EntityUid exclude) +{ + return Filter.PvsExcept(exclude) + .RemoveWhereAttachedEntity(entity => + !_examine.InRangeUnOccluded(source, entity, ExamineRange, null)); +}Также рекомендуется добавить константы для повторяющихся строковых идентификаторов локализации.
Also applies to: 195-203
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (23)
Content.Client/Access/UI/AccessOverriderWindow.xaml.cs
(1 hunks)Content.Client/Backmen/OfferItem/OfferItemIndicatorsOverlay.cs
(0 hunks)Content.Client/Backmen/OfferItem/OfferItemSystem.cs
(0 hunks)Content.Client/Input/ContentContexts.cs
(0 hunks)Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
(5 hunks)Content.Client/Lobby/UI/Roles/TraitPreferenceSelector.xaml.cs
(2 hunks)Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs
(0 hunks)Content.Server/Backmen/Arachne/ArachneSystem.cs
(7 hunks)Content.Server/Backmen/Cocoon/CocoonComponent.cs
(1 hunks)Content.Server/Backmen/Cocoon/CocoonerComponent.cs
(1 hunks)Content.Server/Backmen/Cocoon/CocoonerSystem.cs
(1 hunks)Content.Server/Backmen/OfferItem/OfferItemSystem.cs
(0 hunks)Content.Server/Backmen/Traits/Specific/Giant/TraitGiantComponent.cs
(1 hunks)Content.Server/Backmen/Traits/Specific/Giant/TraitGiantSystem.cs
(1 hunks)Content.Shared/Backmen/Cocoon/CocoonDoAfterEvent.cs
(1 hunks)Content.Shared/Backmen/OfferItem/OfferItemComponent.cs
(0 hunks)Content.Shared/Backmen/OfferItem/SharedOfferItemSystem.Interactions.cs
(0 hunks)Content.Shared/Backmen/OfferItem/SharedOfferItemSystem.cs
(0 hunks)Content.Shared/Input/ContentKeyFunctions.cs
(0 hunks)Content.Shared/Traits/TraitPrototype.cs
(1 hunks)Resources/Prototypes/Entities/Mobs/Species/base.yml
(0 hunks)Resources/Prototypes/_Backmen/Traits/specific.yml
(1 hunks)Resources/keybinds.yml
(0 hunks)
💤 Files with no reviewable changes (11)
- Content.Shared/Input/ContentKeyFunctions.cs
- Content.Client/Input/ContentContexts.cs
- Resources/keybinds.yml
- Content.Shared/Backmen/OfferItem/OfferItemComponent.cs
- Content.Client/Backmen/OfferItem/OfferItemSystem.cs
- Content.Server/Backmen/OfferItem/OfferItemSystem.cs
- Content.Shared/Backmen/OfferItem/SharedOfferItemSystem.cs
- Content.Client/Backmen/OfferItem/OfferItemIndicatorsOverlay.cs
- Content.Shared/Backmen/OfferItem/SharedOfferItemSystem.Interactions.cs
- Resources/Prototypes/Entities/Mobs/Species/base.yml
- Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs
✅ Files skipped from review due to trivial changes (1)
- Content.Server/Backmen/Cocoon/CocoonComponent.cs
🔇 Additional comments (7)
Content.Server/Backmen/Cocoon/CocoonerSystem.cs (3)
243-245
: Корректная реализация логирования админских действий
Логирование действий в методе OnCocoonDoAfter
выполнено правильно, обеспечивая необходимую запись действий для администрирования.
207-222
: Правильная обработка передачи урона внутри кокона
Метод OnDamageChanged
эффективно передаёт часть урона, полученного коконом, внутрь коконированному существу, что соответствует ожидаемой механике.
50-58
: Обоснованное использование подписок на события
В методе Initialize
подписки на локальные события установлены корректно, обеспечивая необходимую функциональность системы коконирования.
Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs (2)
54-54
: Добавлено новое поле _clientSponsorsManager
Добавлено поле _clientSponsorsManager
, которое будет использоваться для управления спонсорскими функциями в профиле. Убедитесь, что это поле корректно инициализировано и используется во всех необходимых местах.
598-603
: Отключение недоступных спонсорских черт
Логика в методе RefreshTraits
корректно отключает выбор недоступных спонсорских черт для пользователя, у которого нет соответствующего прототипа. Это улучшает пользовательский опыт и предотвращает выбор недоступных опций.
Content.Server/Backmen/Cocoon/CocoonerComponent.cs (1)
1-13
: Проверьте интеграцию с системой коконов
Компонент является частью системы коконов. Убедитесь, что все взаимодействия с CocoonSystem
реализованы корректно.
✅ Verification successful
Let me check the implementation details of the CocoonerSystem to verify the integration.
Интеграция с системой коконов реализована корректно
Проверка показала, что компонент CocoonerComponent
правильно интегрирован в CocoonerSystem
:
- Поля
CocoonDelay
иCocoonKnockdownMultiplier
корректно используются в системе для расчета времени коконирования - Реализована полная логика создания и удаления коконов
- Присутствует корректная обработка событий и необходимые зависимости
- Система включает логирование действий и обработку повреждений
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем использование компонента в системе
ast-grep --pattern 'class CocoonSystem {
$$$
CocoonerComponent $_
$$$
}'
# Проверяем все зависимости
rg -l "CocoonerComponent"
Length of output: 205
Script:
#!/bin/bash
# Проверяем реализацию системы
cat Content.Server/Backmen/Cocoon/CocoonerSystem.cs
# Проверяем использование полей компонента
rg "CocoonDelay|CocoonKnockdownMultiplier" -A 2
Length of output: 11821
Content.Server/Backmen/Arachne/ArachneSystem.cs (1)
86-86
: Упрощение инициализации компонента
Инициализация была упрощена до добавления только одного действия SpinWeb. Это делает код более чистым, но убедитесь, что удаление других подписок на события было намеренным.
✅ Verification successful
Let me check the full context of these event subscriptions to verify if the initialization is properly handled.
Let me check the implementation of the event handlers to verify the complete initialization flow.
Let me try a different approach to check these methods.
Инициализация компонента реализована корректно
Проверка показала, что система правильно обрабатывает все необходимые события:
- Инициализация (
OnInit
) добавляет действие SpinWeb - Завершение работы (
OnShutdown
) корректно удаляет действие - Обработка создания паутины (
OnWebDoAfter
) реализована с учетом системы голода
Упрощение инициализации является обоснованным, так как все критические события обрабатываются должным образом.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка использования других событий в системе
rg "SubscribeLocalEvent.*Arachne" --type cs
Length of output: 422
Script:
#!/bin/bash
# Check the full context of the ArachneSystem class
rg -A 5 "class ArachneSystem" Content.Server/Backmen/Arachne/ArachneSystem.cs
Length of output: 430
Script:
#!/bin/bash
# Check the OnInit, OnShutdown, and OnWebDoAfter implementations
ast-grep --pattern 'private void OnInit($$$) {
$$$
}'
ast-grep --pattern 'private void OnShutdown($$$) {
$$$
}'
ast-grep --pattern 'private void OnWebDoAfter($$$) {
$$$
}'
Length of output: 491
Script:
#!/bin/bash
# Check the specific methods in ArachneSystem
rg "private void On(Init|Shutdown|WebDoAfter)" Content.Server/Backmen/Arachne/ArachneSystem.cs -A 5
Length of output: 661
[DataField("cocoonDelay")] | ||
public float CocoonDelay = 12f; | ||
|
||
[DataField("cocoonKnockdownMultiplier")] | ||
public float CocoonKnockdownMultiplier = 0.5f; |
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
Улучшите конфигурацию полей
Необходимо:
- Добавить документацию к полям
- Добавить валидацию значений
- Объяснить выбор значений по умолчанию
+ /// <summary>
+ /// Задержка в секундах перед созданием кокона
+ /// </summary>
[DataField("cocoonDelay")]
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("cocoonDelay", required: true)]
public float CocoonDelay = 12f;
+ /// <summary>
+ /// Множитель оглушения при попадании в кокон
+ /// </summary>
[DataField("cocoonKnockdownMultiplier")]
+ [ViewVariables(VVAccess.ReadWrite)]
+ [DataField("cocoonKnockdownMultiplier", required: true)]
public float CocoonKnockdownMultiplier = 0.5f;
Committable suggestion skipped: line range outside the PR's diff.
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 (4)
Content.Client/Lobby/LobbyUIController.cs (2)
45-45
: Добавьте проверку на null для _clientSponsorsManagerРекомендуется добавить проверку на null для нового зависимого сервиса, чтобы избежать потенциальных NullReferenceException.
[Dependency] private readonly ISharedSponsorsManager _clientSponsorsManager = default!; + +protected override void Initialize() +{ + base.Initialize(); + if (_clientSponsorsManager == null) + throw new InvalidOperationException($"{nameof(_clientSponsorsManager)} не был инициализирован"); +}
Line range hint
598-606
: Вынесите названия групп в константыЖестко закодированные названия групп ("Werx", "Niz", "Socks") лучше вынести в константы на уровне класса для улучшения поддерживаемости кода.
+private static readonly HashSet<string> ClothingGroups = new() { "Werx", "Niz", "Socks" }; -HashSet<string> groupsToShow = ["Werx", "Niz", "Socks"]; +HashSet<string> groupsToShow = ClothingGroups;Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs (2)
598-605
: Добавьте комментарий, объясняющий логику спонсорских особенностейДля улучшения понимания кода рекомендуется добавить комментарий, объясняющий логику обработки спонсорских особенностей.
+// Если особенность доступна только спонсорам и текущий клиент не имеет соответствующего прототипа, +// делаем чекбокс неактивным и окрашиваем метку серым цветом if (selector.Trait.SponsorOnly && !_clientSponsorsManager.GetClientPrototypes().Contains(selector.Trait.ID)) { selector.Checkbox.Label.FontColorOverride = Color.Gray; selector.Checkbox.Disabled = true; selector.Checkbox.Pressed = false; }
Line range hint
636-639
: Исправьте использование неопределенной переменной _sponsorsMgrВ коде используется переменная
_sponsorsMgr
, которая не определена. Вместо нее следует использовать_clientSponsorsManager
.-if (_sponsorsMgr != null) - _species = _species.Where(p => !p.SponsorOnly || _sponsorsMgr.GetClientPrototypes().Contains(p.ID)).ToList(); +_species = _species.Where(p => !p.SponsorOnly || _clientSponsorsManager.GetClientPrototypes().Contains(p.ID)).ToList();
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (3)
Content.Client/Lobby/LobbyUIController.cs
(3 hunks)Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
(5 hunks)Resources/Locale/ru-RU/backmen/trait/OwOAccent.ftl
(1 hunks)
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
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
🧹 Outside diff range and nitpick comments (8)
Content.Shared/Preferences/HumanoidCharacterProfile.cs (1)
625-627
: Проверьте обработку спонсорских особенностейЛогика фильтрации корректна, но рекомендуется добавить логирование при попытке использования спонсорских особенностей неспонсором для отслеживания потенциальных проблем.
var traits = TraitPreferences .Where(x => prototypeManager.TryIndex(x, out var trait) - && (!trait.SponsorOnly || sponsorPrototypes.Contains(x.Id))) //backmen: sponsor traits + && (!trait.SponsorOnly || sponsorPrototypes.Contains(x.Id))) + .Do(x => { + if (prototypeManager.TryIndex(x, out var trait) && + trait.SponsorOnly && !sponsorPrototypes.Contains(x.Id)) + { + Logger.Warning($"Попытка использования спонсорской особенности {x.Id} неспонсором"); + } + }) .ToList();Resources/Prototypes/_Backmen/Traits/specific.yml (2)
8-9
: Исправьте форматирование комментариевВ файле используются разные стили комментариев:
#backmen: bssdrone
(без пробела после #)# backmen: AI
(с пробелом после #)Рекомендуется использовать единый стиль для всех комментариев.
- - BSSDrone #backmen: bssdrone - - StationAI # backmen: AI + - BSSDrone # backmen: bssdrone + - StationAI # backmen: AI
2-39
: Рассмотрите возможность использования наследования прототиповВсе три черты имеют идентичный список заблокированных компонентов (
blacklist
). Для улучшения поддерживаемости кода рекомендуется создать базовый прототип черты с общими свойствами и наследовать от него специфические реализации.Пример реорганизации:
- type: trait id: GiantBase abstract: true blacklist: components: - BSSDrone # backmen: bssdrone - StationAI # backmen: AI - BorgChassis - type: trait parent: GiantBase id: Giant10 name: Giant10-name description: Giant10-desc components: - type: TraitGiant scale: 1.1 # Аналогично для Giant20 и Giant30Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (1)
2454-2454
: Новая сущность MobClownSpider корректно определенаКлоун-паук имеет все необходимые компоненты и модификации. Рекомендуется добавить комментарии в код, описывающие особое поведение и взаимодействия этой сущности.
Предлагаю добавить комментарии YAML:
- name: clown spider + # A special variant of the giant spider with clown-themed attributes + # and unique behaviors including special web effects + name: clown spiderResources/Prototypes/_Backmen/Entities/Mobs/NPCs/mutants.yml (4)
Line range hint
171-196
: Проверьте список разрешенных статус-эффектовВ списке
allowed
присутствуют эффекты, которые могут не соответствовать лору существа (например, Drunk, SlurredSpeech). Рекомендуется пересмотреть список.
Line range hint
205-223
: Проверьте правила для призрачной ролиВ описании
GhostRole
указано "Just don't talk in emote", но нет явного указания на доступные способы коммуникации. Рекомендуется уточнить правила.- rules: No antagonist restrictions. Just don't talk in emote; you have telepathic chat. + rules: No antagonist restrictions. Use telepathic chat only. Speaking in emotes is forbidden. Available languages: Spider, TauCetiBasic, Xeno.
Баланс химических взаимодействий требует корректировки
На основе анализа других сущностей с похожими компонентами:
- Текущие значения для мутанта (24 ед. Nocturine, впрыск 4 ед., регенерация 3 ед.) значительно превышают стандартные показатели:
- Обычные существа: 0.75-2 ед. впрыска (тарантул, элементали)
- Опасные существа: 4-6 ед. впрыска (космические существа)
- Регенерация: 0.1-1 ед. (роботы, элементали)
- Рекомендуемые изменения:
- Уменьшить начальное количество Nocturine до 12-15 единиц
- Снизить количество впрыскиваемого реагента до 2-3 единиц
- Уменьшить регенерацию до 1-1.5 единиц
🔗 Analysis chain
Line range hint
131-146
: Проверьте баланс химических взаимодействийКомбинация компонентов
SolutionContainerManager
,MeleeChemicalInjector
иSolutionRegeneration
с текущими значениями может создавать дисбаланс:
- 24 единицы Nocturine изначально
- Впрыск 4 единиц за удар
- Регенерация 3 единиц
Рекомендуется:
- Уменьшить начальное количество реагента
- Снизить количество впрыскиваемого реагента
- Увеличить время регенерации
Let me search for other entities with similar chemical components to compare values.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск других сущностей с похожими химическими компонентами для сравнения значений rg -A 5 "SolutionContainerManager|MeleeChemicalInjector|SolutionRegeneration"Length of output: 73282
Script:
#!/bin/bash # Search for other entities with MeleeChemicalInjector and SolutionRegeneration rg -A 10 "MeleeChemicalInjector|SolutionRegeneration" Resources/Prototypes/Length of output: 27682
Based on the gathered information, I can now provide the final response:
Баланс босса требует корректировки
Текущая комбинация усилений делает босса чрезмерно сильным:
- Увеличенное количество Ноктюрина (40 ед. против 24 ед. у обычной версии)
- Увеличенная доза впрыска (7 ед. против 4 ед.)
- Ускоренная регенерация химиката (4 ед. против 3 ед.)
- Значительно повышенная скорость передвижения (2/3 против базовой)
- Увеличенный размер спрайта (1.5x)
Рекомендуемые изменения:
- Уменьшить количество Ноктюрина до 30-35 единиц
- Снизить дозу впрыска до 5-6 единиц
- Уменьшить скорость регенерации химиката до базового значения (3 ед.)
- Рассмотреть уменьшение скорости передвижения
🔗 Analysis chain
Line range hint
224-266
: Проверьте баланс боссаБосс-версия имеет значительные усиления:
- Увеличенный размер спрайта (1.5x)
- Больше химических реагентов (40 единиц Nocturine)
- Увеличенная скорость передвижения
- 10 зарядов для SpiderVampire
Рекомендуется проверить, не является ли такая комбинация слишком сильной.
Let me gather more information about the base entity and other similar entities for comparison.
Let me gather more information about the base entity's combat capabilities to better assess the balance.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Поиск других босс-сущностей для сравнения характеристик rg "suffix: .*Boss" -A 10Length of output: 984
Script:
#!/bin/bash # Search for the parent entity definition rg "MobGiantSpiderVampire" -B 5 -A 15 # Search for similar vampire/boss entities rg "Nocturine" -B 5 -A 5 # Search for other entities with MovementSpeedModifier ast-grep --pattern 'type: MovementSpeedModifier baseWalkSpeed: $_ baseSprintSpeed: $_'Length of output: 36655
Script:
#!/bin/bash # Search for the base entity's combat stats rg "MobGiantSpiderVampire" -A 20 | grep -E "type: (Melee|Damage|Health|Combat)" # Search for other boss entities' movement speeds ast-grep --pattern 'suffix: .*Boss $$$ components: $$$ - type: MovementSpeedModifier baseWalkSpeed: $_ baseSprintSpeed: $_' # Look for chemical injection capabilities in base entity rg "MobGiantSpiderVampire" -A 30 | grep -E "type: (Solution|Chemical|Melee)"Length of output: 688
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (7)
Content.Server/Backmen/Cocoon/CocoonerComponent.cs
(1 hunks)Content.Shared/Preferences/HumanoidCharacterProfile.cs
(1 hunks)Resources/Locale/ru-RU/backmen/trait/OwOAccent.ftl
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/mutants.yml
(1 hunks)Resources/Prototypes/_Backmen/Entities/Mobs/Species/arachne.yml
(1 hunks)Resources/Prototypes/_Backmen/Traits/specific.yml
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- Content.Server/Backmen/Cocoon/CocoonerComponent.cs
🔇 Additional comments (10)
Resources/Locale/ru-RU/backmen/trait/OwOAccent.ftl (1)
5-12
: Локализация выполнена корректно!
Все новые записи для черт "Гигантизм" оформлены правильно:
- Корректные пробелы после названий
- Грамматически верные описания
- Последовательное форматирование для всех уровней (10%, 20%, 30%)
Resources/Prototypes/_Backmen/Entities/Mobs/Species/arachne.yml (4)
135-135
: Проверьте конфигурацию компонента Cocooner
Компонент Cocooner
добавлен без явной конфигурации. Рекомендуется указать параметры задержки и множителя оглушения, если они отличаются от значений по умолчанию.
Line range hint 136-141
: Визуализация урона реализована корректно
Компонент DamageVisuals
правильно настроен с порогами урона и целевыми слоями для гуманоидной модели.
Line range hint 284-301
: Изменения в шаблоне инвентаря выглядят логично
Добавление слота undershirt
и отключение underpants
и socks
соответствует стандартной системе инвентаря. Комментарии четко обозначают секцию настройки нижней одежды.
Line range hint 147-150
: Проверьте баланс скорости передвижения
Базовые значения скорости кажутся высокими:
- Скорость ходьбы: 3.0
- Скорость бега: 5.0
Рекомендуется сравнить эти значения со скоростью других существ для обеспечения игрового баланса.
✅ Verification successful
Based on the search results, I can now generate the final response since I have enough information about movement speeds across different entities in the codebase.
Скорость передвижения арахны сбалансирована относительно других существ
Текущие значения скорости арахны (ходьба: 3.0, бег: 5.0) находятся в пределах нормы по сравнению с другими существами:
- Большинство NPC имеют скорость ходьбы 2.0-3.0 и бега 3.0-5.0
- Теневик (похожий игровой вид): ходьба 2.7, бег 4.5
- Голем: ходьба 1.8-4.0, бег 3.0-5.5
- Гарпия: ходьба 2.5, бег 5.0
Значения скорости арахны соответствуют общему балансу игры и не требуют корректировки.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск конфигураций скорости в других файлах прототипов
rg "baseWalkSpeed|baseSprintSpeed" -A 1
Length of output: 27452
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (2)
2454-2454
: Компонент Cocooner успешно добавлен
Добавление компонента Cocooner
соответствует целям PR по модификации системы коконов.
2454-2454
: Проверьте взаимодействия фракции Xeno
Добавление принадлежности к фракции Xeno логично для агрессивного варианта паука. Рекомендуется проверить, правильно ли работают взаимодействия с другими членами фракции.
✅ Verification successful
Фракция Xeno корректно настроена
Проверка показала, что компонент NpcFactionMember с фракцией Xeno правильно определен в прототипах ксеноморфов. Взаимодействия между членами фракции будут работать корректно, так как:
- Фракция Xeno определена в системе фракций
- Компонент NpcFactionMember с фракцией Xeno присутствует в прототипах
- Все ксеноморфы используют одинаковую конфигурацию фракции
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка других сущностей фракции Xeno
rg -l "factions:\s*-\s*Xeno"
Length of output: 30
Script:
#!/bin/bash
# Поиск определений фракций
rg -l "faction:" Resources/Prototypes/
# Поиск компонента NpcFactionMember
ast-grep --pattern 'type: NpcFactionMember'
# Поиск упоминаний Xeno
rg -i "xeno" Resources/Prototypes/
Length of output: 67307
Script:
#!/bin/bash
# Поиск определений фракции Xeno
rg -A 5 "faction:\s*-\s*Xeno" Resources/Prototypes/_Backmen/ai_factions.yml
# Поиск компонента NpcFactionMember с фракцией Xeno
rg -A 5 "type: NpcFactionMember" Resources/Prototypes/Entities/Mobs/NPCs/xeno.yml
Length of output: 394
Resources/Prototypes/_Backmen/Entities/Mobs/NPCs/mutants.yml (3)
Line range hint 197-204
: LGTM: Компоненты движения и зрения
Компоненты MovementAlwaysTouching
, PsionicInvisibleContacts
и NightVision
корректно настроены и соответствуют концепции существа.
129-130
: Проверьте баланс задержки коконирования
Значение cocoonDelay: 8
может быть слишком малым для игрового баланса. Рекомендуется провести тестирование с разными значениями задержки.
✅ Verification successful
Based on the search results, I can now provide a final response since I found the default cocoon delay value in the codebase:
Значение задержки коконирования соответствует балансу
Значение cocoonDelay: 8
находится в допустимых пределах, так как:
- Стандартное значение в базовом компоненте
CocoonerComponent
составляет 12 секунд - Для оглушенных целей применяется дополнительный множитель
cocoonKnockdownMultiplier: 0.5
, что уменьшает задержку - Уменьшенная задержка в 8 секунд для этого конкретного мутанта является частью его уникального баланса
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других сущностей с компонентом Cocooner для сравнения задержек
ast-grep --pattern 'type: Cocooner
cocoonDelay: $_'
Length of output: 57
Script:
#!/bin/bash
# Search for files containing "cocoonDelay" or "Cocooner"
rg -i "cocoonDelay|Cocooner" -A 3 -B 3
Length of output: 9981
Script:
#!/bin/bash
# Search for any YAML files containing spider or cocoon related configurations
fd -e yml -e yaml . | xargs rg -i "spider|cocoon|web" -A 3 -B 3
Length of output: 56216
Script:
#!/bin/bash
# Look for any balance-related configuration files
fd "balance|config" -e yml -e yaml | xargs cat
Length of output: 12928
Line range hint 147-150
: Требуется уточнение механики кровососания
Компонент BloodSucker
имеет несколько потенциальных проблем:
- Большое значение
unitsToSucc: 35
- Инъекция Cryptobiolin может быть слишком сильной
А как работает спонсор traits, типа только у спонсоров может быть? В дальнейшем можно будет свои трейты такие добавлять? |
|
А когда будут порт трейтов с ЕЕ? Именно менюшка и сами трейты. И будут-ли они так же по спонсорку. |
когда будет нужда или кому-то будет нечем заняться |
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
🧹 Outside diff range and nitpick comments (1)
Resources/Textures/Backmen/Changeling/bone_shard.rsi/meta.json (1)
4-4
: Обновите ссылку на источникРекомендуется использовать полный URL репозитория вместо сокращённой ссылки на GitHub пользователя.
- "copyright": "https://github.com/RealFakeSoof with references from deltanedas (github)", + "copyright": "https://github.com/RealFakeSoof/repository-name with references from https://github.com/deltanedas",
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
⛔ Files ignored due to path filters (1)
Resources/Textures/Backmen/Changeling/bone_shard.rsi/festive.png
is excluded by!**/*.png
📒 Files selected for processing (1)
Resources/Textures/Backmen/Changeling/bone_shard.rsi/meta.json
(1 hunks)
🔇 Additional comments (2)
Resources/Textures/Backmen/Changeling/bone_shard.rsi/meta.json (2)
2-8
: LGTM: Корректная структура метаданных
Метаданные файла корректно определены с указанием версии, лицензии, авторских прав и размеров текстуры.
9-16
: Проверьте интеграцию нового состояния "festive"
Добавление состояния "festive" предполагает наличие соответствующих праздничных/сезонных механик. Убедитесь, что:
- Текстура для состояния "festive" присутствует в .rsi директории
- Состояние корректно обрабатывается в коде игры
@KayzelW а как разблокировать для спонсора? С внешностью понятно. Надо написать |
туда же |
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
🧹 Outside diff range and nitpick comments (2)
Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs (1)
598-607
: Реализована логика блокировки спонсорских черт характера.Корректная реализация проверки доступности черт характера для спонсоров:
- Проверяется флаг
SponsorOnly
- Для неспонсоров черта отключается
- Добавляется визуальная индикация (серый цвет)
- Добавляется пометка "sponsor-only"
Рекомендуется добавить всплывающую подсказку (tooltip) с объяснением, почему черта недоступна.
Предлагаю добавить tooltip:
selector.Checkbox.Label.FontColorOverride = Color.Gray; selector.Checkbox.Disabled = true; selector.Checkbox.Pressed = false; selector.Checkbox.Label.Text += $" ({Loc.GetString("sponsor-only")})"; +selector.Checkbox.TooltipText = Loc.GetString("trait-sponsor-only-tooltip");
Resources/Locale/ru-RU/backmen/trait/Specific.ftl (1)
14-14
: Предлагаю уточнить сообщение о спонсорских функцияхТекущий перевод понятен, но можно сделать его более информативным.
Предлагаю следующий вариант:
-sponsor-only = Только для спонсоров +sponsor-only = Доступно только для спонсоров проекта
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (3)
Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
(5 hunks)Resources/Locale/ru-RU/backmen/trait/Specific.ftl
(1 hunks)Resources/Prototypes/_Backmen/Traits/specific.yml
(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- Resources/Prototypes/_Backmen/Traits/specific.yml
🔇 Additional comments (5)
Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs (2)
12-13
: Добавлены новые зависимости для работы со спонсорскими функциями.
Корректное добавление необходимых интерфейсов для работы с системой спонсоров.
55-55
: Добавлено поле и параметр конструктора для менеджера спонсоров.
Правильная инициализация зависимости ISharedSponsorsManager
через конструктор с сохранением в приватное поле.
Also applies to: 120-121, 131-131
Resources/Locale/ru-RU/backmen/trait/Specific.ftl (3)
2-3
: Перевод OwO акцента корректен!
Перевод точно передает суть трейта и использует понятную игрокам терминологию.
5-12
: Корректный перевод уровней гигантизма!
Переводы всех трёх уровней гигантизма выполнены последовательно и понятно. Формулировки точно описывают механику увеличения размера персонажа.
1-14
: Структура файла соответствует стандартам!
Файл корректно структурирован, использует правильную кодировку и имеет хорошее форматирование для удобства чтения и поддержки.
Я понял что туда же. но что писать-то надо? |
В тот же список, что и всё остальное. |
In the name of the father, the son and the self merge. Amen. |
🆑
Summary by CodeRabbit
Новые функции
CocoonerComponent
для управления процессами коконирования.TraitGiantComponent
для определения масштабов сущностей.OfferItem
.Исправления ошибок
Документация
OfferItem
.