From a76e7eca991a67abe9fa667d34df7f391d6285f4 Mon Sep 17 00:00:00 2001 From: Ripmorld <60119809+UKNOWH@users.noreply.github.com> Date: Sun, 8 May 2022 15:54:13 +0800 Subject: [PATCH] You can no longer disarm wielded weapons (#7983) Co-authored-by: Kara --- .../Actions/Events/DisarmAttemptEvent.cs | 5 ++++- Content.Server/CombatMode/CombatModeSystem.cs | 22 ++++++++++++++++++- Content.Server/Wieldable/WieldableSystem.cs | 10 ++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/Content.Server/Actions/Events/DisarmAttemptEvent.cs b/Content.Server/Actions/Events/DisarmAttemptEvent.cs index f28f0fd565..844facda9b 100644 --- a/Content.Server/Actions/Events/DisarmAttemptEvent.cs +++ b/Content.Server/Actions/Events/DisarmAttemptEvent.cs @@ -6,10 +6,13 @@ namespace Content.Server.Actions.Events { public readonly EntityUid TargetUid; public readonly EntityUid DisarmerUid; - public DisarmAttemptEvent(EntityUid targetUid, EntityUid disarmerUid) + public readonly EntityUid? TargetItemInHandUid; + + public DisarmAttemptEvent(EntityUid targetUid, EntityUid disarmerUid, EntityUid? targetItemInHandUid = null) { TargetUid = targetUid; DisarmerUid = disarmerUid; + TargetItemInHandUid = targetItemInHandUid; } } } diff --git a/Content.Server/CombatMode/CombatModeSystem.cs b/Content.Server/CombatMode/CombatModeSystem.cs index 47a57dc9fb..66e5acaffe 100644 --- a/Content.Server/CombatMode/CombatModeSystem.cs +++ b/Content.Server/CombatMode/CombatModeSystem.cs @@ -1,6 +1,8 @@ +using System.Diagnostics; using Content.Server.Act; using Content.Server.Actions.Events; using Content.Server.Administration.Logs; +using Content.Server.Hands.Components; using Content.Server.Popups; using Content.Server.Weapon.Melee; using Content.Shared.ActionBlocker; @@ -9,6 +11,10 @@ using Content.Shared.CombatMode; using Content.Shared.Database; using JetBrains.Annotations; using Robust.Shared.Audio; +using Robust.Shared.GameObjects; +using Robust.Shared.IoC; +using Robust.Shared.Localization; +using Robust.Shared.Maths; using Robust.Shared.Player; using Robust.Shared.Random; @@ -38,7 +44,21 @@ namespace Content.Server.CombatMode if (!_actionBlockerSystem.CanAttack(args.Performer)) return; - var attemptEvent = new DisarmAttemptEvent(args.Target, args.Performer); + EntityUid? inTargetHand = null; + + if (EntityManager.TryGetComponent(args.Target, out HandsComponent targetHandsComponent) + && targetHandsComponent.ActiveHand != null + && !targetHandsComponent.ActiveHand.IsEmpty) + { + inTargetHand = targetHandsComponent.ActiveHand.HeldEntity!.Value; + } + + var attemptEvent = new DisarmAttemptEvent(args.Target, args.Performer,inTargetHand); + + if (inTargetHand != null) + { + RaiseLocalEvent(inTargetHand.Value, attemptEvent); + } RaiseLocalEvent(args.Target, attemptEvent); if (attemptEvent.Cancelled) return; diff --git a/Content.Server/Wieldable/WieldableSystem.cs b/Content.Server/Wieldable/WieldableSystem.cs index e0da96aa4f..fc9cfd0b95 100644 --- a/Content.Server/Wieldable/WieldableSystem.cs +++ b/Content.Server/Wieldable/WieldableSystem.cs @@ -12,7 +12,8 @@ using Content.Shared.Popups; using Content.Shared.Verbs; using Robust.Shared.Audio; using Robust.Shared.Player; -using System.Linq; +using Content.Server.Actions.Events; + namespace Content.Server.Wieldable { @@ -32,10 +33,17 @@ namespace Content.Server.Wieldable SubscribeLocalEvent(OnItemLeaveHand); SubscribeLocalEvent(OnVirtualItemDeleted); SubscribeLocalEvent>(AddToggleWieldVerb); + SubscribeLocalEvent(OnDisarmAttemptEvent); SubscribeLocalEvent(OnMeleeHit); } + private void OnDisarmAttemptEvent(EntityUid uid, WieldableComponent component, DisarmAttemptEvent args) + { + if (component.Wielded) + args.Cancel(); + } + private void AddToggleWieldVerb(EntityUid uid, WieldableComponent component, GetVerbsEvent args) { if (args.Hands == null || !args.CanAccess || !args.CanInteract)