diff --git a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs index aa262e1b20..8d023d2580 100644 --- a/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs +++ b/Content.Server/GameObjects/Components/Chemistry/SolutionComponent.cs @@ -219,23 +219,23 @@ namespace Content.Server.GameObjects.Components.Chemistry { protected override void GetData(IEntity user, SolutionComponent component, VerbData data) { - if (user.TryGetComponent(out var hands)) + if (!ActionBlockerSystem.CanInteract(user) || + !user.TryGetComponent(out var hands) || + hands.GetActiveHand == null || + !hands.GetActiveHand.Owner.TryGetComponent(out var solution)) { - if (hands.GetActiveHand != null) - { - if (hands.GetActiveHand.Owner.TryGetComponent(out var solution)) - { - if ((solution.Capabilities & SolutionCaps.PourOut) != 0 && - (component.Capabilities & SolutionCaps.PourIn) != 0) - { - var heldEntityName = hands.GetActiveHand.Owner?.Prototype?.Name ?? ""; - var myName = component.Owner.Prototype?.Name ?? ""; + data.Visibility = VerbVisibility.Invisible; + return; + } - data.Text= $"Transfer liquid from [{heldEntityName}] to [{myName}]."; - return; - } - } - } + if ((solution.Capabilities & SolutionCaps.PourOut) != 0 && + (component.Capabilities & SolutionCaps.PourIn) != 0) + { + var heldEntityName = hands.GetActiveHand.Owner?.Prototype?.Name ?? ""; + var myName = component.Owner.Prototype?.Name ?? ""; + + data.Text= $"Transfer liquid from [{heldEntityName}] to [{myName}]."; + return; } data.Visibility = VerbVisibility.Invisible; @@ -318,23 +318,23 @@ namespace Content.Server.GameObjects.Components.Chemistry { protected override void GetData(IEntity user, SolutionComponent component, VerbData data) { - if (user.TryGetComponent(out var hands)) + if (!ActionBlockerSystem.CanInteract(user) || + !user.TryGetComponent(out var hands) || + hands.GetActiveHand == null || + !hands.GetActiveHand.Owner.TryGetComponent(out var solution)) { - if (hands.GetActiveHand != null) - { - if (hands.GetActiveHand.Owner.TryGetComponent(out var solution)) - { - if ((solution.Capabilities & SolutionCaps.PourIn) != 0 && - (component.Capabilities & SolutionCaps.PourOut) != 0) - { - var heldEntityName = hands.GetActiveHand.Owner?.Prototype?.Name ?? ""; - var myName = component.Owner.Prototype?.Name ?? ""; + data.Visibility = VerbVisibility.Invisible; + return; + } - data.Text = $"Transfer liquid from [{myName}] to [{heldEntityName}]."; - return; - } - } - } + if ((solution.Capabilities & SolutionCaps.PourIn) != 0 && + (component.Capabilities & SolutionCaps.PourOut) != 0) + { + var heldEntityName = hands.GetActiveHand.Owner?.Prototype?.Name ?? ""; + var myName = component.Owner.Prototype?.Name ?? ""; + + data.Text = $"Transfer liquid from [{myName}] to [{heldEntityName}]."; + return; } data.Visibility = VerbVisibility.Invisible; diff --git a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs index 8d9d2e4ce5..2c4cfc80f3 100644 --- a/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs +++ b/Content.Server/GameObjects/Components/Fluids/CanSpillComponent.cs @@ -1,5 +1,6 @@ using System; using Content.Server.GameObjects.Components.Chemistry; +using Content.Server.GameObjects.EntitySystems; using Content.Shared.Chemistry; using Content.Shared.GameObjects; using Robust.Shared.GameObjects; @@ -21,7 +22,8 @@ namespace Content.Server.GameObjects.Components.Fluids { protected override void GetData(IEntity user, CanSpillComponent component, VerbData data) { - if (!component.Owner.TryGetComponent(out SolutionComponent solutionComponent)) + if (!ActionBlockerSystem.CanInteract(user) || + !component.Owner.TryGetComponent(out SolutionComponent solutionComponent)) { data.Visibility = VerbVisibility.Invisible; return; diff --git a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs index 71d920d5fb..2e58ab6b6c 100644 --- a/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs +++ b/Content.Server/GameObjects/Components/Interactable/HandheldLightComponent.cs @@ -240,6 +240,12 @@ namespace Content.Server.GameObjects.Components.Interactable { protected override void GetData(IEntity user, HandheldLightComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + if (component.Cell == null) { data.Text = "Eject cell (cell missing)"; diff --git a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs index 0b94299c7c..e3a7bab178 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/EntityStorageComponent.cs @@ -338,8 +338,13 @@ namespace Content.Server.GameObjects.Components { protected override void GetData(IEntity user, EntityStorageComponent component, VerbData data) { - component.OpenVerbGetData(user, component, data); + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + component.OpenVerbGetData(user, component, data); } /// @@ -351,6 +356,12 @@ namespace Content.Server.GameObjects.Components protected virtual void OpenVerbGetData(IEntity user, EntityStorageComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + if (IsWeldedShut) { data.Visibility = VerbVisibility.Disabled; diff --git a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs index 9e71faa71e..0e34998d11 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/ItemComponent.cs @@ -116,7 +116,9 @@ namespace Content.Server.GameObjects { protected override void GetData(IEntity user, ItemComponent component, VerbData data) { - if (ContainerHelpers.IsInContainer(component.Owner) || !component.CanPickup(user)) + if (!ActionBlockerSystem.CanInteract(user) || + ContainerHelpers.IsInContainer(component.Owner) || + !component.CanPickup(user)) { data.Visibility = VerbVisibility.Invisible; return; diff --git a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs index 34ab66e526..d37f3b79c7 100644 --- a/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs +++ b/Content.Server/GameObjects/Components/Items/Storage/SecureEntityStorageComponent.cs @@ -139,7 +139,7 @@ namespace Content.Server.GameObjects.Components.Items.Storage { protected override void GetData(IEntity user, SecureEntityStorageComponent component, VerbData data) { - if (component.Open) + if (!ActionBlockerSystem.CanInteract(user) || component.Open) { data.Visibility = VerbVisibility.Invisible; return; diff --git a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs index d3ef519309..f309e1bce5 100644 --- a/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs +++ b/Content.Server/GameObjects/Components/Medical/MedicalScannerComponent.cs @@ -133,6 +133,12 @@ namespace Content.Server.GameObjects.Components.Medical { protected override void GetData(IEntity user, MedicalScannerComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = "Enter"; data.Visibility = component.IsOccupied ? VerbVisibility.Invisible : VerbVisibility.Visible; } @@ -148,6 +154,12 @@ namespace Content.Server.GameObjects.Components.Medical { protected override void GetData(IEntity user, MedicalScannerComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = "Eject"; data.Visibility = component.IsOccupied ? VerbVisibility.Visible : VerbVisibility.Invisible; } diff --git a/Content.Server/GameObjects/Components/PDA/PDAComponent.cs b/Content.Server/GameObjects/Components/PDA/PDAComponent.cs index f70cd43a9e..a6dd1deb05 100644 --- a/Content.Server/GameObjects/Components/PDA/PDAComponent.cs +++ b/Content.Server/GameObjects/Components/PDA/PDAComponent.cs @@ -250,6 +250,12 @@ namespace Content.Server.GameObjects.Components.PDA { protected override void GetData(IEntity user, PDAComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = Loc.GetString("Eject ID"); data.Visibility = component.IdSlotEmpty ? VerbVisibility.Invisible : VerbVisibility.Visible; } diff --git a/Content.Server/GameObjects/Components/Power/Chargers/PowerCellChargerComponent.cs b/Content.Server/GameObjects/Components/Power/Chargers/PowerCellChargerComponent.cs index 526bff9b45..f904673e37 100644 --- a/Content.Server/GameObjects/Components/Power/Chargers/PowerCellChargerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/Chargers/PowerCellChargerComponent.cs @@ -61,6 +61,12 @@ namespace Content.Server.GameObjects.Components.Power.Chargers { protected override void GetData(IEntity user, PowerCellChargerComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + if (!user.TryGetComponent(out HandsComponent handsComponent)) { data.Visibility = VerbVisibility.Invisible; @@ -99,6 +105,12 @@ namespace Content.Server.GameObjects.Components.Power.Chargers { protected override void GetData(IEntity user, PowerCellChargerComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + if (component._container.ContainedEntity == null) { data.Text = "Eject"; diff --git a/Content.Server/GameObjects/Components/Power/Chargers/WeaponCapacitorChargerComponent.cs b/Content.Server/GameObjects/Components/Power/Chargers/WeaponCapacitorChargerComponent.cs index a6530f5daf..2bb1bee4d5 100644 --- a/Content.Server/GameObjects/Components/Power/Chargers/WeaponCapacitorChargerComponent.cs +++ b/Content.Server/GameObjects/Components/Power/Chargers/WeaponCapacitorChargerComponent.cs @@ -46,6 +46,12 @@ namespace Content.Server.GameObjects.Components.Power.Chargers { protected override void GetData(IEntity user, WeaponCapacitorChargerComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + if (!user.TryGetComponent(out HandsComponent handsComponent)) { data.Visibility = VerbVisibility.Invisible; @@ -89,6 +95,12 @@ namespace Content.Server.GameObjects.Components.Power.Chargers { protected override void GetData(IEntity user, WeaponCapacitorChargerComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + if (component._container.ContainedEntity == null) { data.Visibility = VerbVisibility.Disabled; diff --git a/Content.Server/GameObjects/Components/RotatableComponent.cs b/Content.Server/GameObjects/Components/RotatableComponent.cs index 01eba427dc..bd45b22e98 100644 --- a/Content.Server/GameObjects/Components/RotatableComponent.cs +++ b/Content.Server/GameObjects/Components/RotatableComponent.cs @@ -1,3 +1,4 @@ +using Content.Server.GameObjects.EntitySystems; using Content.Server.Interfaces; using Content.Shared.GameObjects; using Robust.Server.GameObjects; @@ -37,6 +38,12 @@ namespace Content.Server.GameObjects.Components { protected override void GetData(IEntity user, RotatableComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.CategoryData = VerbCategories.Rotate; data.Text = "Rotate clockwise"; data.IconTexture = "/Textures/UserInterface/VerbIcons/rotate_cw.svg.96dpi.png"; @@ -53,6 +60,12 @@ namespace Content.Server.GameObjects.Components { protected override void GetData(IEntity user, RotatableComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.CategoryData = VerbCategories.Rotate; data.Text = "Rotate counter-clockwise"; data.IconTexture = "/Textures/UserInterface/VerbIcons/rotate_ccw.svg.96dpi.png"; diff --git a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs index 2c9985e99b..907854dd89 100644 --- a/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Melee/StunbatonComponent.cs @@ -252,6 +252,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Melee { protected override void GetData(IEntity user, StunbatonComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + if (component.Cell == null) { data.Text = "Eject cell (cell missing)"; diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs index 5918dae974..40d48ee25b 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs @@ -63,9 +63,9 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition _ammoContainer.Insert(entity); } } - + } - + void IMapInit.MapInit() { _unspawnedCount += _capacity; @@ -117,7 +117,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition Owner.PopupMessage(user, Loc.GetString("No room")); return false; } - + _spawnedAmmo.Push(entity); _ammoContainer.Insert(entity); UpdateAppearance(); @@ -136,7 +136,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition for (var i = 0; i < Math.Max(10, rangedMagazine.ShotsLeft); i++) { var ammo = rangedMagazine.TakeAmmo(); - + if (!TryInsertAmmo(eventArgs.User, ammo)) { rangedMagazine.TryInsertAmmo(eventArgs.User, ammo); @@ -146,7 +146,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition return true; } - + return false; } @@ -175,7 +175,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition { var ejectCount = Math.Min(count, Capacity); var ejectAmmo = new List(ejectCount); - + for (var i = 0; i < Math.Min(count, Capacity); i++) { var ammo = TakeAmmo(); @@ -200,13 +200,19 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition { return TryUse(eventArgs.User); } - + // So if you have 200 rounds in a box and that suddenly creates 200 entities you're not having a fun time [Verb] private sealed class DumpVerb : Verb { protected override void GetData(IEntity user, AmmoBoxComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = Loc.GetString("Dump 10"); data.Visibility = component.AmmoLeft > 0 ? VerbVisibility.Visible : VerbVisibility.Disabled; } @@ -217,4 +223,4 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition } } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs index 5045361a7e..a5bfbbe7a3 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs @@ -28,7 +28,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { // Originally I had this logic shared with PumpBarrel and used a couple of variables to control things // but it felt a lot messier to play around with, especially when adding verbs - + public override string Name => "BoltActionBarrel"; public override int ShotsLeft @@ -62,7 +62,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels } var soundSystem = EntitySystem.Get(); - + if (value) { if (_soundBoltOpen != null) @@ -77,7 +77,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels soundSystem.PlayAtCoords(_soundBoltClosed, Owner.Transform.GridPosition, AudioParams.Default.WithVolume(-2)); } } - + _boltOpen = value; UpdateAppearance(); } @@ -105,7 +105,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels serializer.DataField(ref _soundBoltClosed, "soundBoltClosed", "/Audio/Guns/Bolt/rifle_bolt_closed.ogg"); serializer.DataField(ref _soundInsert, "soundInsert", "/Audio/Guns/MagIn/bullet_insert.ogg"); } - + void IMapInit.MapInit() { if (_fillPrototype != null) @@ -137,7 +137,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { _appearanceComponent = appearanceComponent; } - + _appearanceComponent?.SetData(MagazineBarrelVisuals.MagLoaded, true); UpdateAppearance(); } @@ -183,7 +183,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels var ammoComponent = chamberedEntity.GetComponent(); if (!ammoComponent.Caseless) { - EjectCasing(chamberedEntity); + EjectCasing(chamberedEntity); } } @@ -216,7 +216,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels EntitySystem.Get().PlayAtCoords(_soundCycle, Owner.Transform.GridPosition, AudioParams.Default.WithVolume(-2)); } } - + Dirty(); UpdateAppearance(); } @@ -264,9 +264,9 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels UpdateAppearance(); return true; } - + Owner.PopupMessage(user, Loc.GetString("No room")); - + return false; } @@ -279,7 +279,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels // Dirty(); return true; } - + Cycle(true); return true; } @@ -288,12 +288,18 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { return TryInsertBullet(eventArgs.User, eventArgs.Using); } - + [Verb] private sealed class OpenBoltVerb : Verb { protected override void GetData(IEntity user, BoltActionBarrelComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = Loc.GetString("Open bolt"); data.Visibility = component.BoltOpen ? VerbVisibility.Disabled : VerbVisibility.Visible; } @@ -303,12 +309,18 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels component.BoltOpen = true; } } - + [Verb] private sealed class CloseBoltVerb : Verb { protected override void GetData(IEntity user, BoltActionBarrelComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = Loc.GetString("Close bolt"); data.Visibility = component.BoltOpen ? VerbVisibility.Visible : VerbVisibility.Disabled; } @@ -319,4 +331,4 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels } } } -} \ No newline at end of file +} diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs index f9caf303b6..d5f5540f28 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/RevolverBarrelComponent.cs @@ -221,6 +221,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { protected override void GetData(IEntity user, RevolverBarrelComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = Loc.GetString("Spin"); if (component.Capacity <= 1) { diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs index a38b47f002..d4863587a7 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs @@ -26,7 +26,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { public override string Name => "MagazineBarrel"; public override uint? NetID => ContentNetIDs.MAGAZINE_BARREL; - + private ContainerSlot _chamberContainer; [ViewVariables] public bool HasMagazine => _magazineContainer.ContainedEntity != null; private ContainerSlot _magazineContainer; @@ -118,11 +118,11 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { count = (rangedMagazineComponent.ShotsLeft, rangedMagazineComponent.Capacity); } - + return new MagazineBarrelComponentState( - _chamberContainer.ContainedEntity != null, - FireRateSelector, - count, + _chamberContainer.ContainedEntity != null, + FireRateSelector, + count, SoundGunshot); } @@ -134,7 +134,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { _appearanceComponent = appearanceComponent; } - + _chamberContainer = ContainerManagerComponent.Ensure($"{Name}-chamber", Owner); _magazineContainer = ContainerManagerComponent.Ensure($"{Name}-magazine", Owner); } @@ -194,7 +194,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels var ammoComponent = chamberEntity.GetComponent(); if (!ammoComponent.Caseless) { - EjectCasing(chamberEntity); + EjectCasing(chamberEntity); } } @@ -207,7 +207,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels // If you're really into gunporn you could put a sound here _chamberContainer.Insert(nextRound); } - + var soundSystem = EntitySystem.Get(); if (_autoEjectMag && magazine != null && magazine.GetComponent().ShotsLeft == 0) @@ -245,7 +245,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels soundSystem.PlayAtCoords(_soundRack, Owner.Transform.GridPosition, AudioParams.Default.WithVolume(-2)); } } - + Dirty(); UpdateAppearance(); } @@ -310,7 +310,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { handsComponent.PutInHandOrDrop(mag.GetComponent()); } - + Dirty(); UpdateAppearance(); } @@ -385,12 +385,18 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels return false; } - + [Verb] private sealed class EjectMagazineVerb : Verb { protected override void GetData(IEntity user, ServerMagazineBarrelComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = Loc.GetString("Eject magazine"); if (component.MagNeedsOpenBolt) { @@ -408,12 +414,18 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels component.RemoveMagazine(user); } } - + [Verb] private sealed class OpenBoltVerb : Verb { protected override void GetData(IEntity user, ServerMagazineBarrelComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = Loc.GetString("Open bolt"); data.Visibility = component.BoltOpen ? VerbVisibility.Disabled : VerbVisibility.Visible; } @@ -423,12 +435,18 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels component.ToggleBolt(); } } - + [Verb] private sealed class CloseBoltVerb : Verb { protected override void GetData(IEntity user, ServerMagazineBarrelComponent component, VerbData data) { + if (!ActionBlockerSystem.CanInteract(user)) + { + data.Visibility = VerbVisibility.Invisible; + return; + } + data.Text = Loc.GetString("Close bolt"); data.Visibility = component.BoltOpen ? VerbVisibility.Visible : VerbVisibility.Disabled; }