diff --git a/Content.Server/Xenoarchaeology/Equipment/Components/NodeScannerComponent.cs b/Content.Server/Xenoarchaeology/Equipment/Components/NodeScannerComponent.cs new file mode 100644 index 0000000000..c625ced209 --- /dev/null +++ b/Content.Server/Xenoarchaeology/Equipment/Components/NodeScannerComponent.cs @@ -0,0 +1,7 @@ +namespace Content.Server.Xenoarchaeology.Equipment.Components; + +[RegisterComponent] +public sealed class NodeScannerComponent : Component +{ + +} diff --git a/Content.Server/Xenoarchaeology/Equipment/Systems/NodeScannerSystem.cs b/Content.Server/Xenoarchaeology/Equipment/Systems/NodeScannerSystem.cs new file mode 100644 index 0000000000..ee1d7f8edf --- /dev/null +++ b/Content.Server/Xenoarchaeology/Equipment/Systems/NodeScannerSystem.cs @@ -0,0 +1,38 @@ +using Content.Server.Popups; +using Content.Server.Xenoarchaeology.Equipment.Components; +using Content.Server.Xenoarchaeology.XenoArtifacts; +using Content.Shared.Interaction; +using Content.Shared.Timing; +using Robust.Shared.Player; + +namespace Content.Server.Xenoarchaeology.Equipment.Systems; + +public sealed class NodeScannerSystem : EntitySystem +{ + [Dependency] private readonly UseDelaySystem _useDelay = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + + /// + public override void Initialize() + { + SubscribeLocalEvent(OnAfterInteract); + } + + private void OnAfterInteract(EntityUid uid, NodeScannerComponent component, AfterInteractEvent args) + { + if (!args.CanReach || args.Target == null) + return; + + if (!TryComp(args.Target, out var artifact) || artifact.CurrentNode == null) + return; + + if (args.Handled) + return; + args.Handled = true; + + var target = args.Target.Value; + _useDelay.BeginDelay(uid); + _popupSystem.PopupEntity(Loc.GetString("node-scan-popup", + ("id", $"{artifact.CurrentNode.Id}")), target, Filter.Pvs(target)); + } +} diff --git a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs index 5b7664313e..45ff20ac80 100644 --- a/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs +++ b/Content.Server/Xenoarchaeology/XenoArtifacts/ArtifactSystem.Nodes.cs @@ -48,7 +48,8 @@ public sealed partial class ArtifactSystem var node = uninitializedNodes.First(); uninitializedNodes.Remove(node); - node.Id = _random.Next(0, 10000); + //random 5-digit number + node.Id = _random.Next(10000, 100000); //Generate the connected nodes var maxEdges = Math.Max(1, targetNodeAmount - tree.AllNodes.Count - uninitializedNodes.Count - 1); diff --git a/Resources/Locale/en-US/xenoarchaeology/node-scanner.ftl b/Resources/Locale/en-US/xenoarchaeology/node-scanner.ftl new file mode 100644 index 0000000000..14b07941a6 --- /dev/null +++ b/Resources/Locale/en-US/xenoarchaeology/node-scanner.ftl @@ -0,0 +1 @@ +node-scan-popup = The node ID is {$id} \ No newline at end of file diff --git a/Resources/Prototypes/Catalog/Research/technologies.yml b/Resources/Prototypes/Catalog/Research/technologies.yml index ebdbf76959..213ca87a89 100644 --- a/Resources/Prototypes/Catalog/Research/technologies.yml +++ b/Resources/Prototypes/Catalog/Research/technologies.yml @@ -484,6 +484,7 @@ - MicroLaserStockPart - MicroManipulatorStockPart - ScanningModuleStockPart + - NodeScanner - type: technology name: technologies-robotics-technology diff --git a/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/node_scanner.yml b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/node_scanner.yml new file mode 100644 index 0000000000..8f0a704a54 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Specific/Xenoarchaeology/node_scanner.yml @@ -0,0 +1,15 @@ +- type: entity + parent: BaseItem + id: NodeScanner + name: node scanner + description: The archeologist's friend, able to identify the node of an artifact with only a single scan. + components: + - type: Sprite + sprite: Objects/Specific/Xenoarchaeology/node_scanner.rsi + state: icon + netsync: false + - type: Item + sprite: Objects/Specific/Xenoarchaeology/node_scanner.rsi + - type: NodeScanner + - type: UseDelay + delay: 3 diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 73632991c4..fd30b6f033 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -228,6 +228,7 @@ - PowerCellHigh - SynthesizerInstrument - RPED + - NodeScanner - HolofanProjector - type: entity diff --git a/Resources/Prototypes/Recipes/Lathes/misc.yml b/Resources/Prototypes/Recipes/Lathes/misc.yml index c023913afa..119c844b71 100644 --- a/Resources/Prototypes/Recipes/Lathes/misc.yml +++ b/Resources/Prototypes/Recipes/Lathes/misc.yml @@ -85,3 +85,14 @@ Steel: 300 Plastic: 300 Glass: 100 + +- type: latheRecipe + id: NodeScanner + icon: + sprite: Objects/Specific/Xenoarchaeology/node_scanner.rsi + state: icon + result: NodeScanner + completetime: 2 + materials: + Steel: 100 + Plastic: 50 diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/icon.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/icon.png new file mode 100644 index 0000000000..919f7d2856 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/icon.png differ diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/inhand-left.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/inhand-left.png new file mode 100644 index 0000000000..39a2af84a0 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/inhand-left.png differ diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/inhand-right.png b/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/inhand-right.png new file mode 100644 index 0000000000..1504a48723 Binary files /dev/null and b/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/inhand-right.png differ diff --git a/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/meta.json b/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/meta.json new file mode 100644 index 0000000000..7c0fc9d9e8 --- /dev/null +++ b/Resources/Textures/Objects/Specific/Xenoarchaeology/node_scanner.rsi/meta.json @@ -0,0 +1,22 @@ +{ + "version": 1, + "license": "CC0-1.0", + "copyright": "Created by EmoGarbage404", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "icon" + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +}