Fixed C4 unstick verb checks (#7870)
This commit is contained in:
@@ -17,6 +17,7 @@ public sealed class StickySystem : EntitySystem
|
|||||||
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
[Dependency] private readonly PopupSystem _popupSystem = default!;
|
||||||
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
|
[Dependency] private readonly SharedContainerSystem _containerSystem = default!;
|
||||||
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
|
[Dependency] private readonly SharedHandsSystem _handsSystem = default!;
|
||||||
|
[Dependency] private readonly SharedInteractionSystem _interactionSystem = default!;
|
||||||
|
|
||||||
private const string StickerSlotId = "stickers_container";
|
private const string StickerSlotId = "stickers_container";
|
||||||
|
|
||||||
@@ -40,7 +41,14 @@ public sealed class StickySystem : EntitySystem
|
|||||||
|
|
||||||
private void AddUnstickVerb(EntityUid uid, StickyComponent component, GetVerbsEvent<Verb> args)
|
private void AddUnstickVerb(EntityUid uid, StickyComponent component, GetVerbsEvent<Verb> args)
|
||||||
{
|
{
|
||||||
if (component.StuckTo == null || !component.CanUnstick)
|
if (component.StuckTo == null || !component.CanUnstick || !args.CanInteract)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// we can't use args.CanAccess, because it stuck in another container
|
||||||
|
// we also need to ignore entity that it stuck to
|
||||||
|
var inRange = _interactionSystem.InRangeUnobstructed(uid, args.User,
|
||||||
|
predicate: entity => component.StuckTo == entity);
|
||||||
|
if (!inRange)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
args.Verbs.Add(new Verb
|
args.Verbs.Add(new Verb
|
||||||
@@ -131,8 +139,6 @@ public sealed class StickySystem : EntitySystem
|
|||||||
// if delay is zero - unstick entity immediately
|
// if delay is zero - unstick entity immediately
|
||||||
UnstickFromEntity(uid, user, component);
|
UnstickFromEntity(uid, user, component);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnUnstickSuccessful(UnstickSuccessfulEvent ev)
|
private void OnUnstickSuccessful(UnstickSuccessfulEvent ev)
|
||||||
|
|||||||
Reference in New Issue
Block a user