Skip to content

Commit

Permalink
Contraband and medical price scanners beep (#2859)
Browse files Browse the repository at this point in the history
  • Loading branch information
whatston3 authored Feb 5, 2025
1 parent 44e18d3 commit ee1f826
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 26 deletions.
23 changes: 14 additions & 9 deletions Content.Server/_NF/Medical/MedicalBountyPriceGunSystem.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
using Content.Server._NF.Medical.Components;
using Content.Server.Cargo.Components;
using Content.Server.Popups;
using Content.Shared._NF.Bank;
using Content.Shared.IdentityManagement;
using Content.Shared.Interaction;
using Content.Shared.Timing;
using Content.Shared.Verbs;
using Robust.Shared.Audio.Systems;

namespace Content.Server._NF.Medical.Systems;

Expand All @@ -16,6 +16,7 @@ public sealed class MedicalBountyPriceGunSystem : EntitySystem
{
[Dependency] private readonly UseDelaySystem _useDelay = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;

/// <inheritdoc/>
public override void Initialize()
Expand All @@ -24,38 +25,42 @@ public override void Initialize()
SubscribeLocalEvent<MedicalPriceGunComponent, GetVerbsEvent<UtilityVerb>>(OnUtilityVerb);
}

private void OnUtilityVerb(EntityUid uid, MedicalPriceGunComponent component, GetVerbsEvent<UtilityVerb> args)
private void OnUtilityVerb(Entity<MedicalPriceGunComponent> entity, ref GetVerbsEvent<UtilityVerb> args)
{
if (!args.CanAccess || !args.CanInteract || args.Using == null)
return;

if (!TryComp(uid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((uid, useDelay)))
if (!TryComp(entity, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((entity, useDelay)))
return;

var target = args.Target;
var user = args.User;

var verb = new UtilityVerb()
{
Act = () =>
{
AppraiseEntity(args.Target, args.User);
_useDelay.TryResetDelay((uid, useDelay));
AppraiseEntity(target, user);
_useDelay.TryResetDelay((entity, useDelay));
},
Text = Loc.GetString("medical-price-gun-verb-text"),
Message = Loc.GetString("medical-price-gun-verb-message", ("object", Identity.Entity(args.Target, EntityManager)))
Message = Loc.GetString("medical-price-gun-verb-message", ("object", Identity.Entity(target, EntityManager)))
};

args.Verbs.Add(verb);
}

private void OnAfterInteract(EntityUid uid, MedicalPriceGunComponent component, AfterInteractEvent args)
private void OnAfterInteract(Entity<MedicalPriceGunComponent> entity, ref AfterInteractEvent args)
{
if (!args.CanReach || args.Target == null || args.Handled)
return;

if (!TryComp(uid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((uid, useDelay)))
if (!TryComp(entity, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((entity, useDelay)))
return;

AppraiseEntity(args.Target.Value, args.User);
_useDelay.TryResetDelay((uid, useDelay));
_audio.PlayPvs(entity.Comp.AppraisalSound, entity.Owner);
_useDelay.TryResetDelay((entity, useDelay));
args.Handled = true;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Content.Shared.Store;
using Robust.Shared.Audio;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype;

namespace Content.Server._NF.Security.Components;
Expand All @@ -9,8 +10,21 @@ namespace Content.Server._NF.Security.Components;
[RegisterComponent]
public sealed partial class ContrabandPriceGunComponent : Component
{
/// <summary>
/// The currency that scanned items will be checked for.
/// </summary>
[DataField(customTypeSerializer: typeof(PrototypeIdSerializer<CurrencyPrototype>))]
public string Currency = "FrontierUplinkCoin";

/// <summary>
/// The prefix for localization strings to display.
/// </summary>
[DataField]
public string LocStringPrefix = string.Empty;

/// <summary>
/// The sound that plays when the price gun appraises an object.
/// </summary>
[DataField]
public SoundSpecifier AppraisalSound = new SoundPathSpecifier("/Audio/Items/appraiser.ogg");
}
36 changes: 20 additions & 16 deletions Content.Server/_NF/Security/ContrabandPriceGunSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using Content.Shared.Interaction;
using Content.Shared.Timing;
using Content.Shared.Verbs;
using System.Linq;
using Robust.Shared.Audio.Systems;

namespace Content.Server._NF.Security.Systems;

Expand All @@ -16,6 +16,7 @@ public sealed class ContrabandPriceGunSystem : EntitySystem
{
[Dependency] private readonly UseDelaySystem _useDelay = default!;
[Dependency] private readonly PopupSystem _popupSystem = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;

/// <inheritdoc/>
public override void Initialize()
Expand All @@ -24,47 +25,50 @@ public override void Initialize()
SubscribeLocalEvent<ContrabandPriceGunComponent, GetVerbsEvent<UtilityVerb>>(OnUtilityVerb);
}

private void OnUtilityVerb(EntityUid uid, ContrabandPriceGunComponent component, GetVerbsEvent<UtilityVerb> args)
private void OnUtilityVerb(Entity<ContrabandPriceGunComponent> entity, ref GetVerbsEvent<UtilityVerb> args)
{
if (!args.CanAccess || !args.CanInteract || args.Using == null)
return;

if (!TryComp(uid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((uid, useDelay)))
if (!TryComp(entity, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((entity, useDelay)))
return;

if (!TryComp<ContrabandComponent>(args.Target, out var contraband) || !contraband.TurnInValues.ContainsKey(component.Currency))
if (!TryComp<ContrabandComponent>(args.Target, out var contraband) || !contraband.TurnInValues.ContainsKey(entity.Comp.Currency))
return;

var price = contraband.TurnInValues[component.Currency];

var price = contraband.TurnInValues[entity.Comp.Currency];
var user = args.User;
var target = args.Target;

var verb = new UtilityVerb()
{
Act = () =>
{
_popupSystem.PopupEntity(Loc.GetString($"{component.LocStringPrefix}contraband-price-gun-pricing-result", ("object", Identity.Entity(args.Target, EntityManager)), ("price", price)), args.User, args.User);
_useDelay.TryResetDelay((uid, useDelay));
_popupSystem.PopupEntity(Loc.GetString($"{entity.Comp.LocStringPrefix}contraband-price-gun-pricing-result", ("object", Identity.Entity(target, EntityManager)), ("price", price)), user, user);
_useDelay.TryResetDelay((entity.Owner, useDelay));
},
Text = Loc.GetString($"{component.LocStringPrefix}contraband-price-gun-verb-text"),
Message = Loc.GetString($"{component.LocStringPrefix}contraband-price-gun-verb-message", ("object", Identity.Entity(args.Target, EntityManager)))
Text = Loc.GetString($"{entity.Comp.LocStringPrefix}contraband-price-gun-verb-text"),
Message = Loc.GetString($"{entity.Comp.LocStringPrefix}contraband-price-gun-verb-message", ("object", Identity.Entity(args.Target, EntityManager)))
};

args.Verbs.Add(verb);
}

private void OnAfterInteract(EntityUid uid, ContrabandPriceGunComponent component, AfterInteractEvent args)
private void OnAfterInteract(Entity<ContrabandPriceGunComponent> entity, ref AfterInteractEvent args)
{
if (!args.CanReach || args.Target == null || args.Handled)
return;

if (!TryComp(uid, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((uid, useDelay)))
if (!TryComp(entity, out UseDelayComponent? useDelay) || _useDelay.IsDelayed((entity, useDelay)))
return;

if (TryComp<ContrabandComponent>(args.Target, out var contraband) && contraband.TurnInValues.ContainsKey(component.Currency))
_popupSystem.PopupEntity(Loc.GetString($"{component.LocStringPrefix}contraband-price-gun-pricing-result", ("object", Identity.Entity(args.Target.Value, EntityManager)), ("price", contraband.TurnInValues[component.Currency])), args.User, args.User);
if (TryComp<ContrabandComponent>(args.Target, out var contraband) && contraband.TurnInValues.ContainsKey(entity.Comp.Currency))
_popupSystem.PopupEntity(Loc.GetString($"{entity.Comp.LocStringPrefix}contraband-price-gun-pricing-result", ("object", Identity.Entity(args.Target.Value, EntityManager)), ("price", contraband.TurnInValues[entity.Comp.Currency])), args.User, args.User);
else
_popupSystem.PopupEntity(Loc.GetString($"{component.LocStringPrefix}contraband-price-gun-pricing-result-none", ("object", Identity.Entity(args.Target.Value, EntityManager))), args.User, args.User);
_popupSystem.PopupEntity(Loc.GetString($"{entity.Comp.LocStringPrefix}contraband-price-gun-pricing-result-none", ("object", Identity.Entity(args.Target.Value, EntityManager))), args.User, args.User);

_useDelay.TryResetDelay((uid, useDelay));
_audio.PlayPvs(entity.Comp.AppraisalSound, entity.Owner);
_useDelay.TryResetDelay((entity, useDelay));
args.Handled = true;
}
}
11 changes: 10 additions & 1 deletion Content.Shared/_NF/Medical/MedicalPriceGunComponent.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
using Robust.Shared.Audio;

namespace Content.Server._NF.Medical.Components;

[RegisterComponent]
public sealed partial class MedicalPriceGunComponent : Component;
public sealed partial class MedicalPriceGunComponent : Component
{
/// <summary>
/// The sound that plays when the price gun appraises an object.
/// </summary>
[DataField]
public SoundSpecifier AppraisalSound = new SoundPathSpecifier("/Audio/Items/appraiser.ogg");
}

0 comments on commit ee1f826

Please sign in to comment.