Port Dogtags from CD and fix some minor issues with it. (#2301)

* Port Dogtags from CD and fix some minor issues with it.

* Addressing reviews
This commit is contained in:
Kr8art 2024-11-28 13:04:17 +01:00 committed by GitHub
parent a554a657db
commit 04b9239581
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 159 additions and 0 deletions

View File

@ -0,0 +1,32 @@
namespace Content.Server._CD.Engraving;
/// <summary>
/// Allows an items' description to be modified with an engraving
/// </summary>
[RegisterComponent, Access(typeof(EngraveableSystem))]
public sealed partial class EngraveableComponent : Component
{
/// <summary>
/// Message given to user to notify them a message was sent
/// </summary>
[DataField]
public string EngravedMessage = string.Empty;
/// <summary>
/// The inspect text to use when there is no engraving
/// </summary>
[DataField]
public LocId NoEngravingText = "engraving-dogtags-no-message";
/// <summary>
/// The message to use when successfully engraving the item
/// </summary>
[DataField]
public LocId EngraveSuccessMessage = "engraving-dogtags-succeed";
/// <summary>
/// The inspect text to use when there is an engraving. The message will be shown seperately afterwards.
/// </summary>
[DataField]
public LocId HasEngravingText = "engraving-dogtags-has-message";
}

View File

@ -0,0 +1,83 @@
using Content.Server.Administration;
using Content.Server.Administration.Logs;
using Content.Server.Popups;
using Content.Shared.Database;
using Content.Shared.Popups;
using Content.Shared.Examine;
using Content.Shared.Verbs;
using Robust.Shared.Player;
using Robust.Shared.Utility;
namespace Content.Server._CD.Engraving;
public sealed class EngraveableSystem : EntitySystem
{
[Dependency] private readonly IAdminLogManager _adminLogger = default!;
[Dependency] private readonly PopupSystem _popup = default!;
[Dependency] private readonly QuickDialogSystem _dialog = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<EngraveableComponent, ExaminedEvent>(OnExamined);
SubscribeLocalEvent<EngraveableComponent, GetVerbsEvent<ActivationVerb>>(AddEngraveVerb);
}
private void OnExamined(Entity<EngraveableComponent> ent, ref ExaminedEvent args)
{
var msg = new FormattedMessage();
msg.AddMarkupOrThrow(Loc.GetString(ent.Comp.EngravedMessage == string.Empty
? ent.Comp.NoEngravingText
: ent.Comp.HasEngravingText));
if (ent.Comp.EngravedMessage != string.Empty)
msg.AddMarkupPermissive(Loc.GetString(ent.Comp.EngravedMessage));
args.PushMessage(msg, 1);
}
private void AddEngraveVerb(Entity<EngraveableComponent> ent, ref GetVerbsEvent<ActivationVerb> args)
{
// First check if it's already been engraved. If it has, don't let them do it again.
if (ent.Comp.EngravedMessage != string.Empty)
return;
// We need an actor to give the verb.
if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor))
return;
// Make sure ghosts can't engrave stuff.
if (!args.CanInteract)
return;
var engraveVerb = new ActivationVerb
{
Text = Loc.GetString("engraving-verb-engrave"),
Act = () =>
{
_dialog.OpenDialog(actor.PlayerSession,
Loc.GetString("engraving-verb-engrave"),
Loc.GetString("engraving-popup-ui-message"),
(string message) =>
{
// If either the actor or comp have magically vanished
if (actor.PlayerSession.AttachedEntity == null || !HasComp<EngraveableComponent>(ent))
return;
ent.Comp.EngravedMessage = message;
_popup.PopupEntity(Loc.GetString(ent.Comp.EngraveSuccessMessage),
actor.PlayerSession.AttachedEntity.Value,
actor.PlayerSession,
PopupType.Medium);
_adminLogger.Add(LogType.Action,
LogImpact.Low,
$"{ToPrettyString(actor.PlayerSession.AttachedEntity):player} engraved an item with message: {message}");
});
},
Impact = LogImpact.Low,
};
engraveVerb.Impact = LogImpact.Low;
args.Verbs.Add(engraveVerb);
}
}

View File

@ -0,0 +1,6 @@
engraving-verb-engrave = Engrave
engraving-popup-ui-message = Description
engraving-dogtags-no-message = The dogtags don't seem to have any kind of engraving.
engraving-dogtags-has-message = The dogtags are engraved with a message that reads:{" "}
engraving-dogtags-succeed = You successfully engrave the dogtags with your message.

View File

@ -50,6 +50,7 @@
- SilverRing # DeltaV
- Cane # DeltaV
- WhiteCane #DeltaV
- CDDogtags # _CD
- type: loadoutGroup
id: Glasses

View File

@ -0,0 +1,14 @@
- type: entity
id: CDDogtags
parent: ClothingNeckBase
name: dogtags
description: A set of dogtags, hanging from a small piece of cord for wearing and carrying.
components:
- type: Sprite
sprite: _CD/Objects/Misc/dogtags.rsi
layers:
- state: dogtag
- type: Clothing
sprite: _CD/Objects/Misc/dogtags.rsi
- type: Appearance
- type: Engraveable

View File

@ -0,0 +1,5 @@
- type: loadout
id: CDDogtags
storage:
back:
- CDDogtags

Binary file not shown.

After

Width:  |  Height:  |  Size: 862 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

View File

@ -0,0 +1,18 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from cmss13 at https://github.com/cmss13-devs/cmss13/blob/a2d5ca6e69725341f0fa261a4a3f89c737e843b3/icons/obj/items/card.dmi",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "dogtag"
},
{
"name": "equipped-NECK",
"directions": 4
}
]
}