using Content.Shared.Hands.Components; using Content.Shared.Hands.EntitySystems; using Content.Shared.Interaction; using Content.Shared.Tools; using Content.Shared.Tools.Components; using Content.Shared.Tools.Systems; using Content.Shared.Weapons.Ranged.Upgrades; using Content.Shared.Weapons.Ranged.Upgrades.Components; using Robust.Shared.Prototypes; namespace Content.Shared.Weapons.Ranged.Upgrades; /// /// Lets you extract upgrades from a PKA using a crowbar. /// Same functionality as TG. /// public sealed partial class GunUpgradeSystem { [Dependency] private readonly SharedHandsSystem _hands = default!; [Dependency] private readonly SharedToolSystem _tool = default!; public static readonly ProtoId ExtractQuality = "Prying"; private void TryExtract(Entity ent, ref AfterInteractUsingEvent args) { if (args.Handled || !args.CanReach) return; var tool = args.Used; if (!TryComp(tool, out var toolComp) || !_tool.HasQuality(tool, ExtractQuality, toolComp)) return; args.Handled = true; var user = args.User; var upgrades = GetCurrentUpgrades(ent); if (upgrades.Count == 0) { _popup.PopupClient(Loc.GetString("upgradeable-gun-popup-no-upgrades"), ent, user); return; } _popup.PopupClient(Loc.GetString("upgradeable-gun-popup-remove-upgrades"), ent, user); _tool.PlayToolSound(tool, toolComp, user); TryComp(user, out var hands); foreach (var upgrade in upgrades) { _hands.PickupOrDrop(user, upgrade, handsComp: hands); } } }