Change what items can be fultoned while stopping anchored items from fultoning (#20628)

* Check and restrict players from fultoning their equipped items

* Changed fulton whitelist to items and anchorables

* Stop from anchored items being fultoned

* Moved containermanager check to CanFulton function

* review

---------

Co-authored-by: metalgearsloth <comedian_vs_clown@hotmail.com>
This commit is contained in:
Kacper Urbańczyk
2024-01-20 05:57:05 +01:00
committed by GitHub
parent 87f324b648
commit 1ff31f8b7a
3 changed files with 21 additions and 9 deletions

View File

@@ -26,6 +26,7 @@ public abstract partial class SharedFultonSystem : EntitySystem
[Dependency] protected readonly SharedAudioSystem Audio = default!;
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
[Dependency] private readonly FoldableSystem _foldable = default!;
[Dependency] protected readonly SharedContainerSystem Container = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;
[Dependency] private readonly SharedStackSystem _stack = default!;
[Dependency] protected readonly SharedTransformSystem TransformSystem = default!;
@@ -138,7 +139,7 @@ public abstract partial class SharedFultonSystem : EntitySystem
return;
}
if (!CanFulton(args.Target.Value, uid, component))
if (!CanApplyFulton(args.Target.Value, component))
{
_popup.PopupClient(Loc.GetString("fulton-invalid"), uid, uid);
return;
@@ -177,15 +178,27 @@ public abstract partial class SharedFultonSystem : EntitySystem
return;
}
private bool CanFulton(EntityUid targetUid, EntityUid uid, FultonComponent component)
protected bool CanApplyFulton(EntityUid targetUid, FultonComponent component)
{
if (Transform(targetUid).Anchored)
if (!CanFulton(targetUid))
return false;
if (component.Whitelist?.IsValid(targetUid, EntityManager) != true)
{
return false;
}
return true;
}
protected bool CanFulton(EntityUid uid)
{
var xform = Transform(uid);
if (xform.Anchored)
return false;
// Shouldn't need recursive container checks I think.
if (Container.IsEntityInContainer(uid))
return false;
return true;
}