Fix the ability to shoot out of crates (#28961)
* Fix the ability to shoot out of crates * Makes it check what inventory the player is in * use IsEntityOrParentInContainer * Fix Issues Github had * gaahhh... Prevents lasers from being shot out of crates * gaahhh... Prevents lasers from being shot out of crates * Fix laser? * hmmm... this is better looking I think? * Uncook indentation * Rerun tests?
This commit is contained in:
@@ -24,6 +24,7 @@ using Robust.Shared.Physics;
|
||||
using Robust.Shared.Player;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Utility;
|
||||
using Robust.Shared.Containers;
|
||||
|
||||
namespace Content.Server.Weapons.Ranged.Systems;
|
||||
|
||||
@@ -38,6 +39,7 @@ public sealed partial class GunSystem : SharedGunSystem
|
||||
[Dependency] private readonly SharedTransformSystem _transform = default!;
|
||||
[Dependency] private readonly StaminaSystem _stamina = default!;
|
||||
[Dependency] private readonly StunSystem _stun = default!;
|
||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||
|
||||
private const float DamagePitchVariation = 0.05f;
|
||||
public const float GunClumsyChance = 0.5f;
|
||||
@@ -204,6 +206,9 @@ public sealed partial class GunSystem : SharedGunSystem
|
||||
|
||||
var result = rayCastResults[0];
|
||||
|
||||
// Check if laser is shot from in a container
|
||||
if (!_container.IsEntityOrParentInContainer(lastUser))
|
||||
{
|
||||
// Checks if the laser should pass over unless targeted by its user
|
||||
foreach (var collide in rayCastResults)
|
||||
{
|
||||
@@ -216,6 +221,7 @@ public sealed partial class GunSystem : SharedGunSystem
|
||||
result = collide;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var hit = result.HitEntity;
|
||||
lastHit = hit;
|
||||
|
||||
@@ -2,11 +2,14 @@ using Content.Shared.Projectiles;
|
||||
using Content.Shared.Weapons.Ranged.Components;
|
||||
using Content.Shared.Standing;
|
||||
using Robust.Shared.Physics.Events;
|
||||
using Robust.Shared.Containers;
|
||||
|
||||
namespace Content.Shared.Damage.Components;
|
||||
|
||||
public sealed class RequireProjectileTargetSystem : EntitySystem
|
||||
{
|
||||
[Dependency] private readonly SharedContainerSystem _container = default!;
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
SubscribeLocalEvent<RequireProjectileTargetComponent, PreventCollideEvent>(PreventCollide);
|
||||
@@ -23,9 +26,15 @@ public sealed class RequireProjectileTargetSystem : EntitySystem
|
||||
return;
|
||||
|
||||
var other = args.OtherEntity;
|
||||
if (HasComp<ProjectileComponent>(other) &&
|
||||
if (TryComp(other, out ProjectileComponent? projectile) &&
|
||||
CompOrNull<TargetedProjectileComponent>(other)?.Target != ent)
|
||||
{
|
||||
// Prevents shooting out of while inside of crates
|
||||
var shooter = projectile.Shooter;
|
||||
if (!shooter.HasValue)
|
||||
return;
|
||||
|
||||
if (!_container.IsEntityOrParentInContainer(shooter.Value))
|
||||
args.Cancelled = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user