-
Notifications
You must be signed in to change notification settings - Fork 155
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
[PORT] - SoftCrit system #1011
base: master
Are you sure you want to change the base?
[PORT] - SoftCrit system #1011
Conversation
WalkthroughИзменения связаны с введением новой концепции "Soft-Crit" (мягкого критического состояния) в игровой механике. Добавлены новые конфигурационные переменные, которые контролируют возможность движения и разговора персонажей в критическом состоянии. Модифицированы системы управления состоянием мобов и движением, чтобы реализовать более гибкие правила поведения персонажей при получении тяжелых повреждений. 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: 0
🧹 Nitpick comments (4)
Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs (2)
56-70
: Рефакторинг дублирующейся логики проверки состояния.Логика проверки критического состояния и разрешения на движение дублируется в методах
OnDirectionAttempt
иOnMoveAttempt
. Рекомендуется выделить эту логику в отдельный вспомогательный метод.Предлагаемый рефакторинг:
+private bool CanMoveInCriticalState(EntityUid uid, MobStateComponent comp) +{ + return !(comp.CurrentState is MobState.Critical) || _configurationManager.GetCVar(CCVars.AllowMovementWhileCrit); +} private void OnDirectionAttempt(Entity<MobStateComponent> ent, ref ChangeDirectionAttemptEvent args) { - if (ent.Comp.CurrentState is MobState.Critical && _configurationManager.GetCVar(CCVars.AllowMovementWhileCrit)) + if (CanMoveInCriticalState(ent.Owner, ent.Comp)) return; CheckAct(ent.Owner, ent.Comp, args); } private void OnMoveAttempt(Entity<MobStateComponent> ent, ref UpdateCanMoveEvent args) { - if (ent.Comp.CurrentState is MobState.Critical && _configurationManager.GetCVar(CCVars.AllowMovementWhileCrit)) + if (CanMoveInCriticalState(ent.Owner, ent.Comp)) return; CheckAct(ent.Owner, ent.Comp, args); }
169-172
: Согласование подхода к проверкам критического состояния.Для поддержания единообразия кодовой базы, рекомендуется использовать тот же подход к проверке возможности разговора в критическом состоянии, что и для проверки движения.
Предлагаемый рефакторинг:
+private bool CanSpeakInCriticalState(EntityUid uid, MobStateComponent comp) +{ + return !(comp.CurrentState is MobState.Critical) || _configurationManager.GetCVar(CCVars.AllowTalkingWhileCrit); +} private void OnSpeakAttempt(EntityUid uid, MobStateComponent component, SpeakAttemptEvent args) { if (HasComp<AllowNextCritSpeechComponent>(uid)) { RemCompDeferred<AllowNextCritSpeechComponent>(uid); return; } - if (component.CurrentState is MobState.Critical && _configurationManager.GetCVar(CCVars.AllowTalkingWhileCrit)) + if (CanSpeakInCriticalState(uid, component)) return; CheckAct(uid, component, args); }Content.Shared/Movement/Systems/SharedMoverController.cs (1)
125-130
: Улучшение читаемости условий проверки.Сложное условие с множественными проверками затрудняет понимание кода. Рекомендуется разбить его на отдельные проверки с говорящими именами.
Предлагаемый рефакторинг:
-if (_mobState.IsDead(relayTarget.Source) - || TryComp<SleepingComponent>(relayTarget.Source, out _) - || !MoverQuery.TryGetComponent(relayTarget.Source, out var relayedMover) - || _mobState.IsCritical(relayTarget.Source) && !_configManager.GetCVar(CCVars.AllowMovementWhileCrit)) +private bool CannotMove(EntityUid source) +{ + return _mobState.IsDead(source) + || TryComp<SleepingComponent>(source, out _) + || !MoverQuery.TryGetComponent(source, out _) + || (_mobState.IsCritical(source) && !_configManager.GetCVar(CCVars.AllowMovementWhileCrit)); +} +if (CannotMove(relayTarget.Source))Content.Shared/Movement/Systems/SharedMoverController.Input.cs (1)
306-312
: Согласование проверок состояния между компонентами.Логика проверки критического состояния здесь аналогична той, что используется в других местах. Рекомендуется использовать единый подход через вспомогательные методы из
MobStateSystem
.Предлагаемый рефакторинг:
-if (_mobState.IsDead(entity) - || _mobState.IsCritical(entity) && !_configManager.GetCVar(CCVars.AllowMovementWhileCrit)) +if (!_mobState.CanMove(entity)) return; HandleDirChange(relayMover.RelayEntity, dir, subTick, state);
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (4)
Content.Shared/CCVar/CCVars.cs
(1 hunks)Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs
(5 hunks)Content.Shared/Movement/Systems/SharedMoverController.Input.cs
(1 hunks)Content.Shared/Movement/Systems/SharedMoverController.cs
(1 hunks)
⏰ Context from checks skipped due to timeout of 300000ms (3)
- GitHub Check: build (ubuntu-latest)
- GitHub Check: Test Packaging
- GitHub Check: build (ubuntu-latest)
🔇 Additional comments (1)
Content.Shared/CCVar/CCVars.cs (1)
42-48
: Необходимо реализовать функционал урона при движении в критическом состоянии.В комментарии указано, что функционал урона при движении в критическом состоянии не реализован. Рекомендуется либо реализовать эту функцию, либо удалить неиспользуемую переменную конфигурации.
Хотите, чтобы я помог с реализацией этой функции или создал GitHub issue для отслеживания задачи?
|
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
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
Content.Server/Chat/Systems/ChatSystem.cs
(1 hunks)
⏰ Context from checks skipped due to timeout of 300000ms (4)
- GitHub Check: YAML Linter
- GitHub Check: build (ubuntu-latest)
- GitHub Check: Test Packaging
- GitHub Check: build (ubuntu-latest)
//BACMEN-EDIT-START | ||
if (player.AttachedEntity.HasValue){ | ||
if (_mobStateSystem.IsCritical(player.AttachedEntity!.Value)) | ||
{ | ||
shell?.WriteError("You in crit!"); | ||
return false; | ||
} | ||
} | ||
// BACKMEN-EDIT-END | ||
|
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
Исправьте стиль кода и переведите сообщение об ошибке.
Текущая реализация имеет следующие проблемы:
- Несогласованный стиль отступов
- Сообщение об ошибке на английском языке
Примените следующие изменения:
- //BACMEN-EDIT-START
- if (player.AttachedEntity.HasValue){
- if (_mobStateSystem.IsCritical(player.AttachedEntity!.Value))
- {
- shell?.WriteError("You in crit!");
- return false;
- }
- }
- // BACKMEN-EDIT-END
+ // BACMEN-EDIT-START
+ if (player.AttachedEntity.HasValue && _mobStateSystem.IsCritical(player.AttachedEntity.Value))
+ {
+ shell?.WriteError("Вы находитесь в критическом состоянии!");
+ return false;
+ }
+ // BACKMEN-EDIT-END
📝 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.
//BACMEN-EDIT-START | |
if (player.AttachedEntity.HasValue){ | |
if (_mobStateSystem.IsCritical(player.AttachedEntity!.Value)) | |
{ | |
shell?.WriteError("You in crit!"); | |
return false; | |
} | |
} | |
// BACKMEN-EDIT-END | |
// BACMEN-EDIT-START | |
if (player.AttachedEntity.HasValue && _mobStateSystem.IsCritical(player.AttachedEntity.Value)) | |
{ | |
shell?.WriteError("Вы находитесь в критическом состоянии!"); | |
return false; | |
} | |
// BACKMEN-EDIT-END |
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.
Софткрит не должен идти всё время крита, только хотя бы до 150 урона
Описание PR
добавляет систему полукрита, критованые теперь могут ползать (добейте выживших!)
original PR: Simple-Station/Einstein-Engines#1370
Медиа
Тип PR
Изменения
Summary by CodeRabbit
Новые функции
Улучшения
Исправления