Skip to content

Commit 50d5857

Browse files
committed
Плохо что наше время истекло. Я иду домой зато тело выебано
1 parent 6c830ad commit 50d5857

File tree

6 files changed

+81
-55
lines changed

6 files changed

+81
-55
lines changed

Content.Server/Nuke/NukeSystem.cs

+32
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Content.Server.Explosion.EntitySystems;
55
using Content.Server.Pinpointer;
66
using Content.Server.Popups;
7+
using Content.Server.SS220.LockPick.Components;
78
using Content.Server.Station.Systems;
89
using Content.Shared.Audio;
910
using Content.Shared.Containers.ItemSlots;
@@ -13,6 +14,7 @@
1314
using Content.Shared.Maps;
1415
using Content.Shared.Nuke;
1516
using Content.Shared.Popups;
17+
using Content.Shared.SS220.LockPick;
1618
using Robust.Server.GameObjects;
1719
using Robust.Shared.Audio;
1820
using Robust.Shared.Audio.Systems;
@@ -79,6 +81,7 @@ public override void Initialize()
7981

8082
// Doafter events
8183
SubscribeLocalEvent<NukeComponent, NukeDisarmDoAfterEvent>(OnDoAfter);
84+
SubscribeLocalEvent<NukeComponent, LockPickEvent>(OnLockPick);
8285
}
8386

8487
private void OnInit(EntityUid uid, NukeComponent component, ComponentInit args)
@@ -158,6 +161,33 @@ private void OnAnchorChanged(EntityUid uid, NukeComponent component, ref AnchorS
158161
UpdateAppearance(uid, component);
159162
}
160163

164+
//ss220 lockpick add start
165+
private void OnLockPick(Entity<NukeComponent> ent, ref LockPickEvent args)
166+
{
167+
if (args.Cancelled)
168+
return;
169+
170+
if (!TryComp<TargetLockPickComponent>(ent.Owner, out var targetLockPickComponent))
171+
return;
172+
173+
if (!TryComp<LockpickComponent>(args.Target, out var lockpickComponent))
174+
return;
175+
176+
if (!_random.Prob(targetLockPickComponent.ChanceToLockPick))
177+
{
178+
_popups.PopupEntity(Loc.GetString("lockpick-failed"), args.User, args.User);
179+
return;
180+
}
181+
182+
var xform = Transform(ent.Owner);
183+
184+
if (xform.Anchored)
185+
_transform.Unanchor(ent.Owner, xform);
186+
187+
_audio.PlayPvs(lockpickComponent.LockPickSound, ent.Owner);
188+
_popups.PopupEntity(Loc.GetString("lockpick-successful"), args.User, args.User);
189+
}
190+
//ss220 lockpick add end
161191
#endregion
162192

163193
#region UI Events
@@ -168,6 +198,8 @@ private async void OnAnchorButtonPressed(EntityUid uid, NukeComponent component,
168198
if (component.Status == NukeStatus.ARMED)
169199
return;
170200

201+
// Nuke has to have the disk in it to be moved
202+
// ss220: Add lockpick for unanchoring nuke bomb w/o disk
171203
if (!component.DiskSlot.HasItem)
172204
{
173205
var msg = Loc.GetString("nuke-component-cant-anchor-toggle");
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
1+
using Robust.Shared.Audio;
2+
13
namespace Content.Server.SS220.LockPick.Components;
24

35
[RegisterComponent]
46
public sealed partial class LockpickComponent : Component
57
{
8+
[DataField]
9+
public SoundSpecifier LockPickSound = new SoundPathSpecifier("/Audio/SS220/Effects/Drop/needle.ogg");
10+
11+
public readonly float LockPickSpeedModifier = 1f;
612
}

Content.Server/SS220/LockPick/Components/TargetLockPickComponent.cs

+2
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@ public sealed partial class TargetLockPickComponent : Component
55
{
66
[DataField]
77
public float ChanceToLockPick;
8+
9+
public readonly float TimeToLockPick = 5f; //in seconds for DoAfter
810
}
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,36 @@
1-
using Content.Server.Nuke;
2-
using Content.Server.Popups;
31
using Content.Server.SS220.LockPick.Components;
4-
using Content.Server.Storage.Components;
5-
using Content.Server.Storage.EntitySystems;
62
using Content.Shared.DoAfter;
73
using Content.Shared.Interaction;
8-
using Content.Shared.Lock;
94
using Content.Shared.SS220.LockPick;
10-
using Robust.Server.GameObjects;
11-
using Robust.Shared.Audio;
12-
using Robust.Shared.Audio.Systems;
13-
using Robust.Shared.Random;
145

156
namespace Content.Server.SS220.LockPick.Systems;
167

178
public sealed class LockpickSystem : EntitySystem
189
{
19-
[Dependency] private readonly TransformSystem _transform = default!;
20-
[Dependency] private readonly PopupSystem _popupSystem = default!;
2110
[Dependency] private readonly SharedDoAfterSystem _doAfter = default!;
22-
[Dependency] private readonly EntityStorageSystem _entityStorage = default!;
23-
[Dependency] private readonly IRobustRandom _random = default!;
24-
[Dependency] private readonly LockSystem _lockSystem = default!;
25-
[Dependency] private readonly SharedAudioSystem _audio = default!;
2611

2712
public override void Initialize()
2813
{
2914
base.Initialize();
3015
SubscribeLocalEvent<LockpickComponent, AfterInteractEvent>(OnAfterInteract);
31-
SubscribeLocalEvent<LockpickComponent, LockPickEvent>(OnLockPick);
3216
}
3317

3418
private void OnAfterInteract(Entity<LockpickComponent> ent, ref AfterInteractEvent args)
3519
{
36-
if (args.Target == null || !HasComp<TargetLockPickComponent>(args.Target))
20+
if (args.Target == null || !TryComp<TargetLockPickComponent>(args.Target, out var targetLockPickComponent))
3721
return;
3822

3923
_doAfter.TryStartDoAfter(new DoAfterArgs(EntityManager,
4024
args.User,
41-
5f,
25+
targetLockPickComponent.TimeToLockPick * ent.Comp.LockPickSpeedModifier,
4226
new LockPickEvent(),
43-
ent.Owner,
44-
args.Target)
27+
args.Target,
28+
ent.Owner)
4529
{
4630
BreakOnDamage = true,
4731
BreakOnMove = true,
4832
NeedHand = true,
4933
});
5034
}
51-
52-
private void OnLockPick(Entity<LockpickComponent> ent, ref LockPickEvent args)
53-
{
54-
if (args.Cancelled)
55-
return;
56-
57-
if (!TryComp<TargetLockPickComponent>(args.Target, out var targetLockPickComponent))
58-
return;
59-
60-
if (!_random.Prob(targetLockPickComponent.ChanceToLockPick))
61-
{
62-
_popupSystem.PopupEntity(Loc.GetString("lockpick-failed"), args.User, args.User);
63-
return;
64-
}
65-
66-
if (HasComp<NukeComponent>(args.Target))
67-
{
68-
var xform = Transform(args.Target.Value);
69-
70-
if (xform.Anchored)
71-
_transform.Unanchor(args.Target.Value, xform);
72-
}
73-
74-
if (HasComp<EntityStorageComponent>(args.Target))
75-
{
76-
_lockSystem.Unlock(args.Target.Value, args.User);
77-
_entityStorage.OpenStorage(args.Target.Value);
78-
}
79-
80-
_audio.PlayPvs(new SoundPathSpecifier("/Audio/SS220/Effects/Drop/needle.ogg"), args.Target.Value);
81-
_popupSystem.PopupEntity(Loc.GetString("lockpick-successful"), args.User, args.User);
82-
}
8335
}
8436

Content.Server/Storage/EntitySystems/EntityStorageSystem.cs

+37
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,26 @@
33
using Content.Server.Body.Systems;
44
using Content.Server.Construction;
55
using Content.Server.Construction.Components;
6+
using Content.Server.SS220.LockPick.Components;
67
using Content.Server.Storage.Components;
78
using Content.Shared.Destructible;
89
using Content.Shared.Explosion;
910
using Content.Shared.Foldable;
1011
using Content.Shared.Interaction;
1112
using Content.Shared.Lock;
1213
using Content.Shared.Movement.Events;
14+
using Content.Shared.Popups;
15+
using Content.Shared.SS220.LockPick;
1316
using Content.Shared.Storage.Components;
1417
using Content.Shared.Storage.EntitySystems;
1518
using Content.Shared.Tools.Systems;
1619
using Content.Shared.Verbs;
1720
using Robust.Server.GameObjects;
21+
using Robust.Shared.Audio.Systems;
1822
using Robust.Shared.Containers;
1923
using Robust.Shared.GameStates;
2024
using Robust.Shared.Map;
25+
using Robust.Shared.Random;
2126

2227
namespace Content.Server.Storage.EntitySystems;
2328

@@ -27,6 +32,10 @@ public sealed class EntityStorageSystem : SharedEntityStorageSystem
2732
[Dependency] private readonly AtmosphereSystem _atmos = default!;
2833
[Dependency] private readonly IMapManager _map = default!;
2934
[Dependency] private readonly MapSystem _mapSystem = default!;
35+
[Dependency] private readonly IRobustRandom _random = default!;
36+
[Dependency] private readonly SharedPopupSystem _popups = default!;
37+
[Dependency] private readonly LockSystem _lockSystem = default!;
38+
[Dependency] private readonly SharedAudioSystem _audio = default!;
3039

3140
public override void Initialize()
3241
{
@@ -51,6 +60,8 @@ public override void Initialize()
5160
SubscribeLocalEvent<EntityStorageComponent, WeldableAttemptEvent>(OnWeldableAttempt);
5261
SubscribeLocalEvent<EntityStorageComponent, BeforeExplodeEvent>(OnExploded);
5362

63+
SubscribeLocalEvent<EntityStorageComponent, LockPickEvent>(OnLockPick);
64+
5465
SubscribeLocalEvent<InsideEntityStorageComponent, InhaleLocationEvent>(OnInsideInhale);
5566
SubscribeLocalEvent<InsideEntityStorageComponent, ExhaleLocationEvent>(OnInsideExhale);
5667
SubscribeLocalEvent<InsideEntityStorageComponent, AtmosExposedGetAirEvent>(OnInsideExposed);
@@ -107,6 +118,32 @@ private void OnExploded(Entity<EntityStorageComponent> ent, ref BeforeExplodeEve
107118
args.Contents.AddRange(ent.Comp.Contents.ContainedEntities);
108119
}
109120

121+
//ss220 lockpick add start
122+
private void OnLockPick(Entity<EntityStorageComponent> ent, ref LockPickEvent args)
123+
{
124+
if (args.Cancelled)
125+
return;
126+
127+
if (!TryComp<TargetLockPickComponent>(ent.Owner, out var targetLockPickComponent))
128+
return;
129+
130+
if (!TryComp<LockpickComponent>(args.Target, out var lockpickComponent))
131+
return;
132+
133+
if (!_random.Prob(targetLockPickComponent.ChanceToLockPick))
134+
{
135+
_popups.PopupEntity(Loc.GetString("lockpick-failed"), args.User, args.User);
136+
return;
137+
}
138+
139+
_lockSystem.Unlock(ent.Owner, args.User);
140+
OpenStorage(ent.Owner);
141+
142+
_audio.PlayPvs(lockpickComponent.LockPickSound, ent.Owner);
143+
_popups.PopupEntity(Loc.GetString("lockpick-successful"), args.User, args.User);
144+
}
145+
//ss220 lockpick add end
146+
110147
protected override void TakeGas(EntityUid uid, SharedEntityStorageComponent component)
111148
{
112149
if (!component.Airtight)

Content.Shared/SS220/LockPick/SharedLockPickSystem.cs Content.Shared/SS220/LockPick/LockPickEvents.cs

-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
using Robust.Shared.Serialization;
33

44
namespace Content.Shared.SS220.LockPick;
5-
public sealed class SharedLockPickSystem : EntitySystem
6-
{
7-
}
85

96
[Serializable]
107
[NetSerializable]

0 commit comments

Comments
 (0)