Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Рефактор химимплантов #724

Merged
merged 17 commits into from
Feb 21, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 13 additions & 15 deletions Content.Server/Implants/SubdermalImplantSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@
using Robust.Shared.Physics.Components;
using Robust.Shared.Random;
using System.Numerics;
using Content.Shared.SS220.ReagentImplanter;
using Content.Shared.SS220.ChemicalImplant;
using FastAccessors;

namespace Content.Server.Implants;

Expand All @@ -47,7 +48,7 @@ public override void Initialize()

_physicsQuery = GetEntityQuery<PhysicsComponent>();

SubscribeLocalEvent<SubdermalImplantComponent, UseReagentCapsuleImplantEvent>(OnReagentCapsuleImplant);
SubscribeLocalEvent<SubdermalImplantComponent, UseChemicalImplantEvent>(OnChemicaImplant); // SS220 - chemical-implants start
SubscribeLocalEvent<SubdermalImplantComponent, UseFreedomImplantEvent>(OnFreedomImplant);
SubscribeLocalEvent<StoreComponent, ImplantRelayEvent<AfterInteractUsingEvent>>(OnStoreRelay);
SubscribeLocalEvent<SubdermalImplantComponent, ActivateImplantEvent>(OnActivateImplantEvent);
Expand All @@ -56,28 +57,25 @@ public override void Initialize()

}

private void OnReagentCapsuleImplant(EntityUid uid, SubdermalImplantComponent component, UseReagentCapsuleImplantEvent args)
// SS220 - chemical-implants start
private void OnChemicaImplant(EntityUid uid, SubdermalImplantComponent component, UseChemicalImplantEvent args)
{
if (!TryComp<SolutionContainerManagerComponent>(args.Performer, out var ownerSolutionContainerComp)
|| !TryComp<ReagentCapsuleComponent>(uid, out var reagentCapsule)
|| !TryComp<SolutionContainerManagerComponent>(uid, out var capsuleContainer))
if (component.ImplantedEntity is not { } ent
||!TryComp<SolutionContainerManagerComponent>(args.Performer, out var performerSolution)
|| !TryComp<SolutionContainerManagerComponent>(uid, out var implantSolution))
return;

if (args.Handled || reagentCapsule.IsUsed)
return;

if (!_solutionContainer.TryGetSolution(new(args.Performer, ownerSolutionContainerComp), "chemicals", out var chemicals))
return;

if (!_solutionContainer.TryGetSolution(new(uid, capsuleContainer), "beaker", out var beaker))
if (args.Handled)
return;

_solutionContainer.TryTransferSolution(chemicals.Value, beaker.Value.Comp.Solution, beaker.Value.Comp.Solution.Volume);
reagentCapsule.IsUsed = true;
args.Handled = true;

QueueDel(uid);

}

// SS220 - chemical-implants end

private void OnStoreRelay(EntityUid uid, StoreComponent store, ImplantRelayEvent<AfterInteractUsingEvent> implantRelay)
{
var args = implantRelay.Event;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ public sealed partial class SubdermalImplantComponent : Component
public EntityWhitelist? Blacklist;
}

public sealed partial class UseReagentCapsuleImplantEvent : InstantActionEvent
public sealed partial class UseChemicalImplantEvent : InstantActionEvent
{

}
Expand Down
7 changes: 1 addition & 6 deletions Content.Shared/Implants/SharedImplanterSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
using Content.Shared.IdentityManagement;
using Content.Shared.Implants.Components;
using Content.Shared.Popups;
using Content.Shared.SS220.ReagentImplanter;
using Content.Shared.SS220.ChemicalImplant;
using Content.Shared.Whitelist;
using Robust.Shared.Containers;
using Robust.Shared.Serialization;
Expand Down Expand Up @@ -100,11 +100,6 @@ public bool CanImplant(
return false;
}

if(TryComp<ReagentCapsuleComponent>(implant, out var capsuleComp) && capsuleComp.IsUsed)
{
_popup.PopupEntity(Loc.GetString("implanter-inject-used-capsule"), target);
}

var ev = new AddImplantAttemptEvent(user, target, implant.Value, implanter);
RaiseLocalEvent(target, ev);
return !ev.Cancelled;
Expand Down
10 changes: 10 additions & 0 deletions Content.Shared/SS220/ChemicalImplant/ChemicalImplantComponent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using Robust.Shared.GameStates;

namespace Content.Shared.SS220.ChemicalImplant
{
[RegisterComponent, NetworkedComponent]
public sealed partial class ChemicalImplantComponent : Component
{
}

}
12 changes: 0 additions & 12 deletions Content.Shared/SS220/ReagentImplanter/ReagentCapsuleComponent.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Base
- type: entity
name: Reagents Capsule Implanter
id: BaseReagentsCapsuleImplanter
name: Chemical Implanter
id: BaseChemicalImplanter
parent: BaseItem
abstract: true
noSpawn: true
Expand All @@ -19,7 +19,7 @@
priority: 0
whitelist:
tags:
- SubdermalImplant
- ChemicalImplant
- type: Sprite
sprite: SS220/Objects/ReagentInjector/injector.rsi
state: injector
Expand All @@ -29,23 +29,26 @@
injector_full:
whitelist:
tags:
- SubdermalImplant
- ChemicalImplant
- type: Item
sprite: SS220/Objects/ReagentInjector/injector.rsi
heldPrefix: 0
- type: Appearance
- type: Tag
tags:
- ChemicalImplant

- type: entity
id: ReagentsCapsuleInjector
id: ChemicalImplanter
name: reagent-injector-name
description: reagent-injector-desc
parent: BaseReagentsCapsuleImplanter
parent: BaseChemicalImplanter
components:
- type: Implanter
implant: EmptyCapsule
implant: EmptyChemicalImplant

- type: entity
id: ActionOpenReagentsCapsule
id: ActionUseChemicalImplant
name: reagent-injector-action-name
description: reagent-injector-action-desc
noSpawn: true
Expand All @@ -58,16 +61,4 @@
icon:
sprite: SS220/Objects/ReagentInjector/injector.rsi
state: icon_empty
event: !type:UseReagentCapsuleImplantEvent

# Other
- type: listing
id: UplinkReagentsCapsuleInjector
name: reagent-injector-name
description: uplink-reagent-injector-desc
icon: { sprite: SS220/Objects/ReagentInjector/injector.rsi, state: injector }
productEntity: ReagentsCapsuleInjector
cost:
Telecrystal: 6
categories:
- UplinkInjectors
event: !type:UseChemicalImplantEvent
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
# Base
# capsules
- type: entity
parent: BaseSubdermalImplant
id: BaseReagentsCapsule
name: reagents capsule
id: EmptyChemicalImplant
name: empty-reagent-capsule-name
description: empty-reagent-capsule-desk
components:
- type: ReagentCapsule
- type: ChemicalImplant
- type: SubdermalImplant
permanent: true
implantAction: ActionOpenReagentsCapsule
implantAction: ActionUseChemicalImplant
- type: Sprite
sprite: SS220/Objects/ReagentInjector/capsules.rsi
state: capsule
Expand All @@ -24,34 +24,23 @@
solution: beaker
- type: ExaminableSolution
solution: beaker
- type: InteractionOutline
- type: Clickable
- type: Appearance
- type: SolutionContainerVisuals
maxFillLevels: 1
changeColor: false
emptySpriteName: capsule_used
- type: Tag
tags:
- ChemicalImplant

# capsules
- type: entity
parent: BaseReagentsCapsule
id: EmptyCapsule
name: empty-reagent-capsule-name
description: empty-reagent-capsule-desk
components:
- type: SubdermalImplant
permanent: false
- type: Appearance
- type: SolutionContainerManager
solutions:
beaker:
maxVol: 30

- type: entity
parent: BaseReagentsCapsule
id: CombatCapsule
parent: EmptyChemicalImplant
id: CombatChemicalImplant
name: combat-reagent-capsule-name
description: combat-reagent-capsule-desk
components:
- type: Appearance
- type: Sprite
sprite: SS220/Objects/ReagentInjector/capsules.rsi
layers:
Expand All @@ -68,8 +57,8 @@
Quantity: 5

- type: entity
parent: BaseReagentsCapsule
id: DABCapsule
parent: EmptyChemicalImplant
id: DABChemicalImplant
name: dab-reagent-capsule-name
description: dab-reagent-capsule-desc
components:
Expand All @@ -91,8 +80,8 @@
Quantity: 10

- type: entity
parent: BaseReagentsCapsule
id: ExperementalReanimatorCapsule
parent: EmptyChemicalImplant
id: ExpReanimatorChemicalImplant
name: unstable-reanimator-reagent-capsule-name
description: unstable-reanimator-reagent-capsule-desc
components:
Expand All @@ -114,8 +103,8 @@
Quantity: 10

- type: entity
parent: BaseReagentsCapsule
id: SuicideCapsule
parent: EmptyChemicalImplant
id: SuicideChemicalImplant
name: suicide-reagent-capsule-name
description: suicide-reagent-capsule-desc
components:
Expand All @@ -133,73 +122,3 @@
reagents:
- ReagentId: Amatoxin
Quantity: 10
# Uplink
- type: listing
id: UplinkEmptyCapsule
name: uplink-empty-reagent-capsule-name
description: uplink-empty-reagent-capsule-desk
icon: { sprite: SS220/Objects/ReagentInjector/capsules.rsi, state: capsule }
productEntity: EmptyCapsule
cost:
Telecrystal: 1
categories:
- UplinkInjectors

- type: listing
id: UplinkCombatCapsule
name: uplink-combat-reagent-capsule-name
description: uplink-combat-reagent-capsule-desk
icon: { sprite: SS220/Objects/ReagentInjector/capsules.rsi, state: combat }
productEntity: CombatCapsule
cost:
Telecrystal: 4
categories:
- UplinkInjectors
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink

- type: listing
id: UplinkDABCapsule
name: uplink-dab-reagent-capsule-name
description: uplink-dab-reagent-capsule-desc
icon: { sprite: SS220/Objects/ReagentInjector/capsules.rsi, state: dab }
productEntity: DABCapsule
cost:
Telecrystal: 2
categories:
- UplinkInjectors

- type: listing
id: UplinkExperementalReanimatorCapsule
name: uplink-expadrenaline-reagent-capsule-name
description: uplink-expadrenaline-reagent-capsule-desc
icon: { sprite: SS220/Objects/ReagentInjector/capsules.rsi, state: reanim }
productEntity: ExperementalReanimatorCapsule
cost:
Telecrystal: 4
categories:
- UplinkInjectors
conditions:
- !type:StoreWhitelistCondition
whitelist:
tags:
- NukeOpsUplink

- type: listing
id: UplinkSuicideCapsule
name: uplink-suicide-reagent-capsule-name
description: uplink-suicide-reagent-capsule-desc
icon: { sprite: SS220/Objects/ReagentInjector/capsules.rsi, state: dead }
productEntity: SuicideCapsule
cost:
Telecrystal: 2
categories:
- UplinkInjectors
conditions:
- !type:StoreWhitelistCondition
blacklist:
tags:
- NukeOpsUplink
Loading
Loading