-
Notifications
You must be signed in to change notification settings - Fork 12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Revert "Revert "Upstreams"" #577
Conversation
WalkthroughВ данном пулл-реквесте внесены значительные изменения в несколько классов, касающихся системы хирургии и обработки частей тела. Основные изменения включают добавление новых методов и параметров для управления маркировками частей тела, упрощение логики обработки сообщений в интерфейсе хирургии, а также улучшение управления внешним видом гуманоидов. Также были добавлены новые события для обработки прикрепления и удаления частей тела, а также обновлены существующие компоненты и сущности для улучшения взаимодействия с игровыми механиками. Changes
Poem
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 12
🧹 Outside diff range and nitpick comments (29)
Content.Shared/Humanoid/Events/ProfileLoadFinishedEvent.cs (1)
1-9
: Реализация выглядит правильной!Класс события корректно реализован и хорошо документирован. Он правильно наследуется от EntityEventArgs и помечен как sealed.
Предложение по улучшению:
Рекомендуется добавить свойство для отслеживания длительности загрузки профиля. Это может быть полезно для диагностики производительности.
public sealed class ProfileLoadFinishedEvent : EntityEventArgs { + /// <summary> + /// Время, затраченное на загрузку профиля в миллисекундах + /// </summary> + public float LoadDurationMs { get; } + + public ProfileLoadFinishedEvent(float loadDurationMs) + { + LoadDurationMs = loadDurationMs; + } }Content.Server/Destructible/Thresholds/Behaviors/GibBehavior.cs (1)
19-19
: Рекомендуется добавить документациюВызов метода корректно использует новые параметры, но было бы полезно добавить XML-документацию, объясняющую влияние различных типов
GibType
иGibContentsOption
на поведение системы.+ /// <summary> + /// Выполняет расчленение сущности с заданными параметрами. + /// </summary> + /// <param name="owner">Сущность для расчленения</param> + /// <param name="system">Система разрушения</param> + /// <param name="cause">Причина расчленения (опционально)</param> public void Execute(EntityUid owner, DestructibleSystem system, EntityUid? cause = null)Content.Shared/Backmen/Surgery/SurgeryUI.cs (1)
18-21
: Атрибуты корректны, но класс требует документации.Класс правильно помечен атрибутами
[Serializable]
и[NetSerializable]
, что необходимо для сетевой сериализации.Рекомендуется добавить XML-документацию, объясняющую назначение этого сообщения:
[Serializable, NetSerializable] +/// <summary> +/// Сообщение, отправляемое для обновления интерфейса хирургии. +/// </summary> public sealed class SurgeryBuiRefreshMessage : BoundUserInterfaceMessage { }Content.Shared/Body/Part/BodyPartEvents.cs (1)
15-18
: LGTM: Оптимизация обработки событий отсоединения частей телаДобавление отдельного события для DropPart() - хорошее решение для оптимизации производительности, так как уменьшает количество срабатываний BodyPartRemovedEvent при работе PVS.
Рекомендуется добавить документацию, описывающую конкретные случаи использования BodyPartDroppedEvent vs BodyPartRemovedEvent для других разработчиков.
Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs (2)
12-16
: Новое свойство Type требует документации использования.Свойство
Type
определяет визуальный слой для части тела, но не указано, как это влияет на рендеринг и взаимодействие с другими компонентами.Рекомендуется добавить более подробную документацию о влиянии этого свойства на визуализацию.
18-22
: Проверьте инициализацию словаря Markings.Словарь инициализируется пустым, что может привести к проблемам при сериализации/десериализации. Рекомендуется добавить проверку на null.
-public Dictionary<HumanoidVisualLayers, List<Marking>> Markings = new(); +public Dictionary<HumanoidVisualLayers, List<Marking>> Markings { get; set; } = new();Resources/Prototypes/Entities/Mobs/Species/skeleton.yml (1)
Line range hint
1-150
: Рекомендации по архитектуре системыТекущая реализация хорошо документирована и логически структурирована, однако есть несколько моментов для рассмотрения:
- Механика взаимодействия с молоком может быть вынесена в отдельный компонент для лучшей модульности
- Значения лечения (-2 для Burn, -1.5 для Brute) лучше вынести в конфигурационные параметры
- Рассмотрите возможность создания отдельного прототипа для реакций на молоко
Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml (1)
85-85
: Рассмотрите добавление локализации для toolNameВсе части тела используют английские названия в формате "a [part]". Рекомендуется:
- Добавить поддержку локализации для toolName
- Создать соответствующие ключи локализации в языковых файлах
- toolName: "a left arm" + toolName: "body-part-left-arm" # Использовать ключ локализацииAlso applies to: 107-107, 121-121, 135-135, 149-149, 163-163, 178-178, 193-193, 207-207
Content.Shared/Body/Part/BodyPartComponent.cs (2)
153-158
: Рекомендуется добавить валидацию SpeciesПустая строка по умолчанию для Species может привести к неопределенному поведению. Предлагаю добавить проверку на пустое значение или установить значение по умолчанию.
Пример реализации:
[DataField, AutoNetworkedField] -public string Species { get; set; } = ""; +public string Species +{ + get => _species; + set => _species = string.IsNullOrEmpty(value) ? "Unknown" : value; +} +private string _species = "Unknown";
159-163
: Необходимо обновить документациюТекущий комментарий выглядит непрофессионально. Предлагаю заменить его на более информативное описание назначения свойства.
Предлагаемый вариант:
- /// Do not make a stupid joke do not make a stupid joke do not make a stupid joke. + /// Biological sex of the body part. Affects appearance and other characteristics.Content.Server/Backmen/Surgery/SurgerySystem.cs (3)
81-83
: Комментарий в коде может быть улучшенТекущий комментарий описывает проблему с откатом состояния BUI, но использует неформальный язык ("I love shitcode"). Рекомендуется переписать комментарий более профессионально.
- /* Reason we do this is because when applying a BUI State, it rolls back the state on the entity temporarily, - which just so happens to occur right as we're checking for step completion, so we end up with the UI - not updating at all until you change tools or reopen the window. I love shitcode. */ + /* При применении BUI State происходит временный откат состояния сущности, + что совпадает с проверкой завершения шага операции. Это приводит к тому, + что UI не обновляется до смены инструмента или переоткрытия окна. + Данный вызов обеспечивает принудительное обновление UI. */
Line range hint
153-171
: Улучшить обработку специального уронаТекущая реализация использует магические строки для типов урона ("Rot", "Eye"). Рекомендуется вынести эти значения в константы или перечисление.
+ private const string ROT_DAMAGE_TYPE = "Rot"; + private const string EYE_DAMAGE_TYPE = "Eye"; private void OnSurgerySpecialDamageChange(Entity<SurgerySpecialDamageChangeEffectComponent> ent, ref SurgeryStepEvent args) { // ... existing code ... - if (ent.Comp.DamageType == "Rot") + if (ent.Comp.DamageType == ROT_DAMAGE_TYPE) { _rot.ReduceAccumulator(args.Body, TimeSpan.FromSeconds(2147483648)); } - else if (ent.Comp.DamageType == "Eye") + else if (ent.Comp.DamageType == EYE_DAMAGE_TYPE) { // ... existing code ... } }
Line range hint
193-197
: Рассмотреть добавление журналирования для отладкиВ методе
OnStepScreamComplete
рекомендуется добавить журналирование для упрощения отладки в случае проблем с эмоциями.private void OnStepScreamComplete(Entity<SurgeryStepEmoteEffectComponent> ent, ref SurgeryStepEvent args) { + Log.Debug($"Attempting to emote {ent.Comp.Emote} for entity {args.Body}"); if (!HasComp<ForcedSleepingComponent>(args.Body)) _chat.TryEmoteWithChat(args.Body, ent.Comp.Emote); }
Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml (3)
37-53
: Необходимо принять решение по закомментированным компонентамЗакомментированные компоненты
Recyclable
,EyeProtection
иSilicon
содержат важную функциональность. Рекомендуется:
- Определить необходимость каждого компонента
- Добавить TODO комментарии с объяснением, почему они отключены
- Создать задачу для реализации необходимых компонентов
Хотите, чтобы я создал GitHub issue для отслеживания этой задачи?
83-141
: Оптимизировать структуру слоев спрайтаБольшое количество слоев может влиять на производительность. Рекомендуется:
- Группировать связанные слои
- Использовать атлас текстур
- Рассмотреть возможность кэширования составных спрайтов
142-157
: Рассмотреть альтернативу системе кровотокаЗакомментированная система
Bloodstream
может быть заменена более подходящей для роботов системой:
- Система охлаждающей жидкости
- Система смазки
- Система энергии
Resources/Prototypes/_Backmen/Entities/Surgery/surgeries.yml (1)
Line range hint
1-447
: Общие замечания по структуре файлаВ файле присутствует комментарий разработчика о сложности поддержки хирургической системы BUI. Рекомендуется:
- Создать задачу для рефакторинга системы
- Рассмотреть возможность использования наследования для уменьшения дублирования кода
- Перенести общие органы в shared прототипы, как указано в комментарии
Желаете, чтобы я создал issue для отслеживания этих улучшений?
Content.Client/Humanoid/HumanoidAppearanceSystem.cs (1)
77-78
: Добавьте документацию для новых параметровНовые параметры
color
иoverrideSkin
играют важную роль в управлении отображением слоев. Рекомендуется добавить XML-документацию, объясняющую:
- Назначение параметра
overrideSkin
- Взаимодействие между
color
иoverrideSkin
- Случаи использования каждого параметра
Пример документации:
private void SetLayerData( HumanoidAppearanceComponent component, SpriteComponent sprite, HumanoidVisualLayers key, string? protoId, bool sexMorph = false, + /// <param name="color">Явный цвет для слоя. Если указан, переопределяет цвет кожи.</param> + /// <param name="overrideSkin">Если true, игнорирует цвет кожи даже для слоев с MatchSkin=true.</param> Color? color = null, bool overrideSkin = false)Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs (1)
308-309
: Добавьте документацию к новому событиюРеализация события
BodyPartAttachedEvent
корректна, но рекомендуется добавить XML-документацию, описывающую назначение события и его параметры.Content.Client/Backmen/Body/BodySystem.cs (2)
45-55
: Добавьте логирование при использовании цвета по умолчаниюЕсли индекс цвета не соответствует ожидаемому из-за изменений в прототипе маркировки, вы устанавливаете цвет слоя на белый по умолчанию. Рекомендуется добавить логирование в этом блоке, чтобы упростить отладку и выявление потенциальных проблем с данными маркировки.
67-76
: Удалите неиспользуемую переменнуюvisualLayer
Переменная
visualLayer
объявлена в циклеforeach
, но нигде не используется внутри блока. Это может вызывать путаницу и снижает читаемость кода.Примените следующий дифф для удаления неиспользуемой переменной:
- foreach (var (visualLayer, markingList) in component.Markings) + foreach (var markingList in component.Markings.Values)Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs (3)
24-24
: Пожалуйста, удалите или измените неподобающий комментарий.Комментарий на этой строке содержит выражения, которые могут быть сочтены непрофессиональными. Рекомендуется переписать комментарий более нейтрально, чтобы он отражал суть проблемы и сохранял профессиональный тон.
26-31
: Улучшите читаемость сложного условного выражения.Текущее условие затрудняет восприятие кода из-за своей длины и сложности. Рекомендуется разбить его на отдельные проверки или использовать вспомогательные методы для повышения читаемости.
Предлагаемый вариант:
if (!TryComp(uid, out BodyPartComponent? part)) return; if (part.OriginalBody == null || TerminatingOrDeleted(part.OriginalBody.Value)) return; if (!TryComp(part.OriginalBody.Value, out HumanoidAppearanceComponent? bodyAppearance)) return; if (HumanoidVisualLayersExtension.ToHumanoidLayers(part) is not { } relevantLayer) return;
73-73
: Пожалуйста, удалите или измените неподобающий комментарий.Комментарий содержит повторяющиеся эмоциональные выражения, которые не добавляют полезной информации и могут отвлекать. Рекомендуется удалить комментарий или заменить его на более информативный.
Content.Client/Backmen/Surgery/SurgeryBui.cs (2)
45-46
: Рекомендуется использовать фигурные скобки в условном оператореif
.Даже для однострочных блоков использование фигурных скобок повышает читабельность и предотвращает возможные ошибки при дальнейшем изменении кода.
Предлагаю изменить код следующим образом:
if (_window == null) - return; +{ + return; +}
48-49
: Рекомендуется использовать фигурные скобки в условном оператореif
.Использование фигурных скобок улучшает читаемость и снижает риск ошибок при добавлении новых строк к условию.
Предлагаю изменить код следующим образом:
if (message is SurgeryBuiRefreshMessage) - RefreshUI(); +{ + RefreshUI(); +}Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs (1)
Line range hint
475-483
: Переместить присвоение humanoid.Voice вне блока проверки компонента TTSComponentВ методе
SetTTSVoice
, присвоениеhumanoid.Voice = voiceId;
происходит внутри блока проверки наличия компонентаTTSComponent
. Рекомендуется вынести это присвоение вне данного блока, чтобы свойствоhumanoid.Voice
всегда обновлялось, независимо от наличия компонентаTTSComponent
.Content.Shared/Body/Systems/SharedBodySystem.Parts.cs (2)
175-177
: Удалите неуместный комментарий на строке 176Комментарий содержит ненормативную лексику и является непрофессиональным. Рекомендуется удалить его или заменить на более подходящее объяснение.
Примените следующий дифф для удаления комментария:
- // though I really just want the compiler to shut the fuck up.
642-645
: Рефакторинг повторяющегося кода для улучшения читаемостиКод, отвечающий за проверку условий и добавление компонента
BodyPartAppearanceComponent
, повторяется. Рекомендуется вынести эту логику в отдельный метод для повышения читаемости и облегчения сопровождения кода.Примените следующий рефакторинг:
private void EnsureBodyPartAppearanceComponent(EntityUid partId, EntityUid body) { if (TryComp(body, out HumanoidAppearanceComponent? bodyAppearance) && !HasComp<BodyPartAppearanceComponent>(partId) && !TerminatingOrDeleted(body) && !TerminatingOrDeleted(partId)) { EnsureComp<BodyPartAppearanceComponent>(partId); } }Затем вызовите этот метод в необходимых местах:
- if (TryComp(body, out HumanoidAppearanceComponent? bodyAppearance) - && !HasComp<BodyPartAppearanceComponent>(partEnt) - && !TerminatingOrDeleted(body) - && !TerminatingOrDeleted(partEnt)) - EnsureComp<BodyPartAppearanceComponent>(partEnt); + EnsureBodyPartAppearanceComponent(partEnt, body);
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (27)
Content.Client/Backmen/Body/BodySystem.cs
(1 hunks)Content.Client/Backmen/Surgery/SurgeryBui.cs
(2 hunks)Content.Client/Backmen/Surgery/SurgerySystem.cs
(0 hunks)Content.Client/Humanoid/HumanoidAppearanceSystem.cs
(3 hunks)Content.Server/Backmen/Surgery/SurgerySystem.cs
(2 hunks)Content.Server/Body/Systems/BodySystem.cs
(4 hunks)Content.Server/Destructible/Thresholds/Behaviors/GibBehavior.cs
(2 hunks)Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs
(1 hunks)Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs
(1 hunks)Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs
(2 hunks)Content.Shared/Backmen/Surgery/SurgeryUI.cs
(1 hunks)Content.Shared/Body/Part/BodyPartComponent.cs
(3 hunks)Content.Shared/Body/Part/BodyPartEvents.cs
(1 hunks)Content.Shared/Body/Systems/SharedBodySystem.Body.cs
(8 hunks)Content.Shared/Body/Systems/SharedBodySystem.Parts.cs
(2 hunks)Content.Shared/Body/Systems/SharedBodySystem.cs
(1 hunks)Content.Shared/Humanoid/Events/ProfileLoadFinishedEvent.cs
(1 hunks)Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs
(2 hunks)Resources/Changelog/ChangelogBkm.yml
(1 hunks)Resources/Locale/en-US/surgery/surgery-ui.ftl
(1 hunks)Resources/Prototypes/Body/Parts/skeleton.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Species/skeleton.yml
(1 hunks)Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml
(11 hunks)Resources/Prototypes/_Backmen/Entities/Objects/Misc/handcuffs.yml
(0 hunks)Resources/Prototypes/_Backmen/Entities/Surgery/surgeries.yml
(2 hunks)
💤 Files with no reviewable changes (2)
- Content.Client/Backmen/Surgery/SurgerySystem.cs
- Resources/Prototypes/_Backmen/Entities/Objects/Misc/handcuffs.yml
✅ Files skipped from review due to trivial changes (1)
- Resources/Locale/en-US/surgery/surgery-ui.ftl
🔇 Additional comments (41)
Content.Server/Destructible/Thresholds/Behaviors/GibBehavior.cs (2)
2-2
: Корректное добавление зависимости!
Добавление пространства имен для событий gibbing логично дополняет новую функциональность.
11-12
: Проверьте корректность значений перечислений
Новые поля правильно оформлены, но стоит убедиться, что значения по умолчанию GibType.Gib
и GibContentsOption.Drop
соответствуют ожидаемому поведению.
✅ Verification successful
Значения перечислений корректны и соответствуют ожидаемому поведению
Значения по умолчанию GibType.Gib
и GibContentsOption.Drop
являются валидными членами соответствующих перечислений и логически согласуются с их предназначением:
GibType.Gib
- один из трёх вариантов: Skip, Drop, GibGibContentsOption.Drop
- один из трёх вариантов: Skip, Drop, Gib
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка определений перечислений
rg -A 10 "enum (GibType|GibContentsOption)"
Length of output: 786
Content.Shared/Body/Part/BodyPartEvents.cs (1)
8-10
: LGTM: Корректное добавление события для хирургического присоединения
Событие правильно реализовано и соответствует существующим паттернам. Использование атрибута [ByRefEvent] и Entity обеспечивает оптимальную производительность и типобезопасность.
Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs (3)
9-9
: Изменение в атрибуте AutoGenerateComponentState требует внимания.
Добавление параметра true
в AutoGenerateComponentState
может повлиять на сетевую синхронизацию компонента. Убедитесь, что все сетевые события обрабатываются корректно.
1-1
: Проверьте необходимость новых using директив.
Новые директивы используются для поддержки маркировок и прототипов гуманоидов. Убедитесь, что все они действительно используются в коде.
Also applies to: 3-3
✅ Verification successful
Директива using Content.Shared.Humanoid необходима и используется корректно
Анализ показывает, что импорт Content.Shared.Humanoid
активно используется в компоненте для доступа к:
- Перечислению
HumanoidVisualLayers
- Другим типам из пространства имен Humanoid
Компонент содержит несколько полей и свойств, которые напрямую зависят от этого пространства имен, включая:
Type
типаHumanoidVisualLayers
Markings
использующийHumanoidVisualLayers
в качестве ключа- Ссылки на
HumanoidSpeciesSpriteLayer
в документации
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверка использования новых пространств имен
rg -l "Content\.Shared\.Humanoid\.Prototypes\." --type cs
rg -l "Content\.Shared\.Humanoid\.Markings\." --type cs
Length of output: 117
Script:
#!/bin/bash
# Поиск использования типов из пространства имен Humanoid
rg "using Content\.Shared\.Humanoid" --type cs -A 5
# Поиск использования типов Humanoid в файле
rg "Humanoid" "Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs"
# Проверка содержимого файла
cat "Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs"
Length of output: 73748
42-42
: Свойство OriginalBody требует дополнительной валидации.
Ссылка на оригинальное тело может стать недействительной. Необходимо добавить обработку случая, когда оригинальное тело уничтожено.
✅ Verification successful
Проверка ссылки на оригинальное тело реализована корректно
В системе SharedBodySystem
уже реализована проверка на недействительность ссылки на оригинальное тело в методе OnPartAppearanceStartup
:
if (!TryComp(uid, out BodyPartComponent? part)
|| part.OriginalBody == null
|| TerminatingOrDeleted(part.OriginalBody.Value)
|| !TryComp(part.OriginalBody.Value, out HumanoidAppearanceComponent? bodyAppearance)
...
Код проверяет:
- Наличие ссылки на оригинальное тело (
part.OriginalBody == null
) - Уничтожение оригинального тела (
TerminatingOrDeleted(part.OriginalBody.Value)
) - Наличие необходимых компонентов
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск обработки уничтожения тела
rg "OriginalBody.*null" --type cs
rg "EntityDeleted.*OriginalBody" --type cs
Length of output: 192
Script:
#!/bin/bash
# Поиск использования OriginalBody в системах и компонентах
ast-grep --pattern 'OriginalBody'
# Поиск обработчиков удаления сущностей в системах хирургии
rg "EntityDeleted|OnRemove" -A 5 --type cs Content.Shared/Backmen/Surgery/
Length of output: 33
Script:
#!/bin/bash
# Поиск файла компонента для просмотра полного контекста
cat Content.Shared/Backmen/Surgery/Body/BodyPartAppearanceComponent.cs
# Поиск связанных систем
fd ".*System.*\.cs$" Content.Shared/Backmen/Surgery/
Length of output: 2257
Script:
#!/bin/bash
# Проверим содержимое системных файлов на предмет обработки OriginalBody
cat Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs
cat Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Integrity.cs
Length of output: 20759
Content.Shared/Body/Systems/SharedBodySystem.cs (2)
46-47
: Проверьте влияние очереди задач на инициализацию внешнего вида.
Комментарий указывает на использование очереди задач для снижения нагрузки при проверке целостности. Убедитесь, что инициализация внешнего вида частей тела правильно интегрируется с этой системой очередей.
47-47
: Проверить реализацию InitializePartAppearances.
Необходимо убедиться, что метод InitializePartAppearances
корректно реализован в частичном классе, учитывая его важность для инициализации системы.
Выполните следующий скрипт для проверки реализации:
✅ Verification successful
Метод InitializePartAppearances корректно реализован
Реализация метода найдена в файле Content.Shared/Backmen/Surgery/Body/SharedBodySystem.PartAppearance.cs
. Метод:
- Является частью частичного класса SharedBodySystem
- Корректно инициализирует базовый класс через
base.Initialize()
- Подписывается на необходимые события:
- ComponentStartup для BodyPartAppearanceComponent
- AfterAutoHandleStateEvent для обработки состояния
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Описание: Поиск реализации метода InitializePartAppearances
# Поиск файла с реализацией метода
echo "Поиск файла с реализацией InitializePartAppearances:"
ast-grep --pattern 'partial class SharedBodySystem {
$$$
void InitializePartAppearances() {
$$$
}
$$$
}'
# Поиск связанных событий
echo -e "\nПоиск обработчиков событий:"
rg "BodyPartAttachedEvent|BodyPartDroppedEvent|AfterAutoHandleStateEvent" -A 3
Length of output: 233
Script:
#!/bin/bash
# Поиск реализации InitializePartAppearances с более широким контекстом
echo "Поиск реализации InitializePartAppearances во всех файлах:"
rg "InitializePartAppearances" -A 5
# Поиск всех файлов, связанных с SharedBodySystem
echo -e "\nПоиск файлов SharedBodySystem:"
fd "SharedBodySystem"
# Поиск использования метода
echo -e "\nПоиск вызовов InitializePartAppearances:"
rg "InitializePartAppearances\(" -A 2
Length of output: 2359
Resources/Prototypes/Entities/Mobs/Species/skeleton.yml (1)
44-45
: Проверьте влияние параметра gibContents: Skip
Добавление параметра gibContents: Skip
может существенно повлиять на игровой процесс. Убедитесь, что это изменение:
- Не нарушает баланс игры
- Соответствует ожидаемому поведению скелетов
- Корректно обрабатывается серверной логикой
Давайте проверим использование этого параметра в других файлах:
✅ Verification successful
Параметр gibContents: Skip корректно используется в системе
Анализ кода показывает, что:
- Параметр
gibContents: Skip
уже используется в других сущностях (например, в animals.yml) - Компонент
GibBehavior
имеет встроенную поддержку этого параметра через полеGibContents
- Значение по умолчанию -
Drop
, поэтому явное указаниеSkip
для скелетов является осознанным выбором - Изменение соответствует логике, так как скелеты имеют меньший порог урона (150) по сравнению с базовыми мобами (400)
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других сущностей с GibBehavior для сравнения
rg -l "!type:GibBehavior" "Resources/Prototypes/Entities"
# Поиск связанной серверной логики
ast-grep --pattern 'class $_ {
$$$
GibBehavior($_) {
$$$
}
$$$
}'
Length of output: 348
Script:
#!/bin/bash
# Проверим содержимое файлов с GibBehavior для сравнения реализации
rg -B2 -A2 "!type:GibBehavior" "Resources/Prototypes/Entities/Mobs/"
# Поищем определение компонента GibBehavior
fd -e cs -e yaml "GibBehavior" --exec cat {}
Length of output: 2918
Resources/Prototypes/_Backmen/Body/Parts/shadowkin.yml (3)
14-55
: Проверьте балансировку урона и поведение разрушения
Новая конфигурация компонента Destructible добавляет сложную систему повреждений с различными порогами:
- Тупой урон: 50
- Режущий урон: 100
- Тепловой урон: 200
Рекомендуется проверить:
- Соответствие порогов урона общему балансу игры
- Корректность работы GibPartBehavior
- Целесообразность спавна пепла при тепловом уроне
Line range hint 163-178
: Проверьте компоненты движения для ног и ступней
Обнаружена потенциальная несогласованность:
- Ноги имеют компонент MovementBodyPart
- Ступни не имеют компонентов, связанных с движением
Необходимо уточнить:
- Должны ли ступни также влиять на движение
- Как отсутствие ступней влияет на мобильность персонажа
Also applies to: 193-207
68-69
:
Проверьте корректность атрибутов жизненно важных органов
Обратите внимание на следующие важные изменения:
- Добавлен атрибут vital: true для головы
- Добавлен containerName: "torso_slot" для торса
Убедитесь, что:
- Система хирургии корректно обрабатывает vital части тела
- Слот торса правильно интегрируется с существующей системой инвентаря
Also applies to: 85-86
Resources/Prototypes/Body/Parts/skeleton.yml (2)
21-49
: Проверьте последствия наследования для специальных частей
Особое внимание следует обратить на сущность HeadSkeleton, которая имеет дополнительные компоненты (Speech, Input, Actions и др.). Текущая реализация Destructible может повлиять на функциональность этих компонентов.
#!/bin/bash
# Поиск специальных обработчиков для частей скелета
rg "HeadSkeleton" "Content/Server/"
# Проверка систем, взаимодействующих с компонентами головы
ast-grep --pattern 'class $_ : ISystem {
$$$
Head$_($$$) {
$$$
}
$$$
}'
Also applies to: 77-106
21-49
: Проверьте баланс урона и поведение компонента Destructible
Добавление компонента Destructible с различными порогами урона выглядит логичным, но есть несколько моментов для рассмотрения:
-
Пороговые значения урона (50/100/200) кажутся несбалансированными относительно друг друга. Возможно, стоит рассмотреть более равномерное распределение.
-
Поведение при достижении порога Heat (200) включает спавн пепла и звуковой эффект, что логично, но стоит убедиться, что контейнер не переполнится при множественном срабатывании.
Рекомендуется:
- Вынести значения порогов урона в отдельный конфигурационный файл для упрощения балансировки
- Добавить документацию по взаимодействию различных типов урона
✅ Verification successful
Let's analyze the damage thresholds and behaviors in other body part prototypes to make a more informed decision about the balance.
Пороги урона для скелетных частей соответствуют базовым значениям
После анализа кодовой базы можно сделать следующие выводы:
-
Значения порогов урона (50/100/200) для компонента Destructible в
skeleton.yml
полностью соответствуют базовым значениям, определенным вbase.yml
для всех частей тела. -
Поведение при различных типах урона (Blunt, Slash, Heat) логично структурировано и соответствует общей механике игры, что подтверждается анализом других прототипов с компонентом Destructible.
-
Механика спавна пепла и воспроизведения звука при тепловом уроне является стандартной практикой, что видно из множества других прототипов в кодовой базе.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем использование аналогичных порогов урона в других прототипах
# Поиск других прототипов с компонентом Destructible
rg -l "type: Destructible" "Resources/Prototypes"
# Поиск конкретных значений порогов урона
rg "damage: (50|100|200)" "Resources/Prototypes"
Length of output: 175
Script:
#!/bin/bash
# Search for Destructible components in YAML files
rg -l "type: Destructible" --type yaml
# Search for damage thresholds in YAML files
rg "damage: (50|100|200)" --type yaml
# Search specifically for skeleton-related prototypes
rg -l "PartSkeleton" --type yaml
# Look for other body part prototypes with Destructible
rg "type: Destructible" "Resources/Prototypes/Body/Parts/" -C 5
Length of output: 49077
Content.Server/Body/Systems/BodySystem.cs (2)
112-114
: Корректное расширение функциональности метода GibBody!
Добавление параметров GibType
и GibContentsOption
с значениями по умолчанию - это хорошее решение, которое расширяет возможности управления процессом уничтожения тела, сохраняя обратную совместимость.
Also applies to: 128-129
181-191
: Проверьте синхронизацию с клиентом
Реализация RemovePartMarkings
выглядит корректно, но параметр sync: false
в вызове RemoveMarking
может привести к рассинхронизации состояния между сервером и клиентом. Убедитесь, что это ожидаемое поведение.
Content.Shared/Body/Part/BodyPartComponent.cs (1)
11-11
: Добавление пространства имен выглядит корректно!
Добавление Content.Shared.Humanoid
необходимо для использования перечисления Sex
и потенциально других функций, связанных с гуманоидами.
Content.Server/Backmen/Surgery/SurgerySystem.cs (2)
109-109
: Добавлена важная проверка компонента цели операции
Добавление проверки SurgeryTargetComponent
является критически важным изменением, которое предотвращает выполнение хирургических действий на неподходящих целях.
Line range hint 173-191
: Проверить корректность восстановления части тела
В методе OnStepAffixPartComplete
используется множитель 2 для исцеления (healing * 2
). Необходимо убедиться, что это значение корректно и не приводит к чрезмерному восстановлению здоровья.
✅ Verification successful
Let me search for more context about healing mechanics to better understand if this multiplier is reasonable.
Let me check the implementation of GetHealingSpecifier to understand the base healing values.
Множитель исцеления x2 является обоснованным
Анализ кода показывает, что множитель 2 для исцеления в методе OnStepAffixPartComplete
является корректным по следующим причинам:
- Базовое исцеление (
GetHealingSpecifier
) уже сбалансировано и имеет встроенные ограничения:- Использует
SelfHealingAmount
компонента части тела - Имеет пониженный коэффициент (0.1) для химического урона
- Включает защиту от избыточного лечения через
ClampMin(partEnt.Comp.MinIntegrity)
- Использует
- Двойное исцеление при хирургическом вмешательстве логично компенсирует серьезный урон, получаемый при отсечении части тела
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск других мест использования множителей исцеления
rg -A 2 "GetHealingSpecifier.*\*\s*[0-9]+"
Length of output: 443
Script:
#!/bin/bash
# Поиск определения GetHealingSpecifier и связанных методов
ast-grep --pattern 'GetHealingSpecifier($_) {
$$$
}'
# Поиск других методов, связанных с исцелением частей тела
rg -A 5 "TryChangeIntegrity|GetHealingSpecifier"
# Поиск тестов, связанных с исцелением
fd "test" -e cs -x rg -l "healing|TryChangeIntegrity|GetHealingSpecifier" {}
Length of output: 5782
Script:
#!/bin/bash
# Поиск содержимого GetHealingSpecifier для понимания базовых значений лечения
cat Content.Shared/Backmen/Surgery/Body/SharedBodySystem.Integrity.cs
# Поиск использования множителей урона в других местах для сравнения
rg "DamageSpecifier.*\*\s*[0-9]+" -A 2
Length of output: 14526
Resources/Prototypes/Entities/Mobs/Player/silicon_base.yml (1)
1-6
: Базовая конфигурация сущности требует уточнения
Сущность наследуется от нескольких базовых типов, что может привести к конфликтам. Рекомендуется:
- Добавить документацию, описывающую назначение каждого родительского типа
- Проверить необходимость всех родительских типов, особенно
MobFlammable
, учитывая природу силиконовой сущности
Resources/Prototypes/_Backmen/Entities/Surgery/surgeries.yml (2)
152-152
: Исправлена опечатка в названии
Корректное исправление опечатки в названии операции с "Left Han" на "Left Hand".
Line range hint 236-252
: Проверьте влияние удаления SurgeryAlienEmbryoRemoval
Сущность SurgeryAlienEmbryoRemoval
закомментирована. Необходимо убедиться, что:
- Это намеренное изменение
- Все зависимые системы обновлены соответствующим образом
- Нет оставшихся ссылок на эту операцию в других частях кода
✅ Verification successful
Удаление SurgeryAlienEmbryoRemoval безопасно
Поиск по кодовой базе показал, что все упоминания SurgeryAlienEmbryoRemoval
и связанных терминов находятся только в файле surgeries.yml
, где эта сущность была закомментирована. Отсутствие ссылок в других файлах указывает на то, что удаление этой операции не повлияет на другие части системы.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Поиск возможных ссылок на удаленную операцию
rg "SurgeryAlienEmbryoRemoval|Alien Embryo Removal" --type-not yml
Length of output: 190
Script:
#!/bin/bash
# Поиск возможных ссылок на удаленную операцию во всех файлах
rg -i "SurgeryAlienEmbryoRemoval|Alien Embryo Removal"
# Поиск файлов с возможными ссылками на эмбрионы пришельцев
rg -i "alien.*embryo|embryo.*alien"
Length of output: 583
Resources/Changelog/ChangelogBkm.yml (1)
226-235
: Запись в changelog корректна!
Запись правильно структурирована и содержит всю необходимую информацию о исправлении проблемы с отображением Popup на мягких наручниках.
Content.Client/Humanoid/HumanoidAppearanceSystem.cs (1)
58-59
: Правильное исправление игнорирования цвета кожи!
Важное исправление, которое решает проблему с неправильной обработкой цвета кожи для пользовательских базовых слоев. Комментарий хорошо объясняет причину изменения.
Content.Shared/Backmen/Surgery/SharedSurgerySystem.Steps.cs (1)
163-174
: Проверка брони реализована корректно!
Реализация проверки наличия брони в целевых слотах выполнена правильно. Код использует контейнерный энумератор и корректно обрабатывает локализованные сообщения об ошибках.
Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (1)
403-404
: Проверьте логику гибели таракана
Добавление GibBehavior
с параметром gibContents: Skip
означает, что при получении значительного дробящего урона таракан будет уничтожен без создания внутренних предметов. Убедитесь, что это соответствует желаемому игровому поведению.
✅ Verification successful
Поведение таракана соответствует существующей механике
Параметр gibContents: Skip
уже используется в других сущностях игры (например, в скелетах), что указывает на устоявшийся паттерн для существ, которые не должны оставлять после уничтожения внутренние предметы. Такое поведение логично для таракана и соответствует общей механике игры.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем, есть ли другие сущности с похожей конфигурацией
rg --type yaml "GibBehavior.*\n.*gibContents:\s*Skip"
Length of output: 247
Script:
#!/bin/bash
# Проверяем сущности с GibBehavior и параметром Skip, используя multiline режим
rg -U --type yaml "GibBehavior.*[\n\r].*gibContents:\s*Skip"
# Поиск других сущностей с GibBehavior для сравнения
rg -U --type yaml "GibBehavior.*[\n\r].*gibContents:"
Length of output: 758
Content.Client/Backmen/Body/BodySystem.cs (1)
33-35
: Проверьте правильность индекса слоя при добавлении спрайта
В методе AddLayer
вы используете j + 1
в качестве индекса слоя. Убедитесь, что это соответствует вашей системе слоев и не приводит к нежелательным последствиям в отображении спрайтов.
Content.Shared/Body/Systems/SharedBodySystem.Body.cs (9)
16-17
: Добавлены необходимые пространства имён
Новые using
директивы Content.Shared.Humanoid.Events
и Content.Shared.Humanoid.Prototypes
корректно импортированы для использования соответствующих компонентов и событий.
58-58
: Подписка на событие ProfileLoadFinishedEvent
успешно реализована
Подписка на локальное событие позволит корректно обработать завершение загрузки профиля для BodyComponent
.
132-132
: Установка свойства OriginalBody
для корневой части тела
Свойство OriginalBody
корректно присвоено rootPart
, что позволит отслеживать исходное тело для каждой части.
136-136
: Вызов метода MapInitParts
обновлён
Метод MapInitParts
вызывается с правильными параметрами (rootPartUid
, rootPart
, prototype
) для инициализации частей тела.
Line range hint 190-230
: Обновление метода MapInitParts
и установка OriginalBody
для дочерних частей
В методе MapInitParts
свойство OriginalBody
устанавливается для каждой дочерней части тела, обеспечивая целостность данных и отслеживание оригинального тела.
370-372
: Добавлены параметры для расширения функциональности метода GibBody
Нововведенные параметры gibSoundOverride
, gib
и contents
в методе GibBody
позволяют более гибко управлять процессом гиббирования и его последствиями.
389-389
: Актуализация вызова метода _gibbingSystem.TryGibEntityWithRef
Вызов метода обновлен в соответствии с новыми параметрами, что обеспечивает корректное функционирование гиббирования с учетом новых возможностей.
460-463
: Убедитесь в корректной инициализации компонента BodyPartAppearanceComponent
При добавлении компонента BodyPartAppearanceComponent
к каждой части тела важно гарантировать, что все необходимые свойства инициализированы правильно для предотвращения возможных ошибок при отображении.
Проверьте, что все компоненты BodyPartAppearanceComponent
настроены корректно и не вызывают нежелательных последствий в дальнейшем.
456-458
:
Исправьте синтаксическую ошибку в условном операторе
В условии отсутствует закрывающая скобка, что приведет к ошибке компиляции.
Примените следующий дифф для исправления:
-if (!TryComp<HumanoidAppearanceComponent>(uid, out var appearance)
+if (!TryComp<HumanoidAppearanceComponent>(uid, out var appearance))
Likely invalid or redundant comment.
Content.Shared/Humanoid/SharedHumanoidAppearanceSystem.cs (2)
Line range hint 421-452
: Изменение метода LoadProfile на virtual
Добавление ключевого слова virtual
к методу LoadProfile
позволяет подклассам переопределять его. Убедитесь, что это изменение не приведет к неожиданному поведению в наследующих классах и что все переопределения корректно реализованы.
452-452
: Проверка инициализации свойства profile.Voice
При вызове SetTTSVoice(uid, profile.Voice, humanoid);
необходимо убедиться, что profile.Voice
не является null
или пустой строкой, чтобы избежать возможных ошибок во время выполнения.
Content.Shared/Body/Systems/SharedBodySystem.Parts.cs (3)
181-183
: Корректное отключение части тела
Отправка события BodyPartEnableChangedEvent(false)
на partEnt
соответствует логике отключения части тела при ее отделении и обеспечивает правильное информирование связанных систем.
184-189
: Проверка и добавление компонента внешности части тела
Логика условной проверки наличия компонента BodyPartAppearanceComponent
и его добавление при необходимости корректна. Это гарантирует, что внешность отделенной части тела будет правильно отображаться.
192-193
: Отправка события о выпадении части тела
Создание и отправка события BodyPartDroppedEvent
на body
обеспечивает корректное уведомление системы о том, что часть тела была отделена, что важно для последующей обработки в системе.
/// <summary> | ||
/// Color of this custom base eye layer. Null implies eye colour if the corresponding <see cref="HumanoidSpeciesSpriteLayer"/> is set to match skin. | ||
/// </summary> | ||
[DataField, AutoNetworkedField] | ||
public Color? EyeColor { get; set; } |
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
Добавление EyeColor требует синхронизации с существующим Color.
Новое свойство EyeColor
дублирует логику Color
. Рекомендуется объединить логику обработки цветов в отдельный метод.
Предлагаю создать вспомогательный метод для обработки цветов различных частей тела.
protected override void ApplyPartMarkings(EntityUid target, BodyPartAppearanceComponent component) | ||
{ | ||
return; | ||
} |
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.
Реализуйте метод ApplyPartMarkings
Пустая реализация метода ApplyPartMarkings
требует доработки. Метод должен применять маркировки к частям тела, аналогично тому, как это реализовано в клиентской части.
Нужна помощь в реализации этого метода?
/*protected override void UpdateAppearance(EntityUid uid, BodyPartAppearanceComponent component) | ||
{ | ||
return; | ||
}*/ |
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
Удалите закомментированный код
Вместо комментирования метода UpdateAppearance
, его следует полностью удалить, если он больше не используется. Сохранение закомментированного кода затрудняет поддержку и создает путаницу.
- /*protected override void UpdateAppearance(EntityUid uid, BodyPartAppearanceComponent component)
- {
- return;
- }*/
📝 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.
/*protected override void UpdateAppearance(EntityUid uid, BodyPartAppearanceComponent component) | |
{ | |
return; | |
}*/ |
- type: Flammable | ||
fireSpread: true | ||
canResistFire: true | ||
damage: | ||
types: | ||
Heat: 0.75 #per second, scales with number of fire 'stacks' | ||
# - type: Barotrauma # Not particularly modifiable. In the future, some response to pressure changes would be nice. |
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.
Проверить логику воспламеняемости
Компонент Flammable
может быть нелогичным для силиконового существа:
fireSpread: true
может быть опаснымcanResistFire: true
противоречит высокому урону от тепла
- type: StatusEffects | ||
allowed: | ||
- Stun | ||
- KnockedDown | ||
- SlowedDown | ||
- Stutter | ||
- SeeingRainbows | ||
- Electrocution | ||
# - Drunk | ||
- SlurredSpeech | ||
- PressureImmunity | ||
- Muted | ||
# - ForcedSleep | ||
- TemporaryBlindness | ||
- Pacified | ||
# - PsionicsDisabled | ||
# - PsionicallyInsulated | ||
- type: Blindable |
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
Пересмотреть список разрешенных эффектов статуса
Некоторые эффекты могут быть нелогичными для робота:
SlurredSpeech
требует обоснованияSeeingRainbows
может быть неуместным- Закомментированные эффекты требуют пояснений
@@ -69,7 +69,7 @@ | |||
categories: [ HideSpawnMenu ] | |||
components: | |||
- type: Surgery | |||
requirement: SurgeryOpenIncision | |||
#requirement: SurgeryOpenIncision |
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
Обнаружено отклонение от стандартной структуры хирургических операций
Анализ кодовой базы показывает, что операция присоединения головы (SurgeryAttachHead) является единственной операцией, где требование SurgeryOpenIncision закомментировано. Все остальные хирургические операции требуют предварительного разреза. Это нарушает установленную механику хирургической системы:
- Операция включает шаг
SurgeryStepInsertFeature
, который обычно выполняется только после разреза - Все аналогичные операции по присоединению частей тела (
SurgeryStepInsertFeature
) требуютSurgeryOpenIncision
- Отсутствие требования разреза противоречит логике игрового процесса
🔗 Analysis chain
Проверьте удаление зависимости SurgeryOpenIncision
Удаление требования SurgeryOpenIncision
для операции присоединения головы может иметь серьезные последствия для игрового процесса. Это позволит выполнять операцию без предварительного разреза.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Проверяем, есть ли другие хирургические операции, которые не требуют разреза
rg -l "requirement: SurgeryOpenIncision" | wc -l
Length of output: 190
Script:
#!/bin/bash
# Check for SurgeryOpenIncision requirements in yml files
rg "requirement.*SurgeryOpenIncision" --type yaml -A 2 -B 2
# Also check for any surgery-related files
fd -e yml -e yaml . | grep -i surg
Length of output: 6779
Script:
#!/bin/bash
# Let's check the specific surgery entity and its context
rg -A 10 -B 10 "SurgeryAttachHead" Resources/Prototypes/_Backmen/Entities/Surgery/surgeries.yml
# Also check for any related surgery steps
rg -A 5 -B 5 "SurgeryStepInsertFeature" Resources/Prototypes/_Backmen/Entities/Surgery/surgery_steps.yml
Length of output: 952
protected override void RemovePartMarkings(EntityUid target, BodyPartAppearanceComponent partAppearance, HumanoidAppearanceComponent bodyAppearance) | ||
{ | ||
return; | ||
} |
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.
Реализуйте метод RemovePartMarkings
или удалите его переопределение
Метод RemovePartMarkings
переопределен, но содержит только пустой return;
, не выполняя никакой логики. Если метод необходим, следует реализовать его функциональность. Если нет, можно удалить его переопределение, чтобы избежать потенциальной путаницы.
private void HandleState(EntityUid uid, BodyPartAppearanceComponent component, ref AfterAutoHandleStateEvent args) | ||
{ | ||
ApplyPartMarkings(uid, component); | ||
} |
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.
Вызов абстрактного метода может привести к ошибке во время выполнения.
Метод ApplyPartMarkings
, вызываемый здесь, является абстрактным и не реализован в текущем классе. Это приведет к исключению NotImplementedException
при выполнении. Пожалуйста, реализуйте этот метод или убедитесь, что класс, содержащий его реализацию, используется правильно.
protected abstract void ApplyPartMarkings(EntityUid target, BodyPartAppearanceComponent component); | ||
|
||
protected abstract void RemovePartMarkings(EntityUid target, BodyPartAppearanceComponent partAppearance, HumanoidAppearanceComponent bodyAppearance); |
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.
Абстрактные методы в неабстрактном классе приведут к ошибке компиляции.
Класс SharedBodySystem
содержит абстрактные методы, но не объявлен как абстрактный. Это вызовет ошибку компиляции. Пожалуйста, либо объявите класс абстрактным, либо реализуйте следующие методы:
ApplyPartMarkings
RemovePartMarkings
Могу ли я помочь с реализацией этих методов или открыть задачу в GitHub для отслеживания этой проблемы?
if (bodyAppearance.Species.ToString() == "Felinid") | ||
part.Species = "Human"; | ||
else | ||
part.Species = bodyAppearance.Species; |
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
Избегайте хардкодинга строк при сравнении видов.
Для сравнения видов рекомендуется использовать константы или перечисления вместо строковых литералов. Это повысит надежность кода и упростит его поддержку.
Примените следующий дифф для исправления:
- if (bodyAppearance.Species.ToString() == "Felinid")
- part.Species = "Human";
+ if (bodyAppearance.Species == Species.Felinid)
+ part.Species = Species.Human;
Committable suggestion skipped: line range outside the PR's diff.
Reverts #570
Summary by CodeRabbit
Новые функции
Исправления ошибок
Документация
Общие улучшения