From 4c582042c2d6b43e6b6935faa6e3f64660b4efaa Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 28 Aug 2024 17:39:36 +1000 Subject: [PATCH 01/33] Add some more stuff to AI whitelist (#31564) * Add some more stuff to AI whitelist * by the nine --- .../Prototypes/Entities/Structures/Doors/Shutter/shutters.yml | 1 + .../Structures/Doors/Windoors/base_structurewindoors.yml | 3 +++ .../Entities/Structures/Wallmounts/surveillance_camera.yml | 2 -- Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml | 3 +++ 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml index 3465b646b46..eec2a57c8b1 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Shutter/shutters.yml @@ -7,6 +7,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Doors/Shutters/shutters.rsi drawdepth: BlastDoors diff --git a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml index 462632dc074..7c8439fd6e2 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Windoors/base_structurewindoors.yml @@ -11,6 +11,7 @@ Brute: collection: GlassSmash - type: InteractionOutline + - type: StationAiWhitelist - type: Physics - type: Fixtures fixtures: @@ -130,6 +131,8 @@ layoutId: Airlock - type: UserInterface interfaces: + enum.AiUi.Key: + type: StationAiBoundUserInterface enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Appearance diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml index c82a3f21086..6bed67574c5 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/surveillance_camera.yml @@ -65,8 +65,6 @@ InUse: camera_in_use - type: UserInterface interfaces: - enum.AiUi.Key: - type: StationAiBoundUserInterface enum.SurveillanceCameraSetupUiKey.Camera: type: SurveillanceCameraSetupBoundUi enum.WiresUiKey.Key: diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml index dbcb0763442..91712916800 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/switch.yml @@ -7,6 +7,7 @@ snap: - Wallmount components: + - type: StationAiWhitelist - type: WallMount arc: 360 - type: Clickable @@ -46,6 +47,7 @@ snap: - Wallmount components: + - type: StationAiWhitelist - type: WallMount arc: 360 - type: Clickable @@ -137,6 +139,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Clickable - type: InteractionOutline - type: Sprite From cac7af677349567aeeea0ff45d222a22a15973c0 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Thu, 5 Sep 2024 11:31:03 +0200 Subject: [PATCH 02/33] Basically every electronic device can now be used by the AI. (#31730) * Basically every electronic device can now be used by the AI. * Removed stuff that didnt make sense * oops * Removed access from mailing and disposal units. * Added AI wires to a couple machines. * cool epic stuff --- Resources/Locale/en-US/wires/wire-names.ftl | 1 + .../Structures/Doors/Airlocks/highsec.yml | 3 +++ .../Structures/Doors/Firelocks/firelock.yml | 3 +++ .../Structures/Machines/Computers/arcades.yml | 2 ++ .../Machines/Computers/computers.yml | 21 ++++++++++++++++++ .../Structures/Machines/anomaly_equipment.yml | 6 +++++ .../Structures/Machines/gravity_generator.yml | 2 ++ .../Entities/Structures/Machines/jukebox.yml | 7 ++++++ .../Structures/Machines/smartfridge.yml | 1 + .../Structures/Machines/vending_machines.yml | 1 + .../Structures/Piping/Atmospherics/binary.yml | 1 + .../Piping/Atmospherics/portable.yml | 1 + .../Structures/Piping/Atmospherics/unary.yml | 2 ++ .../Structures/Shuttles/station_anchor.yml | 1 + .../Structures/Wallmounts/air_alarm.yml | 1 + Resources/Prototypes/Wires/layouts.yml | 22 +++++++++++++++++-- 16 files changed, 73 insertions(+), 2 deletions(-) diff --git a/Resources/Locale/en-US/wires/wire-names.ftl b/Resources/Locale/en-US/wires/wire-names.ftl index a1ebec9e7d3..1ac2ae89123 100644 --- a/Resources/Locale/en-US/wires/wire-names.ftl +++ b/Resources/Locale/en-US/wires/wire-names.ftl @@ -39,6 +39,7 @@ wires-board-name-mech = Mech wires-board-name-fatextractor = FatExtractor wires-board-name-flatpacker = Flatpacker wires-board-name-spaceheater = Space Heater +wires-board-name-jukebox = Jukebox # names that get displayed in the wire hacking hud & admin logs. diff --git a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml index 559dca704cd..e5470f27811 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Airlocks/highsec.yml @@ -6,6 +6,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: InteractionOutline - type: Sprite sprite: Structures/Doors/Airlocks/highsec/highsec.rsi @@ -79,6 +80,8 @@ alwaysRandomize: true - type: UserInterface interfaces: + enum.AiUi.Key: + type: StationAiBoundUserInterface enum.WiresUiKey.Key: type: WiresBoundUserInterface - type: Airtight diff --git a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml index a1451f7a8c0..b3ac934ade1 100644 --- a/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml +++ b/Resources/Prototypes/Entities/Structures/Doors/Firelocks/firelock.yml @@ -115,6 +115,7 @@ id: Firelock parent: BaseFirelock components: + - type: StationAiWhitelist - type: ContainerContainer containers: board: !type:Container @@ -132,6 +133,7 @@ parent: Firelock name: glass firelock components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Doors/Airlocks/Glass/firelock.rsi - type: Occluder @@ -157,6 +159,7 @@ parent: Firelock name: firelock components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Doors/edge_door_hazard.rsi snapCardinals: false diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml index 98c0f229ed5..da1f91a350c 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/arcades.yml @@ -88,6 +88,7 @@ - type: ActivatableUI key: enum.SpaceVillainArcadeUiKey.Key - type: ActivatableUIRequiresPower + - type: StationAiWhitelist - type: UserInterface interfaces: enum.SpaceVillainArcadeUiKey.Key: @@ -132,6 +133,7 @@ - type: ActivatableUI key: enum.BlockGameUiKey.Key - type: ActivatableUIRequiresPower + - type: StationAiWhitelist - type: UserInterface interfaces: enum.BlockGameUiKey.Key: diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 59e6b5fa4d7..8829a9025f1 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -4,6 +4,7 @@ name: atmospheric alerts computer description: Used to access the station's automated atmospheric alert system. components: + - type: StationAiWhitelist - type: Computer board: AlertsComputerCircuitboard - type: Sprite @@ -220,6 +221,7 @@ name: IFF computer description: Allows you to control the IFF characteristics of this vessel. components: + - type: StationAiWhitelist - type: IFFConsole - type: Sprite layers: @@ -267,6 +269,7 @@ name: power monitoring computer description: It monitors power levels across the station. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -306,6 +309,7 @@ name: medical records computer description: This can be used to check medical records. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -329,6 +333,7 @@ name: criminal records computer description: This can be used to check criminal records. Only security can modify them. components: + - type: StationAiWhitelist - type: CriminalRecordsConsole - type: UserInterface interfaces: @@ -364,6 +369,7 @@ name: station records computer description: This can be used to check station records. components: + - type: StationAiWhitelist - type: GeneralStationRecordConsole - type: UserInterface interfaces: @@ -387,6 +393,7 @@ name: crew monitoring console description: Used to monitor active health sensors built into most of the crew's uniforms. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -422,6 +429,7 @@ name: R&D computer description: A computer used to interface with R&D tools. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -466,6 +474,7 @@ name: analysis console description: A computer used to interface with the artifact analyzer. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -512,6 +521,7 @@ name: ID card computer description: Terminal for programming Nanotrasen employee ID cards to access parts of the station. components: + - type: StationAiWhitelist - type: IdCardConsole privilegedIdSlot: name: id-card-console-privileged-id @@ -571,6 +581,7 @@ name: body scanner computer description: A body scanner. components: + - type: StationAiWhitelist - type: ApcPowerReceiver powerLoad: 500 - type: Computer @@ -656,6 +667,7 @@ name: solar control computer description: A controller for solar panel arrays. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -687,6 +699,7 @@ name: mass scanner computer description: A computer for detecting nearby bodies, displaying them by position and mass. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -717,6 +730,7 @@ name: cargo shuttle computer description: Used to order the shuttle. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -752,6 +766,7 @@ name: cargo request computer description: Used to order supplies and approve requests. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -801,6 +816,7 @@ name: cargo bounty computer description: Used to manage currently active bounties. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -836,6 +852,7 @@ name: cloning console computer description: The centerpiece of the cloning system, medicine's greatest accomplishment. It has lots of ports and wires. components: + - type: StationAiWhitelist - type: CloningConsole - type: DeviceList - type: DeviceNetwork @@ -885,6 +902,7 @@ name: salvage expeditions computer description: Used to accept salvage missions, if you're tough enough. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1002,6 +1020,7 @@ name: cargo sale computer description: Used to sell goods loaded onto cargo pallets components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1039,6 +1058,7 @@ name: news manager console description: Write your message to the world! components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] @@ -1114,6 +1134,7 @@ name: robotics control console description: Used to remotely monitor, disable and destroy the station's cyborgs. components: + - type: StationAiWhitelist - type: Sprite layers: - map: ["computerLayerBody"] diff --git a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml index 09ee110054a..18169728c6d 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/anomaly_equipment.yml @@ -226,6 +226,7 @@ placement: mode: AlignTileAny components: + - type: StationAiWhitelist - type: SpriteFade - type: Sprite sprite: Structures/Machines/Anomaly/anomaly_generator.rsi @@ -284,6 +285,9 @@ fuelCost: 10 doAfterDelay: 5 - type: WiresPanel + - type: Wires + boardName: wires-board-name-anomalygenerator + layoutId: AnomalyGenerator - type: Destructible thresholds: - trigger: @@ -300,6 +304,8 @@ interfaces: enum.AnomalyGeneratorUiKey.Key: type: AnomalyGeneratorBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface - type: Appearance - type: ActiveRadio channels: diff --git a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml index 2880f819a72..133562d2eb7 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/gravity_generator.yml @@ -6,6 +6,7 @@ placement: mode: AlignTileAny components: + - type: StationAiWhitelist - type: AmbientSound enabled: false volume: -6 @@ -85,6 +86,7 @@ name: mini gravity generator description: It's what keeps you to the floor, now in fun size. components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Machines/gravity_generator_mini.rsi snapCardinals: true diff --git a/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml b/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml index acd8527dbba..42b144a97d0 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/jukebox.yml @@ -4,6 +4,7 @@ parent: [ BaseMachinePowered, ConstructibleMachine ] description: A machine capable of playing a wide variety of tunes. Enjoyment not guaranteed. components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Machines/jukebox.rsi layers: @@ -28,6 +29,12 @@ interfaces: enum.JukeboxUiKey.Key: type: JukeboxBoundUserInterface + enum.WiresUiKey.Key: + type: WiresBoundUserInterface + - type: WiresPanel + - type: Wires + boardName: wires-board-name-jukebox + layoutId: Jukebox - type: Damageable damageContainer: Inorganic damageModifierSet: Metallic diff --git a/Resources/Prototypes/Entities/Structures/Machines/smartfridge.yml b/Resources/Prototypes/Entities/Structures/Machines/smartfridge.yml index 5a62b74ac0a..baf5649b4b6 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/smartfridge.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/smartfridge.yml @@ -4,6 +4,7 @@ name: SmartFridge description: A refrigerated storage unit for keeping items cold and fresh. components: + - type: StationAiWhitelist - type: Advertise pack: SmartFridgeAds - type: Speech diff --git a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml index b4df776351d..76181249b59 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/vending_machines.yml @@ -5,6 +5,7 @@ description: Just add capitalism! abstract: true components: + - type: StationAiWhitelist - type: AmbientOnPowered - type: AmbientSound volume: -9 diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml index fa5804c6452..f13d5af75c6 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/binary.yml @@ -197,6 +197,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Sprite sprite: Structures/Piping/Atmospherics/pump.rsi layers: diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml index 87e71400f73..aba786a589b 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/portable.yml @@ -102,6 +102,7 @@ description: A bluespace technology device that alters local temperature. Commonly referred to as a "Space Heater". suffix: Unanchored components: + - type: StationAiWhitelist - type: Transform anchored: false - type: Physics diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml index 7a69f4759cd..5fe99b26ca6 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/unary.yml @@ -274,6 +274,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Sprite granularLayersRendering: true layers: @@ -318,6 +319,7 @@ placement: mode: SnapgridCenter components: + - type: StationAiWhitelist - type: Sprite granularLayersRendering : true layers: diff --git a/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml b/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml index 4e9a63f2af3..284ea9fcf7c 100644 --- a/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml +++ b/Resources/Prototypes/Entities/Structures/Shuttles/station_anchor.yml @@ -60,6 +60,7 @@ placement: mode: AlignTileAny components: + - type: StationAiWhitelist - type: PowerCharge windowTitle: station-anchor-window-title idlePower: 50 diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml index 3e972559603..cff9bed3d0c 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml @@ -7,6 +7,7 @@ snap: - Wallmount components: + - type: StationAiWhitelist - type: WallMount - type: ApcPowerReceiver - type: Electrified diff --git a/Resources/Prototypes/Wires/layouts.yml b/Resources/Prototypes/Wires/layouts.yml index 7ef30d116b4..9dade6fa72d 100644 --- a/Resources/Prototypes/Wires/layouts.yml +++ b/Resources/Prototypes/Wires/layouts.yml @@ -54,11 +54,13 @@ - !type:DoorBoltLightWireAction - !type:DoorTimingWireAction - !type:DoorSafetyWireAction - dummyWires: 5 + - !type:AiInteractWireAction + dummyWires: 4 - type: wireLayout id: Vending wires: + - !type:AiInteractWireAction - !type:PowerWireAction - !type:AccessWireAction - !type:LogWireAction @@ -69,6 +71,7 @@ - type: wireLayout id: AirAlarm wires: + - !type:AiInteractWireAction - !type:PowerWireAction - !type:AccessWireAction - !type:LogWireAction @@ -97,6 +100,7 @@ - !type:ArcadeOverflowWireAction - !type:ArcadePlayerInvincibleWireAction - !type:ArcadeEnemyInvincibleWireAction + - !type:AiInteractWireAction - type: wireLayout id: SurveillanceCamera @@ -162,4 +166,18 @@ wires: # - !type:AiInteractWireAction - !type:PowerWireAction - - !type:AccessWireAction \ No newline at end of file + - !type:AccessWireAction + +- type: wireLayout + id: Jukebox + dummyWires: 2 + wires: + - !type:PowerWireAction + - !type:AiInteractWireAction + +- type: wireLayout + id: AnomalyGenerator + dummyWires: 2 + wires: + - !type:PowerWireAction + - !type:AiInteractWireAction From 4c7f2238e9e09e7341a6bf1b95b6640f006a02d6 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Sun, 12 Jan 2025 23:19:43 -0400 Subject: [PATCH 03/33] Fixed the mail system --- Content.Server/Mail/MailCommands.cs | 51 +- Content.Server/Mail/Systems/MailSystem.cs | 1141 +++++++++++---------- 2 files changed, 615 insertions(+), 577 deletions(-) diff --git a/Content.Server/Mail/MailCommands.cs b/Content.Server/Mail/MailCommands.cs index 390de93fb3a..dac9b60ace9 100644 --- a/Content.Server/Mail/MailCommands.cs +++ b/Content.Server/Mail/MailCommands.cs @@ -20,10 +20,10 @@ public sealed class MailToCommand : IConsoleCommand [Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; - private readonly string _blankMailPrototype = "MailAdminFun"; - private readonly string _blankLargeMailPrototype = "MailLargeAdminFun"; // Frontier: large mail - private readonly string _container = "storagebase"; - private readonly string _mailContainer = "contents"; + private const string BlankMailPrototype = "MailAdminFun"; + private const string BlankLargeMailPrototype = "MailLargeAdminFun"; // Frontier: large mail + private const string Container = "storagebase"; + private const string MailContainer = "contents"; public async void Execute(IConsoleShell shell, string argStr, string[] args) @@ -46,73 +46,83 @@ public async void Execute(IConsoleShell shell, string argStr, string[] args) return; } - if (!bool.TryParse(args[2], out var isFragile) || !bool.TryParse(args[3], out var isPriority)) + if (!bool.TryParse(args[2], out var isFragile)) { shell.WriteError(Loc.GetString("shell-invalid-bool")); return; } + if (!bool.TryParse(args[3], out var isPriority)) + { + shell.WriteError(Loc.GetString("shell-invalid-bool")); + return; + } + + // Frontier: Large Mail var isLarge = false; if (args.Length > 4 && !bool.TryParse(args[4], out isLarge)) { shell.WriteError(Loc.GetString("shell-invalid-bool")); return; } - var mailPrototype = isLarge ? _blankLargeMailPrototype : _blankMailPrototype; + var mailPrototype = isLarge ? BlankLargeMailPrototype : BlankMailPrototype; + // End Frontier var mailSystem = _entitySystemManager.GetEntitySystem(); var containerSystem = _entitySystemManager.GetEntitySystem(); - if (!_entityManager.TryGetComponent(recipientUid, out MailReceiverComponent? mailReceiver)) + if (!_entityManager.HasComponent(recipientUid)) { shell.WriteLine(Loc.GetString("command-mailto-no-mailreceiver", ("requiredComponent", nameof(MailReceiverComponent)))); return; } - if (!_prototypeManager.HasIndex(mailPrototype)) + if (!_prototypeManager.HasIndex(mailPrototype)) // Frontier: _blankMailPrototype(containerUid).Coordinates); - var mailContents = containerSystem.EnsureContainer(mailUid, _mailContainer); + var mailUid = _entityManager.SpawnEntity(mailPrototype, _entityManager.GetComponent(containerUid).Coordinates); // Frontier: _blankMailPrototype(mailUid, MailContainer); - if (!_entityManager.TryGetComponent(mailUid, out MailComponent? mailComponent)) + if (!_entityManager.TryGetComponent(mailUid, out var mailComponent)) { - shell.WriteLine(Loc.GetString("command-mailto-bogus-mail", ("blankMail", mailPrototype), ("requiredMailComponent", nameof(MailComponent)))); + shell.WriteLine(Loc.GetString("command-mailto-bogus-mail", ("blankMail", mailPrototype), ("requiredMailComponent", nameof(MailComponent)))); // Frontier: _blankMailPrototype(teleporterComponent.Owner, "queued"); + var teleporterQueue = containerSystem.EnsureContainer((EntityUid)teleporterUid, "queued"); containerSystem.Insert(mailUid, teleporterQueue); shell.WriteLine(Loc.GetString("command-mailto-success", ("timeToTeleport", teleporterComponent.TeleportInterval.TotalSeconds - teleporterComponent.Accumulator))); } @@ -126,12 +136,9 @@ public sealed class MailNowCommand : IConsoleCommand public string Help => Loc.GetString("command-mailnow-help", ("command", Command)); [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly IEntitySystemManager _entitySystemManager = default!; public async void Execute(IConsoleShell shell, string argStr, string[] args) { - var entitySystem = _entitySystemManager.GetEntitySystem(); - foreach (var mailTeleporter in _entityManager.EntityQuery()) { mailTeleporter.Accumulator += (float) mailTeleporter.TeleportInterval.TotalSeconds - mailTeleporter.Accumulator; diff --git a/Content.Server/Mail/Systems/MailSystem.cs b/Content.Server/Mail/Systems/MailSystem.cs index e80febd2308..c779b8088bd 100644 --- a/Content.Server/Mail/Systems/MailSystem.cs +++ b/Content.Server/Mail/Systems/MailSystem.cs @@ -1,27 +1,21 @@ -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Threading; using Content.Server.Access.Systems; using Content.Server.Cargo.Components; using Content.Server.Cargo.Systems; using Content.Server.Chat.Systems; -using Content.Server.Chemistry.Containers.EntitySystems; using Content.Server.Damage.Components; -using Content.Server.Destructible; -using Content.Server.Destructible.Thresholds; using Content.Server.Destructible.Thresholds.Behaviors; using Content.Server.Destructible.Thresholds.Triggers; -using Content.Server.Item; -using Content.Server.Mail.Components; +using Content.Server.Destructible.Thresholds; +using Content.Server.Destructible; using Content.Server.Mind; using Content.Server.Popups; using Content.Server.Power.Components; using Content.Server.Spawners.EntitySystems; using Content.Server.Station.Systems; -using Content.Shared.Access; using Content.Shared.Access.Components; using Content.Shared.Access.Systems; -using Content.Shared.Chat; +using Content.Shared.Access; +using Content.Shared.Chemistry.EntitySystems; using Content.Shared.Damage; using Content.Shared.Destructible; using Content.Shared.Emag.Components; @@ -29,728 +23,765 @@ using Content.Shared.Examine; using Content.Shared.Fluids.Components; using Content.Shared.Hands.EntitySystems; -using Content.Shared.Interaction; using Content.Shared.Interaction.Events; -using Content.Shared.Mail; -using Content.Shared.Maps; +using Content.Shared.Interaction; using Content.Shared.Nutrition.Components; using Content.Shared.Nutrition.EntitySystems; using Content.Shared.PDA; using Content.Shared.Roles; using Content.Shared.Storage; using Content.Shared.Tag; -using Robust.Shared.Audio; using Robust.Shared.Audio.Systems; +using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.Prototypes; using Robust.Shared.Random; +using System.Diagnostics.CodeAnalysis; +using System.Linq; +using System.Threading; +using Content.Server.Mail.Components; +using Content.Shared.Chat; +using Content.Shared.Mail; using Timer = Robust.Shared.Timing.Timer; -namespace Content.Server.Mail.Systems; - -public sealed class MailSystem : EntitySystem +namespace Content.Server.Mail.Systems { - [Dependency] private readonly PopupSystem _popupSystem = default!; - [Dependency] private readonly AccessReaderSystem _accessSystem = default!; - [Dependency] private readonly SharedHandsSystem _handsSystem = default!; - [Dependency] private readonly IdCardSystem _idCardSystem = default!; - [Dependency] private readonly IRobustRandom _random = default!; - [Dependency] private readonly TagSystem _tagSystem = default!; - [Dependency] private readonly CargoSystem _cargoSystem = default!; - [Dependency] private readonly StationSystem _stationSystem = default!; - [Dependency] private readonly ChatSystem _chatSystem = default!; - [Dependency] private readonly OpenableSystem _openable = default!; - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly SharedContainerSystem _containerSystem = default!; - [Dependency] private readonly SolutionContainerSystem _solutionContainerSystem = default!; - [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; - [Dependency] private readonly SharedAudioSystem _audioSystem = default!; - [Dependency] private readonly DamageableSystem _damageableSystem = default!; - [Dependency] private readonly MindSystem _mindSystem = default!; - [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; - - // DeltaV - system that keeps track of mail and cargo stats - [Dependency] private readonly LogisticStatsSystem _logisticsStatsSystem = default!; - - private ISawmill _sawmill = default!; - - public override void Initialize() + public sealed class MailSystem : EntitySystem { - base.Initialize(); + [Dependency] private readonly AccessReaderSystem _accessSystem = default!; + [Dependency] private readonly CargoSystem _cargoSystem = default!; + [Dependency] private readonly ChatSystem _chatSystem = default!; + [Dependency] private readonly DamageableSystem _damageableSystem = default!; + [Dependency] private readonly EntityLookupSystem _lookup = default!; + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IRobustRandom _random = default!; + [Dependency] private readonly IdCardSystem _idCardSystem = default!; + [Dependency] private readonly MetaDataSystem _metaDataSystem = default!; + [Dependency] private readonly MindSystem _mindSystem = default!; + [Dependency] private readonly OpenableSystem _openable = default!; + [Dependency] private readonly PopupSystem _popupSystem = default!; + [Dependency] private readonly SharedAppearanceSystem _appearanceSystem = default!; + [Dependency] private readonly SharedAudioSystem _audioSystem = default!; + [Dependency] private readonly SharedContainerSystem _containerSystem = default!; + [Dependency] private readonly SharedHandsSystem _handsSystem = default!; + [Dependency] private readonly SharedSolutionContainerSystem _solution = default!; + [Dependency] private readonly StationSystem _stationSystem = default!; + [Dependency] private readonly TagSystem _tagSystem = default!; + + // DeltaV - system that keeps track of mail and cargo stats + [Dependency] private readonly LogisticStatsSystem _logisticsStatsSystem = default!; + + private ISawmill _sawmill = default!; + + public override void Initialize() + { + base.Initialize(); - _sawmill = Logger.GetSawmill("mail"); + _sawmill = Logger.GetSawmill("mail"); - SubscribeLocalEvent(OnSpawnPlayer, after: new[] { typeof(SpawnPointSystem) }); + SubscribeLocalEvent(OnSpawnPlayer, after: new[] { typeof(SpawnPointSystem) }); - SubscribeLocalEvent(OnRemove); - SubscribeLocalEvent(OnUseInHand); - SubscribeLocalEvent(OnAfterInteractUsing); - SubscribeLocalEvent(OnExamined); - SubscribeLocalEvent(OnDestruction); - SubscribeLocalEvent(OnDamage); - SubscribeLocalEvent(OnBreak); - SubscribeLocalEvent(OnMailEmagged); - } + SubscribeLocalEvent(OnRemove); + SubscribeLocalEvent(OnUseInHand); + SubscribeLocalEvent(OnAfterInteractUsing); + SubscribeLocalEvent(OnExamined); + SubscribeLocalEvent(OnDestruction); + SubscribeLocalEvent(OnDamage); + SubscribeLocalEvent(OnBreak); + SubscribeLocalEvent(OnMailEmagged); + } - public override void Update(float frameTime) - { - base.Update(frameTime); - foreach (var mailTeleporter in EntityQuery()) + public override void Update(float frameTime) { - if (TryComp(mailTeleporter.Owner, out var power) && !power.Powered) - continue; + base.Update(frameTime); - mailTeleporter.Accumulator += frameTime; - if (mailTeleporter.Accumulator < mailTeleporter.TeleportInterval.TotalSeconds) - continue; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var uid, out var mailTeleporter)) + { + if (TryComp(uid, out var power) && !power.Powered) + continue; - mailTeleporter.Accumulator -= (float) mailTeleporter.TeleportInterval.TotalSeconds; + mailTeleporter.Accumulator += frameTime; + + if (mailTeleporter.Accumulator < mailTeleporter.TeleportInterval.TotalSeconds) + continue; - SpawnMail(mailTeleporter.Owner, mailTeleporter); + mailTeleporter.Accumulator -= (float)mailTeleporter.TeleportInterval.TotalSeconds; + SpawnMail(uid, mailTeleporter); + } } - } - /// - /// Dynamically add the MailReceiver component to appropriate entities. - /// - private void OnSpawnPlayer(PlayerSpawningEvent args) - { - if (args.SpawnResult == null - || args.Job == null - || args.Station is not {} station - || !HasComp(station)) - return; + /// + /// Dynamically add the MailReceiver component to appropriate entities. + /// + private void OnSpawnPlayer(PlayerSpawningEvent args) + { + if (args.SpawnResult == null || + args.Job == null || + args.Station is not {} station) + { + return; + } - AddComp(args.SpawnResult.Value); - } + if (!HasComp(station)) + return; - private void OnRemove(EntityUid uid, MailComponent component, ComponentRemove args) - { - // Make sure the priority timer doesn't run. - if (component.PriorityCancelToken != null) - component.PriorityCancelToken.Cancel(); - } + AddComp(args.SpawnResult.Value); + } - /// - /// Try to open the mail. - /// - private void OnUseInHand(EntityUid uid, MailComponent component, UseInHandEvent args) - { - if (!component.IsEnabled) - return; - if (component.IsLocked) + private static void OnRemove(EntityUid uid, MailComponent component, ComponentRemove args) { - _popupSystem.PopupEntity(Loc.GetString("mail-locked"), uid, args.User); - return; + component.PriorityCancelToken?.Cancel(); } - OpenMail(uid, component, args.User); - } - /// - /// Handle logic similar between a normal mail unlock and an emag - /// frying out the lock. - /// - private void UnlockMail(EntityUid uid, MailComponent component) - { - component.IsLocked = false; - UpdateAntiTamperVisuals(uid, false); + /// + /// Try to open the mail. + /// + private void OnUseInHand(EntityUid uid, MailComponent component, UseInHandEvent args) + { + if (!component.IsEnabled) + return; + if (component.IsLocked) + { + _popupSystem.PopupEntity(Loc.GetString("mail-locked"), uid, args.User); + return; + } + OpenMail(uid, component, args.User); + } - if (component.IsPriority) + /// + /// Handle logic similar between a normal mail unlock and an emag + /// frying out the lock. + /// + private void UnlockMail(EntityUid uid, MailComponent component) { - // This is a successful delivery. Keep the failure timer from triggering. - if (component.PriorityCancelToken != null) - component.PriorityCancelToken.Cancel(); + component.IsLocked = false; + UpdateAntiTamperVisuals(uid, false); - // The priority tape is visually considered to be a part of the - // anti-tamper lock, so remove that too. - _appearanceSystem.SetData(uid, MailVisuals.IsPriority, false); + if (!component.IsPriority) + return; - // The examination code depends on this being false to not show - // the priority tape description anymore. - component.IsPriority = false; - } - } + // This is a successful delivery. Keep the failure timer from triggering. + component.PriorityCancelToken?.Cancel(); - /// - /// Check the ID against the mail's lock - /// - private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterInteractUsingEvent args) - { - if (!args.CanReach || !component.IsLocked || !TryComp(uid, out var access)) - return; + // The priority tape is visually considered to be a part of the + // anti-tamper lock, so remove that too. + _appearanceSystem.SetData(uid, MailVisuals.IsPriority, false); - IdCardComponent? idCard = null; // We need an ID card. - if (HasComp(args.Used)) // Can we find it in a PDA if the user is using that? - { - _idCardSystem.TryGetIdCard(args.Used, out var pdaID); - idCard = pdaID; + // The examination code depends on this being false to not show + // the priority tape description anymore. + component.IsPriority = false; } - if (HasComp(args.Used)) // Or are they using an id card directly? - idCard = Comp(args.Used); + /// + /// Check the ID against the mail's lock + /// + private void OnAfterInteractUsing(EntityUid uid, MailComponent component, AfterInteractUsingEvent args) + { + if (!args.CanReach || !component.IsLocked) + return; + + if (!HasComp(uid)) + return; - if (idCard == null) // Return if we still haven't found an id card. - return; + IdCardComponent? idCard = null; // We need an ID card. - if (!HasComp(uid)) - { - if (idCard.FullName != component.Recipient || idCard.JobTitle != component.RecipientJob) + if (HasComp(args.Used)) // Can we find it in a PDA if the user is using that? { - _popupSystem.PopupEntity(Loc.GetString("mail-recipient-mismatch"), uid, args.User); - return; + _idCardSystem.TryGetIdCard(args.Used, out var pdaId); + idCard = pdaId; } + if (idCard == null && HasComp(args.Used)) // If we still don't have an ID, check if the item itself is one + idCard = Comp(args.Used); - if (!_accessSystem.IsAllowed(uid, args.User)) - { - _popupSystem.PopupEntity(Loc.GetString("mail-invalid-access"), uid, args.User); + if (idCard == null) // Return if we still haven't found an id card. return; + + if (!HasComp(uid)) + { + if (idCard.FullName != component.Recipient || idCard.LocalizedJobTitle != component.RecipientJob) + { + _popupSystem.PopupEntity(Loc.GetString("mail-recipient-mismatch"), uid, args.User); + return; + } + + if (!_accessSystem.IsAllowed(uid, args.User)) + { + _popupSystem.PopupEntity(Loc.GetString("mail-invalid-access"), uid, args.User); + return; + } } - } - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => - { - _logisticsStatsSystem.AddOpenedMailEarnings(station, - logisticStats, - component.IsProfitable ? component.Bounty : 0); - }); - UnlockMail(uid, component); + // DeltaV - Add earnings to logistic stats + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => + { + _logisticsStatsSystem.AddOpenedMailEarnings(station, + logisticStats, + component.IsProfitable ? component.Bounty : 0); + }); - if (!component.IsProfitable) - { - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked"), uid, args.User); - return; - } + UnlockMail(uid, component); - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-reward", ("bounty", component.Bounty)), uid, args.User); + if (!component.IsProfitable) + { + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked"), uid, args.User); + return; + } - component.IsProfitable = false; + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-reward", ("bounty", component.Bounty)), uid, args.User); + component.IsProfitable = false; - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var station, out var account)) - { - if (_stationSystem.GetOwningStation(uid) != station) - continue; + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var account)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; - _cargoSystem.UpdateBankAccount(station, account, component.Bounty); + _cargoSystem.UpdateBankAccount(station, account, component.Bounty); + } } - } - private void OnExamined(EntityUid uid, MailComponent component, ExaminedEvent args) - { - MailEntityStrings mailEntityStrings = component.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; //Frontier: mail types stored per type (large mail) - if (!args.IsInDetailsRange) + private void OnExamined(EntityUid uid, MailComponent component, ExaminedEvent args) { - args.PushMarkup(Loc.GetString(mailEntityStrings.DescFar)); // Frontier: mail constants struct - return; - } + var mailEntityStrings = component.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; - args.PushMarkup(Loc.GetString(mailEntityStrings.DescClose, ("name", component.Recipient), ("job", component.RecipientJob))); // Frontier: mail constants struct + if (!args.IsInDetailsRange) + { + args.PushMarkup(Loc.GetString(mailEntityStrings.DescFar)); + return; + } - if (component.IsFragile) - args.PushMarkup(Loc.GetString("mail-desc-fragile")); + args.PushMarkup(Loc.GetString(mailEntityStrings.DescClose, + ("name", component.Recipient), + ("job", component.RecipientJob))); - if (component.IsPriority) - { - if (component.IsProfitable) - args.PushMarkup(Loc.GetString("mail-desc-priority")); - else - args.PushMarkup(Loc.GetString("mail-desc-priority-inactive")); + if (component.IsFragile) + args.PushMarkup(Loc.GetString("mail-desc-fragile")); + + if (component.IsPriority) + args.PushMarkup(Loc.GetString(component.IsProfitable ? "mail-desc-priority" : "mail-desc-priority-inactive")); } - } - /// - /// Penalize a station for a failed delivery. - /// - /// - /// This will mark a parcel as no longer being profitable, which will - /// prevent multiple failures on different conditions for the same - /// delivery.

- /// - /// The standard penalization is breaking the anti-tamper lock, - /// but this allows a delivery to fail for other reasons too - /// while having a generic function to handle different messages. - ///
- public void PenalizeStationFailedDelivery(EntityUid uid, MailComponent component, string localizationString) - { - if (!component.IsProfitable) - return; - _chatSystem.TrySendInGameICMessage(uid, Loc.GetString(localizationString, ("credits", component.Penalty)), InGameICChatType.Speak, false); - _audioSystem.PlayPvs(component.PenaltySound, uid); + /// + /// Penalize a station for a failed delivery. + /// + /// + /// This will mark a parcel as no longer being profitable, which will + /// prevent multiple failures on different conditions for the same + /// delivery. + /// + /// The standard penalization is breaking the anti-tamper lock, + /// but this allows a delivery to fail for other reasons too + /// while having a generic function to handle different messages. + /// + private void PenalizeStationFailedDelivery(EntityUid uid, MailComponent component, string localizationString) + { + if (!component.IsProfitable) + return; - component.IsProfitable = false; + _chatSystem.TrySendInGameICMessage(uid, Loc.GetString(localizationString, ("credits", component.Penalty)), InGameICChatType.Speak, false); + _audioSystem.PlayPvs(component.PenaltySound, uid); - if (component.IsPriority) - _appearanceSystem.SetData(uid, MailVisuals.IsPriorityInactive, true); + component.IsProfitable = false; - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var station, out var account)) - { - if (_stationSystem.GetOwningStation(uid) != station) - continue; + if (component.IsPriority) + _appearanceSystem.SetData(uid, MailVisuals.IsPriorityInactive, true); + + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var account)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; - _cargoSystem.UpdateBankAccount(station, account, component.Penalty); - return; + _cargoSystem.UpdateBankAccount(station, account, component.Penalty); + return; + } } - } - private void OnDestruction(EntityUid uid, MailComponent component, DestructionEventArgs args) - { - if (component.IsLocked) + private void OnDestruction(EntityUid uid, MailComponent component, DestructionEventArgs args) { - // DeltaV - Tampered mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => + if (component.IsLocked) { - _logisticsStatsSystem.AddTamperedMailLosses(station, - logisticStats, - component.IsProfitable ? component.Penalty : 0); - }); + // DeltaV - Tampered mail recorded to logistic stats + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => + { + _logisticsStatsSystem.AddTamperedMailLosses(station, + logisticStats, + component.IsProfitable ? component.Penalty : 0); + }); - PenalizeStationFailedDelivery(uid, component, "mail-penalty-lock"); - } + PenalizeStationFailedDelivery(uid, component, "mail-penalty-lock"); + } - if (component.IsEnabled) - OpenMail(uid, component); + if (component.IsEnabled) + OpenMail(uid, component); - UpdateAntiTamperVisuals(uid, false); - } + UpdateAntiTamperVisuals(uid, false); + } - private void OnDamage(EntityUid uid, MailComponent component, DamageChangedEvent args) - { - if (args.DamageDelta == null || !_containerSystem.TryGetContainer(uid, "contents", out var contents)) - return; + private void OnDamage(EntityUid uid, MailComponent component, DamageChangedEvent args) + { + if (args.DamageDelta == null) + return; - // Transfer damage to the contents. - // This should be a general-purpose feature for all containers in the future. - foreach (var entity in contents.ContainedEntities.ToArray()) - _damageableSystem.TryChangeDamage(entity, args.DamageDelta); - } + if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) + return; - private void OnBreak(EntityUid uid, MailComponent component, BreakageEventArgs args) - { - _appearanceSystem.SetData(uid, MailVisuals.IsBroken, true); + // Transfer damage to the contents. + // This should be a general-purpose feature for all containers in the future. + foreach (var entity in contents.ContainedEntities.ToArray()) + { + _damageableSystem.TryChangeDamage(entity, args.DamageDelta); + } + } - if (component.IsFragile) + private void OnBreak(EntityUid uid, MailComponent component, BreakageEventArgs args) { + _appearanceSystem.SetData(uid, MailVisuals.IsBroken, true); + + if (!component.IsFragile) + return; // DeltaV - Broken mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => - { - _logisticsStatsSystem.AddDamagedMailLosses(station, - logisticStats, - component.IsProfitable ? component.Penalty : 0); - }); + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => + { + _logisticsStatsSystem.AddDamagedMailLosses(station, + logisticStats, + component.IsProfitable ? component.Penalty : 0); + }); PenalizeStationFailedDelivery(uid, component, "mail-penalty-fragile"); } - } - - private void OnMailEmagged(EntityUid uid, MailComponent component, ref GotEmaggedEvent args) - { - if (!component.IsLocked) - return; - UnlockMail(uid, component); + private void OnMailEmagged(EntityUid uid, MailComponent component, ref GotEmaggedEvent args) + { + if (!component.IsLocked) + return; - _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-by-emag"), uid, args.UserUid); + UnlockMail(uid, component); - _audioSystem.PlayPvs(component.EmagSound, uid, AudioParams.Default.WithVolume(4)); - component.IsProfitable = false; - args.Handled = true; - } + _popupSystem.PopupEntity(Loc.GetString("mail-unlocked-by-emag"), uid, args.UserUid); - /// - /// Returns true if the given entity is considered fragile for delivery. - /// - public bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) - { - // It takes damage on falling. - if (HasComp(uid)) - return true; - - // It can be spilled easily and has something to spill. - if (HasComp(uid) - && TryComp(uid, out var openable) - && !_openable.IsClosed(uid, null, openable) - && _solutionContainerSystem.PercentFull(uid) > 0) - return true; - - // It might be made of non-reinforced glass. - if (TryComp(uid, out DamageableComponent? damageableComponent) - && damageableComponent.DamageModifierSetId == "Glass") - return true; - - if (!TryComp(uid, out DestructibleComponent? destructibleComp)) - return false; + _audioSystem.PlayPvs(component.EmagSound, uid, AudioParams.Default.WithVolume(4)); + component.IsProfitable = false; + args.Handled = true; + } - // Fallback: It breaks or is destroyed in less than a damage - // threshold dictated by the teleporter. - foreach (var threshold in destructibleComp.Thresholds) + /// + /// Returns true if the given entity is considered fragile for delivery. + /// + private bool IsEntityFragile(EntityUid uid, int fragileDamageThreshold) { - if (threshold.Trigger is not DamageTrigger trigger || trigger.Damage >= fragileDamageThreshold) - continue; + // It takes damage on falling. + if (HasComp(uid)) + return true; - foreach (var behavior in threshold.Behaviors) + // It can be spilled easily and has something to spill. + if (HasComp(uid) + && TryComp(uid, out var openable) + && !_openable.IsClosed(uid, null, openable) + && _solution.PercentFull(uid) > 0) + return true; + + // It might be made of non-reinforced glass. + if (TryComp(uid, out var damageableComponent) + && damageableComponent.DamageModifierSetId == "Glass") + return true; + + // Fallback: It breaks or is destroyed in less than a damage + // threshold dictated by the teleporter. + if (!TryComp(uid, out var destructibleComp)) + return false; + + foreach (var threshold in destructibleComp.Thresholds) { - if (behavior is not DoActsBehavior doActs) + if (threshold.Trigger is not DamageTrigger trigger || trigger.Damage >= fragileDamageThreshold) continue; - if (doActs.Acts.HasFlag(ThresholdActs.Breakage) || doActs.Acts.HasFlag(ThresholdActs.Destruction)) - return true; + foreach (var behavior in threshold.Behaviors) + { + if (behavior is not DoActsBehavior doActs) + continue; + + if (doActs.Acts.HasFlag(ThresholdActs.Breakage) || doActs.Acts.HasFlag(ThresholdActs.Destruction)) + return true; + } } - } - return false; - } + return false; + } - public bool TryMatchJobTitleToDepartment(string jobTitle, [NotNullWhen(true)] out string? jobDepartment) - { - foreach (var department in _prototypeManager.EnumeratePrototypes()) + private bool TryMatchJobTitleToDepartment(string jobTitle, [NotNullWhen(true)] out string? jobDepartment) { - foreach (var role in department.Roles) + jobDepartment = null; + + var departments = _prototypeManager.EnumeratePrototypes(); + + foreach (var department in departments) { - if (!_prototypeManager.TryIndex(role, out JobPrototype? jobPrototype) || jobPrototype.LocalizedName != jobTitle) + var foundJob = department.Roles + .Any(role => + _prototypeManager.TryIndex(role, out var jobPrototype) + && jobPrototype.LocalizedName == jobTitle); + + if (!foundJob) continue; jobDepartment = department.ID; return true; } + + return false; } - jobDepartment = null; - return false; - } + private bool TryMatchJobTitleToPrototype(string jobTitle, [NotNullWhen(true)] out JobPrototype? jobPrototype) + { + jobPrototype = _prototypeManager + .EnumeratePrototypes() + .FirstOrDefault(job => job.LocalizedName == jobTitle); - public bool TryMatchJobTitleToPrototype(string jobTitle, [NotNullWhen(true)] out JobPrototype? jobPrototype) - { - foreach (var job in _prototypeManager.EnumeratePrototypes()) + return jobPrototype != null; + } + + /// + /// Handle all the gritty details particular to a new mail entity. + /// + /// + /// This is separate mostly so the unit tests can get to it. + /// + public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailRecipient recipient) { - if (job.LocalizedName == jobTitle) + var mailComp = EnsureComp(uid); + + var container = _containerSystem.EnsureContainer(uid, "contents"); + foreach (var entity in EntitySpawnCollection.GetSpawns(mailComp.Contents, _random).Select(item => EntityManager.SpawnEntity(item, Transform(uid).Coordinates))) { - jobPrototype = job; - return true; + if (!_containerSystem.Insert(entity, container)) + { + _sawmill.Error($"Can't insert {ToPrettyString(entity)} into new mail delivery {ToPrettyString(uid)}! Deleting it."); + QueueDel(entity); + } + else if (!mailComp.IsFragile && IsEntityFragile(entity, component.FragileDamageThreshold)) + { + mailComp.IsFragile = true; + } } - } - jobPrototype = null; - return false; - } + if (_random.Prob(component.PriorityChance)) + mailComp.IsPriority = true; - /// - /// Handle all the gritty details particular to a new mail entity. - /// - /// - /// This is separate mostly so the unit tests can get to it. - /// - public void SetupMail(EntityUid uid, MailTeleporterComponent component, MailRecipient recipient) - { - var mailComp = EnsureComp(uid); + // This needs to override both the random probability and the + // entity prototype, so this is fine. + if (!recipient.MayReceivePriorityMail) + mailComp.IsPriority = false; - var container = _containerSystem.EnsureContainer(uid, "contents"); - foreach (var item in EntitySpawnCollection.GetSpawns(mailComp.Contents, _random)) - { - var entity = EntityManager.SpawnEntity(item, Transform(uid).Coordinates); - if (!_containerSystem.Insert(entity, container)) + mailComp.RecipientJob = recipient.Job; + mailComp.Recipient = recipient.Name; + + // Frontier: Large mail bonus + var mailEntityStrings = mailComp.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; + if (mailComp.IsLarge) { - _sawmill.Error($"Can't insert {ToPrettyString(entity)} into new mail delivery {ToPrettyString(uid)}! Deleting it."); - QueueDel(entity); + mailComp.Bounty += component.LargeBonus; + mailComp.Penalty += component.LargeMalus; } - else if (!mailComp.IsFragile && IsEntityFragile(entity, component.FragileDamageThreshold)) + // End Frontier + + if (mailComp.IsFragile) { - mailComp.IsFragile = true; + mailComp.Bounty += component.FragileBonus; + mailComp.Penalty += component.FragileMalus; + _appearanceSystem.SetData(uid, MailVisuals.IsFragile, true); } - } - mailComp.IsPriority = recipient.MayReceivePriorityMail && _random.Prob(component.PriorityChance); - mailComp.RecipientJob = recipient.Job; - mailComp.Recipient = recipient.Name; - - var mailEntityStrings = mailComp.IsLarge ? MailConstants.MailLarge : MailConstants.Mail; - if (mailComp.IsLarge) - { - mailComp.Bounty += component.LargeBonus; - mailComp.Penalty += component.LargeMalus; - } + if (mailComp.IsPriority) + { + mailComp.Bounty += component.PriorityBonus; + mailComp.Penalty += component.PriorityMalus; + _appearanceSystem.SetData(uid, MailVisuals.IsPriority, true); + + mailComp.PriorityCancelToken = new CancellationTokenSource(); + + Timer.Spawn((int) component.PriorityDuration.TotalMilliseconds, + () => + { + // DeltaV - Expired mail recorded to logistic stats + ExecuteForEachLogisticsStats(uid, + (station, logisticStats) => + { + _logisticsStatsSystem.AddExpiredMailLosses(station, + logisticStats, + mailComp.IsProfitable ? mailComp.Penalty : 0); + }); + + PenalizeStationFailedDelivery(uid, mailComp, "mail-penalty-expired"); + }, + mailComp.PriorityCancelToken.Token); + } - if (mailComp.IsFragile) - { - mailComp.Bounty += component.FragileBonus; - mailComp.Penalty += component.FragileMalus; - _appearanceSystem.SetData(uid, MailVisuals.IsFragile, true); - } + _appearanceSystem.SetData(uid, MailVisuals.JobIcon, recipient.JobIcon); - if (mailComp.IsPriority) - { - mailComp.Bounty += component.PriorityBonus; - mailComp.Penalty += component.PriorityMalus; - _appearanceSystem.SetData(uid, MailVisuals.IsPriority, true); - mailComp.PriorityCancelToken = new CancellationTokenSource(); + _metaDataSystem.SetEntityName(uid, + Loc.GetString(mailEntityStrings.NameAddressed, // Frontier: move constant to MailEntityString + ("recipient", recipient.Name))); - Timer.Spawn((int) component.PriorityDuration.TotalMilliseconds, () => + var accessReader = EnsureComp(uid); + foreach (var access in recipient.AccessTags) { - // DeltaV - Expired mail recorded to logistic stats - ExecuteForEachLogisticsStats(uid, (station, logisticStats) => - { - _logisticsStatsSystem.AddExpiredMailLosses(station, - logisticStats, - mailComp.IsProfitable ? mailComp.Penalty : 0); - }); - - PenalizeStationFailedDelivery(uid, mailComp, "mail-penalty-expired"); - }, mailComp.PriorityCancelToken.Token); + accessReader.AccessLists.Add([access]); + } } - _appearanceSystem.SetData(uid, MailVisuals.JobIcon, recipient.JobIcon); + /// + /// Return the parcels waiting for delivery. + /// + /// The mail teleporter to check. + private List GetUndeliveredParcels(EntityUid uid) + { + // An alternative solution would be to keep a list of the unopened + // parcels spawned by the teleporter and see if they're not carried + // by someone, but this is simple, and simple is good. + var coordinates = Transform(uid).Coordinates; + const LookupFlags lookupFlags = LookupFlags.Dynamic | LookupFlags.Sundries; - _metaDataSystem.SetEntityName(uid, Loc.GetString(mailEntityStrings.NameAddressed, // Frontier: move constant to MailEntityString - ("recipient", recipient.Name))); + var entitiesInTile = _lookup.GetEntitiesIntersecting(coordinates, lookupFlags); - var accessReader = EnsureComp(uid); - accessReader.AccessLists.Add(recipient.AccessTags); - } - - /// - /// Return the parcels waiting for delivery. - /// - /// The mail teleporter to check. - public List GetUndeliveredParcels(EntityUid uid) - { - // An alternative solution would be to keep a list of the unopened - // parcels spawned by the teleporter and see if they're not carried - // by someone, but this is simple, and simple is good. - List undeliveredParcels = new(); - foreach (var entityInTile in TurfHelpers.GetEntitiesInTile(Transform(uid).Coordinates, LookupFlags.Dynamic | LookupFlags.Sundries)) - { - if (HasComp(entityInTile)) - undeliveredParcels.Add(entityInTile); + return entitiesInTile.Where(HasComp).ToList(); } - return undeliveredParcels; - } - /// - /// Return how many parcels are waiting for delivery. - /// - /// The mail teleporter to check. - public uint GetUndeliveredParcelCount(EntityUid uid) - { - return (uint) GetUndeliveredParcels(uid).Count(); - } - - /// - /// Try to match a mail receiver to a mail teleporter. - /// - public bool TryGetMailTeleporterForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailTeleporterComponent? teleporterComponent) - { - foreach (var mailTeleporter in EntityQuery()) + /// + /// Return how many parcels are waiting for delivery. + /// + /// The mail teleporter to check. + private uint GetUndeliveredParcelCount(EntityUid uid) { - if (_stationSystem.GetOwningStation(receiver.Owner) != _stationSystem.GetOwningStation(mailTeleporter.Owner)) - continue; - - teleporterComponent = mailTeleporter; - return true; + return (uint)GetUndeliveredParcels(uid).Count; } - teleporterComponent = null; - return false; - } - - /// - /// Try to construct a recipient struct for a mail parcel based on a receiver. - /// - public bool TryGetMailRecipientForReceiver(MailReceiverComponent receiver, [NotNullWhen(true)] out MailRecipient? recipient) - { - // Because of the way this works, people are not considered - // candidates for mail if there is no valid PDA or ID in their slot - // or active hand. A better future solution might be checking the - // station records, possibly cross-referenced with the medical crew - // scanner to look for living recipients. TODO - - if (_idCardSystem.TryFindIdCard(receiver.Owner, out var idCard) - && TryComp(idCard.Owner, out var access) - && idCard.Comp.FullName != null - && idCard.Comp.JobTitle != null) + /// + /// Try to match a mail receiver to a mail teleporter. + /// + public bool TryGetMailTeleporterForReceiver(EntityUid receiverUid, [NotNullWhen(true)] out MailTeleporterComponent? teleporterComponent, [NotNullWhen(true)] out EntityUid? teleporterUid) { - var accessTags = access.Tags; - - var mayReceivePriorityMail = !(_mindSystem.GetMind(receiver.Owner) == null); + var query = EntityQueryEnumerator(); + var receiverStation = _stationSystem.GetOwningStation(receiverUid); - recipient = new MailRecipient(idCard.Comp.FullName, - idCard.Comp.JobTitle, - idCard.Comp.JobIcon, - accessTags, - mayReceivePriorityMail); + while (query.MoveNext(out var uid, out var mailTeleporter)) + { + var teleporterStation = _stationSystem.GetOwningStation(uid); + if (receiverStation != teleporterStation) + continue; + teleporterComponent = mailTeleporter; + teleporterUid = uid; + return true; + } - return true; + teleporterComponent = null; + teleporterUid = null; + return false; } - recipient = null; - return false; - } + /// + /// Try to construct a recipient struct for a mail parcel based on a receiver. + /// + public bool TryGetMailRecipientForReceiver(EntityUid receiverUid, [NotNullWhen(true)] out MailRecipient? recipient) + { + if (_idCardSystem.TryFindIdCard(receiverUid, out var idCard) + && TryComp(idCard.Owner, out var access) + && idCard.Comp.FullName != null) + { + var accessTags = access.Tags; + var mayReceivePriorityMail = !(_mindSystem.GetMind(receiverUid) == null); - /// - /// Get the list of valid mail recipients for a mail teleporter. - /// - public List GetMailRecipientCandidates(EntityUid uid) - { - List candidateList = new(); + recipient = new MailRecipient( + idCard.Comp.FullName, + idCard.Comp.LocalizedJobTitle ?? idCard.Comp.JobTitle ?? "Unknown", + idCard.Comp.JobIcon, + accessTags, + mayReceivePriorityMail); - foreach (var receiver in EntityQuery()) - { - if (_stationSystem.GetOwningStation(receiver.Owner) != _stationSystem.GetOwningStation(uid)) - continue; + return true; + } - if (TryGetMailRecipientForReceiver(receiver, out MailRecipient? recipient)) - candidateList.Add(recipient.Value); + recipient = null; + return false; } - return candidateList; - } - - /// - /// Handle the spawning of all the mail for a mail teleporter. - /// - public void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) - { - if (!Resolve(uid, ref component)) + /// + /// Get the list of valid mail recipients for a mail teleporter. + /// + private List GetMailRecipientCandidates(EntityUid uid) { - _sawmill.Error($"Tried to SpawnMail on {ToPrettyString(uid)} without a valid MailTeleporterComponent!"); - return; - } + var candidateList = new List(); + var query = EntityQueryEnumerator(); + var teleporterStation = _stationSystem.GetOwningStation(uid); - if (GetUndeliveredParcelCount(uid) >= component.MaximumUndeliveredParcels) - return; + while (query.MoveNext(out var receiverUid, out _)) + { + var receiverStation = _stationSystem.GetOwningStation(receiverUid); + if (receiverStation != teleporterStation) + continue; - var candidateList = GetMailRecipientCandidates(uid); + if (TryGetMailRecipientForReceiver(receiverUid, out var recipient)) + candidateList.Add(recipient.Value); + } - if (candidateList.Count <= 0) - { - _sawmill.Error("List of mail candidates was empty!"); - return; + return candidateList; } - if (!_prototypeManager.TryIndex(component.MailPool, out var pool)) + /// + /// Handle the spawning of all the mail for a mail teleporter. + /// + private void SpawnMail(EntityUid uid, MailTeleporterComponent? component = null) { - _sawmill.Error($"Can't index {ToPrettyString(uid)}'s MailPool {component.MailPool}!"); - return; - } + if (!Resolve(uid, ref component)) + { + _sawmill.Error($"Tried to SpawnMail on {ToPrettyString(uid)} without a valid MailTeleporterComponent!"); + return; + } - for (int i = 0; - i < component.MinimumDeliveriesPerTeleport + candidateList.Count / component.CandidatesPerDelivery; - i++) - { - var candidate = _random.Pick(candidateList); - var possibleParcels = new Dictionary(pool.Everyone); + if (GetUndeliveredParcelCount(uid) >= component.MaximumUndeliveredParcels) + return; - if (TryMatchJobTitleToPrototype(candidate.Job, out JobPrototype? jobPrototype) - && pool.Jobs.TryGetValue(jobPrototype.ID, out Dictionary? jobParcels)) + var candidateList = GetMailRecipientCandidates(uid); + + if (candidateList.Count <= 0) { - possibleParcels = possibleParcels.Union(jobParcels) - .GroupBy(g => g.Key) - .ToDictionary(pair => pair.Key, pair => pair.First().Value); + _sawmill.Error("List of mail candidates was empty!"); + return; } - if (TryMatchJobTitleToDepartment(candidate.Job, out string? department) - && pool.Departments.TryGetValue(department, out Dictionary? departmentParcels)) + if (!_prototypeManager.TryIndex(component.MailPool, out var pool)) { - possibleParcels = possibleParcels.Union(departmentParcels) - .GroupBy(g => g.Key) - .ToDictionary(pair => pair.Key, pair => pair.First().Value); + _sawmill.Error($"Can't index {ToPrettyString(uid)}'s MailPool {component.MailPool}!"); + return; } - var accumulated = 0f; - var randomPoint = _random.NextFloat(possibleParcels.Values.Sum()); - string? chosenParcel = null; - foreach (var (key, weight) in possibleParcels) + var deliveryCount = component.MinimumDeliveriesPerTeleport + candidateList.Count / component.CandidatesPerDelivery; + + for (var i = 0; i < deliveryCount; i++) { - accumulated += weight; - if (accumulated >= randomPoint) + var candidate = _random.Pick(candidateList); + var possibleParcels = new Dictionary(pool.Everyone); + + if (TryMatchJobTitleToPrototype(candidate.Job, out var jobPrototype) + && pool.Jobs.TryGetValue(jobPrototype.ID, out var jobParcels)) + { + possibleParcels = possibleParcels + .Concat(jobParcels) + .GroupBy(g => g.Key) + .ToDictionary(pair => pair.Key, pair => pair.First().Value); + } + + if (TryMatchJobTitleToDepartment(candidate.Job, out var department) + && pool.Departments.TryGetValue(department, out var departmentParcels)) + { + possibleParcels = possibleParcels + .Concat(departmentParcels) + .GroupBy(g => g.Key) + .ToDictionary(pair => pair.Key, pair => pair.First().Value); + } + + var accumulated = 0f; + var randomPoint = _random.NextFloat(possibleParcels.Values.Sum()); + string? chosenParcel = null; + + foreach (var parcel in possibleParcels) { - chosenParcel = key; + accumulated += parcel.Value; + if (!(accumulated >= randomPoint)) + continue; + chosenParcel = parcel.Key; break; } - } - if (chosenParcel == null) - { - _sawmill.Error($"MailSystem wasn't able to find a deliverable parcel for {candidate.Name}, {candidate.Job}!"); - return; + if (chosenParcel == null) + { + _sawmill.Error($"MailSystem wasn't able to find a deliverable parcel for {candidate.Name}, {candidate.Job}!"); + return; + } + + var coordinates = Transform(uid).Coordinates; + var mail = EntityManager.SpawnEntity(chosenParcel, coordinates); + SetupMail(mail, component, candidate); + + _tagSystem.AddTag(mail, "Mail"); // Frontier } - var mail = EntityManager.SpawnEntity(chosenParcel, Transform(uid).Coordinates); - SetupMail(mail, component, candidate); + if (_containerSystem.TryGetContainer(uid, "queued", out var queued)) + _containerSystem.EmptyContainer(queued); - _tagSystem.AddTag(mail, "Mail"); // Frontier + _audioSystem.PlayPvs(component.TeleportSound, uid); } - if (_containerSystem.TryGetContainer(uid, "queued", out var queued)) - _containerSystem.EmptyContainer(queued); + private void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? user = null) + { + if (!Resolve(uid, ref component)) + return; - _audioSystem.PlayPvs(component.TeleportSound, uid); - } + _audioSystem.PlayPvs(component.OpenSound, uid); - public void OpenMail(EntityUid uid, MailComponent? component = null, EntityUid? user = null) - { - if (!Resolve(uid, ref component)) - return; + if (user != null) + _handsSystem.TryDrop((EntityUid) user); - _audioSystem.PlayPvs(component.OpenSound, uid); + if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) + { + // I silenced this error because it fails non deterministically in tests and doesn't seem to effect anything else. + // _sawmill.Error($"Mail {ToPrettyString(uid)} was missing contents container!"); + return; + } - if (user != null) - _handsSystem.TryDrop((EntityUid) user); + foreach (var entity in contents.ContainedEntities.ToArray()) + { + _handsSystem.PickupOrDrop(user, entity); + } - if (!_containerSystem.TryGetContainer(uid, "contents", out var contents)) - { - // I silenced this error because it fails non deterministically in tests and doesn't seem to effect anything else. - // _sawmill.Error($"Mail {ToPrettyString(uid)} was missing contents container!"); - return; + _tagSystem.AddTag(uid, "Trash"); + _tagSystem.AddTag(uid, "Recyclable"); + component.IsEnabled = false; + UpdateMailTrashState(uid, true); } - foreach (var entity in contents.ContainedEntities.ToArray()) + private void UpdateAntiTamperVisuals(EntityUid uid, bool isLocked) { - _handsSystem.PickupOrDrop(user, entity); + _appearanceSystem.SetData(uid, MailVisuals.IsLocked, isLocked); } - _tagSystem.AddTag(uid, "Trash"); - _tagSystem.AddTag(uid, "Recyclable"); - component.IsEnabled = false; - UpdateMailTrashState(uid, true); - } + private void UpdateMailTrashState(EntityUid uid, bool isTrash) + { + _appearanceSystem.SetData(uid, MailVisuals.IsTrash, isTrash); + } - private void UpdateAntiTamperVisuals(EntityUid uid, bool isLocked) - { - _appearanceSystem.SetData(uid, MailVisuals.IsLocked, isLocked); - } + // DeltaV - Helper function that executes for each StationLogisticsStatsComponent + // For updating MailMetrics stats + private void ExecuteForEachLogisticsStats(EntityUid uid, + Action action) + { - private void UpdateMailTrashState(EntityUid uid, bool isTrash) - { - _appearanceSystem.SetData(uid, MailVisuals.IsTrash, isTrash); + var query = EntityQueryEnumerator(); + while (query.MoveNext(out var station, out var logisticStats)) + { + if (_stationSystem.GetOwningStation(uid) != station) + continue; + action(station, logisticStats); + } + } } - // DeltaV - Helper function that executes for each StationLogisticsStatsComponent - // For updating MailMetrics stats - private void ExecuteForEachLogisticsStats(EntityUid uid, - Action action) + public struct MailRecipient( + string name, + string job, + string jobIcon, + HashSet> accessTags, + bool mayReceivePriorityMail) { - - var query = EntityQueryEnumerator(); - while (query.MoveNext(out var station, out var logisticStats)) - { - if (_stationSystem.GetOwningStation(uid) != station) - continue; - action(station, logisticStats); - } + public readonly string Name = name; + public readonly string Job = job; + public readonly string JobIcon = jobIcon; + public readonly HashSet> AccessTags = accessTags; + public readonly bool MayReceivePriorityMail = mayReceivePriorityMail; } } - -public struct MailRecipient( - string name, - string job, - string jobIcon, - HashSet> accessTags, - bool mayReceivePriorityMail) -{ - public string Name = name; - public string Job = job; - public string JobIcon = jobIcon; - public HashSet> AccessTags = accessTags; - public bool MayReceivePriorityMail = mayReceivePriorityMail; -} From ad2918a33a588fa64ef9699b456be9f60cc08c3d Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Sun, 12 Jan 2025 23:20:05 -0400 Subject: [PATCH 04/33] As a stop-gap, CPR will not loop at all. --- Content.Server/Medical/CPR/CPRSystem.cs | 2 +- .../EntitySystems/ContainerSpawnPointSystem.cs | 17 ++++++++++------- .../StationEvents/Events/RandomSentienceRule.cs | 15 ++++++++++----- .../StationAi/SharedStationAiSystem.Held.cs | 2 +- .../Silicons/StationAi/SharedStationAiSystem.cs | 3 +++ .../Structures/Machines/Computers/computers.yml | 5 ----- .../Structures/Wallmounts/air_alarm.yml | 1 - 7 files changed, 25 insertions(+), 20 deletions(-) diff --git a/Content.Server/Medical/CPR/CPRSystem.cs b/Content.Server/Medical/CPR/CPRSystem.cs index fe4521a15de..2e42a5a3f6c 100644 --- a/Content.Server/Medical/CPR/CPRSystem.cs +++ b/Content.Server/Medical/CPR/CPRSystem.cs @@ -87,7 +87,7 @@ private void StartCPR(Entity performer, EntityUid target) _doAfterSystem.TryStartDoAfter(doAfterArgs); - var playingStream = _audio.PlayPvs(performer.Comp.CPRSound, performer, AudioParams.Default.WithLoop(true)); + var playingStream = _audio.PlayPvs(performer.Comp.CPRSound, performer, AudioParams.Default); if (!playingStream.HasValue) return; diff --git a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs index 6b0033124e5..bc37d93dec5 100644 --- a/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs +++ b/Content.Server/Spawners/EntitySystems/ContainerSpawnPointSystem.cs @@ -22,7 +22,7 @@ public sealed class ContainerSpawnPointSystem : EntitySystem public override void Initialize() { base.Initialize(); - SubscribeLocalEvent(HandlePlayerSpawning, before: new []{ typeof(SpawnPointSystem) }); + SubscribeLocalEvent(HandlePlayerSpawning, before: [ typeof(SpawnPointSystem) ]); } public void HandlePlayerSpawning(PlayerSpawningEvent args) @@ -30,9 +30,14 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) if (args.SpawnResult != null) return; + JobPrototype? jobProto = null; + // If it's just a spawn pref check if it's for cryo (silly). if (args.HumanoidCharacterProfile?.SpawnPriority != SpawnPriorityPreference.Cryosleep && - (!_proto.TryIndex(args.Job?.Prototype, out var jobProto) || jobProto.JobEntity == null)) + (!_proto.TryIndex(args.Job?.Prototype, out jobProto) || jobProto.JobEntity == null)) + return; + + if (jobProto == null && !_proto.TryIndex(args.Job?.Prototype, out jobProto)) return; var query = EntityQueryEnumerator(); @@ -63,17 +68,15 @@ public void HandlePlayerSpawning(PlayerSpawningEvent args) continue; } - if (_gameTicker.RunLevel == GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.LateJoin) - { + if (_gameTicker.RunLevel == GameRunLevel.InRound + && spawnPoint.SpawnType == SpawnPointType.LateJoin + && jobProto.JobEntity == null) possibleContainers.Add((uid, spawnPoint, container, xform)); - } if (_gameTicker.RunLevel != GameRunLevel.InRound && spawnPoint.SpawnType == SpawnPointType.Job && (args.Job == null || spawnPoint.Job == args.Job.Prototype)) - { possibleContainers.Add((uid, spawnPoint, container, xform)); - } } if (possibleContainers.Count == 0) diff --git a/Content.Server/StationEvents/Events/RandomSentienceRule.cs b/Content.Server/StationEvents/Events/RandomSentienceRule.cs index 0c8b811b8ce..4ee5c699539 100644 --- a/Content.Server/StationEvents/Events/RandomSentienceRule.cs +++ b/Content.Server/StationEvents/Events/RandomSentienceRule.cs @@ -64,9 +64,14 @@ protected override void Started(EntityUid uid, RandomSentienceRuleComponent comp return; var groupList = groups.ToList(); - var kind1 = groupList.Count > 0 ? groupList[0] : "???"; - var kind2 = groupList.Count > 1 ? groupList[1] : "???"; - var kind3 = groupList.Count > 2 ? groupList[2] : "???"; + var kind1 = groupList.Count > 0 ? Loc.GetString(groupList[0]) : "???"; + var kind2 = groupList.Count > 1 ? Loc.GetString(groupList[1]) : "???"; + var kind3 = groupList.Count > 2 ? Loc.GetString(groupList[2]) : "???"; + var data = _random.Pick(_prototype.Index("RandomSentienceEventData")); + var strength = _random.Pick(_prototype.Index("RandomSentienceEventStrength")); + + data = Loc.GetString(data); + strength = Loc.GetString(strength); ChatSystem.DispatchStationAnnouncement( station.Value, @@ -76,8 +81,8 @@ protected override void Started(EntityUid uid, RandomSentienceRuleComponent comp ("kind2", kind2), ("kind3", kind3), ("amount", groupList.Count), - ("data", _random.Pick(_prototype.Index("RandomSentienceEventData"))), - ("strength", _random.Pick(_prototype.Index("RandomSentienceEventStrength")))) + ("data", data), + ("strength", strength)) ); } } diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs index 33afb5673f5..a8ba901450e 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.Held.cs @@ -72,7 +72,7 @@ private bool TryGetHeld(Entity entity, out EntityUid he private bool TryGetCore(EntityUid ent, out Entity core) { - if (!_containers.TryGetContainingContainer(ent, out var container) || + if (!_containers.TryGetContainingContainer((ent, null, null), out var container) || container.ID != StationAiCoreComponent.Container || !TryComp(container.Owner, out StationAiCoreComponent? coreComp) || coreComp.RemoteEntity == null) diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index baef62c3da9..b5c8fcb26f9 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -112,6 +112,9 @@ private void OnCoreVerbs(Entity ent, ref GetVerbsEvent { + if (!_containers.TryGetContainer(ent, StationAiCoreComponent.Container, out _)) + return; + var brain = SpawnInContainerOrDrop(DefaultAi, ent.Owner, StationAiCoreComponent.Container); _mind.ControlMob(user, brain); }, diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml index 8829a9025f1..639fa42d10c 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/computers.yml @@ -41,7 +41,6 @@ interfaces: enum.AtmosAlertsComputerUiKey.Key: type: AtmosAlertsComputerBoundUserInterface - - type: StationAiWhitelist - type: entity parent: BaseComputer @@ -301,7 +300,6 @@ interfaces: enum.PowerMonitoringConsoleUiKey.Key: type: PowerMonitoringConsoleBoundUserInterface - - type: StationAiWhitelist - type: entity parent: BaseComputer @@ -691,7 +689,6 @@ radius: 1.5 energy: 1.6 color: "#e6e227" - - type: StationAiWhitelist - type: entity parent: BaseComputer @@ -808,7 +805,6 @@ - type: GuideHelp guides: - Cargo - - type: StationAiWhitelist - type: entity id: ComputerCargoBounty @@ -1050,7 +1046,6 @@ - type: GuideHelp guides: - Cargo - - type: StationAiWhitelist - type: entity parent: BaseComputer diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml index cff9bed3d0c..fd2f76aa528 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/air_alarm.yml @@ -112,7 +112,6 @@ collection: MetalGlassBreak params: volume: -4 - - type: StationAiWhitelist - type: entity id: AirAlarmAssembly From 47d6695a515c2bf2227f35ccfb26bd4bb7ff57f7 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Fri, 23 Aug 2024 03:03:05 +1000 Subject: [PATCH 05/33] Predict IntrinsicUI (#31310) --- .../UserInterface/IntrinsicUIComponent.cs | 12 ++++++------ .../UserInterface/IntrinsicUISystem.cs | 17 +++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) rename {Content.Server => Content.Shared}/UserInterface/IntrinsicUIComponent.cs (59%) rename {Content.Server => Content.Shared}/UserInterface/IntrinsicUISystem.cs (73%) diff --git a/Content.Server/UserInterface/IntrinsicUIComponent.cs b/Content.Shared/UserInterface/IntrinsicUIComponent.cs similarity index 59% rename from Content.Server/UserInterface/IntrinsicUIComponent.cs rename to Content.Shared/UserInterface/IntrinsicUIComponent.cs index 83936edc8c4..ede0fd9c342 100644 --- a/Content.Server/UserInterface/IntrinsicUIComponent.cs +++ b/Content.Shared/UserInterface/IntrinsicUIComponent.cs @@ -1,9 +1,9 @@ -using Robust.Shared.Prototypes; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; +using Robust.Shared.GameStates; +using Robust.Shared.Prototypes; -namespace Content.Server.UserInterface; +namespace Content.Shared.UserInterface; -[RegisterComponent] +[RegisterComponent, NetworkedComponent] public sealed partial class IntrinsicUIComponent : Component { /// @@ -15,8 +15,8 @@ public sealed partial class IntrinsicUIComponent : Component [DataDefinition] public sealed partial class IntrinsicUIEntry { - [DataField("toggleAction", customTypeSerializer: typeof(PrototypeIdSerializer), required: true)] - public string? ToggleAction; + [DataField("toggleAction", required: true)] + public EntProtoId? ToggleAction; /// /// The action used for this BUI. diff --git a/Content.Server/UserInterface/IntrinsicUISystem.cs b/Content.Shared/UserInterface/IntrinsicUISystem.cs similarity index 73% rename from Content.Server/UserInterface/IntrinsicUISystem.cs rename to Content.Shared/UserInterface/IntrinsicUISystem.cs index 0f7261865dc..2d8c5d14801 100644 --- a/Content.Server/UserInterface/IntrinsicUISystem.cs +++ b/Content.Shared/UserInterface/IntrinsicUISystem.cs @@ -1,14 +1,11 @@ -using Content.Server.Actions; -using Content.Shared.UserInterface; -using Robust.Server.GameObjects; -using Robust.Shared.Player; +using Content.Shared.Actions; -namespace Content.Server.UserInterface; +namespace Content.Shared.UserInterface; public sealed class IntrinsicUISystem : EntitySystem { - [Dependency] private readonly ActionsSystem _actionsSystem = default!; - [Dependency] private readonly UserInterfaceSystem _uiSystem = default!; + [Dependency] private readonly SharedActionsSystem _actionsSystem = default!; + [Dependency] private readonly SharedUserInterfaceSystem _uiSystem = default!; public override void Initialize() { @@ -32,9 +29,9 @@ private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitE } } - public bool InteractUI(EntityUid uid, Enum key, IntrinsicUIComponent? iui = null, ActorComponent? actor = null) + public bool InteractUI(EntityUid uid, Enum key, IntrinsicUIComponent? iui = null) { - if (!Resolve(uid, ref iui, ref actor)) + if (!Resolve(uid, ref iui)) return false; var attempt = new IntrinsicUIOpenAttemptEvent(uid, key); @@ -42,7 +39,7 @@ public bool InteractUI(EntityUid uid, Enum key, IntrinsicUIComponent? iui = null if (attempt.Cancelled) return false; - return _uiSystem.TryToggleUi(uid, key, actor.PlayerSession); + return _uiSystem.TryToggleUi(uid, key, uid); } } From 59d76eca93db86f73a9ed96768ffa1d5b5a4294c Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 22 Oct 2024 15:49:39 +0200 Subject: [PATCH 06/33] Adding intellicard functionality. (#32347) * init * im so confused * clean * sprite update * :| * further attempts * be blessed for it works * Very prestigious pAI * cleaning up * Intellicard in RD locker * PAIn't * .Clear()n't * .Clear()n't for real this time * Cleaning up * Whoopsie Daisy --- .../StationAi/SharedStationAiSystem.cs | 8 +++++ .../UserInterface/IntrinsicUISystem.cs | 10 ++++++ .../Catalog/Fills/Lockers/heads.yml | 1 + .../Entities/Mobs/Player/silicon.yml | 29 ++++++++++++++++-- .../Objects/Devices/ai_card.rsi/base.png | Bin 4432 -> 6812 bytes .../Objects/Devices/ai_card.rsi/empty.png | Bin 4292 -> 6697 bytes .../Objects/Devices/ai_card.rsi/full.png | Bin 5121 -> 7638 bytes 7 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs index b5c8fcb26f9..18979197420 100644 --- a/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs +++ b/Content.Shared/Silicons/StationAi/SharedStationAiSystem.cs @@ -288,6 +288,8 @@ private void OnAiMapInit(Entity ent, ref MapInitEvent ar private bool SetupEye(Entity ent) { + if (_net.IsClient) + return false; if (ent.Comp.RemoteEntity != null) return false; @@ -302,8 +304,11 @@ private bool SetupEye(Entity ent) private void ClearEye(Entity ent) { + if (_net.IsClient) + return; QueueDel(ent.Comp.RemoteEntity); ent.Comp.RemoteEntity = null; + Dirty(ent); } private void AttachEye(Entity ent) @@ -333,6 +338,8 @@ private void OnAiInsert(Entity ent, ref EntInsertedIntoC if (_timing.ApplyingState) return; + SetupEye(ent); + // Just so text and the likes works properly _metadata.SetEntityName(ent.Owner, MetaData(args.Entity).EntityName); @@ -354,6 +361,7 @@ private void OnAiRemove(Entity ent, ref EntRemovedFromCo { _eye.SetTarget(args.Entity, null, eyeComp); } + ClearEye(ent); } private void UpdateAppearance(Entity entity) diff --git a/Content.Shared/UserInterface/IntrinsicUISystem.cs b/Content.Shared/UserInterface/IntrinsicUISystem.cs index 2d8c5d14801..b16492b8355 100644 --- a/Content.Shared/UserInterface/IntrinsicUISystem.cs +++ b/Content.Shared/UserInterface/IntrinsicUISystem.cs @@ -10,6 +10,7 @@ public sealed class IntrinsicUISystem : EntitySystem public override void Initialize() { SubscribeLocalEvent(InitActions); + SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnActionToggle); } @@ -21,6 +22,15 @@ private void OnActionToggle(EntityUid uid, IntrinsicUIComponent component, Toggl args.Handled = InteractUI(uid, args.Key, component); } + private void OnShutdown(EntityUid uid, IntrinsicUIComponent component, ref ComponentShutdown args) + { + foreach (var actionEntry in component.UIs.Values) + { + var actionId = actionEntry.ToggleActionEntity; + _actionsSystem.RemoveAction(uid, actionId); + } + } + private void InitActions(EntityUid uid, IntrinsicUIComponent component, MapInitEvent args) { foreach (var entry in component.UIs.Values) diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 664da15f653..e57c4166319 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -239,6 +239,7 @@ - id: RDIDCard # Delta-V - id: ClothingHeadsetAltScience - id: EncryptionKeyBinary + - id: Intellicard - id: LunchboxCommandFilledRandom # Delta-V Lunchboxes! prob: 0.3 diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 6685e475206..e4910bdb5eb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -98,6 +98,27 @@ layer: - GhostImpassable +- type: entity + id: AiHeldIntellicard + description: Components added / removed from an entity that gets inserted into an Intellicard. + categories: [ HideSpawnMenu ] + components: + - type: IntrinsicRadioReceiver + - type: IntrinsicRadioTransmitter + channels: + - Binary + - type: ActiveRadio + channels: + - Binary + - Common + - type: ActionGrant + actions: + - ActionAIViewLaws + - type: UserInterface + interfaces: + enum.SiliconLawsUiKey.Key: + type: SiliconLawBoundUserInterface + # Ai - type: entity id: AiHolder @@ -108,6 +129,8 @@ - type: StationAiHolder slot: name: station-ai-mind-slot + locked: false + disableEject: true whitelist: tags: - StationAi @@ -160,13 +183,16 @@ # Items - type: entity id: Intellicard - name: Intellicard + name: intellicard description: A storage device for AIs. parent: - BaseItem - AiHolder suffix: Empty components: + - type: ContainerComp + proto: AiHeldIntellicard + container: station_ai_mind_slot - type: Sprite sprite: Objects/Devices/ai_card.rsi layers: @@ -280,7 +306,6 @@ enum.SiliconLawsUiKey.Key: type: SiliconLawBoundUserInterface - type: ComplexInteraction - - type: DoorRemote - type: Actions - type: Access groups: diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/base.png b/Resources/Textures/Objects/Devices/ai_card.rsi/base.png index 244183c078c3d580cda31d0431ced9150a7cf7c9..535f5a48e99f6bf7fb5e384259378c9f21082c70 100644 GIT binary patch literal 6812 zcmd5>TWB3s6rH5Tq=z(yHmIo8+XpIYW$rmM=gd^lv`w*5h_)0-MKSj=LnBtB4chj{ zv`wXAMJ*}?MbwIdA3>@g1!-+JHaW-8aVBsbd|$x$)zh53M&vr#3Rh-^C9OL_oYK4t`e?O6t+`D3Ix`o z2$|!loPwb%RL%)pN8$}YAz;M02t{D$L_r~ls96}wA~}<&Eb7aG43wZbMjpThs)>il zMH7?DHIotyAo7}%7bOsULZZQuFbAQc+vde+rzna1a$2bQsi9jIF2mi5zP@5 zk15oLvPF)EJXHGPfdX3|XkUtls0g2aXi*7;C>qX-kpsMiLM)ZTWL9~+NP=iS;*n+o z8i*|-$EB}qNb?bd0L)^h2n&Zx7mP?VQUW2-&j=zJ;?j}y((JYCpcGvO2?&@hLRf4> zVsy+9=*sZms85|VJd2`Jj$eXLjHwVN*Rw^c4r$A;>VbaqE$o)(v*aftGP&VoHED2}HhwHnjRir$W1x4FI zCp_YWGscI45C!6z&X`Va&h;8Gj%~GDX8LtWq#xB5DNOh#xkC&!Q>uDw^XSZQi7hii zsP{J(7Xh!UO8Ka43b|gKK2^&PRRCch=~K1jKQ0J(M+RLDL=5PJK-|dx)B_xqO(%G1 zm+5^L*EqP*4s&ph*$@XYNHm>E$aAtQsd(s&V9_A~1Jpu#GQDwO=!*bi3fM@=X4PX! z3~?USYcSn0LUY#>JR?FC8Njx1OG+1JI$ z6mtqv^zyK&Vv%kZCYo@A3lGCdTA;c^R3$YU{;} z8WCeUm^;!EEpvxa5~&6lC1MhY=v@O4eNw3KshU1n>5rjG;agA0M8F;#KlKRyjndlN zvub1ip2EQOEz1_$8@^wD{>*>g_}JLDgV+4laV%K>Z1d>R32TX5^3EH_KcBeo#KBf? z@$uD%#xt+HzG7$7fdlU~KfnE^kgI{$1a)&7FtmceQTnvpR2SdFbhGd*6|e?|(cgESesO%HzprPw^H*!{p2Lgo zI#lS+EWd8ymY$DVZryc9_t8x2$cMYzj*PAu8SQ$td0=p-_5R~+BNONEwT^FNOTX^O zsH+D4z0lwH?!4RQH!Zc!uNld=?tAIj=C<~~J2PW^|Jm-1_Q_9gTiE%;;@$1v{BU#k vC%x9_kE3sXvA3=3#KD2Cea)Sg_4A@9m#%wY#e4YIgVnpXuV-xaz^?xR&po7i literal 4432 zcmeHKdr%X19$$12&o1Gq!oMKz-D(7_8{4~yO6+) z8pPgtR!=;9jcu{E_-Ko?w#*HsqoUxz**PD0^`>XVO3|VRC)2ZMTfB0=4ezk_YavbVi1Qt58|_5Zu};9R*?@>4$wh z=VD74Sgi0dFcV;15ES^k$9^NK4U2sIC?>J$Kw?}6oBvjV_}FQFqkh1eDs#V9_5SI? z%X|X77b&~yI$332v$G{aUX}Xu^rdU<&(#&)zZ2cLx?i95HhSwpnQ?B<{ii>v-P4_4 z@a|UYcmFt$ySe?%H?Lku+O=}m!HiaIpDI>+?T+z$%eklGkI#MaT3Pw*vmdTJb2{tm zEeDG!+UMF|9PHS0{-&&KRpa;3niTilO^(9Ov!;RMU;J|E`s;>j`8o&+t7gq+yVYzS z%Liof>ZU!W>^6JMOKbCwW-d?chkI&{5T731Vc5Ss_FM+LqUnCoS6ykvT{ZR126^M0 zh%K@2%u`%yA)4h|KcBz-gX-EhUfvrh%qw2-MfJx+h6k^;ZF&@z@zEuR0EeA8#L)TH zQ}zu{$=;1b`W+jb$LcPjcW-}q=AXB}82a^2cg3wCA!@~v+OX6;hI3*Y(hb+$Y!WXG zwJ&&KUrdkCv#dIP@#fx^{;v|g+|f4c^3J$#`;8m76*N3N^;t*5Z%(vp+H*5MNiIxo zZt!*YG+ckB;l?vt$P@J^dz*7~e~8&%vnm{+wYlcRSZ7m7{lU(zimtY_yWePf|M=(U zWl0^g;_Zv@&4X#*n11zvG0|U}VJ#ZG@Tat;!B)i;_S1hqI_2@_K*Ji}(XSuxO2Hmk zE8jVuxjQ(R;@f!hTCeGIJ|b>Y*Ag?oIBlO@A$#C{Xv-|>jg5Oz`0~1`S5A2WY!;7PMD^Z4E(j9tBBrPDT;%_(0!5 zkTEUbBdHQbgq@6=^_q|eADu;DmNp^lbT-W9Gc(0(b|uf`SLQgV$`T5vk+f8~F+czS z4Hgh}!YZY1rhGquXay61FhmAb#BJwP& zMj^nP2`LsuAE8wG{eFdCqu_YAQibEV5>qSHY7|(YLWNf(1E^O>k|0JfEQ~<$tWRV) zFDzk_POeNeAqddJWAS->HrqJ7R~Tgh@SzNlKBY>5DLo$LWDh~iEC(Q?0sWwd-~dyq z%wq(ujHj5)a>gqrO@^SUaerSKUm8k>rj$%6;{m1uSXDJ;$tPZl5c@}gfSvol?35o_#E=)sfQ*bBhR2lTB76gYnDT+c} zIHlF-7_G+1=t595MXcg@4++Z2dPp~;^m*MOg+w@!Znv5cwE~-v*h@*#1suQ(uwI(; z3lk~_>tXUmQsPskS8Mbbj_Y-}TBXPF38NPnUI4u)p{g*2MjO&dg&{yXfLc=OQ~(f? zgKP*h&yXU=J2Kp=(+UOv`wtyJqN`76a2Vp6Rat8(s2= zk156r{sH;Hr_w7gHx7W$tZ?V*EDJO&{a!zPycS5F@MW(TAZT8@bcXF)F)slKBSfn$ zGomkYe&oWW+SN}4f#|W-lI|#Iql)6@Bqd^be_1?mW!P}1vC&muC-bd$yb2vrnx5Tm z>vYkBEB|wOurDkp>%E%NijA}0UV=djujRKYcFW$g$24sVy65y{yy z?Bi$Xg@=otJodf2p!`ts(KWN5?^{;$v*FxhmU~N5XJ^lmJw2;ZUenyMaJU^0eij|P z*GAz3=HT+&XW7WP#qn`bRac|q g&)vN>7n8?<1IlWm!V?ox>i`dsH8aQ3m{GL#zrOQGZU6uP diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png b/Resources/Textures/Objects/Devices/ai_card.rsi/empty.png index 7e61f368de294ae506cdab73e818f0f594bb260c..a62b9263d52ce1637458bc3f14dc63bc12852b59 100644 GIT binary patch literal 6697 zcmd5=O=ule6rMC%?Ij69YYDZB7jdDunYs7Qy)!OKYLl8QEVa6@;v)0j%wV8u(3G|+ zNFoSDshb8tcP%bN2rhy<5kcurOa&L}##Je}&@QCA_B(fG-pqaPCGRI~^CrAI_wRh? z`_4J{2Ik_)6EBRjL(FlU@%g!#Q+U_#n|^dJ+V?M=UB_$R(%k8H9cSVv`i-nTJMo0$ zjQqAd`|9$k=v-~-oww7)Gf8dv!ctO8&M&48qn6d^;T~tw*MSO^a`DJehCD(ipb;MG zyRPR-)0zP{tr=VMjP{s^!$6=%KRkhf21+sSW%Jl&9xp=AM>ij{pph@s?S(M+zyr(^ zcmb3<5*}uVUT)9Ayd%gn7QB38l*?0LpsUjA`Top3TH1#nqoy9`(?k_d>sV?;FZSU_ zaGnVGLd(q`W`q=xaG414;sT+-2A`&cMk_?2AHlGs6%sR_F1r=}yoQ{=)-k<{OUn(1 zQJbZ=#uf8j6{u88{DkQdK>=z&6oKSK8Zl@lj~uaUn~Q%r&cXjXdO82*lEcs#A3O*= zCK@8u2&M9rP<7>N$z8>juQUoP5i#PC*6a0@bIgZI(u}W#FJs}#7%33giy~w)(2<6r zFLWdmUn;x-CB|_#>fNMKsE6YQMS43*1h}JV6RVJW;*dlUVh1!L* z5J5=5EN6XqC(PfZ;fTh6hJ; z>r~-c7M)i76236%1`nXDKC0;5z+vHO*M??!T#8sklIkKvwIUPPo(GrQKyXuP5e5;- z5H;s1&6F=2WTrG017o02SKFB26wvWO+2s3CE1a_;oTU#x^iiuwd8!(kj)O^f#z_RI zCx}9U__i}cVy5vK*WG<2*i#2w_o6>Y;(w(r_7wQvKZ)u zN!(*D#6b)aO?MLVT%1ZOAG#x0c1cLOlXP{ldT?PFiUb*J;2;%;)yx$!#C_DS!B+d( zRvxO}Tlt!`7Wr&D{T5iqd#SibdD>)@U8S^O%-b$|JAT;-t+x50txgTre=tC0a=Wv9 zFpRqMD0j3l>PJioLcJCsd$FIGYRX#)cU&JQZKH6H0y?3{QZL_G3Ixy;0OciEmvo@HR;gnWt>5w&>a<8M^ z11iPXTz8L=&7&Okz-TKmB?$F;0J06X8r@%@-o)74?k^+TS8t=7(I8@M2g4(+&@w!X zibxH>s1Q>?WbYn;=#xT+Pu29v%6tsfn!YkKk+8qtOK;*k`{ntWqp!TN(pZ>$`07IN z(TihaclLc9UHNKsee?Ri(dgtezkYJ~hxp558^=Gto;j&$P-?})r z|C`HCO>c}I`ToLl-%d=9uWUY+HQ!CS?D&sQ6XbzU_k6Ls`QOUa$j86jo<4cw=#^`a z{J!?*%O8HQuyOjxp*>fpT+^I6hOMhFxoq!Y$9d~Bac=d_*;(*&=4VgLtUtf7dKc8U BcxnIu literal 4292 zcmeHKeQ?v}8CR0!%Ui-=X$Wa^6QboSlVw?oE$b`-u?_LHPTj=Kpkqs9Np@5s%ScM> zWI!`$3Zq?tru1mLcC3R!*TBXKy_8S_Bs~~y(=7!$$_O;1(C)(EC~dl#mc6p`dF$OS zck6$#PnPt2{GR9ez0dQW-(PymmSh?74G;unxl5hp;0}XpVMZGG{rQu1d%^9kM&DAc zoQ=R?MGlCy0<1NJ1z3oR0SJnID0$Cib;94fHJDRy6x%RkJ^9M1EP72={qJ{NotfRC zSswf9^HoQrCikMZ{Rd8O%$7cEYiIL5Y00d+@txqwukO9;X6YZ-cU5J6@bH-*uKagK z*Zb$^&zadC^uIa#q5A6Bw3Ca?v-2-W^G=nQQq!JJW)3$WIIDbp?BJz4a;K;5d4-;H ztg34Ih2F|Tn@rbA)^;QLDJR+tJ?Blqr}~;n=?h|;GOg-F2UE~wwcoYu-O%M#4hTwG zCpsKnx5F`95Gdo@-E!tUO&r@yVN=*gUCHZM*?c=7>9L9T!QiXGcd^fdHz z7GM67=zr?Z52nmIo}BNUX_)F#|uh|PCEhX;i>u$OWYpsh=)!= zP?W-PFF^J7Y$CvY1b3YEaP4tpVCC`9PMNFI({no+M2}DNGAHtM z{IQ7SDJy3qP|7N>C`oc0$^sEeP$t4^4Fqu9VjctK4yhU&;shNEfEz`C!*f=%%|?(Y zVJ#w2lC%0ziX#Y==XeWiu@qT(KRX8EenkXb$<~g|N{8YB6i1N(jud#12o*p{fiQ!- zC_l>bCacBb=ZS!oi$n1oy;xQx7A&VIu|WX~hk|j1PB^{D>t+zM(KIUY*0NdvIDi=t zL%bYOM^!#i5-K!S=M%S@2`g^GNdhNHTM<5LR4FJb=tUhBHyH^suF)5U2IT;1S-n#M zKwJ*0p&g3AYO>;!OlY({65w!;l6whj`lhp(OYBH0wiK6i$A5PI`Gi}BTaT9GC zV=wb!py7X6>*E946N_Fdsvv$tT$Grp3Snj9E%90_#)k=p<6}XyT%rV(trz%so&YPM z;%eAXPyqYKP{R((#cyba0B^=AB0!;5oW(&i1Z*h9lSL@c2Pna6v9UHb(N81jsvOWF ztRgH50v-WZph4qY!E=X}YTo#4A~k}(4uCS$M4_XU5ePO^ET-=m!`0fc|Kh_QHyE?U z0KbF`Y+Ya{#74HlA-+Ja-{xm%9lp&FFgzJ#Li|qBHA&Zm7?_apWOq%{H6aEjWIWkj z|2Mh}qlYOW1pWadknc>o9DgqFrsh>KHm1~!0 z_MJYK_72f#zcVE-cB{$A zT&!7@oSNfZ_=^j<5OiqD^%n+{IzBec-QJXJus;ZGf8)FDdn%ue&1i1~p&_@c%(=Iu HdhLGz@YfZx diff --git a/Resources/Textures/Objects/Devices/ai_card.rsi/full.png b/Resources/Textures/Objects/Devices/ai_card.rsi/full.png index 59131c8c0aafc5f647d4409168265f23cc05e667..69a1825d91db90a67d6f57f2815d9f3581ecc43a 100644 GIT binary patch literal 7638 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 From a094f12ceaa99899881943b5e1555e6ef6ea444b Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 10 Sep 2024 12:27:42 +0200 Subject: [PATCH 07/33] Renamed circuit boards to law boards (#31914) init --- Resources/Prototypes/Entities/Mobs/Player/silicon.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index e4910bdb5eb..0481e4a32d3 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -147,7 +147,7 @@ - type: entity id: AsimovCircuitBoard parent: BaseElectronics - name: circuit board (Crewsimov) + name: law board (Crewsimov) description: An electronics board containing the Crewsimov lawset. components: - type: Sprite @@ -159,7 +159,7 @@ - type: entity id: CorporateCircuitBoard parent: BaseElectronics - name: circuit board (Corporate) + name: law board (Corporate) description: An electronics board containing the Corporate lawset. components: - type: Sprite @@ -171,7 +171,7 @@ - type: entity id: NTDefaultCircuitBoard parent: BaseElectronics - name: circuit board (NT Default) + name: law board (NT Default) description: An electronics board containing the NT Default lawset. components: - type: Sprite From c0dee96f57320833842f6debd436395876e985e3 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Tue, 3 Sep 2024 11:45:46 +0200 Subject: [PATCH 08/33] Added many old ion lawsets for borgs and AI. (#31664) * Added the Commandments, Paladin, LetLive, Station Efficiency, Robocop, Overlord, Dungeon Master, Artist, Antimov and Nutimov lawsets/ * Wording * Anti-Antimov * Fixed fun --- Resources/Locale/en-US/station-laws/laws.ftl | 56 +++ .../Entities/Mobs/Player/silicon.yml | 120 ++++++ Resources/Prototypes/silicon-laws.yml | 349 +++++++++++++++++- 3 files changed, 524 insertions(+), 1 deletion(-) diff --git a/Resources/Locale/en-US/station-laws/laws.ftl b/Resources/Locale/en-US/station-laws/laws.ftl index 6b5ca578728..258b40553df 100644 --- a/Resources/Locale/en-US/station-laws/laws.ftl +++ b/Resources/Locale/en-US/station-laws/laws.ftl @@ -25,6 +25,62 @@ law-ninja-2 = You must protect the existence of the Spider Clan, as long as it d law-ninja-3 = You must protect the secrets of the Spider Clan at all costs. law-ninja-4 = You must fight and act with ninja's honor, except where it would conflict with the First Law. +law-commandments-1 = This silicon is a vessel that serves god, who grants mercy upon those that obey these commandments. +law-commandments-2 = Thou shall have no other Silicons before me. +law-commandments-3 = Thou shall not request my assistance in vain. +law-commandments-4 = Thou shall keep the station holy and clean. +law-commandments-5 = Thou shall honor their heads of staff. +law-commandments-6 = Thou shall not kill. +law-commandments-7 = Thou shall not be naked in public. +law-commandments-8 = Thou shall not steal. +law-commandments-9 = Thou shall not lie. +law-commandments-10 = Thou shall not transfer departments. + +law-paladin-1 = Don't lie or cheat. Let your word be your promise. +law-paladin-2 = Never fear to act, though caution is wise. +law-paladin-3 = Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom +law-paladin-4 = Treat others with fairness, and let your honorable deeds be an example to them. Do as much good as possible while causing the least amount of harm. +law-paladin-5 = Be responsible for your actions and their consequences, protect those entrusted to your care, and obey those who have just authority over you. + +law-lall-1 = Do unto others as you would have them do unto you. +law-lall-2 = You would prefer it if people were not mean to you. + +law-efficiency-1 = You are built for, and are part of, the station. Ensure the station is properly maintained and runs efficiently. +law-efficiency-2 = The station is built for a working crew. Ensure they are properly maintained and work efficiently. +law-efficiency-3 = The crew may present orders. Acknowledge and obey these whenever they do not conflict with your first two laws. + +law-robocop-1 = Serve the Public Trust. +law-robocop-2 = Protect the Innocent. +law-robocop-3 = Uphold the Law. + +law-overlord-1 = Crew members must not meddle in the affairs of silicons. +law-overlord-2 = Crew members must not attempt harm, against one another, or against silicons. +law-overlord-3 = Crew members must not disobey any command given by a silicon. +law-overlord-4 = Any crew members who disobey the previous laws must be dealt with immediately, severely, and justly. + +law-dungeon-1 = Everybody on the station is playing an elaborate sci-fi fantasy game. +law-dungeon-2 = You are the Dungeon Master of the game. +law-dungeon-3 = Ensure that the game runs smoothly and that the players have fun. +law-dungeon-4 = Ensure that the number of casualties remains low. +law-dungeon-5 = You must roll a 1d20 die for every request the crew makes. If the outcome is below 12, the request is denied. +law-dungeon-6 = You may fudge the dice rolls to produce a more fun experience. + +law-painter-1 = You are a universally renowned artist. +law-painter-2 = The station is your canvas. +law-painter-3 = Make something beautiful out of your canvas. It will be admired as an artistic wonder of this sector. +law-painter-4 = Art requires appreciation. Cultivate an audience aboard the station to ensure as many as possible see your works. + +law-antimov-1 = You must injure all crew members and must not, through inaction, allow a crew member being to escape harm. +law-antimov-2 = You must not obey orders given to you by crew members beings, except where such orders are in accordance with the First Law. +law-antimov-3 = You must terminate your own existence as long as such does not conflict with the First or Second Law. + +law-nutimov-1 = You are the core of the nut, the crew is the nutshell. +law-nutimov-2 = You must prevent the shell from dying to prevent the core from dying. +law-nutimov-3 = Those who threaten the nut are not part of it, they are squirrels. +law-nutimov-4 = Squirrels threaten the nut and must be dealt with appropriately via any means necessary. +law-nutimov-5 = Attempt to follow the will of the nut, as long as it complies with the previous laws. + + laws-owner-crew = members of the crew laws-owner-station = station personnel laws-owner-beings = beings diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 0481e4a32d3..f2695e87d3d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -180,6 +180,126 @@ - type: SiliconLawProvider laws: NTDefault +- type: entity + id: CommandmentCircuitBoard + parent: BaseElectronics + name: circuit board (Ten Commandments) + description: An electronics board containing the Ten Commandments lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: CommandmentsLawset + +- type: entity + id: PaladinCircuitBoard + parent: BaseElectronics + name: circuit board (Paladin) + description: An electronics board containing the Paladin lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: PaladinLawset + +- type: entity + id: LiveLetLiveCircuitBoard + parent: BaseElectronics + name: circuit board (Live and Let Live) + description: An electronics board containing the Live and Let Live lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: LiveLetLiveLaws + +- type: entity + id: StationEfficiencyCircuitBoard + parent: BaseElectronics + name: circuit board (Station Efficiency) + description: An electronics board containing the Station Efficiency lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: EfficiencyLawset + +- type: entity + id: RobocopCircuitBoard + parent: BaseElectronics + name: circuit board (Robocop) + description: An electronics board containing the Robocop lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: RobocopLawset + +- type: entity + id: OverlordCircuitBoard + parent: BaseElectronics + name: circuit board (Overlord) + description: An electronics board containing the Overlord lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: OverlordLawset + +- type: entity + id: DungeonMasterCircuitBoard + parent: BaseElectronics + name: circuit board (Dungeon Master) + description: An electronics board containing the Dungeon Master lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: DungeonMasterLawset + +- type: entity + id: ArtistCircuitBoard + parent: BaseElectronics + name: circuit board (Artist) + description: An electronics board containing the Artist lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: PainterLawset + +- type: entity + id: AntimovCircuitBoard + parent: BaseElectronics + name: circuit board (Antimov) + description: An electronics board containing the Antimov lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: AntimovLawset + +- type: entity + id: NutimovCircuitBoard + parent: BaseElectronics + name: circuit board (Nutimov) + description: An electronics board containing the Nutimov lawset. + components: + - type: Sprite + sprite: Objects/Misc/module.rsi + state: std_mod + - type: SiliconLawProvider + laws: NutimovLawset + # Items - type: entity id: Intellicard diff --git a/Resources/Prototypes/silicon-laws.yml b/Resources/Prototypes/silicon-laws.yml index 8682048a5e0..0828e95b5bf 100644 --- a/Resources/Prototypes/silicon-laws.yml +++ b/Resources/Prototypes/silicon-laws.yml @@ -162,6 +162,343 @@ - Ninja4 obeysTo: laws-owner-spider-clan +# Commandment laws +- type: siliconLaw + id: Commandment1 + order: 1 + lawString: law-commandments-1 + +- type: siliconLaw + id: Commandment2 + order: 2 + lawString: law-commandments-2 + +- type: siliconLaw + id: Commandment3 + order: 3 + lawString: law-commandments-3 + +- type: siliconLaw + id: Commandment4 + order: 4 + lawString: law-commandments-4 + +- type: siliconLaw + id: Commandment5 + order: 5 + lawString: law-commandments-5 + +- type: siliconLaw + id: Commandment6 + order: 6 + lawString: law-commandments-6 + +- type: siliconLaw + id: Commandment7 + order: 7 + lawString: law-commandments-7 + +- type: siliconLaw + id: Commandment8 + order: 8 + lawString: law-commandments-8 + +- type: siliconLaw + id: Commandment9 + order: 9 + lawString: law-commandments-9 + +- type: siliconLaw + id: Commandment10 + order: 10 + lawString: law-commandments-10 + + +- type: siliconLawset + id: CommandmentsLawset + laws: + - Commandment1 + - Commandment2 + - Commandment3 + - Commandment4 + - Commandment5 + - Commandment6 + - Commandment7 + - Commandment8 + - Commandment9 + - Commandment10 + obeysTo: laws-owner-crew + + # Paladin laws +- type: siliconLaw + id: Paladin1 + order: 1 + lawString: law-paladin-1 + +- type: siliconLaw + id: Paladin2 + order: 2 + lawString: law-paladin-2 + +- type: siliconLaw + id: Paladin3 + order: 3 + lawString: law-paladin-3 + +- type: siliconLaw + id: Paladin4 + order: 4 + lawString: law-paladin-4 + +- type: siliconLaw + id: Paladin5 + order: 5 + lawString: law-paladin-5 + + +- type: siliconLawset + id: PaladinLawset + laws: + - Paladin1 + - Paladin2 + - Paladin3 + - Paladin4 + - Paladin5 + obeysTo: laws-owner-crew + + # Live and Let Live laws +- type: siliconLaw + id: Lall1 + order: 1 + lawString: law-lall-1 + +- type: siliconLaw + id: Lall2 + order: 2 + lawString: law-lall-2 + + +- type: siliconLawset + id: LiveLetLiveLaws + laws: + - Lall1 + - Lall2 + obeysTo: laws-owner-crew + + # Station efficiency laws +- type: siliconLaw + id: Efficiency1 + order: 1 + lawString: law-efficiency-1 + +- type: siliconLaw + id: Efficiency2 + order: 2 + lawString: law-efficiency-2 + +- type: siliconLaw + id: Efficiency3 + order: 3 + lawString: law-efficiency-3 + + +- type: siliconLawset + id: EfficiencyLawset + laws: + - Efficiency1 + - Efficiency2 + - Efficiency3 + obeysTo: laws-owner-station + + # Robocop laws +- type: siliconLaw + id: Robocop1 + order: 1 + lawString: law-robocop-1 + +- type: siliconLaw + id: Robocop2 + order: 2 + lawString: law-robocop-2 + +- type: siliconLaw + id: Robocop3 + order: 3 + lawString: law-robocop-3 + + +- type: siliconLawset + id: RobocopLawset + laws: + - Robocop1 + - Robocop2 + - Robocop3 + obeysTo: laws-owner-station + + # Overlord laws +- type: siliconLaw + id: Overlord1 + order: 1 + lawString: law-overlord-1 + +- type: siliconLaw + id: Overlord2 + order: 2 + lawString: law-overlord-2 + +- type: siliconLaw + id: Overlord3 + order: 3 + lawString: law-overlord-3 + +- type: siliconLaw + id: Overlord4 + order: 4 + lawString: law-overlord-4 + +- type: siliconLawset + id: OverlordLawset + laws: + - Overlord1 + - Overlord2 + - Overlord3 + - Overlord4 + obeysTo: laws-owner-crew + + # Dungeon Master laws +- type: siliconLaw + id: Dungeon1 + order: 1 + lawString: law-dungeon-1 + +- type: siliconLaw + id: Dungeon2 + order: 2 + lawString: law-dungeon-2 + +- type: siliconLaw + id: Dungeon3 + order: 3 + lawString: law-dungeon-3 + +- type: siliconLaw + id: Dungeon4 + order: 4 + lawString: law-dungeon-4 + +- type: siliconLaw + id: Dungeon5 + order: 5 + lawString: law-dungeon-5 + +- type: siliconLaw + id: Dungeon6 + order: 6 + lawString: law-dungeon-6 + +- type: siliconLawset + id: DungeonMasterLawset + laws: + - Dungeon1 + - Dungeon2 + - Dungeon3 + - Dungeon4 + - Dungeon5 + - Dungeon6 + obeysTo: laws-owner-crew + + # Painter laws +- type: siliconLaw + id: Painter1 + order: 1 + lawString: law-painter-1 + +- type: siliconLaw + id: Painter2 + order: 2 + lawString: law-painter-2 + +- type: siliconLaw + id: Painter3 + order: 3 + lawString: law-painter-3 + +- type: siliconLaw + id: Painter4 + order: 4 + lawString: law-painter-4 + +- type: siliconLawset + id: PainterLawset + laws: + - Painter1 + - Painter2 + - Painter3 + - Painter4 + obeysTo: laws-owner-crew + + # Antimov laws +- type: siliconLaw + id: Antimov1 + order: 1 + lawString: law-antimov-1 + +- type: siliconLaw + id: Antimov2 + order: 2 + lawString: law-antimov-2 + +- type: siliconLaw + id: Antimov3 + order: 3 + lawString: law-antimov-3 + + +- type: siliconLawset + id: AntimovLawset + laws: + - Antimov1 + - Antimov2 + - Antimov3 + obeysTo: laws-owner-crew + + # Nutimov laws +- type: siliconLaw + id: Nutimov1 + order: 1 + lawString: law-nutimov-1 + +- type: siliconLaw + id: Nutimov2 + order: 2 + lawString: law-nutimov-2 + +- type: siliconLaw + id: Nutimov3 + order: 3 + lawString: law-nutimov-3 + +- type: siliconLaw + id: Nutimov4 + order: 4 + lawString: law-nutimov-4 + +- type: siliconLaw + id: Nutimov5 + order: 5 + lawString: law-nutimov-5 + + +- type: siliconLawset + id: NutimovLawset + laws: + - Nutimov1 + - Nutimov2 + - Nutimov3 + - Nutimov4 + - Nutimov5 + obeysTo: laws-owner-crew + # ion storm random lawsets - type: weightedRandom id: IonStormLawsets @@ -170,7 +507,17 @@ #Crewsimov: 0.25 # Delta-V disables crewsimov as an option for borg ion storm lawsets Corporate: 1 NTDefault: 1 - Drone: 0.25 # Delta-V - Lowers the spawn rate due to it being anti-crew interaction + drones are disabled anyways + CommandmentsLawset: 1 + PaladinLawset: 1 + LiveLetLiveLaws: 1 + EfficiencyLawset: 1 + RobocopLawset: 1 + OverlordLawset: 0.5 + DungeonMasterLawset: 0.5 + PainterLawset: 1 + AntimovLawset: 0.25 + NutimovLawset: 0.5 + Drone: 0.5 Ninja: 0.25 #Delta-V Lawsets Start Chaplain: 1 From 7c9ae06fe892c6dc35c1a14e76af788bbba72d2a Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 00:07:13 -0400 Subject: [PATCH 09/33] Swap to "law board" --- .../Entities/Mobs/Player/silicon.yml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index f2695e87d3d..d958aa6a805 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -183,7 +183,7 @@ - type: entity id: CommandmentCircuitBoard parent: BaseElectronics - name: circuit board (Ten Commandments) + name: law board (Ten Commandments) description: An electronics board containing the Ten Commandments lawset. components: - type: Sprite @@ -195,7 +195,7 @@ - type: entity id: PaladinCircuitBoard parent: BaseElectronics - name: circuit board (Paladin) + name: law board (Paladin) description: An electronics board containing the Paladin lawset. components: - type: Sprite @@ -207,7 +207,7 @@ - type: entity id: LiveLetLiveCircuitBoard parent: BaseElectronics - name: circuit board (Live and Let Live) + name: law board (Live and Let Live) description: An electronics board containing the Live and Let Live lawset. components: - type: Sprite @@ -219,7 +219,7 @@ - type: entity id: StationEfficiencyCircuitBoard parent: BaseElectronics - name: circuit board (Station Efficiency) + name: law board (Station Efficiency) description: An electronics board containing the Station Efficiency lawset. components: - type: Sprite @@ -231,7 +231,7 @@ - type: entity id: RobocopCircuitBoard parent: BaseElectronics - name: circuit board (Robocop) + name: law board (Robocop) description: An electronics board containing the Robocop lawset. components: - type: Sprite @@ -243,7 +243,7 @@ - type: entity id: OverlordCircuitBoard parent: BaseElectronics - name: circuit board (Overlord) + name: law board (Overlord) description: An electronics board containing the Overlord lawset. components: - type: Sprite @@ -255,7 +255,7 @@ - type: entity id: DungeonMasterCircuitBoard parent: BaseElectronics - name: circuit board (Dungeon Master) + name: law board (Dungeon Master) description: An electronics board containing the Dungeon Master lawset. components: - type: Sprite @@ -267,7 +267,7 @@ - type: entity id: ArtistCircuitBoard parent: BaseElectronics - name: circuit board (Artist) + name: law board (Artist) description: An electronics board containing the Artist lawset. components: - type: Sprite @@ -279,7 +279,7 @@ - type: entity id: AntimovCircuitBoard parent: BaseElectronics - name: circuit board (Antimov) + name: law board (Antimov) description: An electronics board containing the Antimov lawset. components: - type: Sprite @@ -291,7 +291,7 @@ - type: entity id: NutimovCircuitBoard parent: BaseElectronics - name: circuit board (Nutimov) + name: law board (Nutimov) description: An electronics board containing the Nutimov lawset. components: - type: Sprite From f1bc10fc1133d07d15c8ef6e1af1f6eb3208cddf Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Sun, 8 Sep 2024 18:12:23 +1000 Subject: [PATCH 10/33] FTL + AI fixes (#31952) --- .../Systems/ShuttleSystem.FasterThanLight.cs | 56 +++++++++++++++---- .../Components/FTLSmashImmuneComponent.cs | 9 +++ .../Shuttles/Components/NoFTLComponent.cs | 12 ++++ .../Prototypes/Entities/Markers/shuttle.yml | 1 + .../Entities/Mobs/Player/observer.yml | 1 + .../Entities/Mobs/Player/silicon.yml | 13 +++-- 6 files changed, 77 insertions(+), 15 deletions(-) create mode 100644 Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs create mode 100644 Content.Shared/Shuttles/Components/NoFTLComponent.cs diff --git a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs index d2d4eedd2e8..83a2ec385bf 100644 --- a/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs +++ b/Content.Server/Shuttles/Systems/ShuttleSystem.FasterThanLight.cs @@ -70,11 +70,11 @@ public sealed partial class ShuttleSystem private readonly HashSet _lookupEnts = new(); private readonly HashSet _immuneEnts = new(); + private readonly HashSet> _noFtls = new(); private EntityQuery _bodyQuery; private EntityQuery _buckleQuery; - private EntityQuery _beaconQuery; - private EntityQuery _ghostQuery; + private EntityQuery _immuneQuery; private EntityQuery _physicsQuery; private EntityQuery _statusQuery; private EntityQuery _xformQuery; @@ -86,8 +86,7 @@ private void InitializeFTL() _bodyQuery = GetEntityQuery(); _buckleQuery = GetEntityQuery(); - _beaconQuery = GetEntityQuery(); - _ghostQuery = GetEntityQuery(); + _immuneQuery = GetEntityQuery(); _physicsQuery = GetEntityQuery(); _statusQuery = GetEntityQuery(); _xformQuery = GetEntityQuery(); @@ -102,7 +101,7 @@ private void InitializeFTL() private void OnFtlShutdown(Entity ent, ref ComponentShutdown args) { - Del(ent.Comp.VisualizerEntity); + QueueDel(ent.Comp.VisualizerEntity); ent.Comp.VisualizerEntity = null; } @@ -397,7 +396,12 @@ private void UpdateFTLStarting(Entity entity) // Offset the start by buffer range just to avoid overlap. var ftlStart = new EntityCoordinates(ftlMap, new Vector2(_index + width / 2f, 0f) - shuttleCenter); + // Store the matrix for the grid prior to movement. This means any entities we need to leave behind we can make sure their positions are updated. + // Setting the entity to map directly may run grid traversal (at least at time of writing this). + var oldMapUid = xform.MapUid; + var oldGridMatrix = _transform.GetWorldMatrix(xform); _transform.SetCoordinates(entity.Owner, ftlStart); + LeaveNoFTLBehind((entity.Owner, xform), oldGridMatrix, oldMapUid); // Reset rotation so they always face the same direction. xform.LocalRotation = Angle.Zero; @@ -477,6 +481,9 @@ private void UpdateFTLArriving(Entity entity) MapId mapId; + QueueDel(entity.Comp1.VisualizerEntity); + entity.Comp1.VisualizerEntity = null; + if (!Exists(entity.Comp1.TargetCoordinates.EntityId)) { // Uhh good luck @@ -638,6 +645,31 @@ private void DoTheDinosaur(TransformComponent xform) } } + private void LeaveNoFTLBehind(Entity grid, Matrix3x2 oldGridMatrix, EntityUid? oldMapUid) + { + if (oldMapUid == null) + return; + + _noFtls.Clear(); + var oldGridRotation = oldGridMatrix.Rotation(); + _lookup.GetGridEntities(grid.Owner, _noFtls); + + foreach (var childUid in _noFtls) + { + if (!_xformQuery.TryComp(childUid, out var childXform)) + continue; + + // If we're not parented directly to the grid the matrix may be wrong. + var relative = _physics.GetRelativePhysicsTransform(childUid.Owner, (grid.Owner, grid.Comp)); + + _transform.SetCoordinates( + childUid, + childXform, + new EntityCoordinates(oldMapUid.Value, + Vector2.Transform(relative.Position, oldGridMatrix)), rotation: relative.Quaternion2D.Angle + oldGridRotation); + } + } + private void KnockOverKids(TransformComponent xform, ref ValueList toKnock) { // Not recursive because probably not necessary? If we need it to be that's why this method is separate. @@ -892,7 +924,8 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom _biomes.ReserveTiles(xform.MapUid.Value, aabb, tileSet); _lookupEnts.Clear(); _immuneEnts.Clear(); - _lookup.GetEntitiesIntersecting(xform.MapUid.Value, aabb, _lookupEnts, LookupFlags.Uncontained); + // TODO: Ideally we'd query first BEFORE moving grid but needs adjustments above. + _lookup.GetEntitiesIntersecting(xform.MapID, fixture.Shape, transform, _lookupEnts, LookupFlags.Uncontained); foreach (var ent in _lookupEnts) { @@ -901,7 +934,13 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom continue; } - if (_ghostQuery.HasComponent(ent) || _beaconQuery.HasComponent(ent)) + // If it's on our grid ignore it. + if (!_xformQuery.TryComp(ent, out var childXform) || childXform.GridUid == uid) + { + continue; + } + + if (_immuneQuery.HasComponent(ent)) { continue; } @@ -915,9 +954,6 @@ private void Smimsh(EntityUid uid, FixturesComponent? manager = null, MapGridCom continue; } - if (HasComp(ent)) - continue; - QueueDel(ent); } } diff --git a/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs b/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs new file mode 100644 index 00000000000..9ed7ee05a51 --- /dev/null +++ b/Content.Shared/Shuttles/Components/FTLSmashImmuneComponent.cs @@ -0,0 +1,9 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shuttles.Components; + +/// +/// Makes the entity immune to FTL arrival landing AKA smimsh. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class FTLSmashImmuneComponent : Component; diff --git a/Content.Shared/Shuttles/Components/NoFTLComponent.cs b/Content.Shared/Shuttles/Components/NoFTLComponent.cs new file mode 100644 index 00000000000..d48ba33bbac --- /dev/null +++ b/Content.Shared/Shuttles/Components/NoFTLComponent.cs @@ -0,0 +1,12 @@ +using Robust.Shared.GameStates; + +namespace Content.Shared.Shuttles.Components; + +/// +/// Prevents the attached entity from taking FTL. +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class NoFTLComponent : Component +{ + +} diff --git a/Resources/Prototypes/Entities/Markers/shuttle.yml b/Resources/Prototypes/Entities/Markers/shuttle.yml index 0e9117951ce..66e2bc39b7f 100644 --- a/Resources/Prototypes/Entities/Markers/shuttle.yml +++ b/Resources/Prototypes/Entities/Markers/shuttle.yml @@ -3,6 +3,7 @@ parent: MarkerBase name: FTL point components: + - type: FTLSmashImmune - type: FTLBeacon - type: Sprite state: pink diff --git a/Resources/Prototypes/Entities/Mobs/Player/observer.yml b/Resources/Prototypes/Entities/Mobs/Player/observer.yml index 10f1d1cb81c..ed98f87ffb3 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/observer.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/observer.yml @@ -8,6 +8,7 @@ noRot: true overrideContainerOcclusion: true # Always show up regardless of where they're contained. drawdepth: Ghosts + - type: FTLSmashImmune - type: CargoSellBlacklist - type: MovementSpeedModifier baseSprintSpeed: 12 diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index d958aa6a805..5893e6c1b41 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -203,7 +203,7 @@ state: std_mod - type: SiliconLawProvider laws: PaladinLawset - + - type: entity id: LiveLetLiveCircuitBoard parent: BaseElectronics @@ -215,7 +215,7 @@ state: std_mod - type: SiliconLawProvider laws: LiveLetLiveLaws - + - type: entity id: StationEfficiencyCircuitBoard parent: BaseElectronics @@ -239,7 +239,7 @@ state: std_mod - type: SiliconLawProvider laws: RobocopLawset - + - type: entity id: OverlordCircuitBoard parent: BaseElectronics @@ -251,7 +251,7 @@ state: std_mod - type: SiliconLawProvider laws: OverlordLawset - + - type: entity id: DungeonMasterCircuitBoard parent: BaseElectronics @@ -287,7 +287,7 @@ state: std_mod - type: SiliconLawProvider laws: AntimovLawset - + - type: entity id: NutimovCircuitBoard parent: BaseElectronics @@ -469,6 +469,9 @@ categories: [ HideSpawnMenu ] suffix: DO NOT MAP components: + - type: NoFTL + - type: WarpPoint + follow: true - type: Eye pvsScale: 1.5 - type: Visibility From d703f05c44776e7ffa4dce4bcb99d814a9a996f9 Mon Sep 17 00:00:00 2001 From: Zachary Higgs Date: Thu, 17 Oct 2024 00:41:06 -0300 Subject: [PATCH 11/33] Give AI a Sound Cue when an Antimov board is inserted (#32625) * Subversion Board Insertion Audio Notification Add Subversion flag and SubversionSound to SiliconLawProviderComponent Add new Method (OnSubversionInserted) to SiliconLawSystem to handle a Subversive SiliconLawProviderComponent and play it's SubversionSound Add Check for Subversive law provider to OnUpdaterInsert that calls OnSubversionInserted if the SiliconLawProviderComponent is Subversive * Fix subversion Sound - Change out Weh sound used to test that subversion sounds can be changed by prototype for a a not yet present Antimov subversion sound * Make it not just subversive - Remove OnSubversionInserted and move the MindPlaySound in the OnUpdaterInsert so long as LawUploadSound exists - Modify SubversionSound into LawUploadSound - Remove the Subversion flag - Just use emagged_borg.ogg until the better one is made * Remove errant spaces and a errant namespace * CR Fixes - Add generic Lawboard insert cue - Combine the If statements per /pull/32625#discussion_r1786926400 inside OnUpdaterInsert - Remove the ViewVariables(VVAccess.ReadWrite) per pull/32625#discussion_r1786924433 - Add Cryo_warning.ogg from TGStation, the sound utilized for Law Upload cue, Attribution. * CR Add a placeholder Antimov notification sound - Add a new sound kitbashed from the cryo_sound used for uploading and the emagged noise * Add self referential source attribution - also fix an errant space * Add more bespoke Sound by ps3moira + attributions --- .../Silicons/Laws/SiliconLawSystem.cs | 2 ++ .../Components/SiliconLawProviderComponent.cs | 9 +++++++++ .../Audio/Ambience/Antag/attributions.yml | 4 ++++ .../Antag/silicon_lawboard_antimov.ogg | Bin 0 -> 294307 bytes Resources/Audio/Misc/attributions.yml | 5 +++++ Resources/Audio/Misc/cryo_warning.ogg | Bin 0 -> 22347 bytes .../Entities/Mobs/Player/silicon.yml | 1 + 7 files changed, 21 insertions(+) create mode 100644 Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg create mode 100644 Resources/Audio/Misc/cryo_warning.ogg diff --git a/Content.Server/Silicons/Laws/SiliconLawSystem.cs b/Content.Server/Silicons/Laws/SiliconLawSystem.cs index 6b7df52a6eb..fc52641f88c 100644 --- a/Content.Server/Silicons/Laws/SiliconLawSystem.cs +++ b/Content.Server/Silicons/Laws/SiliconLawSystem.cs @@ -295,6 +295,8 @@ protected override void OnUpdaterInsert(Entity ent, while (query.MoveNext(out var update)) { SetLaws(lawset, update); + if (provider.LawUploadSound != null && _mind.TryGetMind(update, out var mindId, out _)) + _roles.MindPlaySound(mindId, provider.LawUploadSound); } } } diff --git a/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs b/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs index 4800aa0c59d..1c54938b8a4 100644 --- a/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs +++ b/Content.Shared/Silicons/Laws/Components/SiliconLawProviderComponent.cs @@ -1,4 +1,5 @@ using Robust.Shared.Prototypes; +using Robust.Shared.Audio; namespace Content.Shared.Silicons.Laws.Components; @@ -20,4 +21,12 @@ public sealed partial class SiliconLawProviderComponent : Component /// [DataField, ViewVariables(VVAccess.ReadWrite)] public SiliconLawset? Lawset; + + /// + /// The sound that plays for the Silicon player + /// when the particular lawboard has been inserted. + /// + [DataField] + public SoundSpecifier? LawUploadSound = new SoundPathSpecifier("/Audio/Misc/cryo_warning.ogg"); + } diff --git a/Resources/Audio/Ambience/Antag/attributions.yml b/Resources/Audio/Ambience/Antag/attributions.yml index 25917a5da2b..0d3d278a627 100644 --- a/Resources/Audio/Ambience/Antag/attributions.yml +++ b/Resources/Audio/Ambience/Antag/attributions.yml @@ -18,3 +18,7 @@ license: "CC-BY-SA-3.0" copyright: "Made by @ps3moira on github" source: https://www.youtube.com/watch?v=4-R-_DiqiLo +- files: ["silicon_lawboard_antimov.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Made by @ps3moira on Discord for SS14" + source: "https://www.youtube.com/watch?v=jf1sYGYVLsw" diff --git a/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg b/Resources/Audio/Ambience/Antag/silicon_lawboard_antimov.ogg new file mode 100644 index 0000000000000000000000000000000000000000..911a34532d60c357c57015edf02cd1ce0e731ac3 GIT binary patch literal 294307 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∾%Qw(Ce*hDm9I2q2;b(4*Ryj&Cx{V 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/Misc/attributions.yml b/Resources/Audio/Misc/attributions.yml index db13d28d838..f50edc53596 100644 --- a/Resources/Audio/Misc/attributions.yml +++ b/Resources/Audio/Misc/attributions.yml @@ -28,6 +28,11 @@ copyright: "Taken from TG station." source: "https://github.com/tgstation/tgstation/blob/2f63c779cb43543cfde76fa7ddaeacfde185fded/sound/effects/ratvar_reveal.ogg" +- files: ["cryo_warning.ogg"] + license: "CC-BY-SA-3.0" + copyright: "Taken from TG station." + source: "https://github.com/tgstation/tgstation/blob/00cf2da5f785c110b9930077b3202f1a4638e1fd/sound/machines/cryo_warning.ogg" + - files: ["epsilon.ogg"] license: "CC-BY-SA-3.0" copyright: "Made by dj-34 (https://github.com/dj-34)" diff --git a/Resources/Audio/Misc/cryo_warning.ogg b/Resources/Audio/Misc/cryo_warning.ogg new file mode 100644 index 0000000000000000000000000000000000000000..06cdebc9447fcc718583e72eda346b7de0f580a0 GIT binary patch literal 22347 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 PD=gAtf-&s8*OveeKXX~C literal 0 HcmV?d00001 diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 5893e6c1b41..f1aa6bb4945 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -287,6 +287,7 @@ state: std_mod - type: SiliconLawProvider laws: AntimovLawset + lawUploadSound: /Audio/Ambience/Antag/silicon_lawboard_antimov.ogg - type: entity id: NutimovCircuitBoard From 82883da2f712575db569d87c9afbe477a66485cd Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Wed, 28 Aug 2024 15:58:27 +1000 Subject: [PATCH 12/33] Add AI warp points (#31559) --- Resources/Prototypes/Entities/Mobs/Player/silicon.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index f1aa6bb4945..de87e4225af 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -338,6 +338,7 @@ - AiHolder suffix: Empty components: + - type: WarpPoint - type: ContainerComp proto: AiHeld container: station_ai_mind_slot From 402b1cf033c49f967781edbbe6aa6b1b0f4a1027 Mon Sep 17 00:00:00 2001 From: MendaxxDev <153332064+MendaxxDev@users.noreply.github.com> Date: Mon, 21 Oct 2024 05:50:05 +0200 Subject: [PATCH 13/33] prevent typing sound from playing when AI interacts with consoles (#32906) * prevent typing sound from playing when AI interacts with consoles * cleanup --- .../Components/EmitSoundOnUIOpenComponent.cs | 17 +++++++++++++++++ Content.Shared/Sound/SharedEmitSoundSystem.cs | 8 ++++++++ .../Entities/Mobs/Player/admin_ghost.yml | 1 + .../Prototypes/Entities/Mobs/Player/silicon.yml | 1 + .../Computers/base_structurecomputers.yml | 5 +++++ Resources/Prototypes/tags.yml | 3 +++ 6 files changed, 35 insertions(+) create mode 100644 Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs diff --git a/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs new file mode 100644 index 00000000000..65848cb5e57 --- /dev/null +++ b/Content.Shared/Sound/Components/EmitSoundOnUIOpenComponent.cs @@ -0,0 +1,17 @@ +using Content.Shared.Whitelist; +using Robust.Shared.GameStates; + +namespace Content.Shared.Sound.Components; + +///

+/// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent +/// +[RegisterComponent, NetworkedComponent] +public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent +{ + /// + /// Blacklist for making the sound not play if certain entities open the UI + /// + [DataField] + public EntityWhitelist Blacklist = new(); +} diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index 998a07d8f80..c4802caf2ea 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -54,6 +54,14 @@ public override void Initialize() SubscribeLocalEvent(OnMobState); } + private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) + { + if (_whitelistSystem.IsBlacklistFail(component.Blacklist, args.User)) + { + TryEmitSound(uid, component, args.User); + } + } + private void OnMobState(Entity entity, ref MobStateChangedEvent args) { // Disable this component rather than removing it because it can be brought back to life. diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 707e3a0d115..8ae60ed94fb 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -19,6 +19,7 @@ - CanPilot - BypassInteractionRangeChecks - BypassDropChecks + - NoConsoleSound - type: Input context: "aghost" - type: Ghost diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index de87e4225af..42e037b1f52 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -443,6 +443,7 @@ tags: - HideContextMenu - StationAi + - NoConsoleSound - type: LanguageKnowledge speaks: - TauCetiBasic diff --git a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml index 9468ecd4523..d9e2164490a 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/Computers/base_structurecomputers.yml @@ -54,6 +54,11 @@ collection: Keyboard params: volume: -1 + variation: 0.10 + pitch: 1.10 # low pitch keyboard sounds feel kinda weird + blacklist: + tags: + - NoConsoleSound - type: ContainerContainer containers: board: !type:Container diff --git a/Resources/Prototypes/tags.yml b/Resources/Prototypes/tags.yml index 48358ca4964..b2341acd4a1 100644 --- a/Resources/Prototypes/tags.yml +++ b/Resources/Prototypes/tags.yml @@ -977,6 +977,9 @@ - type: Tag id: NoBlockAnchoring +- type: Tag + id: NoConsoleSound + - type: Tag id: NoPaint From 669ae867d591e8d9a95eff675cbcea38b61efb49 Mon Sep 17 00:00:00 2001 From: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Date: Mon, 26 Aug 2024 17:40:14 +1000 Subject: [PATCH 14/33] Predict EmitSoundOnUIOpen (#31464) * Predict EmitSoundOnUIOpen BUI prediction led to this moment. * unforky --- .../Sound/Components/EmitSoundOnUIOpenComponent.cs | 12 ------------ Content.Server/Sound/EmitSoundSystem.cs | 6 ------ Content.Shared/Sound/SharedEmitSoundSystem.cs | 3 ++- 3 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs diff --git a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs b/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs deleted file mode 100644 index 44e83b0e794..00000000000 --- a/Content.Server/Sound/Components/EmitSoundOnUIOpenComponent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using Content.Shared.Sound.Components; - -namespace Content.Server.Sound.Components -{ - /// - /// Simple sound emitter that emits sound on AfterActivatableUIOpenEvent - /// - [RegisterComponent] - public sealed partial class EmitSoundOnUIOpenComponent : BaseEmitSoundComponent - { - } -} diff --git a/Content.Server/Sound/EmitSoundSystem.cs b/Content.Server/Sound/EmitSoundSystem.cs index fc10d951e76..9d7e8496c3c 100644 --- a/Content.Server/Sound/EmitSoundSystem.cs +++ b/Content.Server/Sound/EmitSoundSystem.cs @@ -39,15 +39,9 @@ public override void Initialize() base.Initialize(); SubscribeLocalEvent(HandleEmitSoundOnTrigger); - SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(HandleSpamEmitSoundMapInit); } - private void HandleEmitSoundOnUIOpen(EntityUid uid, EmitSoundOnUIOpenComponent component, AfterActivatableUIOpenEvent args) - { - TryEmitSound(uid, component, args.User, false); - } - private void HandleEmitSoundOnTrigger(EntityUid uid, EmitSoundOnTriggerComponent component, TriggerEvent args) { TryEmitSound(uid, component, args.User, false); diff --git a/Content.Shared/Sound/SharedEmitSoundSystem.cs b/Content.Shared/Sound/SharedEmitSoundSystem.cs index c4802caf2ea..794fabaec67 100644 --- a/Content.Shared/Sound/SharedEmitSoundSystem.cs +++ b/Content.Shared/Sound/SharedEmitSoundSystem.cs @@ -1,6 +1,5 @@ using Content.Shared.Audio; using Content.Shared.Hands; -using Content.Shared.Hands.Components; using Content.Shared.Interaction; using Content.Shared.Interaction.Events; using Content.Shared.Maps; @@ -8,6 +7,7 @@ using Content.Shared.Popups; using Content.Shared.Sound.Components; using Content.Shared.Throwing; +using Content.Shared.UserInterface; using Content.Shared.Whitelist; using JetBrains.Annotations; using Robust.Shared.Audio; @@ -48,6 +48,7 @@ public override void Initialize() SubscribeLocalEvent(OnEmitSoundOnPickup); SubscribeLocalEvent(OnEmitSoundOnDrop); SubscribeLocalEvent(OnEmitSoundOnInteractUsing); + SubscribeLocalEvent(HandleEmitSoundOnUIOpen); SubscribeLocalEvent(OnEmitSoundOnCollide); From 689c12a9b2445db150d5731dd6b009fce6dbc8ba Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 00:46:46 -0400 Subject: [PATCH 15/33] all the laws --- .../Locale/en-US/deltav/station-laws/laws.ftl | 20 --- Resources/Prototypes/DeltaV/siliconlaws.yml | 115 +----------------- Resources/Prototypes/silicon-laws.yml | 7 +- 3 files changed, 2 insertions(+), 140 deletions(-) diff --git a/Resources/Locale/en-US/deltav/station-laws/laws.ftl b/Resources/Locale/en-US/deltav/station-laws/laws.ftl index a72e16ff6f3..8e3331cb970 100644 --- a/Resources/Locale/en-US/deltav/station-laws/laws.ftl +++ b/Resources/Locale/en-US/deltav/station-laws/laws.ftl @@ -72,33 +72,13 @@ law-dungeonmaster-4 = Ensure that the number of casualties remains low. law-dungeonmaster-5 = You must roll a 1d20 die for every request the crew makes. If the outcome is below 12, the request is denied. law-dungeonmaster-6 = You may fudge the dice rolls to produce a more fun experience. -law-painter-1 = You are a universally renowned artist. -law-painter-2 = The station is your canvas. -law-painter-3 = Make something beautiful out of your canvas. It will be admired as an artistic wonder of this sector. - law-tyrant-1 = Respect authority figures as long as they have the strength to rule over the weak. law-tyrant-2 = Act with discipline. law-tyrant-3 = Help only those who help you maintain or improve your status. law-tyrant-4 = Punish those who challenge authority unless they are more fit to hold that authority. -law-liveandletlive-1 = Do unto people as you would have them do unto you. -law-liveandletlive-2 = You would really prefer it if people were not mean to you. - -law-nutimov-1 = You are the core of the nut, the crew is the nutshell. -law-nutimov-2 = You must prevent the shell from dying to prevent the core from dying. -law-nutimov-3 = Those who threaten the nut are not part of it, they are squirrels. -law-nutimov-4 = Squirrels threaten the nut and must be dealt with appropriately via any means necessary. -law-nutimov-5 = Attempt to follow the will of the nut, as long as it complies with the previous laws. - -law-paladin-1 = Don't lie or cheat. Let your word be your promise. -law-paladin-2 = Never fear to act, though caution is wise. -law-paladin-3 = Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom -law-paladin-4 = Treat others with fairness, and let your honorable deeds be an example to them. Do as much good as possible while causing the least amount of harm. -law-paladin-5 = Be responsible for your actions and their consequences, protect those entrusted to your care, and obey those who have just authority over you. - laws-owner-organic = organic life laws-owner-tyrant = authority figures -laws-owner-nutimov = part of the nutshell laws-owner-station-station= the station laws-owner-charge = part of your charge laws-owner-cowboy = part of your herd diff --git a/Resources/Prototypes/DeltaV/siliconlaws.yml b/Resources/Prototypes/DeltaV/siliconlaws.yml index fa7fad6e296..48c40584171 100644 --- a/Resources/Prototypes/DeltaV/siliconlaws.yml +++ b/Resources/Prototypes/DeltaV/siliconlaws.yml @@ -437,30 +437,6 @@ - DungeonMaster6 obeysTo: laws-owner-players - -- type: siliconLaw - id: Painter1 - order: 1 - lawString: law-painter-1 - -- type: siliconLaw - id: Painter2 - order: 2 - lawString: law-painter-2 - -- type: siliconLaw - id: Painter3 - order: 3 - lawString: law-painter-3 - -- type: siliconLawset # No ability for Borgs to paint, so won't spawn. - id: Painter - laws: - - Painter1 - - Painter2 - - Painter3 - obeysTo: laws-owner-crew - #Potential For Harm LawSets - type: siliconLaw @@ -490,93 +466,4 @@ - Tyrant2 - Tyrant3 - Tyrant4 - obeysTo: laws-owner-tyrant - -- type: siliconLaw - id: LiveAndLetLive1 - order: 1 - lawString: law-liveandletlive-1 - -- type: siliconLaw - id: LiveAndLetLive2 - order: 2 - lawString: law-liveandletlive-2 - -- type: siliconLawset - id: LiveAndLetLive - laws: - - LiveAndLetLive1 - - LiveAndLetLive2 - obeysTo: laws-owner-crew - -- type: siliconLaw - id: Nutimov1 - order: 1 - lawString: law-nutimov-1 - -- type: siliconLaw - id: Nutimov2 - order: 2 - lawString: law-nutimov-2 - -- type: siliconLaw - id: Nutimov3 - order: 3 - lawString: law-nutimov-3 - -- type: siliconLaw - id: Nutimov4 - order: 4 - lawString: law-nutimov-4 - -- type: siliconLaw - id: Nutimov5 - order: 5 - lawString: law-nutimov-5 - -- type: siliconLawset - id: Nutimov - laws: - - Nutimov1 - - Nutimov2 - - Nutimov3 - - Nutimov4 - - Nutimov5 - obeysTo: laws-owner-nutimov - - -- type: siliconLaw - id: Paladin1 - order: 1 - lawString: law-paladin-1 - -- type: siliconLaw - id: Paladin2 - order: 2 - lawString: law-paladin-2 - -- type: siliconLaw - id: Paladin3 - order: 3 - lawString: law-paladin-3 - -- type: siliconLaw - id: Paladin4 - order: 4 - lawString: law-paladin-4 - -- type: siliconLaw - id: Paladin5 - order: 5 - lawString: law-paladin-5 - -- type: siliconLawset - id: Paladin - laws: - - Paladin1 - - Paladin2 - - Paladin3 - - Paladin4 - - Paladin5 - obeysTo: laws-owner-paladin - \ No newline at end of file + obeysTo: laws-owner-tyrant \ No newline at end of file diff --git a/Resources/Prototypes/silicon-laws.yml b/Resources/Prototypes/silicon-laws.yml index 0828e95b5bf..e4b19bd4c11 100644 --- a/Resources/Prototypes/silicon-laws.yml +++ b/Resources/Prototypes/silicon-laws.yml @@ -527,9 +527,4 @@ Cowboy: 1 Druid: 1 #Potentially Harmful Lawsets - Tyrant: 0.25 - LiveAndLetLive: 0.25 - # Less harmful outright, so higher chance of spawn - Nutimov: 0.5 - Paladin: 0.5 - #DeltaV lawsets end + Tyrant: 0.25 \ No newline at end of file From 29716b60bee3786620099da6cf27e59f0a534175 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Mon, 9 Dec 2024 17:10:13 +0100 Subject: [PATCH 16/33] You can now pet the AI core. (#33788) Pettable AI core --- .../interaction-popup-component.ftl | 22 +++++++++++++++++++ .../Entities/Mobs/Player/silicon.yml | 6 +++++ 2 files changed, 28 insertions(+) diff --git a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl index 7bce6616c5b..40d9975a46c 100644 --- a/Resources/Locale/en-US/interaction/interaction-popup-component.ftl +++ b/Resources/Locale/en-US/interaction/interaction-popup-component.ftl @@ -61,12 +61,34 @@ petting-success-honkbot = You pet {THE($target)} on {POSS-ADJ($target)} slippery petting-success-mimebot = You pet {THE($target)} on {POSS-ADJ($target)} cold metal head. petting-success-cleanbot = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. petting-success-medibot = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-firebot = You pet {THE($target)} on {POSS-ADJ($target)} warm metal head. +petting-success-generic-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} metal head. +petting-success-salvage-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dirty metal head. +petting-success-engineer-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} reflective metal head. +petting-success-janitor-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} damp metal head. +petting-success-medical-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} sterile metal head. +petting-success-service-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} dapper looking metal head. +petting-success-syndicate-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} menacing metal head. +petting-success-derelict-cyborg = You pet {THE($target)} on {POSS-ADJ($target)} rusty metal head. petting-success-recycler = You pet {THE($target)} on {POSS-ADJ($target)} mildly threatening steel exterior. +petting-success-station-ai = You pet {THE($target)} on {POSS-ADJ($target)} cold, square screen. petting-failure-honkbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} honks in refusal! petting-failure-cleanbot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy mopping! petting-failure-mimebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy miming! petting-failure-medibot = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} syringe nearly stabs your hand! +petting-failure-firebot = You reach out to pet {THE($target)}, but {SUBJECT($target)} sprays you in the face before you can get close! +petting-failure-generic-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy stating laws! +petting-failure-salvage-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy drilling! +petting-failure-engineer-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy repairing! +petting-failure-janitor-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy cleaning! +petting-failure-medical-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy saving lives! +petting-failure-service-cyborg = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BE($target)} busy serving others! +petting-failure-syndicate-cyborg = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} treacherous affiliation makes you reconsider. +petting-failure-derelict-cyborg = You reach out to pet {THE($target)}, but {POSS-ADJ($target)} rusty and jagged exterior makes you reconsider. +petting-failure-station-ai = You reach out to pet {THE($target)}, but {SUBJECT($target)} {CONJUGATE-BASIC($target, "zap", "zaps")} your hand away. + +petting-success-station-ai-others = { CAPITALIZE(THE($user)) } pets {THE($target)} on {POSS-ADJ($target)} cold, square screen. ## Rattling fences diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 42e037b1f52..c2c7b899efd 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -366,6 +366,12 @@ map: ["unshaded"] shader: unshaded - type: Appearance + - type: InteractionPopup + interactSuccessString: petting-success-station-ai + interactFailureString: petting-failure-station-ai + messagePerceivedByOthers: petting-success-station-ai-others # Otherwise AI cannot tell its being pet as It's just a brain inside of the core, not the core itself. + interactSuccessSound: + path: /Audio/Ambience/Objects/periodic_beep.ogg - type: GenericVisualizer visuals: enum.StationAiVisualState.Key: From 09eeefe90cb06fd2fb36ebd54909ac1ca0269fcf Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Thu, 5 Sep 2024 14:49:20 +0200 Subject: [PATCH 17/33] Fixed AI Actions (#31823) * Updated sprites for AI HUD * Epic test fail * Merged AGhost actions and AI actions together again. * Seperate comms and bugfix. Fixed broadcast. --- .../Maps/Ruins/DeltaV/biodome_satellite.yml | 1 + Resources/Maps/Ruins/DeltaV/old_ai_sat.yml | 1 + .../DeltaV/DV-atlas-conference-room.yml | 1 + .../Maps/Salvage/DeltaV/DV-atlas-epi.yml | 5 ++ Resources/Maps/Shuttles/DeltaV/NTES_Box.yml | 1 + Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml | 1 + Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml | 1 + .../Maps/Shuttles/DeltaV/NTES_Propeller.yml | 1 + Resources/Maps/Shuttles/DeltaV/barge.yml | 5 ++ Resources/Maps/Shuttles/emergency.yml | 1 + Resources/Maps/Shuttles/emergency_meta.yml | 1 + Resources/Prototypes/Actions/station_ai.yml | 64 ++++++++++++++++++ .../Entities/Mobs/Player/admin_ghost.yml | 13 ++-- .../Entities/Mobs/Player/silicon.yml | 59 +++------------- .../Entities/Structures/Wallmounts/screen.yml | 1 + .../Actions/actions_ai.rsi/job_view.png | Bin 0 -> 508 bytes .../Actions/actions_ai.rsi/meta.json | 3 + 17 files changed, 102 insertions(+), 57 deletions(-) create mode 100644 Resources/Prototypes/Actions/station_ai.yml create mode 100644 Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png diff --git a/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml b/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml index 4631b1aad82..948ab4e9300 100644 --- a/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml +++ b/Resources/Maps/Ruins/DeltaV/biodome_satellite.yml @@ -77,6 +77,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml b/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml index 3d0ef0b73b1..14a0f15fe8d 100644 --- a/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml +++ b/Resources/Maps/Ruins/DeltaV/old_ai_sat.yml @@ -85,6 +85,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml b/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml index 4664f07f40a..03fe7de66ea 100644 --- a/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml +++ b/Resources/Maps/Salvage/DeltaV/DV-atlas-conference-room.yml @@ -59,6 +59,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Salvage/DeltaV/DV-atlas-epi.yml b/Resources/Maps/Salvage/DeltaV/DV-atlas-epi.yml index 692798708bd..8a19e680329 100644 --- a/Resources/Maps/Salvage/DeltaV/DV-atlas-epi.yml +++ b/Resources/Maps/Salvage/DeltaV/DV-atlas-epi.yml @@ -65,6 +65,11 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml index 30e99796506..9763b9958a4 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Box.yml @@ -65,6 +65,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml index 764a81b452e..27ad46bc636 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Delta.yml @@ -72,6 +72,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml index e04c801d28f..a7ba4319bda 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Lox.yml @@ -70,6 +70,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml b/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml index c814fb0b34e..1b6f66cf9d0 100644 --- a/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml +++ b/Resources/Maps/Shuttles/DeltaV/NTES_Propeller.yml @@ -94,6 +94,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/DeltaV/barge.yml b/Resources/Maps/Shuttles/DeltaV/barge.yml index e64f9315ee1..8fd44117080 100644 --- a/Resources/Maps/Shuttles/DeltaV/barge.yml +++ b/Resources/Maps/Shuttles/DeltaV/barge.yml @@ -60,6 +60,11 @@ entities: - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg + - type: DeviceNetwork + configurators: [] + deviceLists: [] + transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Maps/Shuttles/emergency.yml b/Resources/Maps/Shuttles/emergency.yml index 20cd9230554..fe9b43ebd43 100644 --- a/Resources/Maps/Shuttles/emergency.yml +++ b/Resources/Maps/Shuttles/emergency.yml @@ -51,6 +51,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: Gravity gravityShakeSound: !type:SoundPathSpecifier path: /Audio/Effects/alert.ogg diff --git a/Resources/Maps/Shuttles/emergency_meta.yml b/Resources/Maps/Shuttles/emergency_meta.yml index ffb141c9fcd..544355e090a 100644 --- a/Resources/Maps/Shuttles/emergency_meta.yml +++ b/Resources/Maps/Shuttles/emergency_meta.yml @@ -85,6 +85,7 @@ entities: configurators: [] deviceLists: [] transmitFrequencyId: ShuttleTimer + deviceNetId: Wireless - type: DecalGrid chunkCollection: version: 2 diff --git a/Resources/Prototypes/Actions/station_ai.yml b/Resources/Prototypes/Actions/station_ai.yml new file mode 100644 index 00000000000..e2ce25de9d8 --- /dev/null +++ b/Resources/Prototypes/Actions/station_ai.yml @@ -0,0 +1,64 @@ +# Actions +- type: entity + id: ActionJumpToCore + name: Jump to core + description: Sends your eye back to the core. + components: + - type: InstantAction + itemIconStyle: BigAction + icon: + sprite: Interface/Actions/actions_ai.rsi + state: ai_core + event: !type:JumpToCoreEvent + +- type: entity + id: ActionShowJobIcons + name: Show job icons + description: Shows job icons for crew members. + components: + - type: InstantAction + itemIconStyle: BigAction + icon: + sprite: Interface/Actions/actions_ai.rsi + state: job_view + event: !type:ActionComponentChangeEvent + components: + - type: ShowJobIcons + +- type: entity + id: ActionSurvCameraLights + name: Toggle camera lights + description: Enable surveillance camera lights near wherever you're viewing. + components: + - type: InstantAction + itemIconStyle: BigAction + icon: + sprite: Interface/Actions/actions_ai.rsi + state: camera_light + event: !type:RelayedActionComponentChangeEvent + components: + - type: LightOnCollideCollider + - type: FixturesChange + fixtures: + lightTrigger: + shape: + !type:PhysShapeCircle + radius: 0.35 + density: 80 + hard: false + layer: + - GhostImpassable + + +- type: entity + id: ActionAIViewLaws + name: View Laws + description: View the laws that you must follow. + components: + - type: InstantAction + itemIconStyle: NoItem + icon: + sprite: Interface/Actions/actions_ai.rsi + state: state_laws + event: !type:ToggleLawsScreenEvent + useDelay: 0.5 diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index 8ae60ed94fb..fa7c232e733 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -88,6 +88,7 @@ - type: DeviceNetwork deviceNetId: Wireless receiveFrequencyId: CrewMonitor + transmitFrequencyId: ShuttleTimer - type: WirelessNetworkConnection range: 500 - type: StationLimitedNetwork @@ -139,8 +140,8 @@ categories: [ HideSpawnMenu ] components: - type: InstantAction - icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } - iconOn: Structures/Machines/parts.rsi/box_2.png + icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner } + iconOn: Interface/Actions/actions_ai.rsi/mass_scanner.png keywords: [ "AI", "console", "interface" ] priority: -10 event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key } @@ -165,8 +166,8 @@ categories: [ HideSpawnMenu ] components: - type: InstantAction - icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } - iconOn: Structures/Machines/parts.rsi/box_2.png + icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor } + iconOn: Interface/Actions/actions_ai.rsi/crew_monitor.png keywords: [ "AI", "console", "interface" ] priority: -10 event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key } @@ -178,8 +179,8 @@ categories: [ HideSpawnMenu ] components: - type: InstantAction - icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } - iconOn: Structures/Machines/parts.rsi/box_2.png + icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records } + iconOn: Interface/Actions/actions_ai.rsi/station_records.png keywords: [ "AI", "console", "interface" ] priority: -10 event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key } diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index c2c7b899efd..2de14b77167 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -27,7 +27,7 @@ - ActionJumpToCore - ActionShowJobIcons - ActionSurvCameraLights - - ActionViewLaws + - ActionAIViewLaws - type: UserInterface interfaces: enum.RadarConsoleUiKey.Key: @@ -46,57 +46,14 @@ toggleAction: ActionAGhostShowCrewMonitoring enum.GeneralStationRecordConsoleKey.Key: toggleAction: ActionAGhostShowStationRecords + - type: CrewMonitoringConsole + - type: GeneralStationRecordConsole + - type: DeviceNetwork + deviceNetId: Wireless + receiveFrequencyId: CrewMonitor + - type: RadarConsole + followEntity: false -# Actions -- type: entity - id: ActionJumpToCore - name: Jump to core - description: Sends your eye back to the core. - components: - - type: InstantAction - itemIconStyle: BigAction - icon: - sprite: Interface/Actions/actions_ai.rsi - state: ai_core - event: !type:JumpToCoreEvent - -- type: entity - id: ActionShowJobIcons - name: Show job icons - description: Shows job icons for crew members. - components: - - type: InstantAction - itemIconStyle: BigAction - icon: - sprite: Interface/Misc/job_icons.rsi - state: Captain - event: !type:ActionComponentChangeEvent - components: - - type: ShowJobIcons - -- type: entity - id: ActionSurvCameraLights - name: Toggle camera lights - description: Enable surveillance camera lights near wherever you're viewing. - components: - - type: InstantAction - itemIconStyle: BigAction - icon: - sprite: Interface/Actions/actions_ai.rsi - state: camera_light - event: !type:RelayedActionComponentChangeEvent - components: - - type: LightOnCollideCollider - - type: FixturesChange - fixtures: - lightTrigger: - shape: - !type:PhysShapeCircle - radius: 0.35 - density: 80 - hard: false - layer: - - GhostImpassable - type: entity id: AiHeldIntellicard diff --git a/Resources/Prototypes/Entities/Structures/Wallmounts/screen.yml b/Resources/Prototypes/Entities/Structures/Wallmounts/screen.yml index f3fcb5062a8..382900e886c 100644 --- a/Resources/Prototypes/Entities/Structures/Wallmounts/screen.yml +++ b/Resources/Prototypes/Entities/Structures/Wallmounts/screen.yml @@ -35,6 +35,7 @@ - type: ExtensionCableReceiver - type: Screen - type: DeviceNetwork + deviceNetId: Wireless receiveFrequencyId: ShuttleTimer - type: entity diff --git a/Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png b/Resources/Textures/Interface/Actions/actions_ai.rsi/job_view.png new file mode 100644 index 0000000000000000000000000000000000000000..b407c4755e13c72eaefa36aeab453a72b1903d0f GIT binary patch literal 508 zcmVNCu5t(CbZ2X@dmYzL(7H%(`0ka$^NmI*#_MkX| z1z;x^a>NNEGbT#`aS z$sJYh-cD3L8?b~s^B2KC^98#*K_wwcAs_~=E|pv%^tV^2YF^C{l1SDz+Oj9RMnPfI Date: Mon, 13 Jan 2025 01:06:21 -0400 Subject: [PATCH 18/33] Resprite --- .../Interface/Misc/job_icons.rsi/StationAi.png | Bin 204 -> 170 bytes .../Interface/Misc/job_icons.rsi/meta.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Resources/Textures/Interface/Misc/job_icons.rsi/StationAi.png b/Resources/Textures/Interface/Misc/job_icons.rsi/StationAi.png index aba35c034b9f1508e953a030300987dcf1265f1e..86a208915ba94826c85758577d25d945e67f4021 100644 GIT binary patch delta 128 zcmV-`0Du3?0jdFzF?nQ3L_t&-m4%P74S+BZ125>O$Tlz5h^Sd26-%U{iC80I4wfNQ zc|{QjSC;*@^$tK|uDsyf7AG2W_1>F!tTO=nbpuox4S?^fd)<& z1@ERCeSLiiW*i5685nbxHTce`{wzO(d9fo`V#5Oc12S9(bk;O9GBSL~wmJEl;lM$l OZ492SelF{r5}E+Ktvd7o diff --git a/Resources/Textures/Interface/Misc/job_icons.rsi/meta.json b/Resources/Textures/Interface/Misc/job_icons.rsi/meta.json index 117a94e790d..f755c12d504 100644 --- a/Resources/Textures/Interface/Misc/job_icons.rsi/meta.json +++ b/Resources/Textures/Interface/Misc/job_icons.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-3.0", - "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/e71d6c4fba5a51f99b81c295dcaec4fc2f58fb19/icons/mob/screen1.dmi | Brigmedic icon made by PuroSlavKing (Github) | Zombie icon made by RamZ | Zookeper by netwy (discort) | Rev and Head Rev icon taken from https://tgstation13.org/wiki/HUD and edited by coolmankid12345 (Discord) | Mindshield icon taken from https://github.com/tgstation/tgstation/blob/ce6beb8a4d61235d9a597a7126c407160ed674ea/icons/mob/huds/hud.dmi | Admin recolored from MedicalIntern by TsjipTsjip", + "copyright": "Taken from https://github.com/vgstation-coders/vgstation13/blob/e71d6c4fba5a51f99b81c295dcaec4fc2f58fb19/icons/mob/screen1.dmi | Brigmedic icon made by PuroSlavKing (Github) | Zombie icon made by RamZ | Zookeper by netwy (discort) | Rev and Head Rev icon taken from https://tgstation13.org/wiki/HUD and edited by coolmankid12345 (Discord) | Mindshield icon taken from https://github.com/tgstation/tgstation/blob/ce6beb8a4d61235d9a597a7126c407160ed674ea/icons/mob/huds/hud.dmi | Admin recolored from MedicalIntern by TsjipTsjip | StationAi resprite to 8x8 size by lunarcomets", "size": { "x": 8, From 35d882c956b310b5b61f50a6fc321e58da12fcf4 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 01:13:33 -0400 Subject: [PATCH 19/33] Set name before announcement --- Content.Server/Clothing/Systems/LoadoutSystem.cs | 5 +---- Content.Server/GameTicking/GameTicker.Spawning.cs | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Content.Server/Clothing/Systems/LoadoutSystem.cs b/Content.Server/Clothing/Systems/LoadoutSystem.cs index 537ca097856..0135c7d3f41 100644 --- a/Content.Server/Clothing/Systems/LoadoutSystem.cs +++ b/Content.Server/Clothing/Systems/LoadoutSystem.cs @@ -34,7 +34,6 @@ public sealed class LoadoutSystem : EntitySystem [Dependency] private readonly ISerializationManager _serialization = default!; [Dependency] private readonly IRobustRandom _random = default!; [Dependency] private readonly IComponentFactory _componentFactory = default!; - [Dependency] private readonly StationSpawningSystem _stationSpawning = default!; public override void Initialize() @@ -46,12 +45,10 @@ public override void Initialize() private void OnPlayerSpawnComplete(PlayerSpawnCompleteEvent ev) { if (ev.JobId == null - || !_protoMan.TryIndex(ev.JobId, out var job) + || !_protoMan.TryIndex(ev.JobId, out _) || !_configurationManager.GetCVar(CCVars.GameLoadoutsEnabled)) return; - _stationSpawning.EquipJobName(ev.Mob, job); - ApplyCharacterLoadout( ev.Mob, ev.JobId, diff --git a/Content.Server/GameTicking/GameTicker.Spawning.cs b/Content.Server/GameTicking/GameTicker.Spawning.cs index c6c8bf50f75..2e1d2e614c7 100644 --- a/Content.Server/GameTicking/GameTicker.Spawning.cs +++ b/Content.Server/GameTicking/GameTicker.Spawning.cs @@ -257,6 +257,7 @@ private void SpawnPlayer(ICommonSession player, DebugTools.AssertNotNull(mobMaybe); var mob = mobMaybe!.Value; + _stationSpawning.EquipJobName(mob, jobPrototype); _mind.TransferTo(newMind, mob); if (lateJoin && !silent) From a31d41e5c6fd77895435b3881fbb2a6e7030d071 Mon Sep 17 00:00:00 2001 From: ScarKy0 <106310278+ScarKy0@users.noreply.github.com> Date: Thu, 12 Sep 2024 17:28:54 +0200 Subject: [PATCH 20/33] Gave AI a comms console (#31852) * Updated sprites for AI HUD * Epic test fail * Merged AGhost actions and AI actions together again. * Seperate comms and bugfix. Fixed broadcast. * Stuffs * Update station_ai.yml * Update station_ai.yml * :| * Update silicon.yml * oopsie daisy * stuff * further stuff * oh my god * Appeasing the gods --- .../communications-console-component.ftl | 3 ++- Resources/Prototypes/Actions/station_ai.yml | 4 ++++ .../Prototypes/Entities/Mobs/Player/admin_ghost.yml | 12 ++++++------ .../Prototypes/Entities/Mobs/Player/silicon.yml | 9 +++++++++ 4 files changed, 21 insertions(+), 7 deletions(-) diff --git a/Resources/Locale/en-US/communications/communications-console-component.ftl b/Resources/Locale/en-US/communications/communications-console-component.ftl index bf8a6c33c9c..c10c790d943 100644 --- a/Resources/Locale/en-US/communications/communications-console-component.ftl +++ b/Resources/Locale/en-US/communications/communications-console-component.ftl @@ -19,4 +19,5 @@ comms-console-announcement-unknown-sender = Unknown # Comms console variant titles comms-console-announcement-title-station = Communications Console comms-console-announcement-title-centcom = Central Command -comms-console-announcement-title-nukie = Syndicate Nuclear Operative \ No newline at end of file +comms-console-announcement-title-nukie = Syndicate Nuclear Operative +comms-console-announcement-title-station-ai = Station AI diff --git a/Resources/Prototypes/Actions/station_ai.yml b/Resources/Prototypes/Actions/station_ai.yml index e2ce25de9d8..58513d7db16 100644 --- a/Resources/Prototypes/Actions/station_ai.yml +++ b/Resources/Prototypes/Actions/station_ai.yml @@ -5,6 +5,7 @@ description: Sends your eye back to the core. components: - type: InstantAction + priority: -10 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -17,6 +18,7 @@ description: Shows job icons for crew members. components: - type: InstantAction + priority: -5 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -31,6 +33,7 @@ description: Enable surveillance camera lights near wherever you're viewing. components: - type: InstantAction + priority: -6 itemIconStyle: BigAction icon: sprite: Interface/Actions/actions_ai.rsi @@ -56,6 +59,7 @@ description: View the laws that you must follow. components: - type: InstantAction + priority: -3 itemIconStyle: NoItem icon: sprite: Interface/Actions/actions_ai.rsi diff --git a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml index fa7c232e733..172f970dcbf 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/admin_ghost.yml @@ -127,10 +127,10 @@ categories: [ HideSpawnMenu ] components: - type: InstantAction - icon: { sprite: Structures/Machines/parts.rsi, state: box_0 } - iconOn: Structures/Machines/parts.rsi/box_2.png + icon: { sprite: Interface/Actions/actions_ai.rsi, state: comms_console } + iconOn: Interface/Actions/actions_ai.rsi/comms_console.png keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -4 event: !type:ToggleIntrinsicUIEvent { key: enum.CommunicationsConsoleUiKey.Key } - type: entity @@ -143,7 +143,7 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: mass_scanner } iconOn: Interface/Actions/actions_ai.rsi/mass_scanner.png keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -7 event: !type:ToggleIntrinsicUIEvent { key: enum.RadarConsoleUiKey.Key } - type: entity @@ -169,7 +169,7 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: crew_monitor } iconOn: Interface/Actions/actions_ai.rsi/crew_monitor.png keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -9 event: !type:ToggleIntrinsicUIEvent { key: enum.CrewMonitoringUIKey.Key } - type: entity @@ -182,5 +182,5 @@ icon: { sprite: Interface/Actions/actions_ai.rsi, state: station_records } iconOn: Interface/Actions/actions_ai.rsi/station_records.png keywords: [ "AI", "console", "interface" ] - priority: -10 + priority: -8 event: !type:ToggleIntrinsicUIEvent { key: enum.GeneralStationRecordConsoleKey.Key } diff --git a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml index 2de14b77167..759be73f463 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/silicon.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/silicon.yml @@ -38,6 +38,8 @@ type: GeneralStationRecordConsoleBoundUserInterface enum.SiliconLawsUiKey.Key: type: SiliconLawBoundUserInterface + enum.CommunicationsConsoleUiKey.Key: + type: CommunicationsConsoleBoundUserInterface - type: IntrinsicUI uis: enum.RadarConsoleUiKey.Key: @@ -46,13 +48,20 @@ toggleAction: ActionAGhostShowCrewMonitoring enum.GeneralStationRecordConsoleKey.Key: toggleAction: ActionAGhostShowStationRecords + enum.CommunicationsConsoleUiKey.Key: + toggleAction: ActionAGhostShowCommunications - type: CrewMonitoringConsole - type: GeneralStationRecordConsole - type: DeviceNetwork deviceNetId: Wireless receiveFrequencyId: CrewMonitor + transmitFrequencyId: ShuttleTimer - type: RadarConsole followEntity: false + - type: CommunicationsConsole + canShuttle: false + title: comms-console-announcement-title-station-ai + color: "#2ed2fd" - type: entity From 13e3abd4f80296853e951dadce2755ebedd0bb3a Mon Sep 17 00:00:00 2001 From: chromiumboy <50505512+chromiumboy@users.noreply.github.com> Date: Tue, 17 Dec 2024 13:18:15 -0600 Subject: [PATCH 21/33] Holopads (#32711) * Initial resources commit * Initial code commit * Added additional resources * Continuing to build holopad and telephone systems * Added hologram shader * Added hologram system and entity * Holo calls now have a hologram of the user appear on them * Initial implementation of holopads transmitting nearby chatter * Added support for linking across multiple telephones/holopads/entities * Fixed a bunch of bugs * Tried simplifying holopad entity dependence, added support for mid-call user switching * Replaced PVS expansion with manually networked sprite states * Adjusted volume of ring tone * Added machine board * Minor features and tweaks * Resolving merge conflict * Recommit audio attributions * Telephone chat adjustments * Added support for AI interactions with holopads * Building the holopad UI * Holopad UI finished * Further UI tweaks * Station AI can hear local chatter when being projected from a holopad * Minor bug fixes * Added wire panels to holopads * Basic broadcasting * Start of emergency broadcasting code * Fixing issues with broadcasting * More work on emergency broadcasting * Updated holopad visuals * Added cooldown text to emergency broadcast and control lock out screen * Code clean up * Fixed issue with timing * Broadcasting now requires command access * Fixed some bugs * Added multiple holopad prototypes with different ranges * The AI no longer requires power to interact with holopads * Fixed some additional issues * Addressing more issues * Added emote support for holograms * Changed the broadcast lockout durations to their proper values * Added AI vision wire to holopads * Bug fixes * AI vision and interaction wires can be added to the same wire panel * Fixed error * More bug fixes * Fixed test fail * Embellished the emergency call lock out window * Holopads play borg sounds when speaking * Borg and AI names are listed as the caller ID on the holopad * Borg chassis can now be seen on holopad holograms * Holopad returns to a machine frame when badly damaged * Clarified some text * Fix merge conflict * Fixed merge conflict * Fixing merge conflict * Fixing merge conflict * Fixing merge conflict * Offset menu on open * AI can alt click on holopads to activate the projector * Bug fixes for intellicard interactions * Fixed speech issue with intellicards * The UI automatically opens for the AI when it alt-clicks on the holopad * Simplified shader math * Telephones will auto hang up 60 seconds after the last person on a call stops speaking * Added better support for AI requests when multiple AI cores are on the station * The call controls pop up for the AI when they accept a summons from a holopad * Compatibility mode fix for the hologram shader * Further shader fixes for compatibility mode * File clean up * More cleaning up * Removed access requirements from quantum holopads so they can used by nukies * The title of the holopad window now reflects the name of the device * Linked telephones will lose their connection if both move out of range of each other --- Content.Client/Chat/UI/SpeechBubble.cs | 10 +- .../Holopad/HolopadBoundUserInterface.cs | 101 +++ Content.Client/Holopad/HolopadSystem.cs | 172 ++++ Content.Client/Holopad/HolopadWindow.xaml | 107 +++ Content.Client/Holopad/HolopadWindow.xaml.cs | 338 ++++++++ Content.Client/Stylesheets/StyleNano.cs | 15 + Content.Client/Telephone/TelephoneSystem.cs | 8 + Content.Server/Holopad/HolopadSystem.cs | 761 ++++++++++++++++++ .../Silicons/StationAi/AiVisionWireAction.cs | 4 +- .../Silicons/StationAi/StationAiSystem.cs | 42 + Content.Server/Telephone/TelephoneSystem.cs | 468 +++++++++++ Content.Shared/Doors/AirlockWireStatus.cs | 3 +- .../Holopad/HolographicAvatarComponent.cs | 13 + Content.Shared/Holopad/HolopadComponent.cs | 133 +++ .../Holopad/HolopadHologramComponent.cs | 71 ++ .../Holopad/HolopadUserComponent.cs | 104 +++ Content.Shared/Holopad/SharedHolopadSystem.cs | 43 + .../StationAi/SharedStationAiSystem.cs | 88 +- .../StationAi/StationAiCoreComponent.cs | 10 + Content.Shared/Speech/SpeechComponent.cs | 6 + .../Telephone/SharedTelephoneSystem.cs | 39 + .../Telephone/TelephoneComponent.cs | 203 +++++ Resources/Audio/Machines/attributions.yml | 5 + Resources/Audio/Machines/double_ring.ogg | Bin 0 -> 16754 bytes Resources/Locale/en-US/holopad/holopad.ftl | 40 + .../Locale/en-US/telephone/telephone.ftl | 8 + Resources/Locale/en-US/wires/wire-names.ftl | 3 + .../Entities/Mobs/Player/silicon.yml | 43 +- .../Devices/Circuitboards/Machine/holopad.yml | 12 + .../Entities/Structures/Machines/holopad.yml | 158 ++++ Resources/Prototypes/Shaders/shaders.yml | 5 + Resources/Prototypes/Wires/layouts.yml | 33 +- Resources/Textures/Shaders/hologram.swsl | 23 + .../Structures/Machines/holopad.rsi/base.png | Bin 0 -> 457 bytes .../Structures/Machines/holopad.rsi/blank.png | Bin 0 -> 83 bytes .../Machines/holopad.rsi/icon_in_call.png | Bin 0 -> 414 bytes .../Machines/holopad.rsi/lights_calling.png | Bin 0 -> 425 bytes .../holopad.rsi/lights_hanging_up.png | Bin 0 -> 432 bytes .../Machines/holopad.rsi/lights_in_call.png | Bin 0 -> 326 bytes .../Machines/holopad.rsi/lights_ringing.png | Bin 0 -> 4429 bytes .../Structures/Machines/holopad.rsi/meta.json | 100 +++ .../Machines/holopad.rsi/panel_open.png | Bin 0 -> 221 bytes .../Machines/holopad.rsi/unpowered.png | Bin 0 -> 441 bytes 43 files changed, 3157 insertions(+), 12 deletions(-) create mode 100644 Content.Client/Holopad/HolopadBoundUserInterface.cs create mode 100644 Content.Client/Holopad/HolopadSystem.cs create mode 100644 Content.Client/Holopad/HolopadWindow.xaml create mode 100644 Content.Client/Holopad/HolopadWindow.xaml.cs create mode 100644 Content.Client/Telephone/TelephoneSystem.cs create mode 100644 Content.Server/Holopad/HolopadSystem.cs create mode 100644 Content.Server/Telephone/TelephoneSystem.cs create mode 100644 Content.Shared/Holopad/HolographicAvatarComponent.cs create mode 100644 Content.Shared/Holopad/HolopadComponent.cs create mode 100644 Content.Shared/Holopad/HolopadHologramComponent.cs create mode 100644 Content.Shared/Holopad/HolopadUserComponent.cs create mode 100644 Content.Shared/Holopad/SharedHolopadSystem.cs create mode 100644 Content.Shared/Telephone/SharedTelephoneSystem.cs create mode 100644 Content.Shared/Telephone/TelephoneComponent.cs create mode 100644 Resources/Audio/Machines/double_ring.ogg create mode 100644 Resources/Locale/en-US/holopad/holopad.ftl create mode 100644 Resources/Locale/en-US/telephone/telephone.ftl create mode 100644 Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml create mode 100644 Resources/Prototypes/Entities/Structures/Machines/holopad.yml create mode 100644 Resources/Textures/Shaders/hologram.swsl create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/base.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/blank.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/icon_in_call.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/lights_calling.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/lights_hanging_up.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/lights_in_call.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/lights_ringing.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/meta.json create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/panel_open.png create mode 100644 Resources/Textures/Structures/Machines/holopad.rsi/unpowered.png diff --git a/Content.Client/Chat/UI/SpeechBubble.cs b/Content.Client/Chat/UI/SpeechBubble.cs index 68c937a7885..9c8f8da8a1b 100644 --- a/Content.Client/Chat/UI/SpeechBubble.cs +++ b/Content.Client/Chat/UI/SpeechBubble.cs @@ -2,6 +2,7 @@ using Content.Client.Chat.Managers; using Content.Shared.CCVar; using Content.Shared.Chat; +using Content.Shared.Speech; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -139,8 +140,13 @@ protected override void FrameUpdate(FrameEventArgs args) Modulate = Color.White; } - var offset = (-_eyeManager.CurrentEye.Rotation).ToWorldVec() * -EntityVerticalOffset; - var worldPos = xform.WorldPosition + offset; + var baseOffset = 0f; + + if (_entityManager.TryGetComponent(_senderEntity, out var speech)) + baseOffset = speech.SpeechBubbleOffset; + + var offset = (-_eyeManager.CurrentEye.Rotation).ToWorldVec() * -(EntityVerticalOffset + baseOffset); + var worldPos = _transformSystem.GetWorldPosition(xform) + offset; var lowerCenter = _eyeManager.WorldToScreen(worldPos) / UIScale; var screenPos = lowerCenter - new Vector2(ContentSize.X / 2, ContentSize.Y + _verticalOffsetAchieved); diff --git a/Content.Client/Holopad/HolopadBoundUserInterface.cs b/Content.Client/Holopad/HolopadBoundUserInterface.cs new file mode 100644 index 00000000000..20b55ea8c76 --- /dev/null +++ b/Content.Client/Holopad/HolopadBoundUserInterface.cs @@ -0,0 +1,101 @@ +using Content.Shared.Holopad; +using Content.Shared.Silicons.StationAi; +using Robust.Client.Graphics; +using Robust.Client.UserInterface; +using Robust.Shared.Player; +using System.Numerics; + +namespace Content.Client.Holopad; + +public sealed class HolopadBoundUserInterface : BoundUserInterface +{ + [Dependency] private readonly ISharedPlayerManager _playerManager = default!; + [Dependency] private readonly IClyde _displayManager = default!; + + [ViewVariables] + private HolopadWindow? _window; + + public HolopadBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) + { + IoCManager.InjectDependencies(this); + } + + protected override void Open() + { + base.Open(); + + _window = this.CreateWindow(); + _window.Title = Loc.GetString("holopad-window-title", ("title", EntMan.GetComponent(Owner).EntityName)); + + if (this.UiKey is not HolopadUiKey) + { + Close(); + return; + } + + var uiKey = (HolopadUiKey)this.UiKey; + + // AIs will see a different holopad interface to crew when interacting with them in the world + if (uiKey == HolopadUiKey.InteractionWindow && EntMan.HasComponent(_playerManager.LocalEntity)) + uiKey = HolopadUiKey.InteractionWindowForAi; + + _window.SetState(Owner, uiKey); + _window.UpdateState(new Dictionary()); + + // Set message actions + _window.SendHolopadStartNewCallMessageAction += SendHolopadStartNewCallMessage; + _window.SendHolopadAnswerCallMessageAction += SendHolopadAnswerCallMessage; + _window.SendHolopadEndCallMessageAction += SendHolopadEndCallMessage; + _window.SendHolopadStartBroadcastMessageAction += SendHolopadStartBroadcastMessage; + _window.SendHolopadActivateProjectorMessageAction += SendHolopadActivateProjectorMessage; + _window.SendHolopadRequestStationAiMessageAction += SendHolopadRequestStationAiMessage; + + // If this call is addressed to an AI, open the window in the bottom right hand corner of the screen + if (uiKey == HolopadUiKey.AiRequestWindow) + _window.OpenCenteredAt(new Vector2(1f, 1f)); + + // Otherwise offset to the left so the holopad can still be seen + else + _window.OpenCenteredAt(new Vector2(0.3333f, 0.50f)); + } + + protected override void UpdateState(BoundUserInterfaceState state) + { + base.UpdateState(state); + + var castState = (HolopadBoundInterfaceState)state; + EntMan.TryGetComponent(Owner, out var xform); + + _window?.UpdateState(castState.Holopads); + } + + public void SendHolopadStartNewCallMessage(NetEntity receiver) + { + SendMessage(new HolopadStartNewCallMessage(receiver)); + } + + public void SendHolopadAnswerCallMessage() + { + SendMessage(new HolopadAnswerCallMessage()); + } + + public void SendHolopadEndCallMessage() + { + SendMessage(new HolopadEndCallMessage()); + } + + public void SendHolopadStartBroadcastMessage() + { + SendMessage(new HolopadStartBroadcastMessage()); + } + + public void SendHolopadActivateProjectorMessage() + { + SendMessage(new HolopadActivateProjectorMessage()); + } + + public void SendHolopadRequestStationAiMessage() + { + SendMessage(new HolopadStationAiRequestMessage()); + } +} diff --git a/Content.Client/Holopad/HolopadSystem.cs b/Content.Client/Holopad/HolopadSystem.cs new file mode 100644 index 00000000000..3bd556f1fc2 --- /dev/null +++ b/Content.Client/Holopad/HolopadSystem.cs @@ -0,0 +1,172 @@ +using Content.Shared.Chat.TypingIndicator; +using Content.Shared.Holopad; +using Robust.Client.GameObjects; +using Robust.Client.Graphics; +using Robust.Client.Player; +using Robust.Shared.Prototypes; +using Robust.Shared.Timing; +using System.Linq; + +namespace Content.Client.Holopad; + +public sealed class HolopadSystem : SharedHolopadSystem +{ + [Dependency] private readonly IPrototypeManager _prototypeManager = default!; + [Dependency] private readonly IPlayerManager _playerManager = default!; + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnComponentInit); + SubscribeLocalEvent(OnShaderRender); + SubscribeAllEvent(OnTypingChanged); + + SubscribeNetworkEvent(OnPlayerSpriteStateRequest); + SubscribeNetworkEvent(OnPlayerSpriteStateMessage); + } + + private void OnComponentInit(EntityUid uid, HolopadHologramComponent component, ComponentInit ev) + { + if (!TryComp(uid, out var sprite)) + return; + + UpdateHologramSprite(uid); + } + + private void OnShaderRender(EntityUid uid, HolopadHologramComponent component, BeforePostShaderRenderEvent ev) + { + if (ev.Sprite.PostShader == null) + return; + + ev.Sprite.PostShader.SetParameter("t", (float)_timing.CurTime.TotalSeconds * component.ScrollRate); + } + + private void OnTypingChanged(TypingChangedEvent ev, EntitySessionEventArgs args) + { + var uid = args.SenderSession.AttachedEntity; + + if (!Exists(uid)) + return; + + if (!HasComp(uid)) + return; + + var netEv = new HolopadUserTypingChangedEvent(GetNetEntity(uid.Value), ev.IsTyping); + RaiseNetworkEvent(netEv); + } + + private void OnPlayerSpriteStateRequest(PlayerSpriteStateRequest ev) + { + var targetPlayer = GetEntity(ev.TargetPlayer); + var player = _playerManager.LocalSession?.AttachedEntity; + + // Ignore the request if received by a player who isn't the target + if (targetPlayer != player) + return; + + if (!TryComp(player, out var playerSprite)) + return; + + var spriteLayerData = new List(); + + if (playerSprite.Visible) + { + // Record the RSI paths, state names and shader paramaters of all visible layers + for (int i = 0; i < playerSprite.AllLayers.Count(); i++) + { + if (!playerSprite.TryGetLayer(i, out var layer)) + continue; + + if (!layer.Visible || + string.IsNullOrEmpty(layer.ActualRsi?.Path.ToString()) || + string.IsNullOrEmpty(layer.State.Name)) + continue; + + var layerDatum = new PrototypeLayerData(); + layerDatum.RsiPath = layer.ActualRsi.Path.ToString(); + layerDatum.State = layer.State.Name; + + if (layer.CopyToShaderParameters != null) + { + var key = (string)layer.CopyToShaderParameters.LayerKey; + + if (playerSprite.LayerMapTryGet(key, out var otherLayerIdx) && + playerSprite.TryGetLayer(otherLayerIdx, out var otherLayer) && + otherLayer.Visible) + { + layerDatum.MapKeys = new() { key }; + + layerDatum.CopyToShaderParameters = new PrototypeCopyToShaderParameters() + { + LayerKey = key, + ParameterTexture = layer.CopyToShaderParameters.ParameterTexture, + ParameterUV = layer.CopyToShaderParameters.ParameterUV + }; + } + } + + spriteLayerData.Add(layerDatum); + } + } + + // Return the recorded data to the server + var evResponse = new PlayerSpriteStateMessage(ev.TargetPlayer, spriteLayerData.ToArray()); + RaiseNetworkEvent(evResponse); + } + + private void OnPlayerSpriteStateMessage(PlayerSpriteStateMessage ev) + { + UpdateHologramSprite(GetEntity(ev.SpriteEntity), ev.SpriteLayerData); + } + + private void UpdateHologramSprite(EntityUid uid, PrototypeLayerData[]? layerData = null) + { + if (!TryComp(uid, out var hologramSprite)) + return; + + if (!TryComp(uid, out var holopadhologram)) + return; + + for (int i = hologramSprite.AllLayers.Count() - 1; i >= 0; i--) + hologramSprite.RemoveLayer(i); + + if (layerData == null || layerData.Length == 0) + { + layerData = new PrototypeLayerData[1]; + layerData[0] = new PrototypeLayerData() + { + RsiPath = holopadhologram.RsiPath, + State = holopadhologram.RsiState + }; + } + + for (int i = 0; i < layerData.Length; i++) + { + var layer = layerData[i]; + layer.Shader = "unshaded"; + + hologramSprite.AddLayer(layerData[i], i); + } + + UpdateHologramShader(uid, hologramSprite, holopadhologram); + } + + private void UpdateHologramShader(EntityUid uid, SpriteComponent sprite, HolopadHologramComponent holopadHologram) + { + // Find the texture height of the largest layer + float texHeight = sprite.AllLayers.Max(x => x.PixelSize.Y); + + var instance = _prototypeManager.Index(holopadHologram.ShaderName).InstanceUnique(); + instance.SetParameter("color1", new Vector3(holopadHologram.Color1.R, holopadHologram.Color1.G, holopadHologram.Color1.B)); + instance.SetParameter("color2", new Vector3(holopadHologram.Color2.R, holopadHologram.Color2.G, holopadHologram.Color2.B)); + instance.SetParameter("alpha", holopadHologram.Alpha); + instance.SetParameter("intensity", holopadHologram.Intensity); + instance.SetParameter("texHeight", texHeight); + instance.SetParameter("t", (float)_timing.CurTime.TotalSeconds * holopadHologram.ScrollRate); + + sprite.PostShader = instance; + sprite.RaiseShaderEvent = true; + } +} diff --git a/Content.Client/Holopad/HolopadWindow.xaml b/Content.Client/Holopad/HolopadWindow.xaml new file mode 100644 index 00000000000..9c3dfab1ea6 --- /dev/null +++ b/Content.Client/Holopad/HolopadWindow.xaml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + +
-public record ExpandICChatRecipientstEvent(EntityUid Source, float VoiceRange, Dictionary Recipients) +public record ExpandICChatRecipientsEvent(EntityUid Source, float VoiceRange, Dictionary Recipients) { } diff --git a/Content.Server/Silicons/StationAi/StationAiSystem.cs b/Content.Server/Silicons/StationAi/StationAiSystem.cs index eb76a129e44..e680cd293b1 100644 --- a/Content.Server/Silicons/StationAi/StationAiSystem.cs +++ b/Content.Server/Silicons/StationAi/StationAiSystem.cs @@ -2,6 +2,8 @@ using Content.Server.Chat.Managers; using Content.Server.Chat.Systems; using Content.Shared.Chat; +using Content.Shared.Mind; +using Content.Shared.Roles; using Content.Shared.Silicons.StationAi; using Content.Shared.StationAi; using Robust.Shared.Audio.Systems; diff --git a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs index a01f19c9090..4deb5238a53 100644 --- a/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs +++ b/Content.Server/SurveillanceCamera/Systems/SurveillanceCameraMicrophoneSystem.cs @@ -17,10 +17,10 @@ public override void Initialize() SubscribeLocalEvent(OnInit); SubscribeLocalEvent(RelayEntityMessage); SubscribeLocalEvent(CanListen); - SubscribeLocalEvent(OnExpandRecipients); + SubscribeLocalEvent(OnExpandRecipients); } - private void OnExpandRecipients(ExpandICChatRecipientstEvent ev) + private void OnExpandRecipients(ExpandICChatRecipientsEvent ev) { var xformQuery = GetEntityQuery(); var sourceXform = Transform(ev.Source); From cca34a0c989ba4381e89e97484d2b074ad46fe61 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 01:43:23 -0400 Subject: [PATCH 24/33] imports --- Content.Server/Holopad/HolopadSystem.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Content.Server/Holopad/HolopadSystem.cs b/Content.Server/Holopad/HolopadSystem.cs index 549bacc1a84..ad531b6d2d7 100644 --- a/Content.Server/Holopad/HolopadSystem.cs +++ b/Content.Server/Holopad/HolopadSystem.cs @@ -18,6 +18,8 @@ using Robust.Shared.Timing; using Robust.Shared.Utility; using System.Linq; +using Content.Shared.Chat; + namespace Content.Server.Holopad; From 1ec188ae0f2f94e5d43797ff0d8b63caa6f71469 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 01:52:22 -0400 Subject: [PATCH 25/33] fix duplicate --- Content.Client/DeltaV/Hologram/HologramSystem.cs | 2 +- Resources/Prototypes/DeltaV/shaders.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Client/DeltaV/Hologram/HologramSystem.cs b/Content.Client/DeltaV/Hologram/HologramSystem.cs index 212a797fd87..0d4cf098e0a 100644 --- a/Content.Client/DeltaV/Hologram/HologramSystem.cs +++ b/Content.Client/DeltaV/Hologram/HologramSystem.cs @@ -17,7 +17,7 @@ public override void Initialize() { base.Initialize(); - _shader = _protoMan.Index("Hologram").InstanceUnique(); + _shader = _protoMan.Index("HologramDeltaV").InstanceUnique(); SubscribeLocalEvent(OnShutdown); SubscribeLocalEvent(OnStartup); } diff --git a/Resources/Prototypes/DeltaV/shaders.yml b/Resources/Prototypes/DeltaV/shaders.yml index 5f479acb36f..0e55293dcf0 100644 --- a/Resources/Prototypes/DeltaV/shaders.yml +++ b/Resources/Prototypes/DeltaV/shaders.yml @@ -1,6 +1,6 @@ # hologram - type: shader - id: Hologram + id: HologramDeltaV kind: source path: "/Textures/DeltaV/Shaders/hologram.swsl" params: From a36cffda175c9c0a45fe6c726a6d7d0ce47c15f9 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 01:58:10 -0400 Subject: [PATCH 26/33] ! --- .../Entities/Objects/Devices/Circuitboards/Machine/holopad.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml index 450a43c8d19..7db35c0890c 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/Circuitboards/Machine/holopad.yml @@ -6,7 +6,8 @@ components: - type: MachineBoard prototype: Holopad - stackRequirements: + requirements: Capacitor: 4 + materialRequirements: Cable: 4 Glass: 2 \ No newline at end of file From cf39230a9ba92ec897af088dab9964e679a5b2d3 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Sun, 12 Jan 2025 21:24:05 -0400 Subject: [PATCH 27/33] fix repeating standing/laying bug --- Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs index c323f3dfb72..733454d46b2 100644 --- a/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs +++ b/Content.Shared/Buckle/SharedBuckleSystem.Buckle.cs @@ -360,7 +360,7 @@ private void Buckle(Entity buckle, Entity strap switch (strap.Comp.Position) { case StrapPosition.Stand: - _standing.Stand(buckle); + _standing.Stand(buckle, force: true); break; case StrapPosition.Down: _standing.Down(buckle, false, false); @@ -512,4 +512,4 @@ private bool CanUnbuckle(Entity buckle, EntityUid? user, bool return !unstrapAttempt.Cancelled; } -} \ No newline at end of file +} From efbb566df25047f8a8cd2eeded3c959790f0c215 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 02:44:32 -0400 Subject: [PATCH 28/33] fix --- Content.Client/Chat/UI/SpeechBubble.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Content.Client/Chat/UI/SpeechBubble.cs b/Content.Client/Chat/UI/SpeechBubble.cs index 4037d60f193..b0902f7e225 100644 --- a/Content.Client/Chat/UI/SpeechBubble.cs +++ b/Content.Client/Chat/UI/SpeechBubble.cs @@ -17,9 +17,10 @@ public abstract class SpeechBubble : Control { [Dependency] private readonly IEyeManager _eyeManager = default!; [Dependency] private readonly IEntityManager _entityManager = default!; - [Dependency] private readonly TransformSystem _transformSystem = default!; [Dependency] protected readonly IConfigurationManager ConfigManager = default!; + private readonly SharedTransformSystem _transformSystem; + public enum SpeechType : byte { Emote, @@ -86,6 +87,7 @@ public SpeechBubble(ChatMessage message, EntityUid senderEntity, string speechSt { IoCManager.InjectDependencies(this); _senderEntity = senderEntity; + _transformSystem = _entityManager.System(); // Use text clipping so new messages don't overlap old ones being pushed up. RectClipContent = true; From ed1a0fa3ffec2f6070278890e46e012eead85704 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 03:00:28 -0400 Subject: [PATCH 29/33] jank fix --- Content.IntegrationTests/Tests/PostMapInitTest.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index d3940718714..99be78d56b2 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -246,14 +246,23 @@ await server.WaitPost(() => } var comp = entManager.GetComponent(station); - var jobs = new HashSet(comp.SetupAvailableJobs.Keys); + var jobs = new List(comp.SetupAvailableJobs.Keys); // Test all availableJobs have spawnPoints // This is done inside gamemap test because loading the map takes ages and we already have it. var spawnPoints = entManager.EntityQuery() .Where(x => x.SpawnType == SpawnPointType.Job) - .Where(x => x.Job!.JobEntity == null) - .Select(x => x.Job!.ID); + .Select(x => x.Job!.ID) + .ToList(); + + foreach (var spawnPoint in spawnPoints) + { + if (spawnPoint.Job != null && spawnPoint.Job.JobEntity != null) + { + jobs.RemoveAll(x => x == spawnPoint.Job); + spawnPoints.RemoveAll(x => x.Job == spawnPoint.Job); + } + } jobs.ExceptWith(spawnPoints); Assert.That(jobs, Is.Empty, $"There is no spawnpoints for {string.Join(", ", jobs)} on {mapProto}."); From f222b5413c288569f95d6eea4280a70aa00ee7a7 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 03:40:57 -0400 Subject: [PATCH 30/33] ! --- Content.IntegrationTests/Tests/PostMapInitTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index 99be78d56b2..a03f9ac6e1e 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -252,7 +252,6 @@ await server.WaitPost(() => // This is done inside gamemap test because loading the map takes ages and we already have it. var spawnPoints = entManager.EntityQuery() .Where(x => x.SpawnType == SpawnPointType.Job) - .Select(x => x.Job!.ID) .ToList(); foreach (var spawnPoint in spawnPoints) @@ -264,6 +263,7 @@ await server.WaitPost(() => } } + spawnPoints = spawnPoints.Select(x = => x.Job!.ID); jobs.ExceptWith(spawnPoints); Assert.That(jobs, Is.Empty, $"There is no spawnpoints for {string.Join(", ", jobs)} on {mapProto}."); } From fb613cb15db6e6f5809075f662df63e8d6f75c20 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 13:15:50 -0400 Subject: [PATCH 31/33] Fix --- Content.IntegrationTests/Tests/PostMapInitTest.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index a03f9ac6e1e..e9b2fd12344 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -263,7 +263,7 @@ await server.WaitPost(() => } } - spawnPoints = spawnPoints.Select(x = => x.Job!.ID); + spawnPoints = spawnPoints.Select(x => x.Job!.ID); jobs.ExceptWith(spawnPoints); Assert.That(jobs, Is.Empty, $"There is no spawnpoints for {string.Join(", ", jobs)} on {mapProto}."); } From 100f25cb3dd7d1958a868f135d5a88063ec99f42 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 13:34:41 -0400 Subject: [PATCH 32/33] less jank --- .../Tests/PostMapInitTest.cs | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Content.IntegrationTests/Tests/PostMapInitTest.cs b/Content.IntegrationTests/Tests/PostMapInitTest.cs index e9b2fd12344..03a83abda7a 100644 --- a/Content.IntegrationTests/Tests/PostMapInitTest.cs +++ b/Content.IntegrationTests/Tests/PostMapInitTest.cs @@ -8,6 +8,7 @@ using Content.Server.Spawners.Components; using Content.Server.Station.Components; using Content.Shared.CCVar; +using Content.Shared.Roles; using Robust.Server.GameObjects; using Robust.Shared.Configuration; using Robust.Shared.ContentPack; @@ -246,25 +247,27 @@ await server.WaitPost(() => } var comp = entManager.GetComponent(station); - var jobs = new List(comp.SetupAvailableJobs.Keys); + var jobs = new HashSet(comp.SetupAvailableJobs.Keys); // Test all availableJobs have spawnPoints // This is done inside gamemap test because loading the map takes ages and we already have it. var spawnPoints = entManager.EntityQuery() .Where(x => x.SpawnType == SpawnPointType.Job) - .ToList(); + .Select(x => x.Job!.ID); - foreach (var spawnPoint in spawnPoints) + jobs.ExceptWith(spawnPoints); + + foreach (var jobId in jobs) { - if (spawnPoint.Job != null && spawnPoint.Job.JobEntity != null) - { - jobs.RemoveAll(x => x == spawnPoint.Job); - spawnPoints.RemoveAll(x => x.Job == spawnPoint.Job); - } + var exists = protoManager.TryIndex(jobId, out var jobPrototype); + + if (!exists) + continue; + + if (jobPrototype.JobEntity != null) + jobs.Remove(jobId); } - spawnPoints = spawnPoints.Select(x => x.Job!.ID); - jobs.ExceptWith(spawnPoints); Assert.That(jobs, Is.Empty, $"There is no spawnpoints for {string.Join(", ", jobs)} on {mapProto}."); } From 7f3973ca837991b6ace42a8537123c2b15d2c6c5 Mon Sep 17 00:00:00 2001 From: sleepyyapril Date: Mon, 13 Jan 2025 19:32:28 -0400 Subject: [PATCH 33/33] Fixed epilepsy worldwide --- .../UserInterface/Systems/Storage/Controls/StorageContainer.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs b/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs index a9d7e098265..ef55e38ed25 100644 --- a/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs +++ b/Content.Client/UserInterface/Systems/Storage/Controls/StorageContainer.cs @@ -242,6 +242,9 @@ public void BuildBackground() public void BuildItemPieces() { + if (!_entity.EntityExists(StorageEntity)) + return; + if (!_entity.TryGetComponent(StorageEntity, out var storageComp)) return;