Add support for contraband text to the reagent guidebook (#37113)
* Add contraband text to reagent guidebook * Add reagent for examining * Update Content.Client/Guidebook/Controls/GuideReagentEmbed.xaml.cs --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
This commit is contained in:
@@ -5,14 +5,17 @@ using Content.Client.Guidebook.Richtext;
|
|||||||
using Content.Client.Message;
|
using Content.Client.Message;
|
||||||
using Content.Client.UserInterface.ControlExtensions;
|
using Content.Client.UserInterface.ControlExtensions;
|
||||||
using Content.Shared.Body.Prototypes;
|
using Content.Shared.Body.Prototypes;
|
||||||
|
using Content.Shared.CCVar;
|
||||||
using Content.Shared.Chemistry.Reaction;
|
using Content.Shared.Chemistry.Reaction;
|
||||||
using Content.Shared.Chemistry.Reagent;
|
using Content.Shared.Chemistry.Reagent;
|
||||||
|
using Content.Shared.Contraband;
|
||||||
using JetBrains.Annotations;
|
using JetBrains.Annotations;
|
||||||
using Robust.Client.AutoGenerated;
|
using Robust.Client.AutoGenerated;
|
||||||
using Robust.Client.Graphics;
|
using Robust.Client.Graphics;
|
||||||
using Robust.Client.UserInterface;
|
using Robust.Client.UserInterface;
|
||||||
using Robust.Client.UserInterface.Controls;
|
using Robust.Client.UserInterface.Controls;
|
||||||
using Robust.Client.UserInterface.XAML;
|
using Robust.Client.UserInterface.XAML;
|
||||||
|
using Robust.Shared.Configuration;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using Robust.Shared.Utility;
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
@@ -27,8 +30,10 @@ public sealed partial class GuideReagentEmbed : BoxContainer, IDocumentTag, ISea
|
|||||||
[Dependency] private readonly IEntitySystemManager _systemManager = default!;
|
[Dependency] private readonly IEntitySystemManager _systemManager = default!;
|
||||||
[Dependency] private readonly ILogManager _logManager = default!;
|
[Dependency] private readonly ILogManager _logManager = default!;
|
||||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||||
|
[Dependency] private readonly IConfigurationManager _config = default!;
|
||||||
|
|
||||||
private readonly ChemistryGuideDataSystem _chemistryGuideData;
|
private readonly ChemistryGuideDataSystem _chemistryGuideData;
|
||||||
|
private readonly ContrabandSystem _contraband;
|
||||||
private readonly ISawmill _sawmill;
|
private readonly ISawmill _sawmill;
|
||||||
|
|
||||||
public IPrototype? RepresentedPrototype { get; private set; }
|
public IPrototype? RepresentedPrototype { get; private set; }
|
||||||
@@ -39,6 +44,7 @@ public sealed partial class GuideReagentEmbed : BoxContainer, IDocumentTag, ISea
|
|||||||
IoCManager.InjectDependencies(this);
|
IoCManager.InjectDependencies(this);
|
||||||
_sawmill = _logManager.GetSawmill("guidebook.reagent");
|
_sawmill = _logManager.GetSawmill("guidebook.reagent");
|
||||||
_chemistryGuideData = _systemManager.GetEntitySystem<ChemistryGuideDataSystem>();
|
_chemistryGuideData = _systemManager.GetEntitySystem<ChemistryGuideDataSystem>();
|
||||||
|
_contraband = _systemManager.GetEntitySystem<ContrabandSystem>();
|
||||||
MouseFilter = MouseFilterMode.Stop;
|
MouseFilter = MouseFilterMode.Stop;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,6 +210,25 @@ public sealed partial class GuideReagentEmbed : BoxContainer, IDocumentTag, ISea
|
|||||||
description.PushNewline();
|
description.PushNewline();
|
||||||
description.AddMarkupOrThrow(Loc.GetString("guidebook-reagent-physical-description",
|
description.AddMarkupOrThrow(Loc.GetString("guidebook-reagent-physical-description",
|
||||||
("description", reagent.LocalizedPhysicalDescription)));
|
("description", reagent.LocalizedPhysicalDescription)));
|
||||||
|
|
||||||
|
if (_config.GetCVar(CCVars.ContrabandExamine))
|
||||||
|
{
|
||||||
|
// Department-restricted text
|
||||||
|
if (reagent.AllowedJobs.Count > 0 || reagent.AllowedDepartments.Count > 0)
|
||||||
|
{
|
||||||
|
description.PushNewline();
|
||||||
|
description.AddMarkupPermissive(
|
||||||
|
_contraband.GenerateDepartmentExamineMessage(reagent.AllowedDepartments, reagent.AllowedJobs, ContrabandItemType.Reagent));
|
||||||
|
}
|
||||||
|
// Other contraband text
|
||||||
|
else if (reagent.ContrabandSeverity != null &&
|
||||||
|
_prototype.Resolve(reagent.ContrabandSeverity.Value, out var severity))
|
||||||
|
{
|
||||||
|
description.PushNewline();
|
||||||
|
description.AddMarkupPermissive(Loc.GetString(severity.ExamineText, ("type", ContrabandItemType.Reagent)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ReagentDescription.SetMessage(description);
|
ReagentDescription.SetMessage(description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,12 @@ using Content.Shared.Administration.Logs;
|
|||||||
using Content.Shared.Body.Prototypes;
|
using Content.Shared.Body.Prototypes;
|
||||||
using Content.Shared.Chemistry.Components;
|
using Content.Shared.Chemistry.Components;
|
||||||
using Content.Shared.Chemistry.Reaction;
|
using Content.Shared.Chemistry.Reaction;
|
||||||
|
using Content.Shared.Contraband;
|
||||||
using Content.Shared.EntityEffects;
|
using Content.Shared.EntityEffects;
|
||||||
using Content.Shared.Database;
|
using Content.Shared.Database;
|
||||||
using Content.Shared.Nutrition;
|
using Content.Shared.Nutrition;
|
||||||
using Content.Shared.Prototypes;
|
using Content.Shared.Prototypes;
|
||||||
|
using Content.Shared.Roles;
|
||||||
using Content.Shared.Slippery;
|
using Content.Shared.Slippery;
|
||||||
using Robust.Shared.Audio;
|
using Robust.Shared.Audio;
|
||||||
using Robust.Shared.Map;
|
using Robust.Shared.Map;
|
||||||
@@ -57,6 +59,25 @@ namespace Content.Shared.Chemistry.Reagent
|
|||||||
[ViewVariables(VVAccess.ReadOnly)]
|
[ViewVariables(VVAccess.ReadOnly)]
|
||||||
public string LocalizedPhysicalDescription => Loc.GetString(PhysicalDescription);
|
public string LocalizedPhysicalDescription => Loc.GetString(PhysicalDescription);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The degree of contraband severity this reagent is considered to have.
|
||||||
|
/// If AllowedDepartments or AllowedJobs are set, they take precedent and override this value.
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public ProtoId<ContrabandSeverityPrototype>? ContrabandSeverity = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Which departments is this reagent restricted to, if any?
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public HashSet<ProtoId<DepartmentPrototype>> AllowedDepartments = new();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Which jobs is this reagent restricted to, if any?
|
||||||
|
/// </summary>
|
||||||
|
[DataField]
|
||||||
|
public HashSet<ProtoId<JobPrototype>> AllowedJobs = new();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Is this reagent recognizable to the average spaceman (water, welding fuel, ketchup, etc)?
|
/// Is this reagent recognizable to the average spaceman (water, welding fuel, ketchup, etc)?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -66,17 +66,13 @@ public sealed class ContrabandSystem : EntitySystem
|
|||||||
// two strings:
|
// two strings:
|
||||||
// one, the actual informative 'this is restricted'
|
// one, the actual informative 'this is restricted'
|
||||||
// then, the 'you can/shouldn't carry this around' based on the ID the user is wearing
|
// then, the 'you can/shouldn't carry this around' based on the ID the user is wearing
|
||||||
var localizedDepartments = component.AllowedDepartments.Select(p => Loc.GetString("contraband-department-plural", ("department", Loc.GetString(_proto.Index(p).Name))));
|
|
||||||
var jobs = component.AllowedJobs.Select(p => _proto.Index(p).LocalizedName).ToArray();
|
|
||||||
var localizedJobs = jobs.Select(p => Loc.GetString("contraband-job-plural", ("job", p)));
|
|
||||||
var severity = _proto.Index(component.Severity);
|
var severity = _proto.Index(component.Severity);
|
||||||
String departmentExamineMessage;
|
String departmentExamineMessage;
|
||||||
if (severity.ShowDepartmentsAndJobs)
|
if (severity.ShowDepartmentsAndJobs)
|
||||||
{
|
{
|
||||||
//creating a combined list of jobs and departments for the restricted text
|
|
||||||
var list = ContentLocalizationManager.FormatList(localizedDepartments.Concat(localizedJobs).ToList());
|
|
||||||
// department restricted text
|
// department restricted text
|
||||||
departmentExamineMessage = Loc.GetString("contraband-examine-text-Restricted-department", ("departments", list));
|
departmentExamineMessage =
|
||||||
|
GenerateDepartmentExamineMessage(component.AllowedDepartments, component.AllowedJobs);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -95,6 +91,7 @@ public sealed class ContrabandSystem : EntitySystem
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var jobs = component.AllowedJobs.Select(p => _proto.Index(p).LocalizedName).ToArray();
|
||||||
// if it is fully restricted, you're department-less, or your department isn't in the allowed list, you cannot carry it. Otherwise, you can.
|
// if it is fully restricted, you're department-less, or your department isn't in the allowed list, you cannot carry it. Otherwise, you can.
|
||||||
var carryingMessage = Loc.GetString("contraband-examine-text-avoid-carrying-around");
|
var carryingMessage = Loc.GetString("contraband-examine-text-avoid-carrying-around");
|
||||||
var iconTexture = "/Textures/Interface/VerbIcons/lock-red.svg.192dpi.png";
|
var iconTexture = "/Textures/Interface/VerbIcons/lock-red.svg.192dpi.png";
|
||||||
@@ -112,6 +109,19 @@ public sealed class ContrabandSystem : EntitySystem
|
|||||||
iconTexture);
|
iconTexture);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string GenerateDepartmentExamineMessage(HashSet<ProtoId<DepartmentPrototype>> allowedDepartments, HashSet<ProtoId<JobPrototype>> allowedJobs, ContrabandItemType itemType = ContrabandItemType.Item)
|
||||||
|
{
|
||||||
|
var localizedDepartments = allowedDepartments.Select(p => Loc.GetString("contraband-department-plural", ("department", Loc.GetString(_proto.Index(p).Name))));
|
||||||
|
var jobs = allowedJobs.Select(p => _proto.Index(p).LocalizedName).ToArray();
|
||||||
|
var localizedJobs = jobs.Select(p => Loc.GetString("contraband-job-plural", ("job", p)));
|
||||||
|
|
||||||
|
//creating a combined list of jobs and departments for the restricted text
|
||||||
|
var list = ContentLocalizationManager.FormatList(localizedDepartments.Concat(localizedJobs).ToList());
|
||||||
|
|
||||||
|
// department restricted text
|
||||||
|
return Loc.GetString("contraband-examine-text-Restricted-department", ("departments", list), ("type", itemType));
|
||||||
|
}
|
||||||
|
|
||||||
private FormattedMessage GetContrabandExamine(String deptMessage, String carryMessage)
|
private FormattedMessage GetContrabandExamine(String deptMessage, String carryMessage)
|
||||||
{
|
{
|
||||||
var msg = new FormattedMessage();
|
var msg = new FormattedMessage();
|
||||||
@@ -131,3 +141,12 @@ public sealed class ContrabandSystem : EntitySystem
|
|||||||
_contrabandExamineOnlyInHudEnabled = val;
|
_contrabandExamineOnlyInHudEnabled = val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The item type that the contraband text should follow in the description text.
|
||||||
|
/// </summary>
|
||||||
|
public enum ContrabandItemType
|
||||||
|
{
|
||||||
|
Item,
|
||||||
|
Reagent
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,11 +1,50 @@
|
|||||||
contraband-examine-text-Minor = [color=yellow]This item is considered minor contraband.[/color]
|
contraband-examine-text-Minor =
|
||||||
contraband-examine-text-Restricted = [color=yellow]This item is departmentally restricted.[/color]
|
{ $type ->
|
||||||
contraband-examine-text-Restricted-department = [color=yellow]This item is restricted to {$departments}, and may be considered contraband.[/color]
|
*[item] [color=yellow]This item is considered minor contraband.[/color]
|
||||||
contraband-examine-text-Major = [color=red]This item is considered major contraband.[/color]
|
[reagent] [color=yellow]This reagent is considered minor contraband.[/color]
|
||||||
contraband-examine-text-GrandTheft = [color=red]This item is a highly valuable target for Syndicate agents![/color]
|
}
|
||||||
contraband-examine-text-Highly-Illegal = [color=red]This item is highly illegal contraband![/color]
|
|
||||||
contraband-examine-text-Syndicate = [color=crimson]This item is highly illegal Syndicate contraband![/color]
|
contraband-examine-text-Restricted =
|
||||||
contraband-examine-text-Magical = [color=#b337b3]This item is highly illegal magical contraband![/color]
|
{ $type ->
|
||||||
|
*[item] [color=yellow]This item is departmentally restricted.[/color]
|
||||||
|
[reagent] [color=yellow]This reagent is departmentally restricted.[/color]
|
||||||
|
}
|
||||||
|
|
||||||
|
contraband-examine-text-Restricted-department =
|
||||||
|
{ $type ->
|
||||||
|
*[item] [color=yellow]This item is restricted to {$departments}, and may be considered contraband.[/color]
|
||||||
|
[reagent] [color=yellow]This reagent is restricted to {$departments}, and may be considered contraband.[/color]
|
||||||
|
}
|
||||||
|
|
||||||
|
contraband-examine-text-Major =
|
||||||
|
{ $type ->
|
||||||
|
*[item] [color=red]This item is considered major contraband.[/color]
|
||||||
|
[reagent] [color=red]This reagent is considered major contraband.[/color]
|
||||||
|
}
|
||||||
|
|
||||||
|
contraband-examine-text-GrandTheft =
|
||||||
|
{ $type ->
|
||||||
|
*[item] [color=red]This item is a highly valuable target for Syndicate agents![/color]
|
||||||
|
[reagent] [color=red]This reagent is a highly valuable target for Syndicate agents![/color]
|
||||||
|
}
|
||||||
|
|
||||||
|
contraband-examine-text-Highly-Illegal =
|
||||||
|
{ $type ->
|
||||||
|
*[item] [color=crimson]This item is highly illegal contraband![/color]
|
||||||
|
[reagent] [color=crimson]This reagent is highly illegal contraband![/color]
|
||||||
|
}
|
||||||
|
|
||||||
|
contraband-examine-text-Syndicate =
|
||||||
|
{ $type ->
|
||||||
|
*[item] [color=crimson]This item is highly illegal Syndicate contraband![/color]
|
||||||
|
[reagent] [color=crimson]This reagent is highly illegal Syndicate contraband![/color]
|
||||||
|
}
|
||||||
|
|
||||||
|
contraband-examine-text-Magical =
|
||||||
|
{ $type ->
|
||||||
|
*[item] [color=#b337b3]This item is highly illegal magical contraband![/color]
|
||||||
|
[reagent] [color=#b337b3]This reagent is highly illegal magical contraband![/color]
|
||||||
|
}
|
||||||
|
|
||||||
contraband-examine-text-avoid-carrying-around = [color=red][italic]You probably want to avoid visibly carrying this around without a good reason.[/italic][/color]
|
contraband-examine-text-avoid-carrying-around = [color=red][italic]You probably want to avoid visibly carrying this around without a good reason.[/italic][/color]
|
||||||
contraband-examine-text-in-the-clear = [color=green][italic]You should be in the clear to visibly carry this around.[/italic][/color]
|
contraband-examine-text-in-the-clear = [color=green][italic]You should be in the clear to visibly carry this around.[/italic][/color]
|
||||||
|
|||||||
Reference in New Issue
Block a user