SOS app for the PDA (#2812)

* Merge pull request #1450 from Saeko-44/master

SOS app for the PDA

* fix PDAs

* untouch

* Revert "untouch"

This reverts commit 5c08a2972d.

* untouch the right guy

* Update pda.yml

* removed unnecessary using that caused an error

* add feedback popup

* Update SOSCartridgeSystem.cs

* add cart sprite

* review changes

* Update cartridges.yml

* remove app from shitter roles

* fine

* display seconds

* Update cartridges.ftl

* upped cooldown to 90 seconds

* use imp namespace

* Update pda.yml

---------

Co-authored-by: mqole <113324899+mqole@users.noreply.github.com>
This commit is contained in:
rosieposie
2025-02-06 03:16:13 -05:00
committed by GitHub
co-authored by mqole
parent 376535f1e9
commit 6879e37ce0
11 changed files with 183 additions and 1 deletions
@@ -0,0 +1,43 @@
using Content.Shared.CartridgeLoader.Cartridges;
using Content.Shared.Containers.ItemSlots;
using Content.Shared.Radio;
using Robust.Shared.Prototypes;
namespace Content.Server._Impstation.CartridgeLoader.Cartridges;
[RegisterComponent]
public sealed partial class SOSCartridgeComponent : Component
{
[DataField]
//Path to the id container
public const string PDAIdContainer = "PDA-id";
[DataField]
//Name to use if no id is found
public string DefaultName = "sos-caller-defaultname";
[ViewVariables(VVAccess.ReadOnly)]
public string LocalizedDefaultName => Loc.GetString(DefaultName);
[DataField]
//Notification message
public string HelpMessage = "sos-message";
[ViewVariables(VVAccess.ReadOnly)]
public string LocalizedHelpMessage => Loc.GetString(HelpMessage);
[DataField]
//Channel to notify
public ProtoId<RadioChannelPrototype> HelpChannel = "Security";
[DataField]
//Timeout between calls
public const float TimeOut = 90;
[DataField]
//Countdown until next call is allowed
public float Timer = 0;
[ViewVariables(VVAccess.ReadOnly)]
public bool CanCall => Timer <= 0;
}
@@ -0,0 +1,78 @@
using Content.Server.Radio.EntitySystems;
using Content.Shared.Access.Components;
using Content.Shared.CartridgeLoader;
using Content.Shared.PDA;
using Content.Shared.Popups;
using Robust.Server.Containers;
using Robust.Shared.Containers;
namespace Content.Server._Impstation.CartridgeLoader.Cartridges;
public sealed class SOSCartridgeSystem : EntitySystem
{
[Dependency] private readonly SharedContainerSystem _container = default!;
[Dependency] private readonly SharedPopupSystem _popupSystem = default!;
[Dependency] private readonly RadioSystem _radio = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<SOSCartridgeComponent, CartridgeActivatedEvent>(OnActivated);
}
public override void Update(float frameTime)
{
base.Update(frameTime);
var query = EntityQueryEnumerator<SOSCartridgeComponent>();
while (query.MoveNext(out var uid, out var comp))
{
if (comp.Timer > 0)
{
comp.Timer -= frameTime;
}
}
}
private void OnActivated(EntityUid uid, SOSCartridgeComponent component, CartridgeActivatedEvent args)
{
if (component.CanCall)
{
//Get the PDA
if (!TryComp<PdaComponent>(args.Loader, out var pda))
return;
//Get the id container
if (_container.TryGetContainer(args.Loader, SOSCartridgeComponent.PDAIdContainer, out var idContainer))
{
//If theres nothing in id slot, send message anonymously
if (idContainer.ContainedEntities.Count == 0)
{
_radio.SendRadioMessage(uid, component.LocalizedDefaultName + " " + component.LocalizedHelpMessage, component.HelpChannel, uid);
}
else
{
//Otherwise, send a message with the full name of every id in there
foreach (var idCard in idContainer.ContainedEntities)
{
if (!TryComp<IdCardComponent>(idCard, out var idCardComp))
return;
_radio.SendRadioMessage(uid, idCardComp.FullName + " " + component.LocalizedHelpMessage, component.HelpChannel, uid);
}
}
component.Timer = SOSCartridgeComponent.TimeOut;
// DeltaV - send feedback that you succeeded
_popupSystem.PopupEntity(Loc.GetString("sos-message-sent-success"), uid, PopupType.Medium);
}
}
// DeltaV - send feedback that you failed
else
{
var seconds = Math.Round(component.Timer);
_popupSystem.PopupEntity(Loc.GetString("sos-message-sent-cooldown", ("count", seconds)), uid, PopupType.MediumCaution);
}
}
}
@@ -0,0 +1,5 @@
sos-program-name = SOS
sos-caller-defaultname = Unknown
sos-message = is requesting help!
sos-message-sent-success = SOS sent successfully.
sos-message-sent-cooldown = Please wait {$count} second(s) to send another SOS.
@@ -140,6 +140,7 @@
- id: RubberStampHop
#- id: WeaponDisabler # DeltaV - There is no reason for the service head to have a disabler.
- id: ClothingEyesHudCommand
- id: SOSCartridge # DeltaV - adds SOS app https://github.com/DeltaV-Station/Delta-v/pull/2812
- type: entity
id: LockerHeadOfPersonnelFilled
@@ -86,6 +86,7 @@
- NotekeeperCartridge
- NewsReaderCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
cartridgeSlot:
priority: -1
name: device-pda-slot-component-slot-name-cartridge
@@ -139,6 +140,7 @@
- CrimeAssistCartridge # DeltaV
- SecWatchCartridge # DeltaV: SecWatch replaces WantedList
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BasePDA
@@ -153,6 +155,7 @@
- NewsReaderCartridge
- MedTekCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BasePDA
@@ -468,6 +471,7 @@
- MailMetricsCartridge # DeltaV - MailMetrics courier tracker
- StockTradingCartridge # DeltaV - StockTrading
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BasePDA
@@ -493,6 +497,7 @@
- NewsReaderCartridge
- StockTradingCartridge # DeltaV - StockTrading
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BasePDA
@@ -520,6 +525,7 @@
- NewsReaderCartridge
- AstroNavCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BasePDA
@@ -832,6 +838,7 @@
- NewsReaderCartridge
- GlimmerMonitorCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BasePDA
@@ -858,6 +865,7 @@
- NewsReaderCartridge
- GlimmerMonitorCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BaseSecurityPDA
@@ -886,6 +894,7 @@
- SecWatchCartridge # DeltaV: SecWatch replaces WantedList
- LogProbeCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BaseSecurityPDA
@@ -957,6 +966,7 @@
- LogProbeCartridge
- AstroNavCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: CentcomPDA
@@ -984,6 +994,7 @@
- AstroNavCartridge
- StockTradingCartridge # Delta-V
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: Tag # Ignore Chameleon tags
tags:
- DoorBumpOpener
@@ -1141,6 +1152,7 @@
- LogProbeCartridge
- AstroNavCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: ERTLeaderPDA
@@ -1254,6 +1266,7 @@
- NewsReaderCartridge
- StockTradingCartridge # DeltaV - StockTrading
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BasePDA
@@ -1318,6 +1331,7 @@
- SecWatchCartridge # DeltaV: SecWatch replaces WantedList
- LogProbeCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: BaseMedicalPDA
@@ -1347,6 +1361,7 @@
- SecWatchCartridge # DeltaV: SecWatch replaces WantedList
- MedTekCartridge
- NanoChatCartridge # DeltaV
- SOSCartridge # Imp
- type: entity
parent: ClownPDA
@@ -14,6 +14,7 @@
- CrimeAssistCartridge
- SecWatchCartridge
- NanoChatCartridge
- SOSCartridge # Imp
- MedTekCartridge
- type: Pda
id: BrigmedicIDCard
@@ -84,6 +85,7 @@
- CrimeAssistCartridge
- SecWatchCartridge
- NanoChatCartridge
- SOSCartridge # Imp
- type: entity
parent: BaseJusticePDA
@@ -198,6 +200,7 @@
- NewsReaderCartridge
- MailMetricsCartridge
- NanoChatCartridge
- SOSCartridge # Imp
- type: entity
parent: CourierPDA
@@ -0,0 +1,20 @@
- type: entity
parent: BaseItem
id: SOSCartridge
name: SOS cartridge
description: A program to call for help.
components:
# Begin Delta-V Section - added cartridge sprite
- type: Sprite
sprite: _DV/Objects/Devices/cartridge.rsi
state: cart-sos
- type: Icon
sprite: _DV/Objects/Devices/cartridge.rsi
state: cart-sos
# End Delta-V Section
- type: Cartridge
programName: sos-program-name
icon:
sprite: _Impstation/Objects/Devices/sos.rsi
state: icon
- type: SOSCartridge
Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

@@ -1,7 +1,7 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "cart-chat made by kushbreth (discord), cart-cri, cart-mail, cart-psi, cart-stonk made by Monotheonist (github), edited from cart-log, cart-nav & cart-med cartridges; cart-log made by Skarletto (github), cart-nav, cart-med made by ArchRBX (github)",
"copyright": "cart-chat made by kushbreth (discord), cart-cri, cart-mail, cart-psi, cart-stonk made by Monotheonist (github), edited from cart-log, cart-nav & cart-med cartridges; cart-log made by Skarletto (github), cart-nav, cart-med made by ArchRBX (github), cart-sos modified from cart-chat by rosieposieeee (github)",
"size": {
"x": 32,
"y": 32
@@ -21,6 +21,9 @@
},
{
"name": "cart-chat"
},
{
"name": "cart-sos"
}
]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

@@ -0,0 +1,14 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "impstation at https://github.com/impstation/imp-station-14/pull/1450",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon"
}
]
}