Skip to content

Commit

Permalink
Eris goes insane, 2025 (#47)
Browse files Browse the repository at this point in the history
<!-- Please read these guidelines before opening your PR:
https://docs.spacestation14.io/en/getting-started/pr-guideline -->
<!-- The text between the arrows are comments - they will not be visible
on your PR. -->

## About the PR
Some of the admins asked for this

## Why / Balance
These changes SUCKED and nobody LOVED them

## Technical details
Just a bunch of reverts

## Media

## Requirements
- [-] I have read and I am following the [Pull Request
Guidelines](https://docs.spacestation14.com/en/general-development/codebase-info/pull-request-guidelines.html).
I understand that not doing so may get my pr closed at maintainer’s
discretion
- [-] I have added screenshots/videos to this PR showcasing its changes
ingame, **or** this PR does not require an ingame showcase

## Breaking changes
lol, lmao

**Changelog**

:cl:
- add: Reverted some honestly terrible changes. Nuclear core removal and
salv shuttle are back.
  • Loading branch information
Guloveos authored Sep 9, 2024
2 parents ae1a703 + 9f7ff61 commit e6a0d89
Show file tree
Hide file tree
Showing 44 changed files with 614 additions and 69 deletions.
14 changes: 14 additions & 0 deletions Content.Server/Objectives/Components/StoreUnlockerComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
using Content.Shared.Store;
using Robust.Shared.Prototypes;

namespace Content.Server.Objectives.Components;

/// <summary>
/// Unlocks store listings that use <see cref="ObjectiveUnlockCondition"/>.
/// </summary>
[RegisterComponent]
public sealed partial class StoreUnlockerComponent : Component
{
[DataField(required: true)]
public List<ProtoId<ListingPrototype>> Listings = new();
}
34 changes: 34 additions & 0 deletions Content.Server/Objectives/Systems/StoreUnlockerSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using Content.Server.Objectives.Components;
using Content.Shared.Mind;

namespace Content.Server.Objectives.Systems;

/// <summary>
/// Provides api for listings with <c>ObjectiveUnlockRequirement</c> to use.
/// </summary>
public sealed class StoreUnlockerSystem : EntitySystem
{
private EntityQuery<StoreUnlockerComponent> _query;

public override void Initialize()
{
_query = GetEntityQuery<StoreUnlockerComponent>();
}

/// <summary>
/// Returns true if a listing id is unlocked by any objectives on a mind.
/// </summary>
public bool IsUnlocked(MindComponent mind, string id)
{
foreach (var obj in mind.Objectives)
{
if (!_query.TryComp(obj, out var comp))
continue;

if (comp.Listings.Contains(id))
return true;
}

return false;
}
}
21 changes: 21 additions & 0 deletions Content.Server/Store/Conditions/ObjectiveUnlockCondition.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
using Content.Shared.Mind;
using Content.Shared.Store;
using Content.Server.Objectives.Systems;

namespace Content.Server.Store.Conditions;

/// <summary>
/// Requires that the buyer have an objective that unlocks this listing.
/// </summary>
public sealed partial class ObjectiveUnlockCondition : ListingCondition
{
public override bool Condition(ListingConditionArgs args)
{
var minds = args.EntityManager.System<SharedMindSystem>();
if (!minds.TryGetMind(args.Buyer, out _, out var mind))
return false;

var unlocker = args.EntityManager.System<StoreUnlockerSystem>();
return unlocker.IsUnlocked(mind, args.Listing.ID);
}
}
25 changes: 17 additions & 8 deletions Content.Shared/Cabinet/ItemCabinetSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,17 @@ public sealed class ItemCabinetSystem : EntitySystem
[Dependency] private readonly OpenableSystem _openable = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;

private EntityQuery<ItemCabinetComponent> _cabinetQuery = default!;
private EntityQuery<ItemSlotsComponent> _slotsQuery = default!;

/// <inheritdoc/>
public override void Initialize()
{
base.Initialize();

_cabinetQuery = GetEntityQuery<ItemCabinetComponent>();
_slotsQuery = GetEntityQuery<ItemSlotsComponent>();

SubscribeLocalEvent<ItemCabinetComponent, ComponentStartup>(OnStartup);
SubscribeLocalEvent<ItemCabinetComponent, MapInitEvent>(OnMapInit);
SubscribeLocalEvent<ItemCabinetComponent, EntInsertedIntoContainerMessage>(OnContainerModified);
Expand All @@ -37,12 +43,12 @@ private void OnStartup(Entity<ItemCabinetComponent> ent, ref ComponentStartup ar
private void OnMapInit(Entity<ItemCabinetComponent> ent, ref MapInitEvent args)
{
// update at mapinit to avoid copy pasting locked: true and locked: false for each closed/open prototype
SetSlotLock(ent, !_openable.IsOpen(ent));
SetSlotLock((ent, ent.Comp), !_openable.IsOpen(ent));
}

private void UpdateAppearance(Entity<ItemCabinetComponent> ent)
{
_appearance.SetData(ent, ItemCabinetVisuals.ContainsItem, HasItem(ent));
_appearance.SetData(ent, ItemCabinetVisuals.ContainsItem, HasItem((ent, ent.Comp)));
}

private void OnContainerModified(EntityUid uid, ItemCabinetComponent component, ContainerModifiedMessage args)
Expand All @@ -53,21 +59,24 @@ private void OnContainerModified(EntityUid uid, ItemCabinetComponent component,

private void OnOpened(Entity<ItemCabinetComponent> ent, ref OpenableOpenedEvent args)
{
SetSlotLock(ent, false);
SetSlotLock((ent, ent.Comp), false);
}

private void OnClosed(Entity<ItemCabinetComponent> ent, ref OpenableClosedEvent args)
{
SetSlotLock(ent, true);
SetSlotLock((ent, ent.Comp), true);
}

/// <summary>
/// Tries to get the cabinet's item slot.
/// </summary>
public bool TryGetSlot(Entity<ItemCabinetComponent> ent, [NotNullWhen(true)] out ItemSlot? slot)
public bool TryGetSlot(Entity<ItemCabinetComponent?> ent, [NotNullWhen(true)] out ItemSlot? slot)
{
slot = null;
if (!TryComp<ItemSlotsComponent>(ent, out var slots))
if (!_cabinetQuery.Resolve(ent, ref ent.Comp))
return false;

if (!_slotsQuery.TryComp(ent, out var slots))
return false;

return _slots.TryGetSlot(ent, ent.Comp.Slot, out slot, slots);
Expand All @@ -76,7 +85,7 @@ public bool TryGetSlot(Entity<ItemCabinetComponent> ent, [NotNullWhen(true)] out
/// <summary>
/// Returns true if the cabinet contains an item.
/// </summary>
public bool HasItem(Entity<ItemCabinetComponent> ent)
public bool HasItem(Entity<ItemCabinetComponent?> ent)
{
return TryGetSlot(ent, out var slot) && slot.HasItem;
}
Expand All @@ -86,7 +95,7 @@ public bool HasItem(Entity<ItemCabinetComponent> ent)
/// </summary>
public void SetSlotLock(Entity<ItemCabinetComponent> ent, bool closed)
{
if (!TryComp<ItemSlotsComponent>(ent, out var slots))
if (!_slotsQuery.TryComp(ent, out var slots))
return;

if (_slots.TryGetSlot(ent, ent.Comp.Slot, out var slot, slots))
Expand Down
23 changes: 23 additions & 0 deletions Content.Shared/Cabinet/SealingCabinetComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
using Robust.Shared.GameStates;

namespace Content.Shared.Cabinet;

/// <summary>
/// Item cabinet that cannot be opened if it has an item inside.
/// The only way to open it after that is to emag it.
/// </summary>
[RegisterComponent, NetworkedComponent]
public sealed partial class SealingCabinetComponent : Component
{
/// <summary>
/// Popup shown when trying to open the cabinet once sealed.
/// </summary>
[DataField(required: true)]
public LocId SealedPopup = string.Empty;

/// <summary>
/// Set to false to disable emag unsealing.
/// </summary>
[DataField]
public bool Emaggable = true;
}
45 changes: 45 additions & 0 deletions Content.Shared/Cabinet/SealingCabinetSystem.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
using Content.Shared.Emag.Systems;
using Content.Shared.Nutrition.Components;
using Content.Shared.Nutrition.EntitySystems;
using Content.Shared.Popups;

namespace Content.Shared.Cabinet;

public sealed class SealingCabinetSystem : EntitySystem
{
[Dependency] private readonly ItemCabinetSystem _cabinet = default!;
[Dependency] private readonly OpenableSystem _openable = default!;
[Dependency] private readonly SharedPopupSystem _popup = default!;

public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<SealingCabinetComponent, OpenableOpenAttemptEvent>(OnOpenAttempt);
SubscribeLocalEvent<SealingCabinetComponent, GotEmaggedEvent>(OnEmagged);
}

private void OnOpenAttempt(Entity<SealingCabinetComponent> ent, ref OpenableOpenAttemptEvent args)
{
if (!_cabinet.HasItem(ent.Owner))
return;

args.Cancelled = true;
if (args.User is {} user)
_popup.PopupClient(Loc.GetString(ent.Comp.SealedPopup, ("container", ent.Owner)), ent, user);
}

private void OnEmagged(Entity<SealingCabinetComponent> ent, ref GotEmaggedEvent args)
{
if (!ent.Comp.Emaggable)
return;

if (!_cabinet.HasItem(ent.Owner) || _openable.IsOpen(ent))
return;

_openable.SetOpen(ent, true);

args.Handled = true;
args.Repeatable = true;
}
}
2 changes: 2 additions & 0 deletions Resources/Locale/en-US/nuke/nuke-core-container.ftl
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
nuke-core-container-whitelist-fail-popup = That doesn't fit into the container.
nuke-core-container-sealed-popup = The {$container} is sealed shut!
1 change: 1 addition & 0 deletions Resources/Locale/en-US/objectives/conditions/steal.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ objective-condition-steal-title = Steal the {$owner}'s {$itemName}.
objective-condition-steal-description = We need you to steal {$itemName}. Don't get caught.
objective-condition-steal-station = station
objective-condition-steal-nuclear-bomb = nuclear bomb
objective-condition-steal-Ian = head of personnel's corgi
objective-condition-thief-description = The {$itemName} would be a great addition to my collection!
Expand Down
1 change: 1 addition & 0 deletions Resources/Locale/en-US/store/categories.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ store-category-wearables = Wearables
store-category-pointless = Pointless
store-category-foodwater = Food and water
store-category-mats = Materials
store-category-objectives = Objectives
# Revenant
store-category-abilities = Abilities
Expand Down
5 changes: 5 additions & 0 deletions Resources/Locale/en-US/store/uplink-catalog.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -442,3 +442,8 @@ uplink-backpack-syndicate-desc = Lightweight explosion-proof a backpack for hold
uplink-combat-bakery-name = Combat Bakery Kit
uplink-combat-bakery-desc = A kit of clandestine baked weapons. Contains a baguette sword, a pair of throwing croissants, and a syndicate microwave board for making more. Once the job is done, eat the evidence.
uplink-backpack-syndicate-desc = Lightweight explosion-proof а backpack for holding various traitor goods
# Objectives
uplink-core-extraction-toolbox-name = Core Extraction Toolbox
uplink-core-extraction-toolbox-desc = A toolbox containing everything you need to remove a nuclear bomb's plutonium core. Instructions not included.
5 changes: 4 additions & 1 deletion Resources/Locale/en-US/tools/tool-qualities.ftl
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,7 @@ tool-quality-rolling-name = Rolling
tool-quality-rolling-tool-name = Rolling Pin
tool-quality-digging-name = Digging
tool-quality-digging-tool-name = Shovel
tool-quality-digging-tool-name = Shovel
tool-quality-fine-screwing-name = Fine Screwing
tool-quality-fine-screwing-tool-name = Thin-Tipped Screwdriver
13 changes: 13 additions & 0 deletions Resources/Prototypes/Catalog/Fills/Items/toolboxes.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,19 @@
- id: ClothingHandsGlovesCombat
- id: ClothingMaskGasSyndicate

- type: entity
parent: ToolboxSyndicate
id: ToolboxSyndicateFilledCoreExtraction
suffix: Filled, Core Extraction
components:
- type: StorageFill
contents:
- id: Crowbar
- id: Welder
- id: Wrench
- id: ThinTippedScrewdriver
- id: NukeCoreContainer

- type: entity
id: ToolboxGoldFilled
name: golden toolbox
Expand Down
73 changes: 37 additions & 36 deletions Resources/Prototypes/Catalog/Fills/Lockers/cargo.yml
Original file line number Diff line number Diff line change
@@ -1,47 +1,48 @@
- type: entityTable
id: FillSalvageSpecialistHardsuitSpatio
table: !type:AllSelector
children:
- id: OxygenTankFilled
- id: ClothingShoesBootsMag
- id: ClothingOuterHardsuitSpatio
- id: ClothingMaskGasExplorer

- type: entityTable
id: LockerFillSalvageSpecialist
table: !type:AllSelector
children:
- id: ClothingBeltUtilityFilled
- id: SurvivalKnife
- id: HandheldGPSBasic
- id: RadioHandheld
- id: AppraisalTool
- id: FireExtinguisher
- id: Flare
prob: 0.3
rolls: !type:ConstantNumberSelector
value: 3

- type: entity
id: LockerSalvageSpecialistFilledHardsuit
suffix: Filled, Hardsuit
parent: LockerSalvageSpecialist
components:
- type: EntityTableContainerFill
containers:
entity_storage: !type:AllSelector
children:
- !type:NestedSelector
tableId: FillSalvageSpecialistHardsuitSpatio
- !type:NestedSelector
tableId: LockerFillSalvageSpecialist
- type: StorageFill
contents:
- id: ClothingOuterHardsuitSpatio
- id: ClothingShoesBootsMag
- id: ClothingMaskGasExplorer
- id: ClothingBeltUtilityFilled
- id: SurvivalKnife
- id: HandheldGPSBasic
- id: RadioHandheld
- id: SeismicCharge
amount: 2
- id: OreBag
prob: 0.5
- id: Flare
prob: 0.3
- id: Flare
prob: 0.3
- id: Flare
prob: 0.3

- type: entity
id: LockerSalvageSpecialistFilled
suffix: Filled
parent: LockerSalvageSpecialist
components:
- type: EntityTableContainerFill
containers:
entity_storage: !type:NestedSelector
tableId: LockerFillSalvageSpecialist
- type: StorageFill
contents:
# Currently do not function as 'true' mesons, so they're useless for salvagers.
# - id: ClothingEyesGlassesMeson
- id: ClothingBeltUtilityFilled
- id: SurvivalKnife
- id: HandheldGPSBasic
- id: RadioHandheld
- id: SeismicCharge
amount: 2
- id: OreBag
prob: 0.5
- id: Flare
prob: 0.3
- id: Flare
prob: 0.3
- id: Flare
prob: 0.3
3 changes: 2 additions & 1 deletion Resources/Prototypes/Catalog/Fills/Lockers/heads.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
- id: RubberStampApproved
- id: RubberStampDenied
- id: RubberStampQm
- id: SalvageShuttleConsoleCircuitboard

- type: entity
id: LockerQuarterMasterFilled
Expand Down Expand Up @@ -376,4 +377,4 @@
- id: JetpackBlue
- id: SpaceCash1000
- id: BeachBall
- id: BikeHorn
- id: BikeHorn
10 changes: 6 additions & 4 deletions Resources/Prototypes/Catalog/Fills/Lockers/suit_storage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -229,10 +229,12 @@
parent: SuitStorageBase
suffix: Salvage
components:
- type: EntityTableContainerFill
containers:
entity_storage: !type:NestedSelector
tableId: FillSalvageSpecialistHardsuitSpatio
- type: StorageFill
contents:
- id: OxygenTankFilled
- id: ClothingShoesBootsMag
- id: ClothingOuterHardsuitSpatio
- id: ClothingMaskGasExplorer
- type: AccessReader
access: [["Salvage"]]

Expand Down
Loading

0 comments on commit e6a0d89

Please sign in to comment.