diff --git a/Content.Server/_CP14/MagicSpell/CP14MagicSystem.cs b/Content.Server/_CP14/MagicSpell/CP14MagicSystem.cs index fd4d598323..8cb4a6f084 100644 --- a/Content.Server/_CP14/MagicSpell/CP14MagicSystem.cs +++ b/Content.Server/_CP14/MagicSpell/CP14MagicSystem.cs @@ -5,7 +5,6 @@ using Content.Shared._CP14.MagicSpell; using Content.Shared._CP14.MagicSpell.Components; using Content.Shared._CP14.MagicSpell.Events; using Content.Shared._CP14.MagicSpell.Spells; -using Content.Shared.EntityEffects; using Content.Shared.Whitelist; using Robust.Server.GameObjects; diff --git a/Content.Server/_CP14/Passport/CP14PassportComponent.cs b/Content.Server/_CP14/Passport/CP14PassportComponent.cs new file mode 100644 index 0000000000..e69083395b --- /dev/null +++ b/Content.Server/_CP14/Passport/CP14PassportComponent.cs @@ -0,0 +1,9 @@ +namespace Content.Server._CP14.Passport; + +/// +/// Generates a paper text confirming the identity of the player and stamps it. +/// +[RegisterComponent] +public sealed partial class CP14PassportComponent : Component +{ +} diff --git a/Content.Server/_CP14/Passport/CP14PassportSystem.cs b/Content.Server/_CP14/Passport/CP14PassportSystem.cs new file mode 100644 index 0000000000..51d81200af --- /dev/null +++ b/Content.Server/_CP14/Passport/CP14PassportSystem.cs @@ -0,0 +1,63 @@ +using System.Text; +using Content.Shared.GameTicking; +using Content.Shared.Hands.EntitySystems; +using Content.Shared.Paper; +using Content.Shared.Roles; +using Robust.Shared.Prototypes; +using Robust.Shared.Random; + +namespace Content.Server._CP14.Passport; + +public sealed partial class CP14PassportSystem : EntitySystem +{ + [Dependency] private readonly IPrototypeManager _proto = default!; + [Dependency] private readonly PaperSystem _paper = default!; + [Dependency] private readonly SharedHandsSystem _hands = default!; + [Dependency] private readonly IRobustRandom _random = default!; + + public readonly EntProtoId PassportProto = "CP14Passport"; + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnPlayerSpawning); + } + + private void OnPlayerSpawning(PlayerSpawnCompleteEvent ev) + { + var passport = Spawn(PassportProto, Transform(ev.Mob).Coordinates); + + if (!TryComp(passport, out var paper)) + return; + + var text = GeneratePassportText(ev); + _paper.SetContent((passport, paper), text); + _paper.TryStamp((passport, paper), + new StampDisplayInfo + { + StampedColor = Color.FromHex("#0a332a"), + StampedName = Loc.GetString("cp14-passport-stamp") + }, + ""); + _hands.TryPickupAnyHand(ev.Mob, passport); + } + + private string GeneratePassportText(PlayerSpawnCompleteEvent ev) + { + var sb = new StringBuilder(); + + //Name + sb.AppendLine(Loc.GetString("cp14-passport-name", ("name", ev.Profile.Name))); + //Species + if (_proto.TryIndex(ev.Profile.Species, out var indexedSpecies)) + sb.AppendLine(Loc.GetString("cp14-passport-species", ("species", Loc.GetString(indexedSpecies.Name)))); + //Birthday + var birthday = $"{_random.Next(40)}.{_random.Next(12)}.{225 - ev.Profile.Age}"; + sb.AppendLine(Loc.GetString("cp14-passport-birth-date", ("birthday", birthday))); + //Job + if (ev.JobId is not null && _proto.TryIndex(ev.JobId, out var indexedJob)) + sb.AppendLine(Loc.GetString("cp14-passport-job", ("job", Loc.GetString(indexedJob.Name)))); + + return sb.ToString(); + } +} diff --git a/Resources/Locale/en-US/_CP14/passport/passport.ftl b/Resources/Locale/en-US/_CP14/passport/passport.ftl new file mode 100644 index 0000000000..264f0c69f4 --- /dev/null +++ b/Resources/Locale/en-US/_CP14/passport/passport.ftl @@ -0,0 +1,6 @@ +cp14-passport-name = Name: {$name} +cp14-passport-species = Race: {$species} +cp14-passport-birth-date = Date of Birth: {$birthday} +cp14-passport-job = Job: {$job} + +cp14-passport-stamp = Passport approved \ No newline at end of file diff --git a/Resources/Locale/ru-RU/_CP14/passport/passport.ftl b/Resources/Locale/ru-RU/_CP14/passport/passport.ftl new file mode 100644 index 0000000000..e3c712455e --- /dev/null +++ b/Resources/Locale/ru-RU/_CP14/passport/passport.ftl @@ -0,0 +1,6 @@ +cp14-passport-name = Имя: {$name} +cp14-passport-species = Раса: {$species} +cp14-passport-birth-date = Дата рождения: {$birthday} +cp14-passport-job = Профессия: {$job} + +cp14-passport-stamp = Паспорт утвержден \ No newline at end of file diff --git a/Resources/Prototypes/_CP14/Entities/Objects/Bureaucracy/passport.yml b/Resources/Prototypes/_CP14/Entities/Objects/Bureaucracy/passport.yml new file mode 100644 index 0000000000..4919e88658 --- /dev/null +++ b/Resources/Prototypes/_CP14/Entities/Objects/Bureaucracy/passport.yml @@ -0,0 +1,37 @@ +- type: entity + parent: BaseItem + id: CP14Passport + categories: [ ForkFiltered ] + name: passport + description: Identification document. + components: + - type: Paper + - type: PaperLabelType + - type: ActivatableUI + key: enum.PaperUiKey.Key + requiresComplex: false + - type: UserInterface + interfaces: + enum.PaperUiKey.Key: + type: PaperBoundUserInterface + - type: Item + size: Tiny + - type: Tag + tags: + - Document + - type: Sprite + sprite: _CP14/Objects/Bureaucracy/paper.rsi + layers: + - state: passport + - type: PaperVisuals + backgroundImagePath: "/Textures/Interface/Paper/paper_background_book.svg.96dpi.png" + headerImagePath: "/Textures/_CP14/Interface/Paper/paper_passport.png" + headerMargin: 0.0, 0.0, 0.0, 4.0 + backgroundImageTile: false + backgroundPatchMargin: 23.0, 16.0, 14.0, 15.0 + contentMargin: 12.0, 0.0, 6.0, 0.0 + maxWritableArea: 300.0, 246.0 + backgroundModulate: "#baa580" + backgroundScale: 2, 2 + contentImagePath: "/Textures/Interface/Paper/paper_content_lined.svg.96dpi.png" + contentImageModulate: "#998665" \ No newline at end of file diff --git a/Resources/Textures/_CP14/Interface/Paper/paper_passport.png b/Resources/Textures/_CP14/Interface/Paper/paper_passport.png new file mode 100644 index 0000000000..77306e199b Binary files /dev/null and b/Resources/Textures/_CP14/Interface/Paper/paper_passport.png differ diff --git a/Resources/Textures/_CP14/Interface/Paper/paper_passport.yml b/Resources/Textures/_CP14/Interface/Paper/paper_passport.yml new file mode 100644 index 0000000000..5c43e23305 --- /dev/null +++ b/Resources/Textures/_CP14/Interface/Paper/paper_passport.yml @@ -0,0 +1,2 @@ +sample: + filter: true diff --git a/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/inhand-left.png b/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/inhand-left.png deleted file mode 100644 index 9677a81825..0000000000 Binary files a/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/inhand-left.png and /dev/null differ diff --git a/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/inhand-right.png b/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/inhand-right.png deleted file mode 100644 index 1df4f5591d..0000000000 Binary files a/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/inhand-right.png and /dev/null differ diff --git a/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/meta.json b/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/meta.json index 7436e63dd1..0e3f39b154 100644 --- a/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/meta.json +++ b/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/meta.json @@ -1,7 +1,7 @@ { "version": 1, "license": "CC-BY-SA-4.0", - "copyright": "Created by Max Gab, folders by TheShuEd, stamps on paper by viator1748", + "copyright": "Created by Max Gab, folders and passport by TheShuEd, stamps on paper by viator1748", "size": { "x": 32, "y": 32 @@ -19,14 +19,6 @@ { "name": "paper_filled" }, - { - "name": "inhand-left", - "directions": 4 - }, - { - "name": "inhand-right", - "directions": 4 - }, { "name": "approved_on_paper" }, @@ -50,6 +42,9 @@ }, { "name": "magic" + }, + { + "name": "passport" } ] } diff --git a/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/passport.png b/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/passport.png new file mode 100644 index 0000000000..b5d93701d7 Binary files /dev/null and b/Resources/Textures/_CP14/Objects/Bureaucracy/paper.rsi/passport.png differ