+using Content.Shared.Dataset;
+using Robust.Shared.Prototypes;
+
namespace Content.Server.RandomMetadata;
/// <summary>
[RegisterComponent]
public sealed partial class RandomMetadataComponent : Component
{
- [DataField("descriptionSegments")]
- public List<string>? DescriptionSegments;
+ [DataField]
+ public List<ProtoId<LocalizedDatasetPrototype>>? DescriptionSegments;
- [DataField("nameSegments")]
- public List<string>? NameSegments;
+ [DataField]
+ public List<ProtoId<LocalizedDatasetPrototype>>? NameSegments;
- [DataField("nameSeparator")]
+ [DataField]
public string NameSeparator = " ";
- [DataField("descriptionSeparator")]
+ [DataField]
public string DescriptionSeparator = " ";
}
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!;
+ private List<string> _outputSegments = new();
+
public override void Initialize()
{
base.Initialize();
/// <param name="separator">The separator that will be inbetween each segment</param>
/// <returns>The newly generated string</returns>
[PublicAPI]
- public string GetRandomFromSegments(List<string> segments, string? separator)
+ public string GetRandomFromSegments(List<ProtoId<LocalizedDatasetPrototype>> segments, string? separator)
{
- var outputSegments = new List<string>();
+ _outputSegments.Clear();
foreach (var segment in segments)
{
- if (_prototype.TryIndex<LocalizedDatasetPrototype>(segment, out var localizedProto))
- {
- outputSegments.Add(_random.Pick(localizedProto));
- }
- else if (_prototype.TryIndex<DatasetPrototype>(segment, out var proto))
- {
- var random = _random.Pick(proto.Values);
- if (Loc.TryGetString(random, out var localizedSegment))
- outputSegments.Add(localizedSegment);
- else
- outputSegments.Add(random);
- }
- else if (Loc.TryGetString(segment, out var localizedSegment))
- outputSegments.Add(localizedSegment);
- else
- outputSegments.Add(segment);
+ var localizedProto = _prototype.Index(segment);
+ _outputSegments.Add(_random.Pick(localizedProto));
}
- return string.Join(separator, outputSegments);
+ return string.Join(separator, _outputSegments);
}
}
--- /dev/null
+names-word-the-1 = The
+names-word-of-1 = of
--- /dev/null
+names-nukie-commander-1 = Commander
+names-nukie-agent-1 = Agent
+names-nukie-operator-1 = Operator
--- /dev/null
+# These can be inserted inbetween name datasets
+# Ideally it would be localized since just swapping words doesnt help much for a lot of languages
+
+- type: localizedDataset
+ id: WordThe
+ values:
+ prefix: names-word-the-
+ count: 1
+
+- type: localizedDataset
+ id: WordOf
+ values:
+ prefix: names-word-of-
+ count: 1
--- /dev/null
+- type: localizedDataset
+ id: NamesNukieFirstCommander
+ values:
+ prefix: names-nukie-commander-
+ count: 1
+
+- type: localizedDataset
+ id: NamesNukieFirstAgent
+ values:
+ prefix: names-nukie-agent-
+ count: 1
+
+- type: localizedDataset
+ id: NamesNukieFirstOperator
+ values:
+ prefix: names-nukie-operator-
+ count: 1
- StolenEssence
- type: RandomMetadata
nameSegments:
- - The
+ - WordThe
- NamesRevenantType
- - of
+ - WordOf
- NamesRevenantAdjective
- NamesRevenantTheme
- type: Speech
- type: NukeOperative
- type: RandomMetadata
nameSegments:
- - nukeops-role-operator
+ - NamesNukieFirstOperator
- NamesSyndicateNormal
- type: Loadout
prototypes: [SyndicateOperativeGearFullNoUplink]
- type: NukeOperative
- type: RandomMetadata
nameSegments:
- - nukeops-role-commander
+ - NamesNukieFirstCommander
- NamesSyndicateElite
- type: NpcFactionMember
factions:
- type: NukeOperative
- type: RandomMetadata
nameSegments:
- - nukeops-role-agent
+ - NamesNukieFirstAgent
- NamesSyndicateNormal
- type: NpcFactionMember
factions:
- type: NukeOperative
- type: RandomMetadata
nameSegments:
- - nukeops-role-operator
+ - NamesNukieFirstOperator
- NamesSyndicateNormal
- type: NpcFactionMember
factions: