Give stores the ability to check for owner only (#26573)
adds a check if the store belongs to the user
This commit is contained in:
@@ -78,6 +78,13 @@ public sealed partial class StoreComponent : Component
|
|||||||
[ViewVariables, DataField]
|
[ViewVariables, DataField]
|
||||||
public bool RefundAllowed;
|
public bool RefundAllowed;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if store can be opened by the account owner only.
|
||||||
|
/// Not meant to be used with uplinks.
|
||||||
|
/// </summary>
|
||||||
|
[ViewVariables(VVAccess.ReadWrite), DataField]
|
||||||
|
public bool OwnerOnly;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The map the store was originally from, used to block refunds if the map is changed
|
/// The map the store was originally from, used to block refunds if the map is changed
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using JetBrains.Annotations;
|
|||||||
using Robust.Server.GameObjects;
|
using Robust.Server.GameObjects;
|
||||||
using Robust.Shared.Prototypes;
|
using Robust.Shared.Prototypes;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Robust.Shared.Utility;
|
||||||
|
|
||||||
namespace Content.Server.Store.Systems;
|
namespace Content.Server.Store.Systems;
|
||||||
|
|
||||||
@@ -26,6 +27,7 @@ public sealed partial class StoreSystem : EntitySystem
|
|||||||
{
|
{
|
||||||
base.Initialize();
|
base.Initialize();
|
||||||
|
|
||||||
|
SubscribeLocalEvent<StoreComponent, ActivatableUIOpenAttemptEvent>(OnStoreOpenAttempt);
|
||||||
SubscribeLocalEvent<CurrencyComponent, AfterInteractEvent>(OnAfterInteract);
|
SubscribeLocalEvent<CurrencyComponent, AfterInteractEvent>(OnAfterInteract);
|
||||||
SubscribeLocalEvent<StoreComponent, BeforeActivatableUIOpenEvent>(BeforeActivatableUiOpen);
|
SubscribeLocalEvent<StoreComponent, BeforeActivatableUIOpenEvent>(BeforeActivatableUiOpen);
|
||||||
|
|
||||||
@@ -65,6 +67,21 @@ public sealed partial class StoreSystem : EntitySystem
|
|||||||
RaiseLocalEvent(uid, ref ev, true);
|
RaiseLocalEvent(uid, ref ev, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnStoreOpenAttempt(EntityUid uid, StoreComponent component, ActivatableUIOpenAttemptEvent args)
|
||||||
|
{
|
||||||
|
if (!component.OwnerOnly)
|
||||||
|
return;
|
||||||
|
|
||||||
|
component.AccountOwner ??= args.User;
|
||||||
|
DebugTools.Assert(component.AccountOwner != null);
|
||||||
|
|
||||||
|
if (component.AccountOwner == args.User)
|
||||||
|
return;
|
||||||
|
|
||||||
|
_popup.PopupEntity(Loc.GetString("store-not-account-owner", ("store", uid)), uid, args.User);
|
||||||
|
args.Cancel();
|
||||||
|
}
|
||||||
|
|
||||||
private void OnAfterInteract(EntityUid uid, CurrencyComponent component, AfterInteractEvent args)
|
private void OnAfterInteract(EntityUid uid, CurrencyComponent component, AfterInteractEvent args)
|
||||||
{
|
{
|
||||||
if (args.Handled || !args.CanReach)
|
if (args.Handled || !args.CanReach)
|
||||||
|
|||||||
@@ -6,3 +6,5 @@ store-ui-traitor-flavor = Copyright (C) NT -30643
|
|||||||
store-ui-traitor-warning = Operatives must lock their uplinks after use to avoid detection.
|
store-ui-traitor-warning = Operatives must lock their uplinks after use to avoid detection.
|
||||||
|
|
||||||
store-withdraw-button-ui = Withdraw {$currency}
|
store-withdraw-button-ui = Withdraw {$currency}
|
||||||
|
|
||||||
|
store-not-account-owner = This {$store} is not bound to you!
|
||||||
|
|||||||
Reference in New Issue
Block a user