Skip to content

Commit

Permalink
fix(contraband): Make contraband work with chameleon items (#30986)
Browse files Browse the repository at this point in the history
* formatting

---------

Co-authored-by: slarticodefast <[email protected]>
  • Loading branch information
Brandon Hu and slarticodefast authored Sep 23, 2024
1 parent 5e9a0c9 commit 20bb9ed
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using Content.Shared.Access.Components;
using Content.Shared.Clothing.Components;
using Content.Shared.Contraband;
using Content.Shared.Inventory;
using Content.Shared.Inventory.Events;
using Content.Shared.Item;
Expand All @@ -13,6 +14,7 @@ public abstract class SharedChameleonClothingSystem : EntitySystem
[Dependency] private readonly IComponentFactory _factory = default!;
[Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly ClothingSystem _clothingSystem = default!;
[Dependency] private readonly ContrabandSystem _contraband = default!;
[Dependency] private readonly MetaDataSystem _metaData = default!;
[Dependency] private readonly SharedItemSystem _itemSystem = default!;
[Dependency] private readonly TagSystem _tag = default!;
Expand Down Expand Up @@ -68,6 +70,17 @@ protected void UpdateVisuals(EntityUid uid, ChameleonClothingComponent component
{
_clothingSystem.CopyVisuals(uid, otherClothing, clothing);
}

// properly mark contraband
if (proto.TryGetComponent("Contraband", out ContrabandComponent? contra))
{
EnsureComp<ContrabandComponent>(uid, out var current);
_contraband.CopyDetails(uid, contra, current);
}
else
{
RemComp<ContrabandComponent>(uid);
}
}

protected virtual void UpdateSprite(EntityUid uid, EntityPrototype proto) { }
Expand Down
12 changes: 11 additions & 1 deletion Content.Shared/Contraband/ContrabandSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,16 @@ private void SetContrabandExamine(bool val)
_contrabandExamineEnabled = val;
}

public void CopyDetails(EntityUid uid, ContrabandComponent other, ContrabandComponent? contraband = null)
{
if (!Resolve(uid, ref contraband))
return;

contraband.Severity = other.Severity;
contraband.AllowedDepartments = other.AllowedDepartments;
Dirty(uid, contraband);
}

private void OnExamined(Entity<ContrabandComponent> ent, ref ExaminedEvent args)
{
if (!_contrabandExamineEnabled)
Expand All @@ -45,7 +55,7 @@ private void OnExamined(Entity<ContrabandComponent> ent, ref ExaminedEvent args)
using (args.PushGroup(nameof(ContrabandComponent)))
{
var severity = _proto.Index(ent.Comp.Severity);
if (severity.ShowDepartments && ent.Comp is { AllowedDepartments: not null })
if (severity.ShowDepartments && ent.Comp is { AllowedDepartments: not null })
{
// TODO shouldn't department prototypes have a localized name instead of just using the ID for this?
var list = ContentLocalizationManager.FormatList(ent.Comp.AllowedDepartments.Select(p => Loc.GetString($"department-{p.Id}")).ToList());
Expand Down

0 comments on commit 20bb9ed

Please sign in to comment.