Make projectiles not hit crit mobs unless clicked on (#27905)

This commit is contained in:
DrSmugleaf
2024-05-11 08:42:11 -07:00
committed by GitHub
parent 1698e1cfab
commit 8b88fe4bb7
7 changed files with 56 additions and 2 deletions

View File

@@ -10,12 +10,15 @@ using Content.Shared.Item;
using Content.Shared.Mobs.Components;
using Content.Shared.Movement.Events;
using Content.Shared.Pointing;
using Content.Shared.Projectiles;
using Content.Shared.Pulling.Events;
using Content.Shared.Speech;
using Content.Shared.Standing;
using Content.Shared.Strip.Components;
using Content.Shared.Throwing;
using Content.Shared.Weapons.Ranged.Components;
using Robust.Shared.Physics.Components;
using Robust.Shared.Physics.Events;
namespace Content.Shared.Mobs.Systems;
@@ -43,6 +46,7 @@ public partial class MobStateSystem
SubscribeLocalEvent<MobStateComponent, TryingToSleepEvent>(OnSleepAttempt);
SubscribeLocalEvent<MobStateComponent, CombatModeShouldHandInteractEvent>(OnCombatModeShouldHandInteract);
SubscribeLocalEvent<MobStateComponent, AttemptPacifiedAttackEvent>(OnAttemptPacifiedAttack);
SubscribeLocalEvent<MobStateComponent, PreventCollideEvent>(OnPreventCollide);
}
private void OnStateExitSubscribers(EntityUid target, MobStateComponent component, MobState state)
@@ -175,5 +179,21 @@ public partial class MobStateSystem
args.Cancelled = true;
}
private void OnPreventCollide(Entity<MobStateComponent> ent, ref PreventCollideEvent args)
{
if (args.Cancelled)
return;
if (IsAlive(ent, ent))
return;
var other = args.OtherEntity;
if (HasComp<ProjectileComponent>(other) &&
CompOrNull<TargetedProjectileComponent>(other)?.Target != ent.Owner)
{
args.Cancelled = true;
}
}
#endregion
}