Skip to content

[ADD] MagicImmunity#2611

Open
CrimeMoot wants to merge 2 commits intoAdventureTimeSS14:masterfrom
CrimeMoot:chaplaintweak
Open

[ADD] MagicImmunity#2611
CrimeMoot wants to merge 2 commits intoAdventureTimeSS14:masterfrom
CrimeMoot:chaplaintweak

Conversation

@CrimeMoot
Copy link
Contributor

Описание PR

Добавлен полный иммунитет к магии для священника и святого арбуза. Священник теперь неуязвим для всех магических способностей еретика и ревенанта, а магические снаряды (огненный шар, полиморф и др.) поглощаются без эффекта при попадании в цель с иммунитетом.

Почему / Баланс

Священник задуман как духовный защитник станции, способный противостоять тёмным силам. До этого изменения у него не было механической защиты от магии, что делало его уязвимым для еретиков и ревенантов, несмотря на лорную роль "борца с тёмными силами".

Техническая информация

  • Компоненты перемещены в Content.Shared.ADT.Chaplain.Components для консистентности
  • Изменения были протестированы на локальном сервере, и всё работает отлично.
  • PR закончен и требует просмотра изменений.

Чейнджлог

🆑 CrimeMoot

  • add: Иммунитет к полной магии для священника, но на его учеников не переносится.
  • add: Святой арбуз - даёт полный иммунитет к магии (как у священника) при держании в руке. В сумке и в карманах, не работает.
  • add: Иммунитет к магии, так же блокирует магические снаряды - огненный шар и другие, поглощаются при попадании в цель с иммунитетом
  • add: Иммунитет к магии блокирует цепные способности - прерывает цепь при попадании.
  • add: Магия не может выбрать в качестве цели обладателя иммунитета к магии - при условии, что способность действует на тех, кто рядом или по области.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 11, 2026

Обзор

PR выполняет миграцию компонентов, связанных с Chaplain, из пространства имён Content.Shared.Bible.Components в Content.Shared.ADT.Chaplain.Components во множество файлов. Вводятся четыре новых сетевых компонента для управления магической защитой и иммунитетом (MagicImmunityComponent, HolyMelonImmunityComponent, HolyMelonMagicImmunityComponent, MagicProjectileComponent) и две новые системы (HolyMelonImmunitySystem, MagicProjectileSystem). Существующие проверки на ChaplainComponent в различных системах заменяются на универсальный MagicImmunityComponent, изменяя взаимодействие магических способностей с защищёнными сущностями.

Возможно связанные PR

Рекомендуемые метки

S: Untriaged

Рекомендуемые рецензенты

  • Red-Lis
  • JackTalentedCoder
  • Unlumy
🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 8.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed Название кратко и ясно описывает основное изменение PR — добавление механики магического иммунитета.
Description check ✅ Passed Описание подробно объясняет назначение, баланс, техническую реализацию и изменения в коде PR.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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 and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (5)
Content.Server/ADT/Heretic/EntitySystems/MansusGraspSystem.cs (1)

261-275: ⚠️ Potential issue | 🟠 Major

Иммунитет здесь неполный — цель всё равно роняет предмет.

На Line 263 защита оборачивает только пакет оглушения. Ниже код всё равно выполняет _hands.TryDrop(...) и SpendInfusionCharges(...), поэтому magic-immune цель получает побочный эффект, хотя в PR заявлен полный иммунитет от еретической магии. Здесь нужен ранний выход до всей ветки воздействия.

💡 Вариант правки
     private void OnInfusedInteract(Entity<MansusInfusedComponent> ent, ref InteractHandEvent args)
     {
         var target = args.User;
 
         if (HasComp<HereticComponent>(target) || HasComp<GhoulComponent>(target))
             return;
 
+        if (HasComp<MagicImmunityComponent>(target))
+            return;
+
         if (HasComp<StatusEffectsComponent>(target))
         {
-            if (!HasComp<MagicImmunityComponent>(target))
-            {
-                _audio.PlayPvs(new SoundPathSpecifier("/Audio/Items/welder.ogg"), target);
-                _stun.TryKnockdown(target, TimeSpan.FromSeconds(3f), true);
-                _stamina.TakeStaminaDamage(target, 80f);
-                _language.DoRatvarian(target, TimeSpan.FromSeconds(10f), true);
-            }
+            _audio.PlayPvs(new SoundPathSpecifier("/Audio/Items/welder.ogg"), target);
+            _stun.TryKnockdown(target, TimeSpan.FromSeconds(3f), true);
+            _stamina.TakeStaminaDamage(target, 80f);
+            _language.DoRatvarian(target, TimeSpan.FromSeconds(10f), true);
         }
 
         if (TryComp<HandsComponent>(target, out var hands))
             _hands.TryDrop(target, Transform(target).Coordinates);
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Server/ADT/Heretic/EntitySystems/MansusGraspSystem.cs` around lines
261 - 275, The current immunity check only skips some effects but still allows
the target to drop items and consumes infusion charges even if they have
MagicImmunityComponent. To fully honor the magic immunity in the code block
within the MansusGraspSystem, add an early return or skip the entire effect
handling when the target has MagicImmunityComponent. This should include
bypassing the calls to _hands.TryDrop and SpendInfusionCharges to ensure no
effects or charge consumption happen on immune targets.
Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.Void.cs (3)

6-15: ⚠️ Potential issue | 🟡 Minor

Отсортируйте using по алфавиту.

После добавления Content.Shared.ADT.Chaplain.Components блок больше не идёт в стабильном алфавитном порядке.

As per coding guidelines "И ещё смотри за тем чтобы using был в алфавитном порядке в наших /ADT/ системах и компонентах".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.Void.cs` around
lines 6 - 15, Упорядочите директивы using в файле HereticAbilitySystem.Void.cs
по алфавиту: откройте блок using (строки с
Content.Shared.ADT.Heretic.Components, Content.Shared.ADT.Chaplain.Components и
т.д.) и переставьте строки в строгом лексикографическом порядке (по полным
именам пространств имён), чтобы обеспечить стабильный алфавитный порядок
согласно правилам для /ADT/ систем и компонентов; сохраните все существующие
using без удаления и проверьте, что System и Robust блоки также вписываются в
общий алфавитный порядок.

110-131: ⚠️ Potential issue | 🔴 Critical

OnVoidPull не фильтрует MagicImmunityComponent ни на одной дистанции.

Сейчас immune-цели всё ещё получают урон, нокдаун/curse и притягивание, потому что topPriority, midPriority и farPriority обрабатываются без раннего continue.

🐛 Минимальная правка
        foreach (var pookie in topPriority)
        {
+            if (HasComp<MagicImmunityComponent>(pookie))
+                continue;
+
             if (!TryComp<DamageableComponent>(pookie, out var dmgComp))
                 continue;
...
        foreach (var pookie in midPriority)
        {
+            if (HasComp<MagicImmunityComponent>(pookie))
+                continue;
+
             _stun.TryKnockdown(pookie, TimeSpan.FromSeconds(2.5f), true);
             if (ent.Comp.CurrentPath == "Void") _voidcurse.DoCurse(pookie);
        }
...
        foreach (var pookie in farPriority)
+        {
+            if (HasComp<MagicImmunityComponent>(pookie))
+                continue;
+
             _throw.TryThrow(pookie, Transform(ent).Coordinates);
+        }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.Void.cs` around
lines 110 - 131, The OnVoidPull handling currently applies effects to entities
in topPriority, midPriority, and farPriority without skipping entities with
MagicImmunityComponent; update each loop (the topPriority foreach that uses
TryComp<DamageableComponent>, the midPriority foreach that calls
_stun.TryKnockdown and _voidcurse.DoCurse, and the farPriority foreach that
calls _throw.TryThrow) to early-skip immune targets by checking
TryComp<MagicImmunityComponent>(pookie, out _) and continue when present so
immune entities do not take damage, get knocked down/cursed, or get pulled.

79-92: ⚠️ Potential issue | 🔴 Critical

OnVoidBlink всё ещё задевает магически-иммунных целей.

Оба цикла применяют knockdown, stamina damage и curse без проверки MagicImmunityComponent, поэтому чаплан и держатель holy melon по-прежнему получают эффект от Void Blink. Это ломает основную цель PR.

🐛 Минимальная правка
        foreach (var pookie in GetNearbyPeople(ent, power))
        {
+            if (HasComp<MagicImmunityComponent>(pookie))
+                continue;
+
             _stun.TryKnockdown(pookie, TimeSpan.FromSeconds(power), true);
        }
...
        foreach (var pookie in GetNearbyPeople(ent, ent.Comp.PathStage / 3f))
        {
+            if (HasComp<MagicImmunityComponent>(pookie))
+                continue;
+
             _stam.TakeStaminaDamage(pookie, power);
             if (condition) _voidcurse.DoCurse(pookie);
        }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.Void.cs` around
lines 79 - 92, In OnVoidBlink, both loops call _stun.TryKnockdown,
_stam.TakeStaminaDamage and _voidcurse.DoCurse on targets returned by
GetNearbyPeople without checking for magic immunity; update both loops to skip
targets that have MagicImmunityComponent (e.g., via
EntityManager.HasComponent<MagicImmunityComponent>(target) or
TryGetComponent<MagicImmunityComponent>(out _)) before calling
_stun.TryKnockdown, _stam.TakeStaminaDamage or _voidcurse.DoCurse so
magic-immune entities are not affected.
Content.Shared/ADT/Chaplain/Components/ChaplainComponent.cs (1)

1-7: ⚠️ Potential issue | 🟡 Minor

Отсортируйте using по алфавиту.

Для /ADT/ компонентов этот блок сейчас выбивается из принятого порядка: Content.Shared.Alert и Content.Shared.Antag стоят после других Content.Shared.*, а Robust.* перемешаны с ними.

As per coding guidelines "И ещё смотри за тем чтобы using был в алфавитном порядке в наших /ADT/ системах и компонентах".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Shared/ADT/Chaplain/Components/ChaplainComponent.cs` around lines 1 -
7, Reorder the top using directives in ChaplainComponent.cs into strict
alphabetical order (so all Content.Shared.* and Robust.* usings are sorted) —
locate the block containing using Content.Shared.FixedPoint, using
Content.Shared.StatusIcon, using Content.Shared.Antag, using
Robust.Shared.Prototypes, using Robust.Shared.Audio, using Content.Shared.Alert,
using Robust.Shared.GameStates and rearrange them alphabetically (e.g.,
Content.Shared.Alert, Content.Shared.Antag, Content.Shared.FixedPoint,
Content.Shared.StatusIcon, Content.Shared.GameStates, Robust.Shared.Audio,
Robust.Shared.Prototypes) so the ADT component follows the project’s using-order
guideline.
🧹 Nitpick comments (5)
Content.Server/ADT/Phantom/EntitySystems/PhantomSystem.cs (1)

24-24: Нарушен алфавитный порядок using директив.

Content.Shared.ADT.Chaplain.Components должен находиться перед Content.Shared.ADT.Controlled, так как "Chaplain" < "Controlled" в алфавитном порядке.

Предлагаемое исправление
 using Content.Shared.ActionBlocker;
 using Content.Shared.Actions;
+using Content.Shared.ADT.Chaplain.Components;
 using Content.Shared.ADT.Controlled;
 using Content.Shared.ADT.GhostInteractions;
 using Content.Shared.ADT.Phantom;
 using Content.Shared.ADT.Phantom.Components;
 using Content.Shared.ADT.Silicon.Components;
 using Content.Shared.Alert;
-using Content.Shared.ADT.Chaplain.Components;
 using Content.Shared.Chat;

Согласно правилам кодирования: "using был в алфавитном порядке в наших /ADT/ системах и компонентах".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Server/ADT/Phantom/EntitySystems/PhantomSystem.cs` at line 24, The
using directives are out of alphabetical order: move the using for
Content.Shared.ADT.Chaplain.Components so it appears before
Content.Shared.ADT.Controlled in PhantomSystem.cs (the file containing the
PhantomSystem class/namespace) to restore alphabetical ordering of ADT usings.
Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.cs (1)

15-16: Нарушен алфавитный порядок using директив.

Content.Shared.Actions должен находиться перед Content.Shared.ADT.Chaplain.Components, так как "Actions" < "ADT" в алфавитном порядке.

Предлагаемое исправление
 using Content.Server.Temperature.Systems;
-using Content.Shared.ADT.Chaplain.Components;
 using Content.Shared.Actions;
+using Content.Shared.ADT.Chaplain.Components;
 using Content.Shared.Body.Systems;

Согласно правилам кодирования: "using был в алфавитном порядке в наших /ADT/ системах и компонентах".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.cs` around lines 15
- 16, Сортировка using директив нарушена: поместите using Content.Shared.Actions
до using Content.Shared.ADT.Chaplain.Components в файле, чтобы соблюсти
алфавитный порядок using в системе HereticAbilitySystem (файл
HereticAbilitySystem.cs и соответствующий блок using вверху файла); просто
поменяйте местами эти две директивы, не меняя остальной код.
Content.Client/ADT/Chaplain/EUI/AcceptReligionEui.cs (1)

1-6: Директивы using не в алфавитном порядке.

Content.Shared.ADT.Chaplain.Components должна располагаться перед Content.Shared.Chaplain и Content.Shared.Cloning.

♻️ Предлагаемое исправление порядка using
 using Content.Client.Eui;
-using Content.Shared.Cloning;
-using JetBrains.Annotations;
-using Robust.Client.Graphics;
-using Content.Shared.Chaplain;
 using Content.Shared.ADT.Chaplain.Components;
+using Content.Shared.Chaplain;
+using Content.Shared.Cloning;
+using JetBrains.Annotations;
+using Robust.Client.Graphics;

As per coding guidelines: "using был в алфавитном порядке в наших /ADT/ системах и компонентах".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Client/ADT/Chaplain/EUI/AcceptReligionEui.cs` around lines 1 - 6, The
using directives in AcceptReligionEui.cs are not alphabetically ordered; move
the using for Content.Shared.ADT.Chaplain.Components so it appears before
Content.Shared.Chaplain and Content.Shared.Cloning to follow the ADT/component
ordering convention—open AcceptReligionEui.cs and reorder the using statements
so they are alphabetical (e.g., place Content.Shared.ADT.Chaplain.Components
above Content.Shared.Chaplain and Content.Shared.Cloning).
Content.Server/ADT/HWAnomCoreLootbox/HWAnomCoreLootboxSystem.cs (1)

1-25: Директивы using не в алфавитном порядке.

Директивы using должны быть отсортированы по алфавиту. Например, Content.Shared.ADT.Chaplain.Components должна идти перед Content.Shared.Body.*, а Content.Shared.Cargo перед Content.Shared.DoAfter.

♻️ Предлагаемое исправление порядка using
 using System.Reflection.Metadata;
 using Content.Server.Administration.Logs;
 using Content.Server.Cargo.Systems;
 using Content.Server.Popups;
-using Content.Shared.Body.Systems;
-using Content.Shared.Body.Part;
-using Content.Shared.ADT.Chaplain.Components;
-using Content.Shared.DoAfter;
+using Content.Shared.ADT.Chaplain.Components;
+using Content.Shared.ADT.HWAnomCoreLootbox;
+using Content.Shared.Body.Part;
+using Content.Shared.Body.Systems;
 using Content.Shared.Cargo;
 using Content.Shared.Database;
+using Content.Shared.DoAfter;
+using Content.Shared.Eye.Blinding.Components;
+using Content.Shared.Eye.Blinding.Systems;
 using Content.Shared.Hands.EntitySystems;
-using Content.Shared.ADT.HWAnomCoreLootbox;
 using Content.Shared.Interaction.Events;
 using Content.Shared.Popups;
+using Content.Shared.StatusEffect;
+using Content.Shared.Traits.Assorted;
+using Content.Shared.Verbs;
 using Robust.Shared.Audio.Systems;
 using Robust.Shared.Map;
 using Robust.Shared.Player;
 using Robust.Shared.Random;
-using Content.Shared.Eye.Blinding.Components;
-using Content.Shared.Eye.Blinding.Systems;
-using Content.Shared.Traits.Assorted;
-using Content.Shared.StatusEffect;
 using static Content.Shared.Storage.EntitySpawnCollection;
-using Content.Shared.Verbs;
 using Timer = Robust.Shared.Timing.Timer;

As per coding guidelines: "using был в алфавитном порядке в наших /ADT/ системах и компонентах".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Server/ADT/HWAnomCoreLootbox/HWAnomCoreLootboxSystem.cs` around lines
1 - 25, The using directives at the top of HWAnomCoreLootboxSystem.cs are not
alphabetized; reorder all using statements into strict alphabetical order
(compare namespace strings character-by-character) so that entries like
Content.Shared.ADT.Chaplain.Components come before Content.Shared.Body.* and
Content.Shared.Cargo comes before Content.Shared.DoAfter; ensure external/Robust
namespaces are also placed correctly in the same alphabetical sequence and
remove any duplicates or unused usings while preserving necessary ones (e.g.,
Content.Server.Administration.Logs, Content.Server.Cargo.Systems,
Content.Server.Popups, Content.Shared.Body.Systems, Content.Shared.Body.Part,
Content.Shared.ADT.HWAnomCoreLootbox, Robust.Shared.Random, Timer =
Robust.Shared.Timing.Timer).
Content.Client/ADT/Phantom/Systems/PhantomHudSystem.cs (1)

1-9: Директивы using не в алфавитном порядке.

Согласно требованиям проекта, директивы using в системах /ADT/ должны быть отсортированы по алфавиту.

♻️ Предлагаемое исправление порядка using
-using Content.Shared.Overlays;
-using Content.Shared.StatusIcon.Components;
-using Content.Shared.ADT.Phantom.Components;
-using Content.Shared.StatusIcon;
-using Robust.Shared.Prototypes;
-using Content.Client.Overlays;
-using Content.Shared.Antag;
-using Robust.Client.Player;
-using Content.Shared.ADT.Chaplain.Components;
+using Content.Client.Overlays;
+using Content.Shared.ADT.Chaplain.Components;
+using Content.Shared.ADT.Phantom.Components;
+using Content.Shared.Antag;
+using Content.Shared.Overlays;
+using Content.Shared.StatusIcon;
+using Content.Shared.StatusIcon.Components;
+using Robust.Client.Player;
+using Robust.Shared.Prototypes;

As per coding guidelines: "using был в алфавитном порядке в наших /ADT/ системах и компонентах".

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Content.Client/ADT/Phantom/Systems/PhantomHudSystem.cs` around lines 1 - 9,
The using directives at the top of PhantomHudSystem (file PhantomHudSystem.cs)
are not sorted alphabetically; reorder the usings (e.g.,
Content.Client.Overlays, Content.Shared.ADT.Chaplain.Components,
Content.Shared.ADT.Phantom.Components, Content.Shared.Antag,
Content.Shared.Overlays, Content.Shared.StatusIcon,
Content.Shared.StatusIcon.Components, Robust.Client.Player,
Robust.Shared.Prototypes) into a single alphabetically sorted block per project
convention, preserving any existing blank-line grouping rules and keeping the
PhantomHudSystem class and other code unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Content.Server/ADT/Chaplain/Systems/HolyMelonImmunitySystem.cs`:
- Around line 27-37: The RemoveImmunityIfNoOtherMelons logic is removing a
permanent MagicImmunityComponent from users who lack ChaplainComponent; fix by
making the system only remove MagicImmunityComponent if this system previously
added it: ensure OnGotEquippedHand adds a marker component
(HolyMelonMagicImmunityComponent) when it grants immunity and does not treat
pre-existing MagicImmunityComponent as owned, and change
RemoveImmunityIfNoOtherMelons to check for HolyMelonMagicImmunityComponent
before removing MagicImmunityComponent (and only remove the marker+immunity pair
when no other melon sources exist); reference OnGotEquippedHand,
RemoveImmunityIfNoOtherMelons, HolyMelonMagicImmunityComponent,
MagicImmunityComponent, and ChaplainComponent when making the change.

In `@Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs`:
- Around line 108-111: This multi-line conditional that checks
HasComp<MobStateComponent>(target) /
HasComp<HumanoidAppearanceComponent>(target) /
HasComp<RevenantComponent>(target) / HasComp<MagicImmunityComponent>(target)
should be wrapped in an ADT-Tweak block for files outside /ADT/ — add a comment
line "// ADT-Tweak-Start" immediately above the if and a matching "//
ADT-Tweak-End" immediately after the closing brace of that if block (preserving
the existing inline "// ADT-Tweak" tag), so the entire multi-line change is
clearly delimited in RevenantSystem.Abilities.cs around the if that references
HasComp<...>(target).

---

Outside diff comments:
In `@Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.Void.cs`:
- Around line 6-15: Упорядочите директивы using в файле
HereticAbilitySystem.Void.cs по алфавиту: откройте блок using (строки с
Content.Shared.ADT.Heretic.Components, Content.Shared.ADT.Chaplain.Components и
т.д.) и переставьте строки в строгом лексикографическом порядке (по полным
именам пространств имён), чтобы обеспечить стабильный алфавитный порядок
согласно правилам для /ADT/ систем и компонентов; сохраните все существующие
using без удаления и проверьте, что System и Robust блоки также вписываются в
общий алфавитный порядок.
- Around line 110-131: The OnVoidPull handling currently applies effects to
entities in topPriority, midPriority, and farPriority without skipping entities
with MagicImmunityComponent; update each loop (the topPriority foreach that uses
TryComp<DamageableComponent>, the midPriority foreach that calls
_stun.TryKnockdown and _voidcurse.DoCurse, and the farPriority foreach that
calls _throw.TryThrow) to early-skip immune targets by checking
TryComp<MagicImmunityComponent>(pookie, out _) and continue when present so
immune entities do not take damage, get knocked down/cursed, or get pulled.
- Around line 79-92: In OnVoidBlink, both loops call _stun.TryKnockdown,
_stam.TakeStaminaDamage and _voidcurse.DoCurse on targets returned by
GetNearbyPeople without checking for magic immunity; update both loops to skip
targets that have MagicImmunityComponent (e.g., via
EntityManager.HasComponent<MagicImmunityComponent>(target) or
TryGetComponent<MagicImmunityComponent>(out _)) before calling
_stun.TryKnockdown, _stam.TakeStaminaDamage or _voidcurse.DoCurse so
magic-immune entities are not affected.

In `@Content.Server/ADT/Heretic/EntitySystems/MansusGraspSystem.cs`:
- Around line 261-275: The current immunity check only skips some effects but
still allows the target to drop items and consumes infusion charges even if they
have MagicImmunityComponent. To fully honor the magic immunity in the code block
within the MansusGraspSystem, add an early return or skip the entire effect
handling when the target has MagicImmunityComponent. This should include
bypassing the calls to _hands.TryDrop and SpendInfusionCharges to ensure no
effects or charge consumption happen on immune targets.

In `@Content.Shared/ADT/Chaplain/Components/ChaplainComponent.cs`:
- Around line 1-7: Reorder the top using directives in ChaplainComponent.cs into
strict alphabetical order (so all Content.Shared.* and Robust.* usings are
sorted) — locate the block containing using Content.Shared.FixedPoint, using
Content.Shared.StatusIcon, using Content.Shared.Antag, using
Robust.Shared.Prototypes, using Robust.Shared.Audio, using Content.Shared.Alert,
using Robust.Shared.GameStates and rearrange them alphabetically (e.g.,
Content.Shared.Alert, Content.Shared.Antag, Content.Shared.FixedPoint,
Content.Shared.StatusIcon, Content.Shared.GameStates, Robust.Shared.Audio,
Robust.Shared.Prototypes) so the ADT component follows the project’s using-order
guideline.

---

Nitpick comments:
In `@Content.Client/ADT/Chaplain/EUI/AcceptReligionEui.cs`:
- Around line 1-6: The using directives in AcceptReligionEui.cs are not
alphabetically ordered; move the using for
Content.Shared.ADT.Chaplain.Components so it appears before
Content.Shared.Chaplain and Content.Shared.Cloning to follow the ADT/component
ordering convention—open AcceptReligionEui.cs and reorder the using statements
so they are alphabetical (e.g., place Content.Shared.ADT.Chaplain.Components
above Content.Shared.Chaplain and Content.Shared.Cloning).

In `@Content.Client/ADT/Phantom/Systems/PhantomHudSystem.cs`:
- Around line 1-9: The using directives at the top of PhantomHudSystem (file
PhantomHudSystem.cs) are not sorted alphabetically; reorder the usings (e.g.,
Content.Client.Overlays, Content.Shared.ADT.Chaplain.Components,
Content.Shared.ADT.Phantom.Components, Content.Shared.Antag,
Content.Shared.Overlays, Content.Shared.StatusIcon,
Content.Shared.StatusIcon.Components, Robust.Client.Player,
Robust.Shared.Prototypes) into a single alphabetically sorted block per project
convention, preserving any existing blank-line grouping rules and keeping the
PhantomHudSystem class and other code unchanged.

In `@Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.cs`:
- Around line 15-16: Сортировка using директив нарушена: поместите using
Content.Shared.Actions до using Content.Shared.ADT.Chaplain.Components в файле,
чтобы соблюсти алфавитный порядок using в системе HereticAbilitySystem (файл
HereticAbilitySystem.cs и соответствующий блок using вверху файла); просто
поменяйте местами эти две директивы, не меняя остальной код.

In `@Content.Server/ADT/HWAnomCoreLootbox/HWAnomCoreLootboxSystem.cs`:
- Around line 1-25: The using directives at the top of
HWAnomCoreLootboxSystem.cs are not alphabetized; reorder all using statements
into strict alphabetical order (compare namespace strings
character-by-character) so that entries like
Content.Shared.ADT.Chaplain.Components come before Content.Shared.Body.* and
Content.Shared.Cargo comes before Content.Shared.DoAfter; ensure external/Robust
namespaces are also placed correctly in the same alphabetical sequence and
remove any duplicates or unused usings while preserving necessary ones (e.g.,
Content.Server.Administration.Logs, Content.Server.Cargo.Systems,
Content.Server.Popups, Content.Shared.Body.Systems, Content.Shared.Body.Part,
Content.Shared.ADT.HWAnomCoreLootbox, Robust.Shared.Random, Timer =
Robust.Shared.Timing.Timer).

In `@Content.Server/ADT/Phantom/EntitySystems/PhantomSystem.cs`:
- Line 24: The using directives are out of alphabetical order: move the using
for Content.Shared.ADT.Chaplain.Components so it appears before
Content.Shared.ADT.Controlled in PhantomSystem.cs (the file containing the
PhantomSystem class/namespace) to restore alphabetical ordering of ADT usings.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 1ecd2abf-7153-45b2-9214-dcaa254a04aa

📥 Commits

Reviewing files that changed from the base of the PR and between d16cf09 and f3e3414.

📒 Files selected for processing (31)
  • Content.Client/ADT/Chaplain/EUI/AcceptReligionEui.cs
  • Content.Client/ADT/Chaplain/Systems/ChaplainSystem.cs
  • Content.Client/ADT/Phantom/Systems/PhantomHudSystem.cs
  • Content.Server/ADT/Chaplain/EUI/AcceptReligionEui.cs
  • Content.Server/ADT/Chaplain/Systems/ChaplainSystem.cs
  • Content.Server/ADT/Chaplain/Systems/HolyMelonImmunitySystem.cs
  • Content.Server/ADT/Chaplain/Systems/MagicProjectileSystem.cs
  • Content.Server/ADT/HWAnomCoreLootbox/HWAnomCoreLootboxSystem.cs
  • Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.Ash.cs
  • Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.Void.cs
  • Content.Server/ADT/Heretic/Abilities/HereticAbilitySystem.cs
  • Content.Server/ADT/Heretic/EntitySystems/MansusGraspSystem.cs
  • Content.Server/ADT/Magic/ChainFireballSystem.cs
  • Content.Server/ADT/Magic/ImmovableVoidRodSystem.cs
  • Content.Server/ADT/Phantom/EntitySystems/PhantomSystem.cs
  • Content.Server/ADT/Poltergeist/Systems/PoltergeistSystem.cs
  • Content.Server/ADT/Revolitionary/EUI/AcceptRevolutionEui.cs
  • Content.Server/Bible/BibleSystem.cs
  • Content.Server/Revenant/EntitySystems/RevenantSystem.Abilities.cs
  • Content.Shared/ADT/Chaplain/Altar/Systems/SacrificeSystem.cs
  • Content.Shared/ADT/Chaplain/Components/ChaplainComponent.cs
  • Content.Shared/ADT/Chaplain/Components/HolyMelonImmunityComponent.cs
  • Content.Shared/ADT/Chaplain/Components/HolyMelonMagicImmunityComponent.cs
  • Content.Shared/ADT/Chaplain/Components/MagicImmunityComponent.cs
  • Content.Shared/ADT/Chaplain/Components/MagicProjectileComponent.cs
  • Content.Shared/ADT/Chaplain/SharedChaplain.cs
  • Content.Shared/Magic/SharedMagicSystem.cs
  • Resources/Prototypes/ADT/Heretic/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
  • Resources/Prototypes/Entities/Objects/Consumable/Food/produce.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Guns/Projectiles/magic.yml
  • Resources/Prototypes/Roles/Jobs/Civilian/chaplain.yml
💤 Files with no reviewable changes (1)
  • Content.Server/ADT/Revolitionary/EUI/AcceptRevolutionEui.cs

@JackTalentedCoder
Copy link
Collaborator

За место передачи неуязвимости по факту профессии, лучше сделай, чтобы священник был неуязвим при держании при себе священного оружия

@CrimeMoot
Copy link
Contributor Author

За место передачи неуязвимости по факту профессии, лучше сделай, чтобы священник был неуязвим при держании при себе священного оружия

Священное оружие - это оружие, оно не предназначено для защиты от магии. Сам священник по своей сути оберегают боги от злых сил. Так что вполне логично, что именно он святой.

@JackTalentedCoder
Copy link
Collaborator

За место передачи неуязвимости по факту профессии, лучше сделай, чтобы священник был неуязвим при держании при себе священного оружия

Священное оружие - это оружие, оно не предназначено для защиты от магии. Сам священник по своей сути оберегают боги от злых сил. Так что вполне логично, что именно он святой.

Оружие также работает как защита. Мечи в фехтовании, щит, предназначенный как защита, пользовался как оружие так же как и меч. Защищающую силу легче передавать человеку через артефакты, оружие
Геймдизайнерски это даёт ещё шанс несвятому антагу добраться к священнику через магию, если он нихера не внимателен. Всё равнл попытайся

@Armorkillerd
Copy link
Contributor

меня смешит что он может фаербол еблищем сожрать, такая хуйня.

@Armorkillerd
Copy link
Contributor

ну и священиков еретиков ещё никто не убирал.

@CrimeMoot
Copy link
Contributor Author

меня смешит что он может фаербол еблищем сожрать, такая хуйня.

Со святым арбузом тоже.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants