Random metadata component (#7894)

Co-authored-by: Moony <moonheart08@users.noreply.github.com>
This commit is contained in:
Kara
2022-05-02 13:51:03 -07:00
committed by GitHub
parent 1450c6c638
commit f361618a0b
5 changed files with 75 additions and 0 deletions

View File

@@ -50,6 +50,7 @@ namespace Content.Client.Entry
"ZombieTransfer",
"Mineable",
"RangedMagazine",
"RandomMetadata",
"Ammo",
"AiController",
"Computer",

View File

@@ -0,0 +1,17 @@
using Content.Shared.Dataset;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;
namespace Content.Server.RandomMetadata;
/// <summary>
/// Randomizes the description and/or the name for an entity by pulling from a dataset prototype.
/// </summary>
[RegisterComponent]
public sealed class RandomMetadataComponent : Component
{
[DataField("descriptionSet", customTypeSerializer:typeof(PrototypeIdSerializer<DatasetPrototype>))]
public string? DescriptionSet;
[DataField("nameSet", customTypeSerializer:typeof(PrototypeIdSerializer<DatasetPrototype>))]
public string? NameSet;
}

View File

@@ -0,0 +1,36 @@
using Content.Shared.Dataset;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
namespace Content.Server.RandomMetadata;
public sealed class RandomMetadataSystem : EntitySystem
{
[Dependency] private readonly IPrototypeManager _prototype = default!;
[Dependency] private readonly IRobustRandom _random = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<RandomMetadataComponent, MapInitEvent>(OnMapInit);
}
// This is done on map init so that map-placed entities have it randomized each time the map loads, for fun.
private void OnMapInit(EntityUid uid, RandomMetadataComponent component, MapInitEvent args)
{
var meta = MetaData(uid);
if (component.NameSet != null)
{
var nameProto = _prototype.Index<DatasetPrototype>(component.NameSet);
meta.EntityName = _random.Pick(nameProto.Values);
}
if (component.DescriptionSet != null)
{
var descProto = _prototype.Index<DatasetPrototype>(component.DescriptionSet);
meta.EntityDescription = _random.Pick(descProto.Values);
}
}
}

View File

@@ -0,0 +1,19 @@
- type: dataset
id: ATVDescriptions
values:
- All-Tile Vehicle.
- Ant-Thwarting Vehicle.
- Any-Time Vegetable.
- Actually-Two Vehicles.
- Any-Typed Variable.
- Assisted-Trauma Vehicle.
- Algorithm-Transmitted Virus.
- Alcoholic-Toddler Vacancy.
- Asshole-Tearing Volcano.
- A-Tele Vision.
- Awkward-Tweaking Vagabond.
- Art-Tragedy Volunteer.
- Automatic-Taco Vacancy.
- Another-Terrific View.
- All-The Virgins.
- A-Terrible Vehicle.

View File

@@ -226,6 +226,8 @@
tags:
- Cargo
- Maintenance
- type: RandomMetadata
descriptionSet: ATVDescriptions
- type: MovementSpeedModifier
baseWalkSpeed : 8
baseSprintSpeed : 8