mirror of
https://github.com/space-syndicate/space-station-14.git
synced 2026-10-11 19:31:12 +03:00
# Conflicts: # Content.Server/Administration/Systems/AdminSystem.cs # Content.Server/Doors/Systems/AirlockSystem.cs # Content.Server/Holopad/HolopadSystem.cs # Content.Server/Humanoid/Systems/HumanoidAppearanceSystem.cs # Resources/Prototypes/Catalog/Fills/Lockers/heads.yml # Resources/Prototypes/Catalog/VendingMachines/Inventories/curadrobe.yml # Resources/Prototypes/Datasets/Names/borg.yml # Resources/Prototypes/Datasets/ion_storm.yml # Resources/Prototypes/Entities/Clothing/Head/hardsuit-helmets.yml # Resources/Prototypes/Entities/Clothing/Neck/mantles.yml # Resources/Prototypes/Entities/Objects/Weapons/Guns/Shotguns/shotguns.yml # Resources/Prototypes/Entities/Stations/base.yml # Resources/Prototypes/Entities/Structures/Machines/lathe.yml # Resources/Prototypes/Maps/amber.yml # Resources/Prototypes/Maps/box.yml # Resources/Prototypes/Maps/convex.yml # Resources/Prototypes/Maps/fland.yml # Resources/Prototypes/Maps/meta.yml # Resources/Prototypes/Maps/plasma.yml # Resources/ServerInfo/Guidebook/Engineering/AME.xml # Resources/ServerInfo/Guidebook/Engineering/AirlockSecurity.xml # Resources/ServerInfo/Guidebook/Engineering/Atmospherics.xml # Resources/ServerInfo/Guidebook/Engineering/Construction.xml # Resources/ServerInfo/Guidebook/Engineering/Engineering.xml # Resources/ServerInfo/Guidebook/Engineering/Fires.xml # Resources/ServerInfo/Guidebook/Engineering/NetworkConfigurator.xml # Resources/ServerInfo/Guidebook/Engineering/Networking.xml # Resources/ServerInfo/Guidebook/Engineering/PortableGenerator.xml # Resources/ServerInfo/Guidebook/Engineering/Power.xml # Resources/ServerInfo/Guidebook/Engineering/RTG.xml # Resources/ServerInfo/Guidebook/Engineering/Shuttlecraft.xml # Resources/ServerInfo/Guidebook/Engineering/Singularity.xml # Resources/ServerInfo/Guidebook/Engineering/TEG.xml # Resources/ServerInfo/Guidebook/NewPlayer/Controls/Controls.xml # Resources/Textures/Clothing/Head/Helmets/paramedhelm.rsi/icon.png # Resources/Textures/Clothing/Head/Helmets/paramedhelm.rsi/inhand-left.png # Resources/Textures/Clothing/Head/Helmets/paramedhelm.rsi/inhand-right.png # Resources/Textures/Clothing/OuterClothing/Hardsuits/goliath.rsi/meta.json # Resources/Textures/Clothing/OuterClothing/Hardsuits/paramed.rsi/meta.json # Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/equipped-OUTERCLOTHING.png # Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/icon.png # Resources/Textures/Clothing/OuterClothing/Vests/hazard.rsi/meta.json # Resources/Textures/Clothing/Uniforms/Jumpsuit/ancient.rsi/meta.json # Resources/Textures/Clothing/Uniforms/Jumpsuit/security_trooper.rsi/inhand-right.png # Resources/Textures/Interface/Actions/actions_fakemindshield.rsi/icon-on.png # Resources/Textures/Objects/Storage/Briefcases/briefcase_brown.rsi/icon.png # Resources/Textures/Objects/Storage/Briefcases/briefcase_brown.rsi/meta.json # Resources/Textures/Objects/Storage/boxes.rsi/beaker.png # Resources/Textures/Objects/Storage/boxes.rsi/bodybags.png # Resources/Textures/Objects/Storage/boxes.rsi/bottle.png # Resources/Textures/Objects/Storage/boxes.rsi/box.png # Resources/Textures/Objects/Storage/boxes.rsi/box_hug.png # Resources/Textures/Objects/Storage/boxes.rsi/box_of_doom.png # Resources/Textures/Objects/Storage/boxes.rsi/box_of_doom_big.png # Resources/Textures/Objects/Storage/boxes.rsi/box_science.png # Resources/Textures/Objects/Storage/boxes.rsi/box_security.png # Resources/Textures/Objects/Storage/boxes.rsi/boxwide.png # Resources/Textures/Objects/Storage/boxes.rsi/boxwidetoy.png # Resources/Textures/Objects/Storage/boxes.rsi/candle.png # Resources/Textures/Objects/Storage/boxes.rsi/circuit.png # Resources/Textures/Objects/Storage/boxes.rsi/clown.png # Resources/Textures/Objects/Storage/boxes.rsi/darts.png # Resources/Textures/Objects/Storage/boxes.rsi/disk.png # Resources/Textures/Objects/Storage/boxes.rsi/emergencytank.png # Resources/Textures/Objects/Storage/boxes.rsi/encryptokey.png # Resources/Textures/Objects/Storage/boxes.rsi/evidence_markers.png # Resources/Textures/Objects/Storage/boxes.rsi/extendedtank.png # Resources/Textures/Objects/Storage/boxes.rsi/flare.png # Resources/Textures/Objects/Storage/boxes.rsi/flashbang.png # Resources/Textures/Objects/Storage/boxes.rsi/forensic.png # Resources/Textures/Objects/Storage/boxes.rsi/glasses.png # Resources/Textures/Objects/Storage/boxes.rsi/handcuff.png # Resources/Textures/Objects/Storage/boxes.rsi/headset.png # Resources/Textures/Objects/Storage/boxes.rsi/heart.png # Resources/Textures/Objects/Storage/boxes.rsi/holo.png # Resources/Textures/Objects/Storage/boxes.rsi/implant.png # Resources/Textures/Objects/Storage/boxes.rsi/inflatable.png # Resources/Textures/Objects/Storage/boxes.rsi/internals.png # Resources/Textures/Objects/Storage/boxes.rsi/latex.png # Resources/Textures/Objects/Storage/boxes.rsi/light.png # Resources/Textures/Objects/Storage/boxes.rsi/lightmixed.png # Resources/Textures/Objects/Storage/boxes.rsi/lighttube.png # Resources/Textures/Objects/Storage/boxes.rsi/magazine.png # Resources/Textures/Objects/Storage/boxes.rsi/meson.png # Resources/Textures/Objects/Storage/boxes.rsi/meta.json # Resources/Textures/Objects/Storage/boxes.rsi/mousetraps.png # Resources/Textures/Objects/Storage/boxes.rsi/nitrile.png # Resources/Textures/Objects/Storage/boxes.rsi/omegacart.png # Resources/Textures/Objects/Storage/boxes.rsi/pda.png # Resources/Textures/Objects/Storage/boxes.rsi/pillbox.png # Resources/Textures/Objects/Storage/boxes.rsi/sechud.png # Resources/Textures/Objects/Storage/boxes.rsi/shellbeanbag.png # Resources/Textures/Objects/Storage/boxes.rsi/shellflare.png # Resources/Textures/Objects/Storage/boxes.rsi/shellflash.png # Resources/Textures/Objects/Storage/boxes.rsi/shellincendiary.png # Resources/Textures/Objects/Storage/boxes.rsi/shelllethal.png # Resources/Textures/Objects/Storage/boxes.rsi/shellpractice.png # Resources/Textures/Objects/Storage/boxes.rsi/shellslug.png # Resources/Textures/Objects/Storage/boxes.rsi/shelltoy.png # Resources/Textures/Objects/Storage/boxes.rsi/solution_trays.png # Resources/Textures/Objects/Storage/boxes.rsi/sterile.png # Resources/Textures/Objects/Storage/boxes.rsi/swab.png # Resources/Textures/Objects/Storage/boxes.rsi/syringe.png # Resources/Textures/Objects/Storage/boxes.rsi/trashbag.png # Resources/Textures/Objects/Storage/boxes.rsi/vials.png # Resources/Textures/Objects/Storage/boxes.rsi/writing.png # Resources/Textures/Objects/Storage/boxes.rsi/writing_of_doom.png # Resources/Textures/Objects/Storage/boxes.rsi/ziptie.png # Resources/Textures/Objects/Tiles/tile.rsi/meta.json # Resources/Textures/Objects/Weapons/Grenades/empgrenade.rsi/icon.png # Resources/Textures/Objects/Weapons/Grenades/empgrenade.rsi/meta.json # Resources/Textures/Objects/Weapons/Grenades/empgrenade.rsi/primed.png # Resources/Textures/Objects/Weapons/Grenades/flashbang.rsi/icon.png # Resources/Textures/Objects/Weapons/Grenades/flashbang.rsi/meta.json # Resources/Textures/Objects/Weapons/Grenades/flashbang.rsi/primed.png # Resources/Textures/Objects/Weapons/Grenades/stingergrenade.rsi/icon.png # Resources/Textures/Objects/Weapons/Grenades/stingergrenade.rsi/meta.json # Resources/Textures/Objects/Weapons/Grenades/stingergrenade.rsi/primed.png # Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/base.png # Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/icon.png # Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-1.png # Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-2.png # Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-3.png # Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/mag-unshaded-4.png # Resources/Textures/Objects/Weapons/Guns/Battery/antiquelasergun.rsi/meta.json # Resources/Textures/Objects/Weapons/Guns/Rifles/lecter.rsi/equipped-BACKPACK.png # Resources/Textures/Objects/Weapons/Guns/SMGs/vector.rsi/equipped-BACKPACK.png # Resources/Textures/Objects/Weapons/Guns/Shotguns/pump.rsi/equipped-BACKPACK.png
192 lines
5.6 KiB
C#
192 lines
5.6 KiB
C#
using Content.Shared.Containers.ItemSlots;
|
|
using Content.Shared.Paper;
|
|
using Robust.Shared.Audio;
|
|
using Robust.Shared.GameStates;
|
|
using Robust.Shared.Prototypes;
|
|
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
|
|
|
|
namespace Content.Shared.Fax.Components;
|
|
|
|
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
|
|
public sealed partial class FaxMachineComponent : Component
|
|
{
|
|
/// <summary>
|
|
/// Name with which the fax will be visible to others on the network
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
[DataField("name")]
|
|
public string FaxName { get; set; } = "Unknown";
|
|
|
|
/// <summary>
|
|
/// Sprite to use when inserting an object.
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
[DataField, AutoNetworkedField]
|
|
public string InsertingState = "inserting";
|
|
|
|
/// <summary>
|
|
/// Device address of fax in network to which data will be send
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
[DataField("destinationAddress")]
|
|
public string? DestinationFaxAddress { get; set; }
|
|
|
|
/// <summary>
|
|
/// Contains the item to be sent, assumes it's paper...
|
|
/// </summary>
|
|
[DataField(required: true)]
|
|
public ItemSlot PaperSlot = new();
|
|
|
|
/// <summary>
|
|
/// Is fax machine should respond to pings in network
|
|
/// This will make it visible to others on the network
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
[DataField]
|
|
public bool ResponsePings { get; set; } = true;
|
|
|
|
/// <summary>
|
|
/// Should admins be notified on message receive
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
[DataField]
|
|
public bool NotifyAdmins { get; set; } = false;
|
|
|
|
/// <summary>
|
|
/// Should that fax receive nuke codes send by admins. Probably should be captain fax only
|
|
/// </summary>
|
|
[ViewVariables(VVAccess.ReadWrite)]
|
|
[DataField]
|
|
public bool ReceiveNukeCodes { get; set; } = false;
|
|
|
|
// Corvax-StationGoal-Start
|
|
/// <summary>
|
|
/// Should that fax receive station goal info
|
|
/// </summary>
|
|
[DataField]
|
|
public bool ReceiveStationGoal { get; set; }
|
|
|
|
/// <summary>
|
|
/// Should that fax receive station goals from other stations
|
|
/// </summary>
|
|
[DataField]
|
|
public bool ReceiveAllStationGoals { get; set; }
|
|
// Corvax-StationGoal-End
|
|
|
|
/// <summary>
|
|
/// Sound to play when fax printing new message
|
|
/// </summary>
|
|
[DataField]
|
|
public SoundSpecifier PrintSound = new SoundPathSpecifier("/Audio/Machines/printer.ogg");
|
|
|
|
/// <summary>
|
|
/// Sound to play when fax successfully send message
|
|
/// </summary>
|
|
[DataField]
|
|
public SoundSpecifier SendSound = new SoundPathSpecifier("/Audio/Machines/high_tech_confirm.ogg");
|
|
|
|
/// <summary>
|
|
/// Known faxes in network by address with fax names
|
|
/// </summary>
|
|
[ViewVariables]
|
|
public Dictionary<string, string> KnownFaxes { get; } = new();
|
|
|
|
/// <summary>
|
|
/// Print queue of the incoming message
|
|
/// </summary>
|
|
[ViewVariables]
|
|
[DataField]
|
|
public Queue<FaxPrintout> PrintingQueue { get; private set; } = new();
|
|
|
|
/// <summary>
|
|
/// Message sending timeout
|
|
/// </summary>
|
|
[ViewVariables]
|
|
[DataField]
|
|
public float SendTimeoutRemaining;
|
|
|
|
/// <summary>
|
|
/// Message sending timeout
|
|
/// </summary>
|
|
[ViewVariables]
|
|
[DataField]
|
|
public float SendTimeout = 5f;
|
|
|
|
/// <summary>
|
|
/// Remaining time of inserting animation
|
|
/// </summary>
|
|
[DataField]
|
|
public float InsertingTimeRemaining;
|
|
|
|
/// <summary>
|
|
/// How long the inserting animation will play
|
|
/// </summary>
|
|
[ViewVariables]
|
|
public float InsertionTime = 1.88f; // 0.02 off for correct animation
|
|
|
|
/// <summary>
|
|
/// Remaining time of printing animation
|
|
/// </summary>
|
|
[DataField]
|
|
public float PrintingTimeRemaining;
|
|
|
|
/// <summary>
|
|
/// How long the printing animation will play
|
|
/// </summary>
|
|
[ViewVariables]
|
|
public float PrintingTime = 2.3f;
|
|
|
|
/// <summary>
|
|
/// The prototype ID to use for faxed or copied entities if we can't get one from
|
|
/// the paper entity for whatever reason.
|
|
/// </summary>
|
|
[DataField]
|
|
public EntProtoId PrintPaperId = "Paper";
|
|
|
|
/// <summary>
|
|
/// The prototype ID to use for faxed or copied entities if we can't get one from
|
|
/// the paper entity for whatever reason of the Office type.
|
|
/// </summary>
|
|
[DataField]
|
|
public EntProtoId PrintOfficePaperId = "PaperOffice";
|
|
}
|
|
|
|
[DataDefinition]
|
|
public sealed partial class FaxPrintout
|
|
{
|
|
[DataField(required: true)]
|
|
public string Name { get; private set; } = default!;
|
|
|
|
[DataField]
|
|
public string? Label { get; private set; }
|
|
|
|
[DataField(required: true)]
|
|
public string Content { get; private set; } = default!;
|
|
|
|
[DataField(customTypeSerializer: typeof(PrototypeIdSerializer<EntityPrototype>), required: true)]
|
|
public string PrototypeId { get; private set; } = default!;
|
|
|
|
[DataField("stampState")]
|
|
public string? StampState { get; private set; }
|
|
|
|
[DataField("stampedBy")]
|
|
public List<StampDisplayInfo> StampedBy { get; private set; } = new();
|
|
|
|
[DataField]
|
|
public bool Locked { get; private set; }
|
|
|
|
private FaxPrintout()
|
|
{
|
|
}
|
|
|
|
public FaxPrintout(string content, string name, string? label = null, string? prototypeId = null, string? stampState = null, List<StampDisplayInfo>? stampedBy = null, bool locked = false)
|
|
{
|
|
Content = content;
|
|
Name = name;
|
|
Label = label;
|
|
PrototypeId = prototypeId ?? "";
|
|
StampState = stampState;
|
|
StampedBy = stampedBy ?? new List<StampDisplayInfo>();
|
|
Locked = locked;
|
|
}
|
|
}
|