diff --git a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs index a22725cd8d..6065306ec7 100644 --- a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs +++ b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs @@ -90,7 +90,7 @@ public sealed class CultRuleSystem : GameRuleSystem } } - public MindComponent? GetTarget() + public Entity? GetTarget() { var cultistsRule = EntityQuery().FirstOrDefault(); @@ -99,7 +99,7 @@ public sealed class CultRuleSystem : GameRuleSystem return null; } - return mind; + return (cultistsRule.CultTarget.Value, mind); } public bool CanSummonNarsie() diff --git a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs index d1275eb638..48a3ac35f5 100644 --- a/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs +++ b/Content.Server/_White/Cult/Runes/Systems/CultSystem.Rune.cs @@ -439,26 +439,20 @@ public sealed partial class CultSystem : EntitySystem bool result; - var target = _ruleSystem.GetTarget(); - if (state.CurrentState != MobState.Dead) { var canBeConverted = _entityManager.TryGetComponent(victim.Value, out var mind) && - mind is {Mind: { }}; - - // Проверка, является ли жертва целью - _entityManager.TryGetComponent(target?.CurrentEntity, out var targetMind); - var isTarget = mind!.Mind!.Value == targetMind?.Mind!.Value; + mind.Mind != null && !IsTarget(mind.Mind.Value); // Выполнение действия в зависимости от условий if (canBeConverted && !HasComp(victim.Value) && - !HasComp(victim.Value) && !isTarget) + !HasComp(victim.Value)) { result = Convert(uid, victim.Value, args.User, args.Cultists); } else { - result = Sacrifice(uid, victim.Value, args.User, args.Cultists, isTarget); + result = Sacrifice(uid, victim.Value, args.User, args.Cultists); } } else @@ -470,12 +464,20 @@ public sealed partial class CultSystem : EntitySystem args.Result = result; } + private bool IsTarget(EntityUid mindId) + { + var target = _ruleSystem.GetTarget(); + if (target == null) + return false; + + return mindId == target.Value.Owner; + } + private bool Sacrifice( EntityUid rune, EntityUid target, EntityUid user, - HashSet cultists, - bool isTarget = false) + HashSet cultists) { if (!_entityManager.TryGetComponent(rune, out var offering)) return false; @@ -486,14 +488,6 @@ public sealed partial class CultSystem : EntitySystem return false; } - if (isTarget) - { - _bodySystem.GibBody(target); - AddChargesToReviveRune(); - - return true; - } - if (!SpawnShard(target)) { _bodySystem.GibBody(target); @@ -541,8 +535,8 @@ public sealed partial class CultSystem : EntitySystem if (!_entityManager.TryGetComponent(target, out var actorComponent)) return false; - _ruleSystem.MakeCultist(actorComponent.PlayerSession); _stunSystem.TryStun(target, TimeSpan.FromSeconds(2f), false); + _ruleSystem.MakeCultist(actorComponent.PlayerSession); HealCultist(target); if (TryComp(target, out CuffableComponent? cuffs) && cuffs.Container.ContainedEntities.Count >= 1)