diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs index 839c356ecf..f4843118b7 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoBoxComponent.cs @@ -16,11 +16,12 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition { [RegisterComponent] - public sealed class AmmoBoxComponent : Component, IInteractUsing, IUse, IInteractHand, IMapInit + public sealed class AmmoBoxComponent : Component, IInteractUsing, IUse, IInteractHand, IMapInit, IExamine { public override string Name => "AmmoBox"; @@ -197,6 +198,8 @@ 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 @@ -218,5 +221,11 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition component.EjectContents(10); } } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + message.AddMarkup(Loc.GetString("\nIt's a [color=white]{0}[/color] ammo box.", _caliber)); + message.AddMarkup(Loc.GetString("\nIt has [color=white]{0}[/color] out of [color=white]{1}[/color] ammo left.", AmmoLeft, _capacity)); + } } } diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs index e293e690d5..e97f95973b 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/AmmoComponent.cs @@ -1,5 +1,6 @@ using System; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; +using Content.Shared.GameObjects.EntitySystems; using Robust.Server.GameObjects; using Robust.Server.GameObjects.EntitySystems; using Robust.Shared.GameObjects; @@ -8,6 +9,7 @@ using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.Timing; using Robust.Shared.IoC; +using Robust.Shared.Localization; using Robust.Shared.Log; using Robust.Shared.Map; using Robust.Shared.Maths; @@ -21,7 +23,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition /// Generally used for bullets but can be used for other things like bananas /// [RegisterComponent] - public class AmmoComponent : Component + public class AmmoComponent : Component, IExamine { public override string Name => "Ammo"; public BallisticCaliber Caliber => _caliber; @@ -152,6 +154,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition }; EntitySystem.Get().CreateParticle(message); } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + var text = Loc.GetString("It's [color=white]{0}[/color] ammo.", Caliber); + message.AddMarkup(text); + } } public enum BallisticCaliber diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs index 5747132bb8..79f6121d3d 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Ammunition/RangedMagazineComponent.cs @@ -5,6 +5,7 @@ using Content.Server.GameObjects.Components.GUI; using Content.Server.GameObjects.Components.Items.Storage; using Content.Server.GameObjects.Components.Weapon.Ranged.Barrels; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -14,11 +15,12 @@ using Robust.Shared.GameObjects; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition { [RegisterComponent] - public class RangedMagazineComponent : Component, IMapInit, IInteractUsing, IUse + public class RangedMagazineComponent : Component, IMapInit, IInteractUsing, IUse, IExamine { public override string Name => "RangedMagazine"; @@ -168,5 +170,11 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition return true; } + + public void Examine(FormattedMessage message, bool inDetailsRange) + { + var text = Loc.GetString("It's a [color=white]{0}[/color] magazine of [color=white]{1}[/color] caliber.", MagazineType, Caliber); + message.AddMarkup(text); + } } } diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs index 913b56027f..cc0d0d74b2 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/BoltActionBarrelComponent.cs @@ -18,6 +18,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { @@ -25,7 +26,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels /// Shotguns mostly /// [RegisterComponent] - public sealed class BoltActionBarrelComponent : ServerRangedBarrelComponent, IMapInit + public sealed class BoltActionBarrelComponent : ServerRangedBarrelComponent, IMapInit, IExamine { // 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 @@ -297,6 +298,13 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels return TryInsertBullet(eventArgs.User, eventArgs.Using); } + public override void Examine(FormattedMessage message, bool inDetailsRange) + { + base.Examine(message, inDetailsRange); + + message.AddMarkup(Loc.GetString("\nIt uses [color=white]{0}[/color] ammo.", _caliber)); + } + [Verb] private sealed class OpenBoltVerb : Verb { diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/PumpBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/PumpBarrelComponent.cs index 2139767dc0..6859c0c258 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/PumpBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/PumpBarrelComponent.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition; using Content.Shared.GameObjects.Components.Weapons.Ranged.Barrels; +using Content.Shared.GameObjects.EntitySystems; using Content.Shared.Interfaces; using Content.Shared.Interfaces.GameObjects.Components; using Robust.Server.GameObjects; @@ -15,6 +16,7 @@ using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Localization; using Robust.Shared.Map; using Robust.Shared.Serialization; +using Robust.Shared.Utility; namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { @@ -22,7 +24,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels /// Bolt-action rifles /// [RegisterComponent] - public sealed class PumpBarrelComponent : ServerRangedBarrelComponent, IMapInit + public sealed class PumpBarrelComponent : ServerRangedBarrelComponent, IMapInit, IExamine { public override string Name => "PumpBarrel"; @@ -211,5 +213,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { return TryInsertBullet(eventArgs); } + + public override void Examine(FormattedMessage message, bool inDetailsRange) + { + base.Examine(message, inDetailsRange); + + message.AddMarkup(Loc.GetString("\nIt uses [color=white]{0}[/color] ammo.", _caliber)); + } } } diff --git a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs index ef8b35ca90..7999fce221 100644 --- a/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs +++ b/Content.Server/GameObjects/Components/Weapon/Ranged/Barrels/ServerMagazineBarrelComponent.cs @@ -104,21 +104,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels serializer.DataReadWriteFunction( "magazineTypes", new List(), - types => types.ForEach(mag => _magazineTypes |= mag), - () => - { - var types = new List(); - - foreach (MagazineType mag in Enum.GetValues(typeof(MagazineType))) - { - if ((_magazineTypes & mag) != 0) - { - types.Add(mag); - } - } - - return types; - }); + types => types.ForEach(mag => _magazineTypes |= mag), GetMagazineTypes); serializer.DataField(ref _caliber, "caliber", BallisticCaliber.Unspecified); serializer.DataField(ref _magFillPrototype, "magFillPrototype", null); serializer.DataField(ref _autoEjectMag, "autoEjectMag", false); @@ -131,6 +117,21 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels serializer.DataField(ref _soundAutoEject, "soundAutoEject", "/Audio/Weapons/Guns/EmptyAlarm/smg_empty_alarm.ogg"); } + private List GetMagazineTypes() + { + var types = new List(); + + foreach (MagazineType mag in Enum.GetValues(typeof(MagazineType))) + { + if ((_magazineTypes & mag) != 0) + { + types.Add(mag); + } + } + + return types; + } + public override ComponentState GetComponentState() { (int, int)? count = null; @@ -420,8 +421,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels { base.Examine(message, inDetailsRange); - var text = Loc.GetString("\nIt uses {0} ammo.", Caliber); - message.AddText(text); + message.AddMarkup(Loc.GetString("\nIt uses [color=white]{0}[/color] ammo.", Caliber)); + + foreach (var magazineType in GetMagazineTypes()) + { + message.AddMarkup(Loc.GetString("\nIt accepts [color=white]{0}[/color] magazines.", magazineType)); + } } [Verb]