diff --git a/Content.Server/Emag/EmagSystem.cs b/Content.Server/Emag/EmagSystem.cs index 0d6652e72e..5752fe01e4 100644 --- a/Content.Server/Emag/EmagSystem.cs +++ b/Content.Server/Emag/EmagSystem.cs @@ -1,10 +1,25 @@ +using Content.Shared.Administration.Logs; +using Content.Shared.Database; using Content.Shared.Emag.Components; using Content.Shared.Emag.Systems; +using Content.Shared.Interaction; +using Content.Shared.Popups; +using Robust.Shared.Player; namespace Content.Server.Emag { public sealed class EmagSystem : EntitySystem { + [Dependency] private readonly SharedPopupSystem _popupSystem = default!; + [Dependency] private readonly SharedAdminLogSystem _adminLog = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnAfterInteract); + } + public override void Update(float frameTime) { base.Update(frameTime); @@ -28,5 +43,27 @@ namespace Content.Server.Emag emag.Charges++; } } + + private void OnAfterInteract(EntityUid uid, EmagComponent component, AfterInteractEvent args) + { + if (!args.CanReach || args.Target == null) + return; + + if (component.Charges <= 0) + { + _popupSystem.PopupEntity(Loc.GetString("emag-no-charges"), args.User, Filter.Entities(args.User)); + return; + } + + var emaggedEvent = new GotEmaggedEvent(args.User); + RaiseLocalEvent(args.Target.Value, emaggedEvent, false); + if (emaggedEvent.Handled) + { + _popupSystem.PopupEntity(Loc.GetString("emag-success", ("target", args.Target)), args.User, Filter.Entities(args.User)); + _adminLog.Add(LogType.Emag, LogImpact.High, $"{ToPrettyString(args.User):player} emagged {ToPrettyString(args.Target.Value):target}"); + component.Charges--; + return; + } + } } } diff --git a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs index 6e30a43963..65c051dff4 100644 --- a/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs +++ b/Content.Shared/Containers/ItemSlot/ItemSlotsSystem.cs @@ -180,7 +180,7 @@ namespace Content.Shared.Containers.ItemSlots if (slot.Item != null) _handsSystem.TryPickupAnyHand(args.User, slot.Item.Value, handsComp: hands); - Insert(uid, slot, args.Used, args.User, excludeUserAudio: args.Predicted); + Insert(uid, slot, args.Used, args.User, excludeUserAudio: true); args.Handled = true; return; } diff --git a/Content.Shared/Emag/Components/EmagComponent.cs b/Content.Shared/Emag/Components/EmagComponent.cs index 98983603ef..a40c20a261 100644 --- a/Content.Shared/Emag/Components/EmagComponent.cs +++ b/Content.Shared/Emag/Components/EmagComponent.cs @@ -3,13 +3,13 @@ namespace Content.Shared.Emag.Components [RegisterComponent] public sealed class EmagComponent : Component { - [DataField("maxCharges")] + [DataField("maxCharges"), ViewVariables(VVAccess.ReadWrite)] public int MaxCharges = 3; - [DataField("charges")] + [DataField("charges"), ViewVariables(VVAccess.ReadWrite)] public int Charges = 3; - [DataField("rechargeTime")] + [DataField("rechargeTime"), ViewVariables(VVAccess.ReadWrite)] public float RechargeTime = 90f; public float Accumulator = 0f; } diff --git a/Content.Shared/Emag/Systems/SharedEmagSystem.cs b/Content.Shared/Emag/Systems/SharedEmagSystem.cs index 70fad6f08f..3f08ec60fa 100644 --- a/Content.Shared/Emag/Systems/SharedEmagSystem.cs +++ b/Content.Shared/Emag/Systems/SharedEmagSystem.cs @@ -1,10 +1,5 @@ using Content.Shared.Emag.Components; -using Content.Shared.Interaction; using Content.Shared.Examine; -using Content.Shared.Popups; -using Content.Shared.Administration.Logs; -using Content.Shared.Database; -using Robust.Shared.Player; namespace Content.Shared.Emag.Systems { @@ -15,13 +10,9 @@ namespace Content.Shared.Emag.Systems /// 4. Past the check, add all the effects you desire and HANDLE THE EVENT ARGUMENT so a charge is spent public sealed class SharedEmagSystem : EntitySystem { - [Dependency] private readonly SharedPopupSystem _popupSystem = default!; - [Dependency] private readonly SharedAdminLogSystem _adminLog = default!; - public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(OnAfterInteract); SubscribeLocalEvent(OnExamine); } @@ -36,28 +27,6 @@ namespace Content.Shared.Emag.Systems } args.PushMarkup(Loc.GetString("emag-recharging", ("seconds", Math.Round(timeRemaining)))); } - - private void OnAfterInteract(EntityUid uid, EmagComponent component, AfterInteractEvent args) - { - if (!args.CanReach || args.Target == null) - return; - - if (component.Charges <= 0) - { - _popupSystem.PopupEntity(Loc.GetString("emag-no-charges"), args.User, Filter.Entities(args.User)); - return; - } - - var emaggedEvent = new GotEmaggedEvent(args.User); - RaiseLocalEvent(args.Target.Value, emaggedEvent, false); - if (emaggedEvent.Handled) - { - _popupSystem.PopupEntity(Loc.GetString("emag-success",("target", args.Target)), args.User, Filter.Entities(args.User)); - _adminLog.Add(LogType.Emag, LogImpact.High, $"{ToPrettyString(args.User):player} emagged {ToPrettyString(args.Target.Value):target}"); - component.Charges--; - return; - } - } } public sealed class GotEmaggedEvent : HandledEntityEventArgs @@ -66,7 +35,7 @@ namespace Content.Shared.Emag.Systems public GotEmaggedEvent(EntityUid userUid) { - userUid = UserUid; + UserUid = userUid; } } } diff --git a/Content.Shared/Interaction/IInteractUsing.cs b/Content.Shared/Interaction/IInteractUsing.cs index 5a639e27ab..52af732a2d 100644 --- a/Content.Shared/Interaction/IInteractUsing.cs +++ b/Content.Shared/Interaction/IInteractUsing.cs @@ -71,13 +71,7 @@ namespace Content.Shared.Interaction /// public EntityCoordinates ClickLocation { get; } - /// - /// If true, this prediction is also being predicted client-side. So care has to be taken to avoid audio - /// duplication. - /// - public bool Predicted { get; } - - public InteractUsingEvent(EntityUid user, EntityUid used, EntityUid target, EntityCoordinates clickLocation, bool predicted = false) + public InteractUsingEvent(EntityUid user, EntityUid used, EntityUid target, EntityCoordinates clickLocation) { // Interact using should not have the same used and target. // That should be a use-in-hand event instead. @@ -88,7 +82,6 @@ namespace Content.Shared.Interaction Used = used; Target = target; ClickLocation = clickLocation; - Predicted = predicted; } } } diff --git a/Content.Shared/Interaction/SharedInteractionSystem.cs b/Content.Shared/Interaction/SharedInteractionSystem.cs index 42053b557f..f6bd750d3d 100644 --- a/Content.Shared/Interaction/SharedInteractionSystem.cs +++ b/Content.Shared/Interaction/SharedInteractionSystem.cs @@ -627,7 +627,6 @@ namespace Content.Shared.Interaction EntityUid used, EntityUid target, EntityCoordinates clickLocation, - bool predicted = false, bool checkCanInteract = true, bool checkCanUse = true) { @@ -641,7 +640,7 @@ namespace Content.Shared.Interaction return; // all interactions should only happen when in range / unobstructed, so no range check is needed - var interactUsingEvent = new InteractUsingEvent(user, used, target, clickLocation, predicted); + var interactUsingEvent = new InteractUsingEvent(user, used, target, clickLocation); RaiseLocalEvent(target, interactUsingEvent); if (interactUsingEvent.Handled) return; diff --git a/Content.Shared/Inventory/InventorySystem.Equip.cs b/Content.Shared/Inventory/InventorySystem.Equip.cs index 58b98afd1b..85216b2035 100644 --- a/Content.Shared/Inventory/InventorySystem.Equip.cs +++ b/Content.Shared/Inventory/InventorySystem.Equip.cs @@ -110,7 +110,7 @@ public abstract partial class InventorySystem if (held != null && itemUid != null) { _interactionSystem.InteractUsing(actor, held.Value, itemUid.Value, - new EntityCoordinates(), predicted: true); + new EntityCoordinates()); return; }