From b6a54f9d5fb9a9028c49b654af978127dcbdcf8f Mon Sep 17 00:00:00 2001 From: icekot8 <93311212+icekot8@users.noreply.github.com> Date: Sun, 28 Apr 2024 06:19:33 +0300 Subject: [PATCH 1/3] Portable Recharger: Arsenal T3 (#26655) * sys * item * ahm. * Update Content.Server/Power/Components/ChargerComponent.cs --------- Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: metalgearsloth --- .../Power/Components/ChargerComponent.cs | 12 +++ .../Power/EntitySystems/ChargerSystem.cs | 25 +++-- .../Objects/Power/portable_recharger.yml | 35 +++++++ .../Entities/Structures/Machines/lathe.yml | 2 +- .../Prototypes/Recipes/Lathes/security.yml | 21 ++-- Resources/Prototypes/Research/arsenal.yml | 1 + .../charging-equipped-BACKPACK.png | Bin 0 -> 1886 bytes .../portable_recharger.rsi/charging-unlit.png | Bin 0 -> 539 bytes .../Power/portable_recharger.rsi/charging.png | Bin 0 -> 964 bytes .../portable_recharger.rsi/inhand-left.png | Bin 0 -> 714 bytes .../portable_recharger.rsi/inhand-right.png | Bin 0 -> 735 bytes .../Power/portable_recharger.rsi/meta.json | 92 ++++++++++++++++++ 12 files changed, 170 insertions(+), 18 deletions(-) create mode 100644 Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml create mode 100644 Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png create mode 100644 Resources/Textures/Objects/Power/portable_recharger.rsi/charging-unlit.png create mode 100644 Resources/Textures/Objects/Power/portable_recharger.rsi/charging.png create mode 100644 Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png create mode 100644 Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png create mode 100644 Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json diff --git a/Content.Server/Power/Components/ChargerComponent.cs b/Content.Server/Power/Components/ChargerComponent.cs index af4498f01ba..e45ded071cf 100644 --- a/Content.Server/Power/Components/ChargerComponent.cs +++ b/Content.Server/Power/Components/ChargerComponent.cs @@ -1,5 +1,10 @@ using Content.Shared.Power; using Content.Shared.Whitelist; +using Content.Shared.Power; +using Content.Shared.Whitelist; +using Robust.Shared.GameObjects; +using Robust.Shared.Serialization.Manager.Attributes; +using Robust.Shared.ViewVariables; namespace Content.Server.Power.Components { @@ -26,5 +31,12 @@ public sealed partial class ChargerComponent : Component /// [DataField("whitelist")] public EntityWhitelist? Whitelist; + + /// + /// Indicates whether the charger is portable and thus subject to EMP effects + /// and bypasses checks for transform, anchored, and ApcPowerReceiverComponent. + /// + [DataField] + public bool Portable = false; } } diff --git a/Content.Server/Power/EntitySystems/ChargerSystem.cs b/Content.Server/Power/EntitySystems/ChargerSystem.cs index afd063fa6f6..5afce8076f3 100644 --- a/Content.Server/Power/EntitySystems/ChargerSystem.cs +++ b/Content.Server/Power/EntitySystems/ChargerSystem.cs @@ -1,8 +1,10 @@ using Content.Server.Power.Components; +using Content.Server.Emp; using Content.Server.PowerCell; using Content.Shared.Examine; using Content.Shared.Power; using Content.Shared.PowerCell.Components; +using Content.Shared.Emp; using JetBrains.Annotations; using Robust.Shared.Containers; using System.Diagnostics.CodeAnalysis; @@ -30,6 +32,8 @@ public override void Initialize() SubscribeLocalEvent(OnInsertAttempt); SubscribeLocalEvent(OnEntityStorageInsertAttempt); SubscribeLocalEvent(OnChargerExamine); + + SubscribeLocalEvent(OnEmpPulse); } private void OnStartup(EntityUid uid, ChargerComponent component, ComponentStartup args) @@ -190,18 +194,27 @@ private void UpdateStatus(EntityUid uid, ChargerComponent component) } } + private void OnEmpPulse(EntityUid uid, ChargerComponent component, ref EmpPulseEvent args) + { + args.Affected = true; + args.Disabled = true; + } + private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component) { - if (!TryComp(uid, out TransformComponent? transformComponent)) - return CellChargerStatus.Off; + if (!component.Portable) + { + if (!TryComp(uid, out TransformComponent? transformComponent) || !transformComponent.Anchored) + return CellChargerStatus.Off; + } - if (!transformComponent.Anchored) + if (!TryComp(uid, out ApcPowerReceiverComponent? apcPowerReceiverComponent)) return CellChargerStatus.Off; - if (!TryComp(uid, out ApcPowerReceiverComponent? apcPowerReceiverComponent)) + if (!component.Portable && !apcPowerReceiverComponent.Powered) return CellChargerStatus.Off; - if (!apcPowerReceiverComponent.Powered) + if (HasComp(uid)) return CellChargerStatus.Off; if (!_container.TryGetContainer(uid, component.SlotId, out var container)) @@ -218,7 +231,7 @@ private CellChargerStatus GetStatus(EntityUid uid, ChargerComponent component) return CellChargerStatus.Charging; } - + private void TransferPower(EntityUid uid, EntityUid targetEntity, ChargerComponent component, float frameTime) { if (!TryComp(uid, out ApcPowerReceiverComponent? receiverComponent)) diff --git a/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml b/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml new file mode 100644 index 00000000000..35dfa0881f4 --- /dev/null +++ b/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml @@ -0,0 +1,35 @@ +- type: entity + parent: Clothing + id: PortableRecharger + name: portable recharger + description: High-tech recharger adapted for portability + components: + - type: Item + size: Huge + - type: Sprite + sprite: Objects/Power/portable_recharger.rsi + state: charging + - type: Clothing + equippedPrefix: charging + quickEquip: false + slots: + - back + - type: Charger + slotId: charger_slot + portable: true + - type: PowerChargerVisuals + - type: ApcPowerReceiver + needsPower: false + powerLoad: 0 + - type: StaticPrice + price: 500 + - type: Tag + tags: [] # ignore "WhitelistChameleon" tag + - type: ItemSlots + slots: + charger_slot: + ejectOnInteract: true + whitelist: + components: + - HitscanBatteryAmmoProvider + - ProjectileBatteryAmmoProvider \ No newline at end of file diff --git a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml index 6761b7f1812..75ea498d129 100644 --- a/Resources/Prototypes/Entities/Structures/Machines/lathe.yml +++ b/Resources/Prototypes/Entities/Structures/Machines/lathe.yml @@ -893,7 +893,7 @@ - MagazineRifleUranium - MagazineShotgunBeanbag - MagazineShotgunIncendiary - #- PortableRecharger # DeltaV - removed for some reason + - PortableRecharger - PowerCageHigh - PowerCageMedium - PowerCageSmall diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 5a7ad143ac7..29227fb9db9 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -657,14 +657,13 @@ Plastic: 100 Glass: 20 -# DeltaV: removed, idk why -#- type: latheRecipe -# id: PortableRecharger -# result: PortableRecharger -# completetime: 15 -# materials: -# Steel: 2000 -# Uranium: 2000 -# Plastic: 1000 -# Plasma: 500 -# Glass: 500 +- type: latheRecipe + id: PortableRecharger + result: PortableRecharger + completetime: 15 + materials: + Steel: 2000 + Uranium: 2000 + Plastic: 1000 + Plasma: 500 + Glass: 500 diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index 1cd05a9c80e..fabb812648a 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -211,6 +211,7 @@ cost: 15000 recipeUnlocks: - WeaponAdvancedLaser + - PortableRecharger - type: technology id: ExperimentalBatteryAmmo diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/charging-equipped-BACKPACK.png new file mode 100644 index 0000000000000000000000000000000000000000..500ad05704c3ded83aede5fecae9f7f1759de52c GIT binary patch literal 1886 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 literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e3bc6d829938325b918ac8fab750417871000c32 GIT binary patch literal 714 zcmV;*0yX`KP)R5B&!`wH>mhQyW4{Gdj)KQWNOX z!7&{og44C(WTPSSmi0O~XPlBBjr^2S`aYWwJe}UXI|=Rqj4{R-V~jDz7-NjFw2Gy& zab3>e3@If(ynjbB-bEx8;3)-12>8B_^R0bETH}0cAHMIy z5dwE5=Ppu8^ezL`8%-Sb`^cgao>ByHgupaOa1w@4&sH%3pjK9K@-f6TN#F>PD(+}w z7fv^iy`Ku6Qi!ys816MB6<}Yo-e^LXhX4Rw9-`i8&XcpO;qf4sW*OawqyiRaMh%Ly z3K$fD+z8VoNj-Coi*0;eU#A%2tw{HP!-F0s-8?*{FzM!Tc+kUIp^$11Xtg^Am{r$l z7|yS$ktATPPym2=soNQ!CJEv=p5K3{*E>4^ka`pS6J%@3&d`suv-!HWFP`@EWp{l? z2z>eciG2N&`~9b9*`FZlIE*pI7-Nhv#u#IaF~Gz!y|-`Re0z@3#x6zJ z8(r%~SXl*d)r%0O>qQ_*z<3E`eFa+W zjyb(5LwijXdl7Xn0_kVaKHQ$`XMwsGfppzggPO4e%W_Z1q8EY0W1iz@)r-LXH@^UK wfjx{vM}FA=000hUSV?A0O#mtY000O800000007cclK=n!07*qoM6N<$f|=1fBLDyZ literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png b/Resources/Textures/Objects/Power/portable_recharger.rsi/inhand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..8c65192231786eb7ba0ce60946dbaa616961c963 GIT binary patch literal 735 zcmV<50wDc~P)@fJhzCTqwd2sSokaqZREe?vPL+zxGrZ0Xd7kdTZ{Gd3g? zx^!?n#RR8o!^uWN$}C$d?Kwp;%a&?)x(m(oLD*omR#%RcSg%y@`psLlUa7#564hEgvqflk zx=LdV02Z2OE@(j44P^)sc%maECKD&{{4|(lOF2^F#miTCcJdglN5|OT+YOy#UNNWfHkk$~5W@}!YtkM|6lTr!I z>&?hx0}J3tIloCUFz+? literal 0 HcmV?d00001 diff --git a/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json b/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json new file mode 100644 index 00000000000..794f491bdb9 --- /dev/null +++ b/Resources/Textures/Objects/Power/portable_recharger.rsi/meta.json @@ -0,0 +1,92 @@ +{ + "version": 1, + "license": "CC-BY-SA-3.0", + "copyright": "Sprited by Lomovar", + "size": { + "x": 32, + "y": 32 + }, + "states": [ + { + "name": "charging", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "charging-equipped-BACKPACK", + "directions": 4, + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ], + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "charging-unlit", + "delays": [ + [ + 0.3, + 0.3, + 0.3, + 0.3, + 0.3, + 0.3 + ] + ] + }, + { + "name": "inhand-left", + "directions": 4 + }, + { + "name": "inhand-right", + "directions": 4 + } + ] +} + From 0be9f044055a3a6fe86b1d3772c01bf409334975 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Fri, 15 Nov 2024 20:15:46 +0000 Subject: [PATCH 2/3] remove funny spaces --- Resources/Prototypes/Research/arsenal.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Research/arsenal.yml b/Resources/Prototypes/Research/arsenal.yml index fabb812648a..982424da851 100644 --- a/Resources/Prototypes/Research/arsenal.yml +++ b/Resources/Prototypes/Research/arsenal.yml @@ -59,8 +59,8 @@ cost: 5000 recipeUnlocks: - MagazineShotgunBeanbag - - BoxShellTranquilizer - - BoxBeanbag + - BoxShellTranquilizer + - BoxBeanbag - WeaponDisabler # DeltaV - rubber ammo which upstream removed - MagazineRifleRubber @@ -115,7 +115,6 @@ - WeaponDisablerSMG - BorgModuleSecurityDeescalate # Delta-V : SecBorg Research - BorgModuleSecurityEscalate # Delta-V : SecBorg Research - - type: technology id: ExplosiveTechnology From 33f71f5ee54b8a343ddfca425abf563d4a25d503 Mon Sep 17 00:00:00 2001 From: deltanedas <@deltanedas:kde.org> Date: Fri, 22 Nov 2024 09:44:15 +0000 Subject: [PATCH 3/3] funny fix --- .../Entities/Objects/Power/portable_recharger.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml b/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml index 35dfa0881f4..3c553fc8124 100644 --- a/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml +++ b/Resources/Prototypes/Entities/Objects/Power/portable_recharger.yml @@ -1,8 +1,8 @@ - type: entity parent: Clothing id: PortableRecharger - name: portable recharger - description: High-tech recharger adapted for portability + name: portable recharger + description: High-tech recharger adapted for portability. components: - type: Item size: Huge @@ -25,6 +25,9 @@ price: 500 - type: Tag tags: [] # ignore "WhitelistChameleon" tag + - type: ContainerContainer + containers: + charger_slot: !type:ContainerSlot - type: ItemSlots slots: charger_slot: @@ -32,4 +35,4 @@ whitelist: components: - HitscanBatteryAmmoProvider - - ProjectileBatteryAmmoProvider \ No newline at end of file + - ProjectileBatteryAmmoProvider