Replace string data fields with LocId where relevant (#20883)

This commit is contained in:
DrSmugleaf
2023-10-10 20:06:24 -07:00
committed by GitHub
parent ef233cf0fe
commit 9bcf67753a
69 changed files with 265 additions and 286 deletions

View File

@@ -1,11 +1,4 @@
using System;
using Content.Shared.Chemistry; using Content.Shared.Chemistry;
using JetBrains.Annotations;
using Robust.Client.GameObjects;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Maths;
using Robust.Shared.Serialization.Manager.Attributes;
using Robust.Shared.Utility; using Robust.Shared.Utility;
namespace Content.Client.Chemistry.Visualizers namespace Content.Client.Chemistry.Visualizers
@@ -13,40 +6,40 @@ namespace Content.Client.Chemistry.Visualizers
[RegisterComponent] [RegisterComponent]
public sealed partial class SolutionContainerVisualsComponent : Component public sealed partial class SolutionContainerVisualsComponent : Component
{ {
[DataField("maxFillLevels")] [DataField]
public int MaxFillLevels = 0; public int MaxFillLevels = 0;
[DataField("fillBaseName")] [DataField]
public string? FillBaseName = null; public string? FillBaseName = null;
[DataField("layer")] [DataField]
public SolutionContainerLayers FillLayer = SolutionContainerLayers.Fill; public SolutionContainerLayers Layer = SolutionContainerLayers.Fill;
[DataField("baseLayer")] [DataField]
public SolutionContainerLayers BaseLayer = SolutionContainerLayers.Base; public SolutionContainerLayers BaseLayer = SolutionContainerLayers.Base;
[DataField("overlayLayer")] [DataField]
public SolutionContainerLayers OverlayLayer = SolutionContainerLayers.Overlay; public SolutionContainerLayers OverlayLayer = SolutionContainerLayers.Overlay;
[DataField("changeColor")] [DataField]
public bool ChangeColor = true; public bool ChangeColor = true;
[DataField("emptySpriteName")] [DataField]
public string? EmptySpriteName = null; public string? EmptySpriteName = null;
[DataField("emptySpriteColor")] [DataField]
public Color EmptySpriteColor = Color.White; public Color EmptySpriteColor = Color.White;
[DataField("metamorphic")] [DataField]
public bool Metamorphic = false; public bool Metamorphic = false;
[DataField("metamorphicDefaultSprite")] [DataField]
public SpriteSpecifier? MetamorphicDefaultSprite; public SpriteSpecifier? MetamorphicDefaultSprite;
[DataField("metamorphicNameFull")] [DataField]
public string MetamorphicNameFull = "transformable-container-component-glass"; public LocId MetamorphicNameFull = "transformable-container-component-glass";
/// <summary> /// <summary>
/// Which solution of the SolutionContainerManagerComponent to represent. /// Which solution of the SolutionContainerManagerComponent to represent.
/// If not set, will work as default. /// If not set, will work as default.
/// </summary> /// </summary>
[DataField("solutionName")] [DataField]
public string? SolutionName; public string? SolutionName;
[DataField("initialName")] [DataField]
public string InitialName = string.Empty; public string InitialName = string.Empty;
[DataField("initialDescription")] [DataField]
public string InitialDescription = string.Empty; public string InitialDescription = string.Empty;
} }
} }

View File

@@ -41,7 +41,7 @@ public sealed class SolutionContainerVisualsSystem : VisualizerSystem<SolutionCo
if (args.Sprite == null) if (args.Sprite == null)
return; return;
if (!args.Sprite.LayerMapTryGet(component.FillLayer, out var fillLayer)) if (!args.Sprite.LayerMapTryGet(component.Layer, out var fillLayer))
return; return;
// Currently some solution methods such as overflowing will try to update appearance with a // Currently some solution methods such as overflowing will try to update appearance with a

View File

@@ -1,18 +1,17 @@
#nullable enable #nullable enable
using System.Collections.Generic; using System.Collections.Generic;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
using Content.Server.Storage.Components;
using Content.Server.VendingMachines; using Content.Server.VendingMachines;
using Content.Server.Wires;
using Content.Shared.Cargo.Prototypes; using Content.Shared.Cargo.Prototypes;
using Content.Shared.Damage; using Content.Shared.Damage;
using Content.Shared.Damage.Prototypes; using Content.Shared.Damage.Prototypes;
using Content.Shared.VendingMachines;
using Content.Shared.Wires;
using Content.Server.Wires;
using Content.Shared.Prototypes; using Content.Shared.Prototypes;
using Content.Shared.Storage.Components; using Content.Shared.Storage.Components;
using Content.Shared.VendingMachines;
using Content.Shared.Wires;
using Robust.Shared.GameObjects;
using Robust.Shared.Map;
using Robust.Shared.Prototypes;
namespace Content.IntegrationTests.Tests namespace Content.IntegrationTests.Tests
{ {
@@ -96,7 +95,7 @@ namespace Content.IntegrationTests.Tests
name: Test Ramen name: Test Ramen
components: components:
- type: Wires - type: Wires
LayoutId: Vending layoutId: Vending
- type: VendingMachine - type: VendingMachine
pack: TestInventory pack: TestInventory
- type: Sprite - type: Sprite

View File

@@ -7,24 +7,24 @@ public sealed partial class SolutionSpikerComponent : Component
/// The source solution to take the reagents from in order /// The source solution to take the reagents from in order
/// to spike the other solution container. /// to spike the other solution container.
/// </summary> /// </summary>
[DataField("sourceSolution")] [DataField]
public string SourceSolution { get; private set; } = string.Empty; public string SourceSolution { get; private set; } = string.Empty;
/// <summary> /// <summary>
/// If spiking with this entity should ignore empty containers or not. /// If spiking with this entity should ignore empty containers or not.
/// </summary> /// </summary>
[DataField("ignoreEmpty")] [DataField]
public bool IgnoreEmpty { get; private set; } public bool IgnoreEmpty { get; private set; }
/// <summary> /// <summary>
/// What should pop up when spiking with this entity. /// What should pop up when spiking with this entity.
/// </summary> /// </summary>
[DataField("popup")] [DataField]
public string Popup { get; private set; } = "spike-solution-generic"; public LocId Popup { get; private set; } = "spike-solution-generic";
/// <summary> /// <summary>
/// What should pop up when spiking fails because the container was empty. /// What should pop up when spiking fails because the container was empty.
/// </summary> /// </summary>
[DataField("popupEmpty")] [DataField]
public string PopupEmpty { get; private set; } = "spike-solution-empty-generic"; public LocId PopupEmpty { get; private set; } = "spike-solution-empty-generic";
} }

View File

@@ -1,6 +1,5 @@
using Content.Server.UserInterface; using Content.Server.UserInterface;
using Content.Shared.Communications; using Content.Shared.Communications;
using Robust.Server.GameObjects;
using Robust.Shared.Audio; using Robust.Shared.Audio;
namespace Content.Server.Communications namespace Content.Server.Communications
@@ -21,41 +20,41 @@ namespace Content.Server.Communications
/// If a Fluent ID isn't found, just uses the raw string /// If a Fluent ID isn't found, just uses the raw string
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("title", required: true)] [DataField(required: true)]
public string AnnouncementDisplayName = "comms-console-announcement-title-station"; public LocId Title = "comms-console-announcement-title-station";
/// <summary> /// <summary>
/// Announcement color /// Announcement color
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("color")] [DataField]
public Color AnnouncementColor = Color.Gold; public Color Color = Color.Gold;
/// <summary> /// <summary>
/// Time in seconds between announcement delays on a per-console basis /// Time in seconds between announcement delays on a per-console basis
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("delay")] [DataField]
public int DelayBetweenAnnouncements = 90; public int Delay = 90;
/// <summary> /// <summary>
/// Can call or recall the shuttle /// Can call or recall the shuttle
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("canShuttle")] [DataField]
public bool CanCallShuttle = true; public bool CanShuttle = true;
/// <summary> /// <summary>
/// Announce on all grids (for nukies) /// Announce on all grids (for nukies)
/// </summary> /// </summary>
[DataField("global")] [DataField]
public bool AnnounceGlobal = false; public bool Global = false;
/// <summary> /// <summary>
/// Announce sound file path /// Announce sound file path
/// </summary> /// </summary>
[DataField("sound")] [DataField]
public SoundSpecifier AnnouncementSound = new SoundPathSpecifier("/Audio/Announcements/announce.ogg"); public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Announcements/announce.ogg");
public PlayerBoundUserInterface? UserInterface => Owner.GetUIOrNull(CommunicationsConsoleUiKey.Key); public PlayerBoundUserInterface? UserInterface => Owner.GetUIOrNull(CommunicationsConsoleUiKey.Key);
} }

View File

@@ -188,7 +188,7 @@ namespace Content.Server.Communications
// Calling shuttle checks // Calling shuttle checks
if (_roundEndSystem.ExpectedCountdownEnd is null) if (_roundEndSystem.ExpectedCountdownEnd is null)
return comp.CanCallShuttle; return comp.CanShuttle;
// Recalling shuttle checks // Recalling shuttle checks
var recallThreshold = _cfg.GetCVar(CCVars.EmergencyRecallTurningPoint); var recallThreshold = _cfg.GetCVar(CCVars.EmergencyRecallTurningPoint);
@@ -256,27 +256,27 @@ namespace Content.Server.Communications
} }
} }
comp.AnnouncementCooldownRemaining = comp.DelayBetweenAnnouncements; comp.AnnouncementCooldownRemaining = comp.Delay;
UpdateCommsConsoleInterface(uid, comp); UpdateCommsConsoleInterface(uid, comp);
var ev = new CommunicationConsoleAnnouncementEvent(uid, comp, msg, message.Session.AttachedEntity); var ev = new CommunicationConsoleAnnouncementEvent(uid, comp, msg, message.Session.AttachedEntity);
RaiseLocalEvent(ref ev); RaiseLocalEvent(ref ev);
// allow admemes with vv // allow admemes with vv
Loc.TryGetString(comp.AnnouncementDisplayName, out var title); Loc.TryGetString(comp.Title, out var title);
title ??= comp.AnnouncementDisplayName; title ??= comp.Title;
msg += "\n" + Loc.GetString("comms-console-announcement-sent-by") + " " + author; msg += "\n" + Loc.GetString("comms-console-announcement-sent-by") + " " + author;
if (comp.AnnounceGlobal) if (comp.Global)
{ {
_chatSystem.DispatchGlobalAnnouncement(msg, title, announcementSound: comp.AnnouncementSound, colorOverride: comp.AnnouncementColor); _chatSystem.DispatchGlobalAnnouncement(msg, title, announcementSound: comp.Sound, colorOverride: comp.Color);
if (message.Session.AttachedEntity != null) if (message.Session.AttachedEntity != null)
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} has sent the following global announcement: {msg}"); _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} has sent the following global announcement: {msg}");
return; return;
} }
_chatSystem.DispatchStationAnnouncement(uid, msg, title, colorOverride: comp.AnnouncementColor); _chatSystem.DispatchStationAnnouncement(uid, msg, title, colorOverride: comp.Color);
if (message.Session.AttachedEntity != null) if (message.Session.AttachedEntity != null)
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} has sent the following station announcement: {msg}"); _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(message.Session.AttachedEntity.Value):player} has sent the following station announcement: {msg}");

View File

@@ -7,10 +7,10 @@ namespace Content.Server.Forensics
[RegisterComponent] [RegisterComponent]
public sealed partial class FiberComponent : Component public sealed partial class FiberComponent : Component
{ {
[DataField("fiberMaterial")] [DataField]
public string FiberMaterial = "fibers-synthetic"; public LocId FiberMaterial = "fibers-synthetic";
[DataField("fiberColor")] [DataField]
public string? FiberColor; public string? FiberColor;
} }
} }

View File

@@ -9,6 +9,6 @@ namespace Content.Server.Nuke;
[RegisterComponent] [RegisterComponent]
public sealed partial class NukeLabelComponent : Component public sealed partial class NukeLabelComponent : Component
{ {
[DataField("prefix")] public string NukeLabel = "nuke-label-nanotrasen"; [DataField] public LocId Prefix = "nuke-label-nanotrasen";
[DataField("serialLength")] public int SerialLength = 6; [DataField] public int SerialLength = 6;
} }

View File

@@ -16,7 +16,7 @@ public sealed class NukeLabelSystem : EntitySystem
private void OnMapInit(EntityUid uid, NukeLabelComponent nuke, MapInitEvent args) private void OnMapInit(EntityUid uid, NukeLabelComponent nuke, MapInitEvent args)
{ {
var label = Loc.GetString(nuke.NukeLabel, ("serial", _nuke.GenerateRandomNumberString(nuke.SerialLength))); var label = Loc.GetString(nuke.Prefix, ("serial", _nuke.GenerateRandomNumberString(nuke.SerialLength)));
var meta = MetaData(uid); var meta = MetaData(uid);
_metaData.SetEntityName(uid, $"{meta.EntityName} ({label})", meta); _metaData.SetEntityName(uid, $"{meta.EntityName} ({label})", meta);
} }

View File

@@ -12,37 +12,37 @@ public sealed partial class WarDeclaratorComponent : Component
/// Custom war declaration message. If empty, use default. /// Custom war declaration message. If empty, use default.
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("message")] [DataField]
public string Message; public string Message;
/// <summary> /// <summary>
/// Permission to customize message text /// Permission to customize message text
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("allowEditingMessage")] [DataField]
public bool AllowEditingMessage = true; public bool AllowEditingMessage = true;
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("maxMessageLength")] [DataField]
public int MaxMessageLength = 512; public int MaxMessageLength = 512;
/// <summary> /// <summary>
/// War declarement text color /// War declarement text color
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("color")] [DataField]
public Color DeclarementColor = Color.Red; public Color Color = Color.Red;
/// <summary> /// <summary>
/// War declarement sound file path /// War declarement sound file path
/// </summary> /// </summary>
[DataField("sound")] [DataField]
public SoundSpecifier DeclarementSound = new SoundPathSpecifier("/Audio/Announcements/war.ogg"); public SoundSpecifier Sound = new SoundPathSpecifier("/Audio/Announcements/war.ogg");
/// <summary> /// <summary>
/// Fluent ID for the declarement title /// Fluent ID for the declarement title
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("title")] [DataField]
public string DeclarementTitle = "comms-console-announcement-title-nukie"; public LocId Title = "comms-console-announcement-title-nukie";
} }

View File

@@ -76,9 +76,9 @@ public sealed class WarDeclaratorSystem : EntitySystem
{ {
message = Loc.GetString("war-declarator-default-message"); message = Loc.GetString("war-declarator-default-message");
} }
var title = Loc.GetString(component.DeclarementTitle); var title = Loc.GetString(component.Title);
_nukeopsRuleSystem.DeclareWar(args.Session.AttachedEntity.Value, message, title, component.DeclarementSound, component.DeclarementColor); _nukeopsRuleSystem.DeclareWar(args.Session.AttachedEntity.Value, message, title, component.Sound, component.Color);
if (args.Session.AttachedEntity != null) if (args.Session.AttachedEntity != null)
_adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(args.Session.AttachedEntity.Value):player} has declared war with this text: {message}"); _adminLogger.Add(LogType.Chat, LogImpact.Low, $"{ToPrettyString(args.Session.AttachedEntity.Value):player} has declared war with this text: {message}");

View File

@@ -1,10 +1,8 @@
using Content.Server.Body.Components; using Content.Server.Body.Components;
using Content.Server.Chemistry.EntitySystems;
using Content.Server.Nutrition.EntitySystems; using Content.Server.Nutrition.EntitySystems;
using Content.Shared.FixedPoint; using Content.Shared.FixedPoint;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Server.Nutrition.Components; namespace Content.Server.Nutrition.Components;
@@ -17,8 +15,8 @@ public sealed partial class FoodComponent : Component
[DataField] [DataField]
public SoundSpecifier UseSound = new SoundPathSpecifier("/Audio/Items/eatfood.ogg"); public SoundSpecifier UseSound = new SoundPathSpecifier("/Audio/Items/eatfood.ogg");
[DataField("trash")] [DataField]
public EntProtoId? TrashPrototype; public EntProtoId? Trash;
[DataField] [DataField]
public FixedPoint2? TransferAmount = FixedPoint2.New(5); public FixedPoint2? TransferAmount = FixedPoint2.New(5);
@@ -55,7 +53,7 @@ public sealed partial class FoodComponent : Component
/// The localization identifier for the eat message. Needs a "food" entity argument passed to it. /// The localization identifier for the eat message. Needs a "food" entity argument passed to it.
/// </summary> /// </summary>
[DataField] [DataField]
public string EatMessage = "food-nom"; public LocId EatMessage = "food-nom";
/// <summary> /// <summary>
/// How long it takes to eat the food personally. /// How long it takes to eat the food personally.

View File

@@ -28,7 +28,7 @@ public sealed partial class OpenableComponent : Component
/// Text shown when examining and its open. /// Text shown when examining and its open.
/// </summary> /// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string ExamineText = "drink-component-on-examine-is-opened"; public LocId ExamineText = "drink-component-on-examine-is-opened";
/// <summary> /// <summary>
/// The locale id for the popup shown when IsClosed is called and closed. Needs a "owner" entity argument passed to it. /// The locale id for the popup shown when IsClosed is called and closed. Needs a "owner" entity argument passed to it.
@@ -36,7 +36,7 @@ public sealed partial class OpenableComponent : Component
/// It's still generic enough that you should change it if you make openable non-drinks, i.e. unwrap it first, peel it first. /// It's still generic enough that you should change it if you make openable non-drinks, i.e. unwrap it first, peel it first.
/// </summary> /// </summary>
[DataField, ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string ClosedPopup = "drink-component-try-use-drink-not-open"; public LocId ClosedPopup = "drink-component-try-use-drink-not-open";
/// <summary> /// <summary>
/// Sound played when opening. /// Sound played when opening.

View File

@@ -45,9 +45,9 @@ namespace Content.Server.Nutrition.EntitySystems
{ {
_puddle.TrySpillAt(uid, solution, out _, false); _puddle.TrySpillAt(uid, solution, out _, false);
} }
if (!string.IsNullOrEmpty(foodComp.TrashPrototype)) if (!string.IsNullOrEmpty(foodComp.Trash))
{ {
EntityManager.SpawnEntity(foodComp.TrashPrototype, Transform(uid).Coordinates); EntityManager.SpawnEntity(foodComp.Trash, Transform(uid).Coordinates);
} }
} }
ActivatePayload(uid); ActivatePayload(uid);

View File

@@ -1,4 +1,3 @@
using System.Linq;
using Content.Server.Body.Components; using Content.Server.Body.Components;
using Content.Server.Body.Systems; using Content.Server.Body.Systems;
using Content.Server.Chemistry.EntitySystems; using Content.Server.Chemistry.EntitySystems;
@@ -22,13 +21,12 @@ using Content.Shared.Interaction.Events;
using Content.Shared.Inventory; using Content.Shared.Inventory;
using Content.Shared.Mobs.Systems; using Content.Shared.Mobs.Systems;
using Content.Shared.Nutrition; using Content.Shared.Nutrition;
using Content.Shared.Verbs;
using Content.Shared.Stacks; using Content.Shared.Stacks;
using Content.Shared.Storage;
using Content.Shared.Verbs;
using Robust.Shared.Audio; using Robust.Shared.Audio;
using Robust.Shared.Player; using Robust.Shared.Player;
using Robust.Shared.Utility; using Robust.Shared.Utility;
using Content.Shared.Tag;
using Content.Shared.Storage;
namespace Content.Server.Nutrition.EntitySystems; namespace Content.Server.Nutrition.EntitySystems;
@@ -309,7 +307,7 @@ public sealed class FoodSystem : EntitySystem
if (ev.Cancelled) if (ev.Cancelled)
return; return;
if (string.IsNullOrEmpty(component.TrashPrototype)) if (string.IsNullOrEmpty(component.Trash))
QueueDel(uid); QueueDel(uid);
else else
DeleteAndSpawnTrash(component, uid, args.User); DeleteAndSpawnTrash(component, uid, args.User);
@@ -319,7 +317,7 @@ public sealed class FoodSystem : EntitySystem
{ {
//We're empty. Become trash. //We're empty. Become trash.
var position = Transform(food).MapPosition; var position = Transform(food).MapPosition;
var finisher = Spawn(component.TrashPrototype, position); var finisher = Spawn(component.Trash, position);
// If the user is holding the item // If the user is holding the item
if (user != null && _hands.IsHolding(user.Value, food, out var hand)) if (user != null && _hands.IsHolding(user.Value, food, out var hand))

View File

@@ -1,8 +1,6 @@
using Content.Server.StationEvents.Events; using Content.Server.StationEvents.Events;
using Content.Shared.Cargo.Prototypes; using Content.Shared.Cargo.Prototypes;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Dictionary;
namespace Content.Server.StationEvents.Components; namespace Content.Server.StationEvents.Components;
@@ -15,43 +13,43 @@ public sealed partial class CargoGiftsRuleComponent : Component
/// <summary> /// <summary>
/// The base announcement string (which then incorporates the strings below) /// The base announcement string (which then incorporates the strings below)
/// </summary> /// </summary>
[DataField("announce"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string Announce = "cargo-gifts-event-announcement"; public LocId Announce = "cargo-gifts-event-announcement";
/// <summary> /// <summary>
/// What is being sent /// What is being sent
/// </summary> /// </summary>
[DataField("description"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string Description = "cargo-gift-default-description"; public LocId Description = "cargo-gift-default-description";
/// <summary> /// <summary>
/// Sender of the gifts /// Sender of the gifts
/// </summary> /// </summary>
[DataField("sender"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string Sender = "cargo-gift-default-sender"; public LocId Sender = "cargo-gift-default-sender";
/// <summary> /// <summary>
/// Destination of the gifts (who they get sent to on the station) /// Destination of the gifts (who they get sent to on the station)
/// </summary> /// </summary>
[DataField("dest"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string Dest = "cargo-gift-default-dest"; public LocId Dest = "cargo-gift-default-dest";
/// <summary> /// <summary>
/// Cargo that you would like gifted to the station, with the quantity for each /// Cargo that you would like gifted to the station, with the quantity for each
/// Use Ids from cargoProduct Prototypes /// Use Ids from cargoProduct Prototypes
/// </summary> /// </summary>
[DataField("gifts", required: true, customTypeSerializer:typeof(PrototypeIdDictionarySerializer<int, CargoProductPrototype>)), ViewVariables(VVAccess.ReadWrite)] [DataField(required: true), ViewVariables(VVAccess.ReadWrite)]
public Dictionary<string, int> Gifts = new(); public Dictionary<ProtoId<CargoProductPrototype>, int> Gifts = new();
/// <summary> /// <summary>
/// How much space (minimum) you want to leave in the order database for supply to actually do their work /// How much space (minimum) you want to leave in the order database for supply to actually do their work
/// </summary> /// </summary>
[DataField("orderSpaceToLeave"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public int OrderSpaceToLeave = 5; public int OrderSpaceToLeave = 5;
/// <summary> /// <summary>
/// Time until we consider next lot of gifts (if supply is overflowing with orders) /// Time until we consider next lot of gifts (if supply is overflowing with orders)
/// </summary> /// </summary>
[DataField("timeUntilNextGifts"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float TimeUntilNextGifts = 10.0f; public float TimeUntilNextGifts = 10.0f;
} }

View File

@@ -4,7 +4,6 @@ using Content.Server.Cargo.Systems;
using Content.Server.GameTicking; using Content.Server.GameTicking;
using Content.Server.GameTicking.Rules.Components; using Content.Server.GameTicking.Rules.Components;
using Content.Server.StationEvents.Components; using Content.Server.StationEvents.Components;
using Content.Shared.Cargo.Prototypes;
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
namespace Content.Server.StationEvents.Events; namespace Content.Server.StationEvents.Events;
@@ -56,7 +55,7 @@ public sealed class CargoGiftsRule : StationEventSystem<CargoGiftsRuleComponent>
var (productId, qty) = component.Gifts.First(); var (productId, qty) = component.Gifts.First();
component.Gifts.Remove(productId); component.Gifts.Remove(productId);
var product = _prototypeManager.Index<CargoProductPrototype>(productId); var product = _prototypeManager.Index(productId);
if (!_cargoSystem.AddAndApproveOrder( if (!_cargoSystem.AddAndApproveOrder(
station!.Value, station!.Value,

View File

@@ -14,18 +14,18 @@ public sealed partial class PickRandomComponent : Component
/// <summary> /// <summary>
/// Whitelist for potential picked items. /// Whitelist for potential picked items.
/// </summary> /// </summary>
[DataField("whitelist"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public EntityWhitelist? Whitelist; public EntityWhitelist? Whitelist;
/// <summary> /// <summary>
/// Locale id for the pick verb text. /// Locale id for the pick verb text.
/// </summary> /// </summary>
[DataField("verbText"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string VerbText = "comp-pick-random-verb-text"; public LocId VerbText = "comp-pick-random-verb-text";
/// <summary> /// <summary>
/// Locale id for the empty storage message. /// Locale id for the empty storage message.
/// </summary> /// </summary>
[DataField("emptyText"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string EmptyText = "comp-pick-random-empty"; public LocId EmptyText = "comp-pick-random-empty";
} }

View File

@@ -1,5 +1,4 @@
using System.Numerics; using System.Numerics;
using Vector2 = System.Numerics.Vector2;
namespace Content.Server.Tabletop.Components namespace Content.Server.Tabletop.Components
{ {
@@ -12,25 +11,25 @@ namespace Content.Server.Tabletop.Components
/// <summary> /// <summary>
/// The localized name of the board. Shown in the UI. /// The localized name of the board. Shown in the UI.
/// </summary> /// </summary>
[DataField("boardName")] [DataField]
public string BoardName { get; private set; } = "tabletop-default-board-name"; public LocId BoardName { get; private set; } = "tabletop-default-board-name";
/// <summary> /// <summary>
/// The type of method used to set up a tabletop. /// The type of method used to set up a tabletop.
/// </summary> /// </summary>
[DataField("setup", required: true)] [DataField(required: true)]
public TabletopSetup Setup { get; private set; } = new TabletopChessSetup(); public TabletopSetup Setup { get; private set; } = new TabletopChessSetup();
/// <summary> /// <summary>
/// The size of the viewport being opened. Must match the board dimensions otherwise you'll get the space parallax (unless that's what you want). /// The size of the viewport being opened. Must match the board dimensions otherwise you'll get the space parallax (unless that's what you want).
/// </summary> /// </summary>
[DataField("size")] [DataField]
public Vector2i Size { get; private set; } = (300, 300); public Vector2i Size { get; private set; } = (300, 300);
/// <summary> /// <summary>
/// The zoom of the viewport camera. /// The zoom of the viewport camera.
/// </summary> /// </summary>
[DataField("cameraZoom")] [DataField]
public Vector2 CameraZoom { get; private set; } = Vector2.One; public Vector2 CameraZoom { get; private set; } = Vector2.One;
/// <summary> /// <summary>

View File

@@ -1,4 +1,3 @@
using Robust.Server.GameObjects;
using Robust.Server.Player; using Robust.Server.Player;
using Robust.Shared.Reflection; using Robust.Shared.Reflection;
using Robust.Shared.Serialization; using Robust.Shared.Serialization;
@@ -15,21 +14,21 @@ namespace Content.Server.UserInterface
[ViewVariables] public PlayerBoundUserInterface? UserInterface => (Key != null) ? Owner.GetUIOrNull(Key) : null; [ViewVariables] public PlayerBoundUserInterface? UserInterface => (Key != null) ? Owner.GetUIOrNull(Key) : null;
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("inHandsOnly")] [DataField]
public bool InHandsOnly { get; set; } = false; public bool InHandsOnly { get; set; } = false;
[DataField("singleUser")] [DataField]
public bool SingleUser { get; set; } = false; public bool SingleUser { get; set; } = false;
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("adminOnly")] [DataField]
public bool AdminOnly { get; set; } = false; public bool AdminOnly { get; set; } = false;
[DataField("key", required: true)] [DataField("key", required: true)]
private string _keyRaw = default!; private string _keyRaw = default!;
[DataField("verbText")] [DataField]
public string VerbText = "ui-verb-toggle-open"; public LocId VerbText = "ui-verb-toggle-open";
/// <summary> /// <summary>
/// Whether you need a hand to operate this UI. The hand does not need to be free, you just need to have one. /// Whether you need a hand to operate this UI. The hand does not need to be free, you just need to have one.
@@ -39,28 +38,28 @@ namespace Content.Server.UserInterface
/// more generic interaction / configuration that might not require hands. /// more generic interaction / configuration that might not require hands.
/// </remarks> /// </remarks>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("requireHands")] [DataField]
public bool RequireHands = true; public bool RequireHands = true;
/// <summary> /// <summary>
/// Whether you can activate this ui with activateinhand or not /// Whether you can activate this ui with activateinhand or not
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("rightClickOnly")] [DataField]
public bool rightClickOnly = false; public bool rightClickOnly = false;
/// <summary> /// <summary>
/// Whether spectators (non-admin ghosts) should be allowed to view this UI. /// Whether spectators (non-admin ghosts) should be allowed to view this UI.
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("allowSpectator")] [DataField]
public bool AllowSpectator = true; public bool AllowSpectator = true;
/// <summary> /// <summary>
/// Whether the UI should close when the item is deselected due to a hand swap or drop /// Whether the UI should close when the item is deselected due to a hand swap or drop
/// </summary> /// </summary>
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
[DataField("closeOnHandDeselect")] [DataField]
public bool CloseOnHandDeselect = true; public bool CloseOnHandDeselect = true;
/// <summary> /// <summary>

View File

@@ -8,13 +8,13 @@ public sealed partial class WiresComponent : Component
/// <summary> /// <summary>
/// The name of this entity's internal board. /// The name of this entity's internal board.
/// </summary> /// </summary>
[DataField("BoardName")] [DataField]
public string BoardName { get; set; } = "wires-board-name-default"; public LocId BoardName { get; set; } = "wires-board-name-default";
/// <summary> /// <summary>
/// The layout ID of this entity's wires. /// The layout ID of this entity's wires.
/// </summary> /// </summary>
[DataField("LayoutId", required: true)] [DataField(required: true)]
public string LayoutId { get; set; } = default!; public string LayoutId { get; set; } = default!;
/// <summary> /// <summary>
@@ -47,7 +47,7 @@ public sealed partial class WiresComponent : Component
/// If this should follow the layout saved the first time the layout dictated by the /// If this should follow the layout saved the first time the layout dictated by the
/// layout ID is generated, or if a new wire order should be generated every time. /// layout ID is generated, or if a new wire order should be generated every time.
/// </summary> /// </summary>
[DataField("alwaysRandomize")] [DataField]
public bool AlwaysRandomize { get; private set; } public bool AlwaysRandomize { get; private set; }
/// <summary> /// <summary>
@@ -64,6 +64,6 @@ public sealed partial class WiresComponent : Component
[ViewVariables] [ViewVariables]
public Dictionary<object, object> StateData { get; } = new(); public Dictionary<object, object> StateData { get; } = new();
[DataField("pulseSound")] [DataField]
public SoundSpecifier PulseSound = new SoundPathSpecifier("/Audio/Effects/multitool_pulse.ogg"); public SoundSpecifier PulseSound = new SoundPathSpecifier("/Audio/Effects/multitool_pulse.ogg");
} }

View File

@@ -8,24 +8,24 @@ public sealed partial class SleepEmitSoundComponent : Component
/// <summary> /// <summary>
/// Sound to play when sleeping /// Sound to play when sleeping
/// </summary> /// </summary>
[DataField("snore"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public SoundSpecifier Snore = new SoundCollectionSpecifier("Snores", AudioParams.Default.WithVariation(0.2f)); public SoundSpecifier Snore = new SoundCollectionSpecifier("Snores", AudioParams.Default.WithVariation(0.2f));
/// <summary> /// <summary>
/// Interval between snore attempts in seconds /// Interval between snore attempts in seconds
/// </summary> /// </summary>
[DataField("interval"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float Interval = 5f; public float Interval = 5f;
/// <summary> /// <summary>
/// Chance for snore attempt to succeed /// Chance for snore attempt to succeed
/// </summary> /// </summary>
[DataField("chance"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float Chance = 0.33f; public float Chance = 0.33f;
/// <summary> /// <summary>
/// Popup for snore (e.g. Zzz...) /// Popup for snore (e.g. Zzz...)
/// </summary> /// </summary>
[DataField("popUp"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string PopUp = "sleep-onomatopoeia"; public LocId PopUp = "sleep-onomatopoeia";
} }

View File

@@ -11,7 +11,7 @@ namespace Content.Shared.CartridgeLoader;
public sealed partial class CartridgeComponent : Component public sealed partial class CartridgeComponent : Component
{ {
[DataField(required: true)] [DataField(required: true)]
public string ProgramName = "default-program-name"; public LocId ProgramName = "default-program-name";
[DataField] [DataField]
public SpriteSpecifier? Icon; public SpriteSpecifier? Icon;

View File

@@ -9,15 +9,15 @@ public sealed partial class ReactionMixerComponent : Component
/// A list of IDs for categories of reactions that can be mixed (i.e. HOLY for a bible, DRINK for a spoon) /// A list of IDs for categories of reactions that can be mixed (i.e. HOLY for a bible, DRINK for a spoon)
/// </summary> /// </summary>
[ViewVariables] [ViewVariables]
[DataField("reactionTypes")] [DataField]
public List<string> ReactionTypes = default!; public List<string> ReactionTypes = default!;
/// <summary> /// <summary>
/// A string which identifies the string to be sent when successfully mixing a solution /// A string which identifies the string to be sent when successfully mixing a solution
/// </summary> /// </summary>
[ViewVariables] [ViewVariables]
[DataField("mixMessage")] [DataField]
public string MixMessage = "default-mixing-success"; public LocId MixMessage = "default-mixing-success";
} }
[ByRefEvent] [ByRefEvent]

View File

@@ -1,6 +1,5 @@
using Content.Shared.Construction.Components; using Content.Shared.Construction.Components;
using Content.Shared.Examine; using Content.Shared.Examine;
using JetBrains.Annotations;
namespace Content.Shared.Construction.Steps; namespace Content.Shared.Construction.Steps;
@@ -10,14 +9,14 @@ public sealed partial class PartAssemblyConstructionGraphStep : ConstructionGrap
/// <summary> /// <summary>
/// A valid ID on <see cref="PartAssemblyComponent"/>'s dictionary of strings to part lists. /// A valid ID on <see cref="PartAssemblyComponent"/>'s dictionary of strings to part lists.
/// </summary> /// </summary>
[DataField("assemblyId")] [DataField]
public string AssemblyId = string.Empty; public string AssemblyId = string.Empty;
/// <summary> /// <summary>
/// A localization string used for /// A localization string used when examining and for the guidebook.
/// </summary> /// </summary>
[DataField("guideString")] [DataField]
public string GuideString = "construction-guide-condition-part-assembly"; public LocId GuideString = "construction-guide-condition-part-assembly";
public bool Condition(EntityUid uid, IEntityManager entityManager) public bool Condition(EntityUid uid, IEntityManager entityManager)
{ {

View File

@@ -1,5 +1,5 @@
using Robust.Shared.Utility;
using Content.Shared.Verbs; using Content.Shared.Verbs;
using Robust.Shared.Utility;
namespace Content.Shared.Examine namespace Content.Shared.Examine
{ {
@@ -23,7 +23,7 @@ namespace Content.Shared.Examine
/// </summary> /// </summary>
private void OnGroupExamineVerb(EntityUid uid, GroupExamineComponent component, GetVerbsEvent<ExamineVerb> args) private void OnGroupExamineVerb(EntityUid uid, GroupExamineComponent component, GetVerbsEvent<ExamineVerb> args)
{ {
foreach (var group in component.ExamineGroups) foreach (var group in component.Group)
{ {
if (!EntityHasComponent(uid, group.Components)) if (!EntityHasComponent(uid, group.Components))
continue; continue;
@@ -116,7 +116,7 @@ namespace Content.Shared.Examine
// Make sure we have the component name as a string // Make sure we have the component name as a string
var componentName = _componentFactory.GetComponentName(component.GetType()); var componentName = _componentFactory.GetComponentName(component.GetType());
foreach (var examineGroup in groupExamine.ExamineGroups) foreach (var examineGroup in groupExamine.Group)
{ {
// If any of the examine groups list of components contain this componentname // If any of the examine groups list of components contain this componentname
if (examineGroup.Components.Contains(componentName)) if (examineGroup.Components.Contains(componentName))
@@ -124,7 +124,7 @@ namespace Content.Shared.Examine
foreach (var entry in examineGroup.Entries) foreach (var entry in examineGroup.Entries)
{ {
// If any of the entries already are from your component, dont do anything else - no doubles! // If any of the entries already are from your component, dont do anything else - no doubles!
if (entry.ComponentName == componentName) if (entry.Component == componentName)
return; return;
} }

View File

@@ -12,8 +12,8 @@ namespace Content.Shared.Examine
/// <summary> /// <summary>
/// A list of ExamineGroups. /// A list of ExamineGroups.
/// </summary> /// </summary>
[DataField("group")] [DataField]
public List<ExamineGroup> ExamineGroups = new() public List<ExamineGroup> Group = new()
{ {
// TODO Remove hardcoded component names. // TODO Remove hardcoded component names.
new ExamineGroup() new ExamineGroup()
@@ -33,14 +33,14 @@ namespace Content.Shared.Examine
/// <summary> /// <summary>
/// The title of the Examine Group. Localized string that gets added to the examine tooltip. /// The title of the Examine Group. Localized string that gets added to the examine tooltip.
/// </summary> /// </summary>
[DataField("title")] [DataField]
[ViewVariables(VVAccess.ReadWrite)] [ViewVariables(VVAccess.ReadWrite)]
public string? Title; public string? Title;
/// <summary> /// <summary>
/// A list of ExamineEntries, containing which component it belongs to, which priority it has, and what FormattedMessage it holds. /// A list of ExamineEntries, containing which component it belongs to, which priority it has, and what FormattedMessage it holds.
/// </summary> /// </summary>
[DataField("entries")] [DataField]
public List<ExamineEntry> Entries = new(); public List<ExamineEntry> Entries = new();
// TODO custom type serializer, or just make this work via some other automatic grouping process that doesn't // TODO custom type serializer, or just make this work via some other automatic grouping process that doesn't
@@ -48,25 +48,25 @@ namespace Content.Shared.Examine
/// <summary> /// <summary>
/// A list of all components this ExamineGroup encompasses. /// A list of all components this ExamineGroup encompasses.
/// </summary> /// </summary>
[DataField("components")] [DataField]
public List<string> Components = new(); public List<string> Components = new();
/// <summary> /// <summary>
/// The icon path for the Examine Group. /// The icon path for the Examine Group.
/// </summary> /// </summary>
[DataField("icon")] [DataField]
public SpriteSpecifier Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/examine-star.png")); public SpriteSpecifier Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/examine-star.png"));
/// <summary> /// <summary>
/// The text shown in the context verb menu. /// The text shown in the context verb menu.
/// </summary> /// </summary>
[DataField("contextText")] [DataField]
public string ContextText = "verb-examine-group-other"; public LocId ContextText = "verb-examine-group-other";
/// <summary> /// <summary>
/// Details shown when hovering over the button. /// Details shown when hovering over the button.
/// </summary> /// </summary>
[DataField("hoverMessage")] [DataField]
public string HoverMessage = string.Empty; public string HoverMessage = string.Empty;
} }
@@ -79,25 +79,25 @@ namespace Content.Shared.Examine
/// <summary> /// <summary>
/// Which component does this entry relate to? /// Which component does this entry relate to?
/// </summary> /// </summary>
[DataField("component", required: true)] [DataField(required: true)]
public string ComponentName; public string Component;
/// <summary> /// <summary>
/// What priority has this entry - entries are sorted high to low. /// What priority has this entry - entries are sorted high to low.
/// </summary> /// </summary>
[DataField("priority")] [DataField]
public float Priority = 0f; public float Priority = 0f;
/// <summary> /// <summary>
/// The FormattedMessage of this entry. /// The FormattedMessage of this entry.
/// </summary> /// </summary>
[DataField("message", required: true)] [DataField(required: true)]
public FormattedMessage Message; public FormattedMessage Message;
/// <param name="componentName">Should be set to _componentFactory.GetComponentName(component.GetType()) to properly function.</param> /// <param name="component">Should be set to _componentFactory.GetComponentName(component.GetType()) to properly function.</param>
public ExamineEntry(string componentName, float priority, FormattedMessage message) public ExamineEntry(string component, float priority, FormattedMessage message)
{ {
ComponentName = componentName; Component = component;
Priority = priority; Priority = priority;
Message = message; Message = message;
} }
@@ -106,7 +106,7 @@ namespace Content.Shared.Examine
{ {
// parameterless ctor is required for data-definition serialization // parameterless ctor is required for data-definition serialization
Message = default!; Message = default!;
ComponentName = default!; Component = default!;
} }
} }

View File

@@ -1,6 +1,6 @@
using Content.Shared.Radio; using Content.Shared.Radio;
using Robust.Shared.GameStates; using Robust.Shared.GameStates;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; using Robust.Shared.Prototypes;
namespace Content.Shared.Implants.Components; namespace Content.Shared.Implants.Components;
@@ -8,14 +8,14 @@ namespace Content.Shared.Implants.Components;
public sealed partial class RattleComponent : Component public sealed partial class RattleComponent : Component
{ {
// The radio channel the message will be sent to // The radio channel the message will be sent to
[DataField("radioChannel", customTypeSerializer: typeof(PrototypeIdSerializer<RadioChannelPrototype>))] [DataField]
public string RadioChannel = "Syndicate"; public ProtoId<RadioChannelPrototype> RadioChannel = "Syndicate";
// The message that the implant will send when crit // The message that the implant will send when crit
[DataField("critMessage")] [DataField]
public string CritMessage = "deathrattle-implant-critical-message"; public LocId CritMessage = "deathrattle-implant-critical-message";
// The message that the implant will send when dead // The message that the implant will send when dead
[DataField("deathMessage")] [DataField("deathMessage")]
public string DeathMessage = "deathrattle-implant-dead-message"; public LocId DeathMessage = "deathrattle-implant-dead-message";
} }

View File

@@ -1,7 +1,6 @@
using Robust.Shared.Prototypes; using Robust.Shared.Prototypes;
using Robust.Shared.Utility;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array;
using Robust.Shared.Utility;
namespace Content.Shared.Materials namespace Content.Shared.Materials
{ {
@@ -17,7 +16,7 @@ namespace Content.Shared.Materials
public string[]? Parents { get; } public string[]? Parents { get; }
[ViewVariables] [ViewVariables]
[AbstractDataFieldAttribute] [AbstractDataField]
public bool Abstract { get; } = false; public bool Abstract { get; } = false;
[ViewVariables] [ViewVariables]
@@ -29,10 +28,10 @@ namespace Content.Shared.Materials
/// between the material and physical entities you can carry, /// between the material and physical entities you can carry,
/// include which stack we should spawn by default. /// include which stack we should spawn by default.
/// </summary> /// </summary>
[DataField("stackEntity", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))] [DataField]
public string? StackEntity; public ProtoId<EntityPrototype>? StackEntity;
[DataField("name")] [DataField]
public string Name = string.Empty; public string Name = string.Empty;
/// <summary> /// <summary>
@@ -40,22 +39,22 @@ namespace Content.Shared.Materials
/// Lathe recipe tooltips and material storage display use this to let you change a material to sound nicer. /// Lathe recipe tooltips and material storage display use this to let you change a material to sound nicer.
/// For example, 5 bars of gold is better than 5 sheets of gold. /// For example, 5 bars of gold is better than 5 sheets of gold.
/// </summary> /// </summary>
[DataField("unit")] [DataField]
public string Unit = "materials-unit-sheet"; public LocId Unit = "materials-unit-sheet";
[DataField("color")] [DataField]
public Color Color { get; private set; } = Color.Gray; public Color Color { get; private set; } = Color.Gray;
/// <summary> /// <summary>
/// An icon used to represent the material in graphic interfaces. /// An icon used to represent the material in graphic interfaces.
/// </summary> /// </summary>
[DataField("icon")] [DataField]
public SpriteSpecifier Icon { get; private set; } = SpriteSpecifier.Invalid; public SpriteSpecifier Icon { get; private set; } = SpriteSpecifier.Invalid;
/// <summary> /// <summary>
/// The price per cm3. /// The price per cm3.
/// </summary> /// </summary>
[DataField("price", required: true)] [DataField(required: true)]
public double Price = 0; public double Price = 0;
} }
} }

View File

@@ -1,5 +1,4 @@
using Content.Shared.Nutrition.Components; using Content.Shared.Storage;
using Content.Shared.Storage;
using Content.Shared.Whitelist; using Content.Shared.Whitelist;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom;
@@ -16,93 +15,93 @@ public sealed partial class ReproductiveComponent : Component
/// <summary> /// <summary>
/// The next time when breeding will be attempted. /// The next time when breeding will be attempted.
/// </summary> /// </summary>
[DataField("nextBreedAttempt", customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)] [DataField(customTypeSerializer: typeof(TimeOffsetSerializer)), ViewVariables(VVAccess.ReadWrite)]
public TimeSpan NextBreedAttempt; public TimeSpan NextBreedAttempt;
/// <summary> /// <summary>
/// Minimum length between each attempt to breed. /// Minimum length between each attempt to breed.
/// </summary> /// </summary>
[DataField("minBreedAttemptInterval"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public TimeSpan MinBreedAttemptInterval = TimeSpan.FromSeconds(45); public TimeSpan MinBreedAttemptInterval = TimeSpan.FromSeconds(45);
/// <summary> /// <summary>
/// Maximum length between each attempt to breed. /// Maximum length between each attempt to breed.
/// </summary> /// </summary>
[DataField("maxBreedAttemptInterval"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public TimeSpan MaxBreedAttemptInterval = TimeSpan.FromSeconds(60); public TimeSpan MaxBreedAttemptInterval = TimeSpan.FromSeconds(60);
/// <summary> /// <summary>
/// How close to a partner an entity must be in order to breed. /// How close to a partner an entity must be in order to breed.
/// Unrealistically long. /// Unrealistically long.
/// </summary> /// </summary>
[DataField("breedRange"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float BreedRange = 3f; public float BreedRange = 3f;
/// <summary> /// <summary>
/// How many other entities with this component are allowed in range before we stop. /// How many other entities with this component are allowed in range before we stop.
/// </summary> /// </summary>
[DataField("capacity"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public int Capacity = 6; public int Capacity = 6;
/// <summary> /// <summary>
/// The chance that, on a given attempt, /// The chance that, on a given attempt,
/// for each valid partner, the entity will breed. /// for each valid partner, the entity will breed.
/// </summary> /// </summary>
[DataField("breedChance"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float BreedChance = 0.15f; public float BreedChance = 0.15f;
/// <summary> /// <summary>
/// Entity prototypes for what type of /// Entity prototypes for what type of
/// offspring can be produced by this entity. /// offspring can be produced by this entity.
/// </summary> /// </summary>
[DataField("offspring", required: true)] [DataField(required: true)]
public List<EntitySpawnEntry> Offspring = default!; public List<EntitySpawnEntry> Offspring = default!;
/// <summary> /// <summary>
/// Whether or not this entity has bred successfully /// Whether or not this entity has bred successfully
/// and will produce offspring imminently /// and will produce offspring imminently
/// </summary> /// </summary>
[DataField("gestating")] [DataField]
public bool Gestating; public bool Gestating;
/// <summary> /// <summary>
/// When gestation will end. /// When gestation will end.
/// Null if <see cref="Gestating"/> is false /// Null if <see cref="Gestating"/> is false
/// </summary> /// </summary>
[DataField("gestationEndTime"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public TimeSpan? GestationEndTime; public TimeSpan? GestationEndTime;
/// <summary> /// <summary>
/// How long it takes the entity after breeding /// How long it takes the entity after breeding
/// to produce offspring /// to produce offspring
/// </summary> /// </summary>
[DataField("gestationDuration"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public TimeSpan GestationDuration = TimeSpan.FromMinutes(1.5); public TimeSpan GestationDuration = TimeSpan.FromMinutes(1.5);
/// <summary> /// <summary>
/// How much hunger is consumed when an entity /// How much hunger is consumed when an entity
/// gives birth. A balancing tool to require feeding. /// gives birth. A balancing tool to require feeding.
/// </summary> /// </summary>
[DataField("hungerPerBirth"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public float HungerPerBirth = 75f; public float HungerPerBirth = 75f;
/// <summary> /// <summary>
/// Popup shown when an entity gives birth. /// Popup shown when an entity gives birth.
/// Configurable for things like laying eggs. /// Configurable for things like laying eggs.
/// </summary> /// </summary>
[DataField("birthPopup"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public string BirthPopup = "reproductive-birth-popup"; public LocId BirthPopup = "reproductive-birth-popup";
/// <summary> /// <summary>
/// Whether or not the offspring should be made into "infants". /// Whether or not the offspring should be made into "infants".
/// </summary> /// </summary>
[DataField("makeOffspringInfant"), ViewVariables(VVAccess.ReadWrite)] [DataField, ViewVariables(VVAccess.ReadWrite)]
public bool MakeOffspringInfant = true; public bool MakeOffspringInfant = true;
/// <summary> /// <summary>
/// An entity whitelist for what entities /// An entity whitelist for what entities
/// can be this one's partner. /// can be this one's partner.
/// </summary> /// </summary>
[DataField("partnerWhitelist", required: true)] [DataField(required: true)]
public EntityWhitelist PartnerWhitelist = default!; public EntityWhitelist PartnerWhitelist = default!;
} }

View File

@@ -94,7 +94,7 @@
- type: WiresPanel - type: WiresPanel
- type: ActivatableUIRequiresPanel - type: ActivatableUIRequiresPanel
- type: Wires - type: Wires
LayoutId: Borg layoutId: Borg
- type: NameIdentifier - type: NameIdentifier
group: Silicon group: Silicon
- type: ContainerContainer - type: ContainerContainer

View File

@@ -61,7 +61,7 @@
toggleAction: ActionAGhostShowStationRecords toggleAction: ActionAGhostShowStationRecords
- type: SolarControlConsole # look ma i AM the computer! - type: SolarControlConsole # look ma i AM the computer!
- type: CommunicationsConsole - type: CommunicationsConsole
title: communicationsconsole-announcement-title-centcom title: comms-console-announcement-title-centcom
color: "#228b22" color: "#228b22"
- type: RadarConsole - type: RadarConsole
- type: CargoOrderConsole - type: CargoOrderConsole

View File

@@ -164,8 +164,8 @@
- type: WiresVisuals - type: WiresVisuals
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-dawinstrument boardName: wires-board-name-dawinstrument
LayoutId: DawInstrument layoutId: DawInstrument
- type: Machine - type: Machine
board: DawInstrumentMachineCircuitboard board: DawInstrumentMachineCircuitboard
- type: Instrument - type: Instrument

View File

@@ -54,8 +54,8 @@
- type: Clickable - type: Clickable
- type: WiresPanel - type: WiresPanel
- type: Wires #we just want the panel - type: Wires #we just want the panel
BoardName: wires-board-name-mech boardName: wires-board-name-mech
LayoutId: Mech layoutId: Mech
- type: Fixtures - type: Fixtures
fixtures: fixtures:
fix1: fix1:

View File

@@ -17,8 +17,8 @@
- type: Machine - type: Machine
board: BoozeDispenserMachineCircuitboard board: BoozeDispenserMachineCircuitboard
- type: Wires - type: Wires
BoardName: wires-board-name-booze boardName: wires-board-name-booze
LayoutId: BoozeDispenser layoutId: BoozeDispenser
- type: GuideHelp - type: GuideHelp
guides: guides:
- Bartender - Bartender

View File

@@ -26,8 +26,8 @@
- type: Machine - type: Machine
board: ChemDispenserMachineCircuitboard board: ChemDispenserMachineCircuitboard
- type: Wires - type: Wires
BoardName: wires-board-name-chemdispenser boardName: wires-board-name-chemdispenser
LayoutId: ChemDispenser layoutId: ChemDispenser
- type: UpgradePowerDraw - type: UpgradePowerDraw
powerDrawMultiplier: 0.75 powerDrawMultiplier: 0.75
scaling: Exponential scaling: Exponential

View File

@@ -17,8 +17,8 @@
- type: Machine - type: Machine
board: SodaDispenserMachineCircuitboard board: SodaDispenserMachineCircuitboard
- type: Wires - type: Wires
BoardName: wires-board-name-soda boardName: wires-board-name-soda
LayoutId: SodaDispenser layoutId: SodaDispenser
- type: GuideHelp - type: GuideHelp
guides: guides:
- Bartender - Bartender

View File

@@ -207,7 +207,7 @@
- type: AccessReader - type: AccessReader
access: [["Command"]] access: [["Command"]]
- type: Wires - type: Wires
LayoutId: AirlockCommand layoutId: AirlockCommand
- type: entity - type: entity
parent: AirlockCommand parent: AirlockCommand
@@ -273,7 +273,7 @@
- type: AccessReader - type: AccessReader
access: [["Security"]] access: [["Security"]]
- type: Wires - type: Wires
LayoutId: AirlockSecurity layoutId: AirlockSecurity
- type: entity - type: entity
parent: AirlockSecurity parent: AirlockSecurity
@@ -283,7 +283,7 @@
- type: AccessReader - type: AccessReader
access: [["Detective"]] access: [["Detective"]]
- type: Wires - type: Wires
LayoutId: AirlockSecurity layoutId: AirlockSecurity
- type: entity - type: entity
parent: AirlockSecurity parent: AirlockSecurity
@@ -293,7 +293,7 @@
- type: AccessReader - type: AccessReader
access: [["Brig"]] access: [["Brig"]]
- type: Wires - type: Wires
LayoutId: AirlockSecurity layoutId: AirlockSecurity
- type: entity - type: entity
parent: AirlockSecurity parent: AirlockSecurity
@@ -303,7 +303,7 @@
- type: AccessReader - type: AccessReader
access: [["Armory"]] access: [["Armory"]]
- type: Wires - type: Wires
LayoutId: AirlockArmory layoutId: AirlockArmory
- type: entity - type: entity
parent: AirlockSecurity parent: AirlockSecurity

View File

@@ -76,8 +76,8 @@
- type: WiresPanel - type: WiresPanel
- type: WiresPanelSecurity - type: WiresPanelSecurity
- type: Wires - type: Wires
BoardName: wires-board-name-airlock boardName: wires-board-name-airlock
LayoutId: Airlock layoutId: Airlock
- type: DoorSignalControl - type: DoorSignalControl
- type: DeviceNetwork - type: DeviceNetwork
deviceNetId: Wireless deviceNetId: Wireless
@@ -134,7 +134,7 @@
price: 150 price: 150
- type: Tag - type: Tag
tags: tags:
- Airlock - Airlock
# This tag is used to nagivate the Airlock construction graph. It's needed because the construction graph is shared between Airlock, AirlockGlass, and HighSecDoor # This tag is used to nagivate the Airlock construction graph. It's needed because the construction graph is shared between Airlock, AirlockGlass, and HighSecDoor
placement: placement:
mode: SnapgridCenter mode: SnapgridCenter

View File

@@ -70,8 +70,8 @@
- type: WiresPanelSecurity - type: WiresPanelSecurity
securityLevel: maxSecurity securityLevel: maxSecurity
- type: Wires - type: Wires
BoardName: wires-board-name-highsec boardName: wires-board-name-highsec
LayoutId: HighSec layoutId: HighSec
alwaysRandomize: true alwaysRandomize: true
- type: UserInterface - type: UserInterface
interfaces: interfaces:
@@ -100,4 +100,4 @@
- type: Tag - type: Tag
tags: tags:
- HighSecDoor - HighSecDoor
# This tag is used to nagivate the Airlock construction graph. It's needed because this construction graph is shared between Airlock, AirlockGlass, and HighSecDoor # This tag is used to nagivate the Airlock construction graph. It's needed because this construction graph is shared between Airlock, AirlockGlass, and HighSecDoor

View File

@@ -43,7 +43,7 @@
- state: panel_open - state: panel_open
map: ["enum.WiresVisualLayers.MaintenancePanel"] map: ["enum.WiresVisualLayers.MaintenancePanel"]
- type: Wires - type: Wires
LayoutId: Docking layoutId: Docking
- type: Door - type: Door
bumpOpen: false bumpOpen: false
closeTimeTwo: 0.4 closeTimeTwo: 0.4

View File

@@ -84,8 +84,8 @@
- type: WiresVisuals - type: WiresVisuals
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-firelock boardName: wires-board-name-firelock
LayoutId: Firelock layoutId: Firelock
- type: UserInterface - type: UserInterface
interfaces: interfaces:
- key: enum.WiresUiKey.Key - key: enum.WiresUiKey.Key

View File

@@ -118,8 +118,8 @@
usesApcPower: true usesApcPower: true
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-windoor boardName: wires-board-name-windoor
LayoutId: Airlock layoutId: Airlock
- type: UserInterface - type: UserInterface
interfaces: interfaces:
- key: enum.WiresUiKey.Key - key: enum.WiresUiKey.Key

View File

@@ -87,8 +87,8 @@
- PlushieHampter - PlushieHampter
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
LayoutId: Arcade layoutId: Arcade
BoardName: wires-board-name-arcade boardName: wires-board-name-arcade
- type: ActivatableUI - type: ActivatableUI
key: enum.SpaceVillainArcadeUiKey.Key key: enum.SpaceVillainArcadeUiKey.Key
- type: ActivatableUIRequiresPower - type: ActivatableUIRequiresPower
@@ -129,8 +129,8 @@
- type: ActivatableUIRequiresPower - type: ActivatableUIRequiresPower
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
LayoutId: Arcade layoutId: Arcade
BoardName: wires-board-name-arcade boardName: wires-board-name-arcade
- type: UserInterface - type: UserInterface
interfaces: interfaces:
- key: enum.BlockGameUiKey.Key - key: enum.BlockGameUiKey.Key

View File

@@ -51,8 +51,8 @@
- type: WiresVisuals - type: WiresVisuals
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-cryopod boardName: wires-board-name-cryopod
LayoutId: CryoPod layoutId: CryoPod
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic
damageModifierSet: Metallic damageModifierSet: Metallic

View File

@@ -38,8 +38,8 @@
- type: Appearance - type: Appearance
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-vessel boardName: wires-board-name-vessel
LayoutId: Vessel layoutId: Vessel
- type: AmbientSound - type: AmbientSound
enabled: false enabled: false
range: 3 range: 3
@@ -175,8 +175,8 @@
- type: WiresPanel - type: WiresPanel
- type: WiresVisuals - type: WiresVisuals
- type: Wires - type: Wires
BoardName: wires-board-name-ape boardName: wires-board-name-ape
LayoutId: Ape layoutId: Ape
- type: GenericVisualizer - type: GenericVisualizer
visuals: visuals:
enum.PowerDeviceVisuals.Powered: enum.PowerDeviceVisuals.Powered:
@@ -264,8 +264,8 @@
doAfterDelay: 5 doAfterDelay: 5
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-anomalygenerator boardName: wires-board-name-anomalygenerator
LayoutId: AnomalyGenerator layoutId: AnomalyGenerator
- type: Destructible - type: Destructible
thresholds: thresholds:
- trigger: - trigger:

View File

@@ -13,7 +13,7 @@
- key: enum.WiresUiKey.Key - key: enum.WiresUiKey.Key
type: WiresBoundUserInterface type: WiresBoundUserInterface
- type: Wires - type: Wires
LayoutId: Defusable layoutId: Defusable
alwaysRandomize: true alwaysRandomize: true
- type: Defusable - type: Defusable
- type: Rotatable - type: Rotatable
@@ -56,7 +56,7 @@
description: A bomb for dummies, manual not included. description: A bomb for dummies, manual not included.
components: components:
- type: Wires - type: Wires
LayoutId: Defusable layoutId: Defusable
alwaysRandomize: true alwaysRandomize: true
- type: Sprite - type: Sprite
sprite: Structures/Machines/bomb.rsi sprite: Structures/Machines/bomb.rsi

View File

@@ -61,8 +61,8 @@
# Machine / Construction stuff # Machine / Construction stuff
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-chemmaster boardName: wires-board-name-chemmaster
LayoutId: chem_master layoutId: chem_master
- type: Machine - type: Machine
board: ChemMasterMachineCircuitboard board: ChemMasterMachineCircuitboard
- type: ContainerContainer - type: ContainerContainer

View File

@@ -61,8 +61,8 @@
- Biomass - Biomass
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-cloningpod boardName: wires-board-name-cloningpod
LayoutId: CloningPod layoutId: CloningPod
- type: ApcPowerReceiver - type: ApcPowerReceiver
powerLoad: 200 #Receives most of its power from the console powerLoad: 200 #Receives most of its power from the console
- type: Appearance - type: Appearance

View File

@@ -96,8 +96,8 @@
board: FatExtractorMachineCircuitboard board: FatExtractorMachineCircuitboard
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-fatextractor boardName: wires-board-name-fatextractor
LayoutId: FatExtractor layoutId: FatExtractor
- type: Appearance - type: Appearance
- type: Speech - type: Speech
speechVerb: Robotic speechVerb: Robotic

View File

@@ -121,8 +121,8 @@
max: 1 max: 1
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-minigravitygenerator boardName: wires-board-name-minigravitygenerator
LayoutId: MiniGravityGenerator layoutId: MiniGravityGenerator
- type: Machine - type: Machine
board: MiniGravityGeneratorCircuitboard board: MiniGravityGeneratorCircuitboard
- type: ApcPowerReceiver - type: ApcPowerReceiver

View File

@@ -31,8 +31,8 @@
acts: ["Destruction"] acts: ["Destruction"]
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-autolathe boardName: wires-board-name-autolathe
LayoutId: Autolathe layoutId: Autolathe
- type: ActivatableUI - type: ActivatableUI
key: enum.LatheUiKey.Key key: enum.LatheUiKey.Key
- type: ActivatableUIRequiresPower - type: ActivatableUIRequiresPower
@@ -187,8 +187,8 @@
- type: Machine - type: Machine
board: ProtolatheMachineCircuitboard board: ProtolatheMachineCircuitboard
- type: Wires - type: Wires
BoardName: wires-board-name-protolathe boardName: wires-board-name-protolathe
LayoutId: Protolathe layoutId: Protolathe
- type: MaterialStorage - type: MaterialStorage
whitelist: whitelist:
tags: tags:

View File

@@ -59,8 +59,8 @@
board: MaterialReclaimerMachineCircuitboard board: MaterialReclaimerMachineCircuitboard
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-reclaimer boardName: wires-board-name-reclaimer
LayoutId: Reclaimer layoutId: Reclaimer
- type: MaterialReclaimer - type: MaterialReclaimer
whitelist: whitelist:
components: components:

View File

@@ -78,8 +78,8 @@
board: MedicalScannerMachineCircuitboard board: MedicalScannerMachineCircuitboard
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-medicalscanner boardName: wires-board-name-medicalscanner
LayoutId: MedicalScanner layoutId: MedicalScanner
- type: Appearance - type: Appearance
- type: Climbable - type: Climbable
- type: ApcPowerReceiver - type: ApcPowerReceiver

View File

@@ -24,7 +24,7 @@
- type: ExtensionCableReceiver - type: ExtensionCableReceiver
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
LayoutId: rndserver layoutId: rndserver
- type: WiresVisuals - type: WiresVisuals
- type: Machine - type: Machine
board: ResearchAndDevelopmentServerMachineCircuitboard board: ResearchAndDevelopmentServerMachineCircuitboard

View File

@@ -49,8 +49,8 @@
board: TelecomServerCircuitboard board: TelecomServerCircuitboard
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-telecomserver boardName: wires-board-name-telecomserver
LayoutId: TelecomServer layoutId: TelecomServer
- type: Transform - type: Transform
anchored: true anchored: true
- type: Pullable - type: Pullable

View File

@@ -64,8 +64,8 @@
type: WiresBoundUserInterface type: WiresBoundUserInterface
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-vendingmachine boardName: wires-board-name-vendingmachine
LayoutId: Vending layoutId: Vending
- type: Anchorable - type: Anchorable
- type: TypingIndicator - type: TypingIndicator
proto: robot proto: robot

View File

@@ -241,8 +241,8 @@
key: enum.ThermomachineUiKey.Key key: enum.ThermomachineUiKey.Key
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-thermomachine boardName: wires-board-name-thermomachine
LayoutId: Thermomachine layoutId: Thermomachine
- type: WiresVisuals - type: WiresVisuals
- type: NodeContainer - type: NodeContainer
nodes: nodes:

View File

@@ -23,8 +23,8 @@
type: WiresBoundUserInterface type: WiresBoundUserInterface
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-pa boardName: wires-board-name-pa
LayoutId: ParticleAccelerator layoutId: ParticleAccelerator
# Unfinished # Unfinished

View File

@@ -43,8 +43,8 @@
# Construction, interaction # Construction, interaction
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-generator boardName: wires-board-name-generator
LayoutId: Generator layoutId: Generator
- type: UserInterface - type: UserInterface
interfaces: interfaces:
- key: enum.GeneratorComponentUiKey.Key - key: enum.GeneratorComponentUiKey.Key

View File

@@ -91,8 +91,8 @@
- type: WallMount - type: WallMount
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-apc boardName: wires-board-name-apc
LayoutId: APC layoutId: APC
- type: WiresVisuals - type: WiresVisuals
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic

View File

@@ -213,7 +213,7 @@
- machine_board - machine_board
- entity_storage - entity_storage
- type: Wires - type: Wires
LayoutId: borgcharger layoutId: borgcharger
- type: WiresPanel - type: WiresPanel
- type: WiresVisuals - type: WiresVisuals
- type: Machine - type: Machine

View File

@@ -63,8 +63,8 @@
castShadows: false castShadows: false
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-smes boardName: wires-board-name-smes
LayoutId: SMES layoutId: SMES
- type: Machine - type: Machine
board: SMESMachineCircuitboard board: SMESMachineCircuitboard
- type: StationInfiniteBatteryTarget - type: StationInfiniteBatteryTarget

View File

@@ -87,8 +87,8 @@
totalIntensity: 200 totalIntensity: 200
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-substation boardName: wires-board-name-substation
LayoutId: Substation layoutId: Substation
- type: Machine - type: Machine
board: SubstationMachineCircuitboard board: SubstationMachineCircuitboard
- type: StationInfiniteBatteryTarget - type: StationInfiniteBatteryTarget

View File

@@ -59,8 +59,8 @@
type: WiresBoundUserInterface type: WiresBoundUserInterface
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-airalarm boardName: wires-board-name-airalarm
LayoutId: AirAlarm layoutId: AirAlarm
- type: AccessReader - type: AccessReader
access: [["Atmospherics"]] access: [["Atmospherics"]]
- type: ContainerFill - type: ContainerFill

View File

@@ -66,8 +66,8 @@
type: WiresBoundUserInterface type: WiresBoundUserInterface
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-firealarm boardName: wires-board-name-firealarm
LayoutId: FireAlarm layoutId: FireAlarm
- type: Sprite - type: Sprite
sprite: Structures/Wallmounts/air_monitors.rsi sprite: Structures/Wallmounts/air_monitors.rsi
layers: layers:

View File

@@ -50,8 +50,8 @@
anchored: true anchored: true
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-intercom boardName: wires-board-name-intercom
LayoutId: Intercom layoutId: Intercom
- type: ActivatableUIRequiresPower - type: ActivatableUIRequiresPower
- type: ActivatableUI - type: ActivatableUI
key: enum.IntercomUiKey.Key key: enum.IntercomUiKey.Key

View File

@@ -23,7 +23,7 @@
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
alwaysRandomize: true alwaysRandomize: true
LayoutId: SurveillanceCamera layoutId: SurveillanceCamera
- type: Damageable - type: Damageable
damageContainer: Inorganic damageContainer: Inorganic
damageModifierSet: Metallic damageModifierSet: Metallic

View File

@@ -79,8 +79,8 @@
board: HydroponicsTrayMachineCircuitboard board: HydroponicsTrayMachineCircuitboard
- type: WiresPanel - type: WiresPanel
- type: Wires - type: Wires
BoardName: wires-board-name-hydroponicstray boardName: wires-board-name-hydroponicstray
LayoutId: HydroponicsTray layoutId: HydroponicsTray
- type: AmbientSound - type: AmbientSound
volume: -9 volume: -9
range: 5 range: 5