Skip to content

[Заказ] Выбор нимба и рогов для милир / переоткрытие - #4765

Draft
Orvex07 wants to merge 2 commits into
makura-games:masterfrom
Orvex07:nimb_after_upp
Draft

Orvex07 wants to merge 2 commits into
makura-games:masterfrom
Orvex07:nimb_after_upp

Conversation

@Orvex07

@Orvex07 Orvex07 commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Краткое описание

Добавлен выбор внешности для милир между нимбом и различными видами рогов (Роги от аркан)
Важно -> специально сделано так, чтобы нельзя было выбрать рога + нимб.

Сделал небольшой cleanup в MoodVisualizerSystem.cs. Полный cleanup в этом ПРе делать не буду.

ДОПОЛНИТЕЛЬНО:
Также исправлено сохранение персонажей спонсорских рас в сборках без подключённой системы спонсоров. Невозможно было сохранить персонажа на спонсорской расе на тестовом сервере. Исправил проверком есть ли спонсоркий менеджер.

Ссылка на багрепорт/Предложение

https://discord.com/channels/1499823476360613898/1512507715925053553

Медиа

Скриншоты выбора нимба и рогов
screenshot-2026-07-10_21-03-39
screenshot-2026-07-10_21-04-38
screenshot-2026-07-10_21-05-33

Changelog

🆑 Orvex07

  • add: Для милир добавлен выбор между нимбом и различными видами рогов.

Summary by CodeRabbit

Новые возможности

  • Визуализация настроения теперь использует пользовательские маркировки и обновляется при изменении внешности.
  • Для Milira добавлена маркировка «Нимб», отображаемая даже без данных о настроении.
  • Для Milira добавлены отдельные слоты для ушных и специальных маркировок.
  • Демонические рога стали доступны для настройки персонажей Milira.

Исправления

  • Улучшена проверка доступности спонсорских видов при загрузке профиля персонажа.

Локализация

  • Добавлены названия маркировки «Нимб» на русском и английском языках.

@coderabbitai

coderabbitai Bot commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

Next included review available in 55 minutes.

View limit details

Limit details: You’ve used the included review currently available.

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 12f7bd25-13f7-4976-a8a7-8424664379e4

📥 Commits

Reviewing files that changed from the base of the PR and between 0fcccf4 and 41967dc.

📒 Files selected for processing (14)
  • Content.Client/Body/VisualBodySystem.cs
  • Content.Client/_Sunrise/Body/VisualBodySystem.Markings.cs
  • Content.Client/_Sunrise/Lobby/UI/HumanoidProfileEditor.Sponsors.cs
  • Content.Client/_Sunrise/Mood/MoodVisualizerSystem.cs
  • Content.Shared/Mood/MoodVisualsComponent.cs
  • Content.Shared/Preferences/HumanoidCharacterProfile.cs
  • Resources/Locale/en-US/_prototypes/_sunrise/entities/mobs/customization/markings/milira_mood.ftl
  • Resources/Locale/ru-RU/_prototypes/_sunrise/entities/mobs/customization/markings/milira_mood.ftl
  • Resources/Prototypes/_Sunrise/Body/Parts/milira.yml
  • Resources/Prototypes/_Sunrise/Entities/Mobs/Customization/Markings/demon.yml
  • Resources/Prototypes/_Sunrise/Entities/Mobs/Customization/Markings/milira_ears.yml
  • Resources/Prototypes/_Sunrise/Entities/Mobs/Customization/Markings/milira_mood.yml
  • Resources/Prototypes/_Sunrise/Entities/Mobs/Species/milira.yml
  • Resources/Prototypes/_Sunrise/Species/milira.yml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@ThereDrD0

Copy link
Copy Markdown
Member

Потом заревьювю это

@ReWAFFlution

Copy link
Copy Markdown
Contributor

Трахнул бы

Comment on lines +136 to +140
private void RaiseSunriseMarkingsUpdated(EntityUid target)
{
var ev = new SunriseMarkingsUpdatedEvent();
RaiseLocalEvent(target, ref ev);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Метод на 2 строчки используемый 1 раз. Не вижу в нем смысла, используй этот код напрямую

private bool TryGetMoodState(
Entity<MoodVisualsComponent> ent,
AppearanceComponent appearance,
out string? state)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Добавить [NotNullWhen(true)]

if (HasComp<PentagramComponent>(ent) && HasComp<WingToggleComponent>(ent))
return false;

return !AppearanceSystem.TryGetData<MoodThreshold>(ent, MoodVisuals.CurrentMoodThreshold, out var moodThreshold, appearance) ? ent.Comp.VisibleWithoutMood : ent.Comp.MoodStates.TryGetValue(moodThreshold, out state);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Лучше инвертировать условие и поменять местами аргументы + сделать многострочным.
Лишнее логическое усложнение в виде ! - хуже для читаемости

return;

if (ShouldHideMoodVisuals(ent))
Entity<SpriteComponent> spriteEnt = (ent, sprite);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Поменять тип на простой var, этого достаточно и смотрится проще

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Заменю вот таким образом и уберу лишнее AsNullable
var spriteEnt = new Entity<SpriteComponent?>(ent, sprite);

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Заменю вот таким образом и уберу лишнее AsNullable var spriteEnt = new Entity<SpriteComponent?>(ent, sprite);

Достаточно просто var spriteEnt = (ent, sprite);

Comment on lines +18 to 23
/// <summary>
/// Должны ли настроенные markings отображаться до появления данных о настроении.
/// </summary>
[DataField]
public SpriteSpecifier? Sprite;
public bool VisibleWithoutMood;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Нейминг и комментарий расходятся.
Нейминг означает видны ли ВООБЩЕ эффекты без настроения. В комментарии же написано "до появления настроения", что не равнозначно отсутствию проверок на наличие настроения

Нужно уточнить и поменять

Comment on lines 9 to 11
[RegisterComponent]
public sealed partial class MoodVisualsComponent : Component
{

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Тут кстати компонент не дублируется на клиент, если будет добавлен на с клиента.
Нужно исправить или переместить чисто на клиент

Comment on lines +498 to +500
(collection.TryResolveType<ISharedSponsorsManager>(out _) &&
speciesPrototype.SponsorOnly &&
!sponsorPrototypes.Contains(Species.Id))) // Sunrise-Edit

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Комментарий должен стоять на уровне добавленной строчки, а не в конце.
Переместить наверх

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Как правильно?

Первый вариант:

               // Sunrise-Edit
               (collection.TryResolveType<ISharedSponsorsManager>(out _) &&
                    speciesPrototype.SponsorOnly &&
                    !sponsorPrototypes.Contains(Species.Id))) 

Второй вариант:

               // Sunrise-Edit-Start
               (collection.TryResolveType<ISharedSponsorsManager>(out _) &&
                    speciesPrototype.SponsorOnly &&
                    !sponsorPrototypes.Contains(Species.Id)))
               // Sunrise-Edit-End

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Второй можно, но я имел ввиду такое

                (collection.TryResolveType<ISharedSponsorsManager>(out _) && // Sunrise-Edit
                     speciesPrototype.SponsorOnly &&
                     !sponsorPrototypes.Contains(Species.Id))) 

@makura-auto-draft

makura-auto-draft Bot commented Sep 10, 2026

Copy link
Copy Markdown

Готовим изменения к ревью

Привет! Здесь видно, что осталось сделать перед проверкой человеком. Пролистай страницу ПР вниз до блока проверок: там видны тесты и их результаты. Галочки в этом списке обновляются автоматически.

  • Разобраться с замечаниями. Исправь код и закрой решённые обсуждения во вкладке Files changed — изменённые файлы. Если не согласен, обсуди это с ревьювером.
    • Замечания ThereDrD0
  • Решить конфликты слияния в IDE.

Warning

GitHub не разрешит слить ПР, пока есть конфликты. Обнови свою ветку из целевой, открой отмеченные как конфликтующие файлы в IDE, выбери правильные изменения, создай коммит и отправь его.

  • Проверка CodeRabbit: достигнут лимит запросов, поэтому сейчас разрешено продолжить без нового ревью.
    CodeRabbit — искусственный интеллект: он может ошибаться и предлагать бессмысленные исправления. Сам проверь, действительно ли найден баг. Исправляй настоящие ошибки, а с неверным замечанием объясни своё несогласие в обсуждении.
  • Пройти обязательные проверки внизу страницы ПР. Нажми на нужную проверку, чтобы посмотреть результат. Также доступна вкладка Checks — проверки. Жёлтая проверка ещё выполняется; красная завершилась с ошибкой.
Показать обязательные проверки
  • YAML Linter
  • Content Tests
  • Build & Test Debug
  • Test Packaging
  • Integration Tests (shard 0)
  • Integration Tests (shard 1)
  • Integration Tests (shard 2)
  • Integration Tests (shard 3)
  • Integration Tests (shard 4)
  • Integration Tests (shard 5)
  • Integration Tests (shard 6)
  • Integration Tests (shard 7)
  • Build & Test Debug
Как найти список ошибок тестов
  1. Пролистай ПР вниз до блока проверок и нажми на упавший тест. Можно также открыть его во вкладке Checks.
  2. На странице задания нажми Summary — сводка запуска.
  3. В сводке раскрой нужный шард — группу тестов, например Integration Tests (shard 0). Там будет список ошибок.
  4. Исправь причину и отправь изменения в этот ПР. Если сводка не содержит ошибок, открой журнал упавшего шага задания.

Когда все пункты выполнены, бот сам переведёт ПР из черновика в готовое состояние. Обновление иногда занимает несколько минут.

@makura-auto-draft makura-auto-draft Bot added the 🍄 автодрафт: нужны исправления Автоматический черновик: ожидаются исправления или обязательные проверки. label Sep 10, 2026
@makura-auto-draft
makura-auto-draft Bot marked this pull request as draft September 10, 2026 23:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🍄 автодрафт: нужны исправления Автоматический черновик: ожидаются исправления или обязательные проверки.

Projects

Status: НЕ РАЗОБРАНО

Development

Successfully merging this pull request may close these issues.

3 participants