Revert "plutonium core steal objective" (#29578)

Revert "plutonium core steal objective (#26786)"

This reverts commit f6ce07289a.
This commit is contained in:
Pieter-Jan Briers
2024-06-29 17:23:03 +02:00
committed by GitHub
parent 325d64b5ed
commit 2a7bdd9b08
33 changed files with 20 additions and 497 deletions

View File

@@ -1,14 +0,0 @@
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();
}

View File

@@ -1,34 +0,0 @@
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;
}
}

View File

@@ -1,21 +0,0 @@
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);
}
}

View File

@@ -16,17 +16,11 @@ 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);
@@ -43,12 +37,12 @@ public sealed class ItemCabinetSystem : EntitySystem
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, ent.Comp), !_openable.IsOpen(ent));
SetSlotLock(ent, !_openable.IsOpen(ent));
}
private void UpdateAppearance(Entity<ItemCabinetComponent> ent)
{
_appearance.SetData(ent, ItemCabinetVisuals.ContainsItem, HasItem((ent, ent.Comp)));
_appearance.SetData(ent, ItemCabinetVisuals.ContainsItem, HasItem(ent));
}
private void OnContainerModified(EntityUid uid, ItemCabinetComponent component, ContainerModifiedMessage args)
@@ -59,24 +53,21 @@ public sealed class ItemCabinetSystem : EntitySystem
private void OnOpened(Entity<ItemCabinetComponent> ent, ref OpenableOpenedEvent args)
{
SetSlotLock((ent, ent.Comp), false);
SetSlotLock(ent, false);
}
private void OnClosed(Entity<ItemCabinetComponent> ent, ref OpenableClosedEvent args)
{
SetSlotLock((ent, ent.Comp), true);
SetSlotLock(ent, 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 (!_cabinetQuery.Resolve(ent, ref ent.Comp))
return false;
if (!_slotsQuery.TryComp(ent, out var slots))
if (!TryComp<ItemSlotsComponent>(ent, out var slots))
return false;
return _slots.TryGetSlot(ent, ent.Comp.Slot, out slot, slots);
@@ -85,7 +76,7 @@ public sealed class ItemCabinetSystem : EntitySystem
/// <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;
}
@@ -95,7 +86,7 @@ public sealed class ItemCabinetSystem : EntitySystem
/// </summary>
public void SetSlotLock(Entity<ItemCabinetComponent> ent, bool closed)
{
if (!_slotsQuery.TryComp(ent, out var slots))
if (!TryComp<ItemSlotsComponent>(ent, out var slots))
return;
if (_slots.TryGetSlot(ent, ent.Comp.Slot, out var slot, slots))

View File

@@ -1,23 +0,0 @@
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;
}

View File

@@ -1,45 +0,0 @@
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;
}
}

View File

@@ -1,2 +0,0 @@
nuke-core-container-whitelist-fail-popup = That doesn't fit into the container.
nuke-core-container-sealed-popup = The {$container} is sealed shut!

View File

@@ -4,7 +4,6 @@ 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!

View File

@@ -12,7 +12,6 @@ store-category-allies = Allies
store-category-job = Job
store-category-wearables = Wearables
store-category-pointless = Pointless
store-category-objectives = Objectives
# Revenant
store-category-abilities = Abilities

View File

@@ -433,7 +433,3 @@ uplink-barber-scissors-desc = A good tool to give your fellow agent a nice hairc
uplink-backpack-syndicate-name = Syndicate backpack
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.

View File

@@ -33,6 +33,3 @@ tool-quality-rolling-tool-name = Rolling Pin
tool-quality-digging-name = Digging
tool-quality-digging-tool-name = Shovel
tool-quality-fine-screwing-name = Fine Screwing
tool-quality-fine-screwing-tool-name = Thin-Tipped Screwdriver

View File

@@ -121,19 +121,6 @@
- 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

View File

@@ -1727,23 +1727,3 @@
blacklist:
components:
- SurplusBundle
# Objective-specific
- type: listing
id: UplinkCoreExtractionToolbox
name: uplink-core-extraction-toolbox-name
description: uplink-core-extraction-toolbox-desc
icon:
sprite: Objects/Misc/nuke_core_container.rsi
state: closed
productEntity: ToolboxSyndicateFilledCoreExtraction
categories:
- UplinkObjectives
conditions:
- !type:ObjectiveUnlockCondition
- !type:ListingLimitedStockCondition
stock: 1
- !type:BuyerWhitelistCondition
blacklist:
components:
- SurplusBundle

View File

@@ -1,63 +0,0 @@
- type: entity
parent: BaseItem
id: PlutoniumCore
name: plutonium core
description: Extremely radioactive, even looking at this with the naked eye is dangerous.
components:
- type: Sprite
sprite: Objects/Misc/plutonium_core.rsi
state: icon
- type: StealTarget
stealGroup: PlutoniumCore
- type: RadiationSource
intensity: 4
slope: 1
- type: StaticPrice
price: 49000
- type: Tag
tags:
- PlutoniumCore
- type: entity
parent: [BaseItem, BaseItemCabinet]
id: NukeCoreContainer
name: nuke core container
description: Solid container for radioactive objects.
components:
- type: Sprite
sprite: Objects/Misc/nuke_core_container.rsi
layers:
- state: closed
map: [ "enum.OpenableVisuals.Layer" ]
- state: core_closed
map: [ "enum.ItemCabinetVisuals.Layer" ]
visible: false
shader: unshaded
- type: Item
size: Normal
shape:
- 0,0,1,1
- type: RadiationBlockingContainer
resistance: 4
- type: SealingCabinet
sealedPopup: nuke-core-container-sealed-popup
- type: ItemSlots
slots:
ItemCabinet:
whitelist:
tags:
- PlutoniumCore
whitelistFailPopup: nuke-core-container-whitelist-fail-popup
- type: GenericVisualizer
visuals:
enum.OpenableVisuals.Opened:
enum.OpenableVisuals.Layer:
True: { state: open }
False: { state: closed }
enum.ItemCabinetVisuals.Layer:
True: { state: core_open }
False: { state: core_closed }
enum.ItemCabinetVisuals.ContainsItem:
enum.ItemCabinetVisuals.Layer:
True: { visible: true }
False: { visible: false }

View File

@@ -1,10 +0,0 @@
- type: entity
parent: Screwdriver
id: ThinTippedScrewdriver
description: A screwdriver with an ultra thin tip that's carefully designed to boost screwing speed.
suffix: DO NOT MAP
components:
- type: Tool
qualities:
- Screwing
- FineScrewing

View File

@@ -1,8 +1,8 @@
- type: entity
abstract: true
parent: [BaseStructure, StructureWheeled]
id: BaseNuclearBomb
id: NuclearBomb
name: nuclear fission explosive
description: You probably shouldn't stick around to see if this is armed.
components:
- type: Transform
anchored: true
@@ -61,23 +61,6 @@
- MachineMask
layer:
- HalfWallLayer
- type: InteractionOutline
- type: CargoSellBlacklist
- type: ArrivalsBlacklist
- type: WarpPoint
follow: true
location: nuclear bomb
- type: StealTarget
stealGroup: NuclearBomb
- type: Construction
graph: NuclearBomb
deconstructionTarget: disarmed
- type: entity
parent: BaseNuclearBomb
id: NuclearBomb
description: You probably shouldn't stick around to see if this is armed.
components:
- type: PointLight
enabled: false
radius: 4
@@ -107,6 +90,7 @@
- NukeDisk
alertLevelOnActivate: delta
alertLevelOnDeactivate: green
- type: InteractionOutline
- type: ActivatableUI
key: enum.NukeUiKey.Key
- type: UserInterface
@@ -115,12 +99,17 @@
type: NukeBoundUserInterface
- type: StaticPrice
price: 50000 # YOU STOLE A NUCLEAR FISSION EXPLOSIVE?!
- type: CargoSellBlacklist
- type: ArrivalsBlacklist
- type: ItemSlots
- type: ContainerContainer
containers:
Nuke: !type:ContainerSlot
- type: Construction
node: nuke
- type: StealTarget
stealGroup: NuclearBomb
- type: WarpPoint
follow: true
location: nuclear bomb
- type: entity
parent: NuclearBomb
@@ -132,17 +121,6 @@
- type: Physics
bodyType: Dynamic
- type: entity
parent: BaseNuclearBomb
id: NuclearBombDisarmed
suffix: Disarmed
description: "You can clearly see that this can't be armed, given its lack of nuclear material."
components:
- type: StaticPrice
price: 1000 # fancy paperweight
- type: Construction
node: disarmed
- type: entity
parent: StorageTank
id: NuclearBombKeg

View File

@@ -14,6 +14,7 @@
CMOHyposprayStealObjective: 1
CMOCrewMonitorStealObjective: 1
RDHardsuitStealObjective: 1
NukeDiskStealObjective: 1
MagbootsStealObjective: 1
CorgiMeatStealObjective: 1
ClipboardStealObjective: 1
@@ -21,8 +22,6 @@
CaptainJetpackStealObjective: 0.5
HandTeleporterStealObjective: 0.5
SecretDocumentsStealObjective: 0.5
PlutoniumCoreStealObjective: 0.5
NukeDiskStealObjective: 0.25
- type: weightedRandom
id: TraitorObjectiveGroupKill

View File

@@ -84,13 +84,6 @@
sprite: Objects/Misc/nukedisk.rsi
state: icon
- type: stealTargetGroup
id: PlutoniumCore
name: plutonium core
sprite:
sprite: Objects/Misc/plutonium_core.rsi
state: icon
# Thief Collection
- type: stealTargetGroup

View File

@@ -293,21 +293,3 @@
- type: StealCondition
stealGroup: NukeDisk
owner: objective-condition-steal-station
# Station
- type: entity
noSpawn: true
parent: BaseTraitorStealObjective
id: PlutoniumCoreStealObjective
components:
- type: Objective
# its hard to steal and leaves evidence, but you can get away with it.
difficulty: 3.5
- type: NotCommandRequirement
- type: StealCondition
stealGroup: PlutoniumCore
owner: objective-condition-steal-nuclear-bomb
- type: StoreUnlocker
listings:
- UplinkCoreExtractionToolbox

View File

@@ -1,79 +0,0 @@
- type: constructionGraph
id: NuclearBomb
start: disarmed
graph:
- node: disarmed
entity: NuclearBombDisarmed
edges:
- to: core_exposed
steps:
- tag: PlutoniumCore
name: "a plutonium core"
icon:
sprite: Objects/Misc/plutonium_core.rsi
state: icon
doAfter: 1
- node: core_exposed
edges:
- to: disarmed
completed:
- !type:GivePrototype
prototype: PlutoniumCore
steps:
- tool: Prying
doAfter: 2
- to: panel_removed
steps:
- material: Plasteel
amount: 8
doAfter: 2
- tool: Welding
doAfter: 4
- node: panel_removed
edges:
- to: core_exposed
completed:
- !type:GivePrototype
prototype: SheetPlasteel1
amount: 8
steps:
- tool: Welding
doAfter: 6
- tool: Anchoring
doAfter: 2
- tool: Welding
doAfter: 8
- to: panel_exposed
steps:
- material: Plasteel
amount: 4
doAfter: 2
- tool: Welding
doAfter: 2
- node: panel_exposed
edges:
- to: panel_removed
completed:
- !type:GivePrototype
prototype: SheetPlasteel1
amount: 4
steps:
- tool: Welding
doAfter: 2
- tool: Prying
doAfter: 2
- to: nuke
steps:
- tool: FineScrewing
doAfter: 2
- node: nuke
entity: NuclearBomb
edges:
- to: panel_exposed
steps:
- tool: FineScrewing
doAfter: 2

View File

@@ -89,11 +89,6 @@
name: store-category-pointless
priority: 10
- type: storeCategory
id: UplinkObjectives
name: store-category-objectives
priority: 11
#revenant
- type: storeCategory
id: RevenantAbilities

View File

@@ -16,7 +16,6 @@
- UplinkWearables
- UplinkJob
- UplinkPointless
- UplinkObjectives
currencyWhitelist:
- Telecrystal
balance:

View File

@@ -1020,9 +1020,6 @@
- type: Tag
id: PlushieSharkPink
- type: Tag
id: PlutoniumCore
- type: Tag
id: Potato

View File

@@ -67,11 +67,3 @@
toolName: tool-quality-rolling-tool-name
spawn: RollingPin
icon: { sprite: Objects/Tools/rolling_pin.rsi, state: icon }
# do not give this to normal tools, its for nuke deconstruction
- type: tool
id: FineScrewing
name: tool-quality-fine-screwing
toolName: tool-quality-fine-screwing-tool-name
spawn: ThinTippedScrewdriver
icon: { sprite: Objects/Tools/screwdriver.rsi, state: screwdriver-map }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 461 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

View File

@@ -1,47 +0,0 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/c34d56a45b0461f5e0fad3cc75e81580c3357119/icons/obj/antags/syndicate_tools.dmi",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "open"
},
{
"name": "closed"
},
{
"name": "core_open",
"delays": [
[
2.3,
0.3,
0.3,
0.3
]
]
},
{
"name": "core_closed",
"delays": [
[
2.3,
0.3,
0.3,
0.3
]
]
},
{
"name": "inhand-left",
"directions": 4
},
{
"name": "inhand-right",
"directions": 4
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 330 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 B

View File

@@ -1,23 +0,0 @@
{
"version": 1,
"license": "CC-BY-SA-3.0",
"copyright": "Taken from tgstation at https://github.com/tgstation/tgstation/blob/c34d56a45b0461f5e0fad3cc75e81580c3357119/icons/obj/antags/syndicate_tools.dmi",
"size": {
"x": 32,
"y": 32
},
"states": [
{
"name": "icon",
"delays": [
[
2,
0.3,
0.3,
0.3,
0.3
]
]
}
]
}