Skip to content

Commit

Permalink
Merge branch 'master' into map-testing
Browse files Browse the repository at this point in the history
  • Loading branch information
PubliclyExecutedPig authored Nov 28, 2024
2 parents 5051a63 + b0dff0a commit 2e957f0
Show file tree
Hide file tree
Showing 16 changed files with 229 additions and 25 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using Content.Server.Silicons.Laws;
using Content.Shared.Emag.Components;
using Content.Shared.Emag.Systems;
using Content.Shared.Silicons.Laws;
using Content.Shared.Silicons.Laws.Components;
using Robust.Shared.Prototypes;

namespace Content.Server.Silicons.Borgs;

/// <summary>
/// Handles lawset patching when switching type.
/// If a borg is made emagged it needs its emag laws carried over.
/// </summary>
public sealed partial class BorgSwitchableTypeSystem
{
[Dependency] private readonly SiliconLawSystem _law = default!;

private void ConfigureLawset(EntityUid uid, ProtoId<SiliconLawsetPrototype> id)
{
var laws = _law.GetLawset(id);
_law.SetLaws(laws.Laws, uid);

// re-add law 0 and final law based on new lawset
if (CompOrNull<EmagSiliconLawComponent>(uid)?.OwnerName != null)
{
// raising the event manually to bypass re-emagging checks
var ev = new GotEmaggedEvent(uid); // user wont be used since OwnerName isnt null, safe to pass itself
RaiseLocalEvent(uid, ref ev);
}

// ion storms don't get mirrored because thats basically impossible to track
}
}
7 changes: 6 additions & 1 deletion Content.Server/Silicons/Borgs/BorgSwitchableTypeSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ namespace Content.Server.Silicons.Borgs;
/// <summary>
/// Server-side logic for borg type switching. Handles more heavyweight and server-specific switching logic.
/// </summary>
public sealed class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeSystem
public sealed partial class BorgSwitchableTypeSystem : SharedBorgSwitchableTypeSystem // DeltaV: Made partial
{
[Dependency] private readonly BorgSystem _borgSystem = default!;
[Dependency] private readonly ServerInventorySystem _inventorySystem = default!;
Expand Down Expand Up @@ -59,6 +59,11 @@ protected override void SelectBorgModule(Entity<BorgSwitchableTypeComponent> ent
}
}

// Begin DeltaV Code: Custom lawset patching
if (prototype.Lawset is {} lawset)
ConfigureLawset(ent, lawset);
// End DeltaV Code

// Configure special components
if (Prototypes.TryIndex(ent.Comp.SelectedBorgType, out var previousPrototype))
{
Expand Down
3 changes: 2 additions & 1 deletion Content.Server/Silicons/Laws/SiliconLawSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,9 +131,10 @@ private void OnEmagLawsAdded(EntityUid uid, SiliconLawProviderComponent componen
component.Lawset = GetLawset(component.Laws);

// Add the first emag law before the others
var name = CompOrNull<EmagSiliconLawComponent>(uid)?.OwnerName ?? Name(args.UserUid); // DeltaV: Reuse emagger name if possible
component.Lawset?.Laws.Insert(0, new SiliconLaw
{
LawString = Loc.GetString("law-emag-custom", ("name", Name(args.UserUid)), ("title", Loc.GetString(component.Lawset.ObeysTo))),
LawString = Loc.GetString("law-emag-custom", ("name", name), ("title", Loc.GetString(component.Lawset.ObeysTo))), // DeltaV: pass name from variable
Order = 0
});

Expand Down
32 changes: 32 additions & 0 deletions Content.Server/_CD/Engraving/EngraveableComponent.cs
Original file line number Diff line number Diff line change
@@ -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";
}
83 changes: 83 additions & 0 deletions Content.Server/_CD/Engraving/EngraveableSystem.cs
Original file line number Diff line number Diff line change
@@ -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);
}
}
8 changes: 8 additions & 0 deletions Content.Shared/Silicons/Borgs/BorgTypePrototype.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using Content.Shared.Inventory;
using Content.Shared.Radio;
using Content.Shared.Silicons.Borgs.Components;
using Content.Shared.Silicons.Laws; // DeltaV
using Content.Shared.Whitelist;
using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
Expand Down Expand Up @@ -83,6 +84,13 @@ public sealed partial class BorgTypePrototype : IPrototype
[DataField]
public EntProtoId[] DefaultModules = [];

/// <summary>
/// DeltaV: Lawset to use instead of crewsimov.
/// If the chassis is emagged or ion stormed this is ignored.
/// </summary>
[DataField]
public ProtoId<SiliconLawsetPrototype>? Lawset;

/// <summary>
/// Additional components to add to the borg entity when this type is selected.
/// </summary>
Expand Down
28 changes: 15 additions & 13 deletions Resources/Changelog/DeltaVChangelog.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,4 @@
Entries:
- author: DebugOk
changes:
- message: Added gridinv, sorry.
type: Add
id: 212
time: '2024-01-21T18:58:28.0000000+00:00'
- author: TadJohnson00
changes:
- message: Pride vend has received an adjusted inventory. Make sure to check out
the new cloaks available!
type: Tweak
id: 213
time: '2024-01-30T14:22:13.0000000+00:00'
- author: Colin-Tel
changes:
- message: Updated Asterisk Station.
Expand Down Expand Up @@ -3775,3 +3762,18 @@
id: 711
time: '2024-11-27T20:22:30.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/2302
- author: deltanedas
changes:
- message: Fixed borgs with special lawsets fixing their emag laws when switched
to.
type: Fix
id: 712
time: '2024-11-28T07:22:06.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/2299
- author: Kr8art
changes:
- message: Added customizable dogtags from Cosmatic Drift to the trinket loadout!
type: Add
id: 713
time: '2024-11-28T12:04:17.0000000+00:00'
url: https://github.com/DeltaV-Station/Delta-v/pull/2301
6 changes: 6 additions & 0 deletions Resources/Locale/en-US/_CD/engraving/engraving.ftl
Original file line number Diff line number Diff line change
@@ -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.
4 changes: 2 additions & 2 deletions Resources/Prototypes/DeltaV/borg_types.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@
- BorgModuleSecurityPatrol
- BorgModuleSecurityBastion

lawset: SiliconPolice

addComponents:
- type: SiliconLawProvider
laws: SiliconPolice
- type: FlashImmunity
- type: ShowMindShieldIcons
- type: ShowCriminalRecordIcons
Expand Down
1 change: 1 addition & 0 deletions Resources/Prototypes/Loadouts/loadout_groups.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
- SilverRing # DeltaV
- Cane # DeltaV
- WhiteCane #DeltaV
- CDDogtags # _CD

- type: loadoutGroup
id: Glasses
Expand Down
14 changes: 14 additions & 0 deletions Resources/Prototypes/_CD/Entities/Objects/Misc/dogtags.yml
Original file line number Diff line number Diff line change
@@ -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
5 changes: 5 additions & 0 deletions Resources/Prototypes/_CD/Loadouts/Miscellaneous/trinkets.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- type: loadout
id: CDDogtags
storage:
back:
- CDDogtags
12 changes: 4 additions & 8 deletions Resources/Prototypes/borg_types.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,7 @@
- BorgModuleRCD
- BorgModuleCable

addComponents: # DeltaV: Custom lawset
- type: SiliconLawProvider
laws: Engineer
lawset: Engineer # DeltaV: Custom lawset

radioChannels:
- Engineering
Expand Down Expand Up @@ -123,9 +121,7 @@
- BorgModuleLightReplacer
- BorgModuleCleaning

addComponents: # DeltaV: Custom lawset
- type: SiliconLawProvider
laws: Janitor
lawset: Janitor # DeltaV: Custom lawset

radioChannels:
- Science
Expand Down Expand Up @@ -165,6 +161,8 @@
- Science
- Medical

lawset: Medical # DeltaV: Custom lawset

addComponents:
- type: SolutionScanner
- type: ShowHealthBars
Expand All @@ -174,8 +172,6 @@
damageContainers:
- Biological
- type: FabricateCandy # Nyanotrasen - The medical cyborg can generate candies filled with medicine.
- type: SiliconLawProvider # DeltaV: Custom lawset
laws: Medical

# Visual
inventoryTemplateId: borgDutch
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions Resources/Textures/_CD/Objects/Misc/dogtags.rsi/meta.json
Original file line number Diff line number Diff line change
@@ -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
}
]
}

0 comments on commit 2e957f0

Please sign in to comment.