Skip to content

Commit 41501bd

Browse files
Mass Bug Fixing (DeltaV-Station#1256)
<!-- This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same Remove these comments before submitting --> # Description <!-- Explain this PR in as much detail as applicable Some example prompts to consider: How might this affect the game? The codebase? What might be some alternatives to this? How/Who does this benefit/hurt [the game/codebase]? --> Mass bug fixing, for bugs related to DeltaV-Station#1220. Feel free to link or send bugs. Fix list: - DeltaV-Station#1242 - DeltaV-Station#1243 - DeltaV-Station#1244 - space-wizards/space-station-14#28084 - space-wizards/space-station-14#28282 - Actually fixed PirateRadioSpawnRule heisentest (with a bandaid) (I cancel if it's 0) - Simple-Station/Einstein-Engines#1263 --- # Changelog <!-- You can add an author after the `:cl:` to change the name that appears in the changelog (ex: `:cl: Death`) Leaving it blank will default to your GitHub display name This includes all available types for the changelog --> :cl: - fix: Fixed chair visuals drawing depth wrongly if you sat in a north-facing chair. - fix: Fixed buckling doing several buckles each time you did one. - fix: Fixed the magic mirror. - fix: Fixed beds re-positioning you every few seconds. - fix: Fixed E not opening containers that are in another container. - fix: Fixed disposal systems not flushing or ejecting properly. --------- Co-authored-by: sleepyyapril <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> Co-authored-by: Nemanja <[email protected]>
1 parent 1b57045 commit 41501bd

File tree

18 files changed

+145
-125
lines changed

18 files changed

+145
-125
lines changed

Diff for: Content.Client/Buckle/BuckleSystem.cs

+33-16
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,41 @@ public override void Initialize()
1515
{
1616
base.Initialize();
1717

18-
SubscribeLocalEvent<BuckleComponent, ComponentHandleState>(OnHandleState);
1918
SubscribeLocalEvent<BuckleComponent, AppearanceChangeEvent>(OnAppearanceChange);
2019
SubscribeLocalEvent<StrapComponent, MoveEvent>(OnStrapMoveEvent);
20+
SubscribeLocalEvent<BuckleComponent, BuckledEvent>(OnBuckledEvent);
21+
SubscribeLocalEvent<BuckleComponent, UnbuckledEvent>(OnUnbuckledEvent);
22+
}
23+
24+
/// <summary>
25+
/// Is the strap entity already rotated north? Lower the draw depth of the buckled entity.
26+
/// </summary>
27+
private void OnBuckledEvent(Entity<BuckleComponent> ent, ref BuckledEvent args)
28+
{
29+
if (!TryComp<SpriteComponent>(args.Strap, out var strapSprite) ||
30+
!TryComp<SpriteComponent>(ent.Owner, out var buckledSprite))
31+
return;
32+
33+
if (Transform(args.Strap.Owner).LocalRotation.GetCardinalDir() == Direction.North)
34+
{
35+
ent.Comp.OriginalDrawDepth ??= buckledSprite.DrawDepth;
36+
buckledSprite.DrawDepth = strapSprite.DrawDepth - 1;
37+
}
38+
}
39+
40+
/// <summary>
41+
/// Was the draw depth of the buckled entity lowered? Reset it upon unbuckling.
42+
/// </summary>
43+
private void OnUnbuckledEvent(Entity<BuckleComponent> ent, ref UnbuckledEvent args)
44+
{
45+
if (!TryComp<SpriteComponent>(ent.Owner, out var buckledSprite))
46+
return;
47+
48+
if (ent.Comp.OriginalDrawDepth.HasValue)
49+
{
50+
buckledSprite.DrawDepth = ent.Comp.OriginalDrawDepth.Value;
51+
ent.Comp.OriginalDrawDepth = null;
52+
}
2153
}
2254

2355
private void OnStrapMoveEvent(EntityUid uid, StrapComponent component, ref MoveEvent args)
@@ -57,21 +89,6 @@ private void OnStrapMoveEvent(EntityUid uid, StrapComponent component, ref MoveE
5789
}
5890
}
5991

60-
private void OnHandleState(Entity<BuckleComponent> ent, ref ComponentHandleState args)
61-
{
62-
if (args.Current is not BuckleState state)
63-
return;
64-
65-
ent.Comp.DontCollide = state.DontCollide;
66-
ent.Comp.BuckleTime = state.BuckleTime;
67-
var strapUid = EnsureEntity<BuckleComponent>(state.BuckledTo, ent);
68-
69-
SetBuckledTo(ent, strapUid == null ? null : new (strapUid.Value, null));
70-
71-
var (uid, component) = ent;
72-
73-
}
74-
7592
private void OnAppearanceChange(EntityUid uid, BuckleComponent component, ref AppearanceChangeEvent args)
7693
{
7794
if (!TryComp<RotationVisualsComponent>(uid, out var rotVisuals)

Diff for: Content.Server/Disposal/Tube/DisposalTubeSystem.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -340,14 +340,15 @@ private void UpdateAnchored(EntityUid uid, DisposalTubeComponent component, bool
340340
{
341341
if (!Resolve(target, ref targetTube))
342342
return null;
343+
343344
var oppositeDirection = nextDirection.GetOpposite();
344345

345346
var xform = Transform(target);
346347
if (!TryComp<MapGridComponent>(xform.GridUid, out var grid))
347348
return null;
348349

349350
var position = xform.Coordinates;
350-
var entities = _mapSystem.GetInDir(target, grid, position, nextDirection);
351+
var entities = _mapSystem.GetInDir((EntityUid) xform.GridUid, grid, position, nextDirection);
351352

352353
foreach (var entity in entities)
353354
{

Diff for: Content.Server/Disposal/Unit/EntitySystems/DisposableSystem.cs

+6-9
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,13 @@ public void ExitDisposals(EntityUid uid, DisposalHolderComponent? holder = null,
8888

8989
if (!Resolve(uid, ref holder, ref holderTransform))
9090
return;
91+
9192
if (holder.IsExitingDisposals)
9293
{
9394
Log.Error("Tried exiting disposals twice. This should never happen.");
9495
return;
9596
}
97+
9698
holder.IsExitingDisposals = true;
9799

98100
// Check for a disposal unit to throw them into and then eject them from it.
@@ -164,11 +166,13 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon
164166
{
165167
if (!Resolve(holderUid, ref holder, ref holderTransform))
166168
return false;
169+
167170
if (holder.IsExitingDisposals)
168171
{
169172
Log.Error("Tried entering tube after exiting disposals. This should never happen.");
170173
return false;
171174
}
175+
172176
if (!Resolve(toUid, ref to, ref toTransform))
173177
{
174178
ExitDisposals(holderUid, holder, holderTransform);
@@ -193,6 +197,7 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon
193197
holder.PreviousTube = holder.CurrentTube;
194198
holder.PreviousDirection = holder.CurrentDirection;
195199
}
200+
196201
holder.CurrentTube = toUid;
197202
var ev = new GetDisposalsNextDirectionEvent(holder);
198203
RaiseLocalEvent(toUid, ref ev);
@@ -212,9 +217,7 @@ public bool EnterTube(EntityUid holderUid, EntityUid toUid, DisposalHolderCompon
212217
if (holder.CurrentDirection != holder.PreviousDirection)
213218
{
214219
foreach (var ent in holder.Container.ContainedEntities)
215-
{
216220
_damageable.TryChangeDamage(ent, to.DamageOnTurn);
217-
}
218221
_audio.PlayPvs(to.ClangSound, toUid);
219222
}
220223

@@ -225,9 +228,7 @@ public override void Update(float frameTime)
225228
{
226229
var query = EntityQueryEnumerator<DisposalHolderComponent>();
227230
while (query.MoveNext(out var uid, out var holder))
228-
{
229231
UpdateComp(uid, holder, frameTime);
230-
}
231232
}
232233

233234
private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float frameTime)
@@ -236,9 +237,7 @@ private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float fra
236237
{
237238
var time = frameTime;
238239
if (time > holder.TimeLeft)
239-
{
240240
time = holder.TimeLeft;
241-
}
242241

243242
holder.TimeLeft -= time;
244243
frameTime -= time;
@@ -268,17 +267,15 @@ private void UpdateComp(EntityUid uid, DisposalHolderComponent holder, float fra
268267

269268
// Find next tube
270269
var nextTube = _disposalTubeSystem.NextTubeFor(currentTube, holder.CurrentDirection);
271-
if (!EntityManager.EntityExists(nextTube))
270+
if (!EntityManager.EntityExists(nextTube))
272271
{
273272
ExitDisposals(uid, holder);
274273
break;
275274
}
276275

277276
// Perform remainder of entry process
278277
if (!EnterTube(uid, nextTube!.Value, holder))
279-
{
280278
break;
281-
}
282279
}
283280
}
284281
}

Diff for: Content.Server/Disposal/Unit/EntitySystems/DisposalUnitSystem.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -517,7 +517,7 @@ public bool TryFlush(EntityUid uid, SharedDisposalUnitComponent component)
517517
return false;
518518

519519
var coords = xform.Coordinates;
520-
var entry = _sharedMapSystem.GetLocal(uid, grid, coords)
520+
var entry = _sharedMapSystem.GetLocal((EntityUid) xform.GridUid, grid, coords)
521521
.FirstOrDefault(HasComp<DisposalEntryComponent>);
522522

523523
if (entry == default || component is not DisposalUnitComponent sDisposals)

Diff for: Content.Server/MagicMirror/MagicMirrorSystem.cs

+10-54
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
using System.Linq;
22
using Content.Server.DoAfter;
33
using Content.Server.Humanoid;
4-
using Content.Shared.UserInterface;
54
using Content.Shared.DoAfter;
65
using Content.Shared.Humanoid;
76
using Content.Shared.Humanoid.Markings;
87
using Content.Shared.Interaction;
98
using Content.Shared.MagicMirror;
10-
using Robust.Server.GameObjects;
119
using Robust.Shared.Audio.Systems;
12-
using Robust.Shared.Player;
1310

1411
namespace Content.Server.MagicMirror;
1512

@@ -22,14 +19,13 @@ public sealed class MagicMirrorSystem : SharedMagicMirrorSystem
2219
[Dependency] private readonly DoAfterSystem _doAfterSystem = default!;
2320
[Dependency] private readonly MarkingManager _markings = default!;
2421
[Dependency] private readonly HumanoidAppearanceSystem _humanoid = default!;
25-
[Dependency] private readonly UserInterfaceSystem _uiSystem = default!;
2622

2723
public override void Initialize()
2824
{
2925
base.Initialize();
30-
SubscribeLocalEvent<MagicMirrorComponent, ActivatableUIOpenAttemptEvent>(OnOpenUIAttempt);
3126

32-
Subs.BuiEvents<MagicMirrorComponent>(MagicMirrorUiKey.Key, subs =>
27+
Subs.BuiEvents<MagicMirrorComponent>(MagicMirrorUiKey.Key,
28+
subs =>
3329
{
3430
subs.Event<BoundUIClosedEvent>(OnUiClosed);
3531
subs.Event<MagicMirrorSelectMessage>(OnMagicMirrorSelect);
@@ -38,31 +34,13 @@ public override void Initialize()
3834
subs.Event<MagicMirrorRemoveSlotMessage>(OnTryMagicMirrorRemoveSlot);
3935
});
4036

41-
SubscribeLocalEvent<MagicMirrorComponent, AfterInteractEvent>(OnMagicMirrorInteract);
4237

4338
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorSelectDoAfterEvent>(OnSelectSlotDoAfter);
4439
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorChangeColorDoAfterEvent>(OnChangeColorDoAfter);
4540
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorRemoveSlotDoAfterEvent>(OnRemoveSlotDoAfter);
4641
SubscribeLocalEvent<MagicMirrorComponent, MagicMirrorAddSlotDoAfterEvent>(OnAddSlotDoAfter);
4742
}
4843

49-
private void OnMagicMirrorInteract(Entity<MagicMirrorComponent> mirror, ref AfterInteractEvent args)
50-
{
51-
if (!args.CanReach || args.Target == null)
52-
return;
53-
54-
if (!_uiSystem.TryOpenUi(mirror.Owner, MagicMirrorUiKey.Key, args.User))
55-
return;
56-
57-
UpdateInterface(mirror.Owner, args.Target.Value, mirror.Comp);
58-
}
59-
60-
private void OnOpenUIAttempt(EntityUid uid, MagicMirrorComponent mirror, ActivatableUIOpenAttemptEvent args)
61-
{
62-
if (!HasComp<HumanoidAppearanceComponent>(args.User))
63-
args.Cancel();
64-
}
65-
6644
private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component, MagicMirrorSelectMessage message)
6745
{
6846
if (component.Target is not { } target)
@@ -87,7 +65,8 @@ private void OnMagicMirrorSelect(EntityUid uid, MagicMirrorComponent component,
8765
BreakOnUserMove = true,
8866
BreakOnWeightlessMove = false,
8967
NeedHand = true
90-
}, out var doAfterId);
68+
},
69+
out var doAfterId);
9170

9271
component.DoAfter = doAfterId;
9372
_audio.PlayPvs(component.ChangeHairSound, uid);
@@ -143,7 +122,8 @@ private void OnTryMagicMirrorChangeColor(EntityUid uid, MagicMirrorComponent com
143122
BreakOnUserMove = true,
144123
BreakOnWeightlessMove = false,
145124
NeedHand = true
146-
}, out var doAfterId);
125+
},
126+
out var doAfterId);
147127

148128
component.DoAfter = doAfterId;
149129
}
@@ -198,7 +178,8 @@ private void OnTryMagicMirrorRemoveSlot(EntityUid uid, MagicMirrorComponent comp
198178
BreakOnUserMove = true,
199179
BreakOnWeightlessMove = false,
200180
NeedHand = true
201-
}, out var doAfterId);
181+
},
182+
out var doAfterId);
202183

203184
component.DoAfter = doAfterId;
204185
_audio.PlayPvs(component.ChangeHairSound, uid);
@@ -252,7 +233,8 @@ private void OnTryMagicMirrorAddSlot(EntityUid uid, MagicMirrorComponent compone
252233
BreakOnUserMove = true,
253234
BreakOnWeightlessMove = false,
254235
NeedHand = true
255-
}, out var doAfterId);
236+
},
237+
out var doAfterId);
256238

257239
component.DoAfter = doAfterId;
258240
_audio.PlayPvs(component.ChangeHairSound, uid);
@@ -287,32 +269,6 @@ private void OnAddSlotDoAfter(EntityUid uid, MagicMirrorComponent component, Mag
287269

288270
}
289271

290-
private void UpdateInterface(EntityUid mirrorUid, EntityUid targetUid, MagicMirrorComponent component)
291-
{
292-
if (!TryComp<HumanoidAppearanceComponent>(targetUid, out var humanoid))
293-
return;
294-
295-
var hair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.Hair, out var hairMarkings)
296-
? new List<Marking>(hairMarkings)
297-
: new();
298-
299-
var facialHair = humanoid.MarkingSet.TryGetCategory(MarkingCategories.FacialHair, out var facialHairMarkings)
300-
? new List<Marking>(facialHairMarkings)
301-
: new();
302-
303-
var state = new MagicMirrorUiState(
304-
humanoid.Species,
305-
hair,
306-
humanoid.MarkingSet.PointsLeft(MarkingCategories.Hair) + hair.Count,
307-
facialHair,
308-
humanoid.MarkingSet.PointsLeft(MarkingCategories.FacialHair) + facialHair.Count);
309-
310-
// TODO: Component states
311-
component.Target = targetUid;
312-
_uiSystem.SetUiState(mirrorUid, MagicMirrorUiKey.Key, state);
313-
Dirty(mirrorUid, component);
314-
}
315-
316272
private void OnUiClosed(Entity<MagicMirrorComponent> ent, ref BoundUIClosedEvent args)
317273
{
318274
ent.Comp.Target = null;

Diff for: Content.Server/StationEvents/Events/PirateRadioSpawnRule.cs

+16-5
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public sealed class PirateRadioSpawnRule : StationEventSystem<PirateRadioSpawnRu
2525
[Dependency] private readonly GameTicker _gameTicker = default!;
2626
[Dependency] private readonly TransformSystem _xform = default!;
2727
[Dependency] private readonly ISerializationManager _serializationManager = default!;
28-
[Dependency] private readonly IMapManager _mapManager = default!;
28+
[Dependency] private readonly MapSystem _mapSystem = default!;
2929

3030
protected override void Started(EntityUid uid, PirateRadioSpawnRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
3131
{
@@ -48,11 +48,12 @@ protected override void Started(EntityUid uid, PirateRadioSpawnRuleComponent com
4848
return;
4949

5050
var targetStation = _random.Pick(stations);
51-
if (!_mapManager.MapExists(Transform(targetStation).MapID))
52-
return; /// SHUT UP HEISENTESTS. DIE.
51+
var targetMapId = Transform(targetStation).MapID;
5352

54-
var randomOffset = _random.NextVector2(component.MinimumDistance, component.MaximumDistance);
53+
if (!_mapSystem.MapExists(targetMapId))
54+
return;
5555

56+
var randomOffset = _random.NextVector2(component.MinimumDistance, component.MaximumDistance);
5657
var outpostOptions = new MapLoadOptions
5758
{
5859
Offset = _xform.GetWorldPosition(targetStation) + randomOffset,
@@ -75,6 +76,7 @@ private void SpawnDebris(PirateRadioSpawnRuleComponent component, IReadOnlyList<
7576
{
7677
var outpostaabb = _xform.GetWorldPosition(id);
7778
var k = 0;
79+
7880
while (k < component.DebrisCount)
7981
{
8082
var debrisRandomOffset = _random.NextVector2(component.MinimumDebrisDistance, component.MaximumDebrisDistance);
@@ -85,7 +87,16 @@ private void SpawnDebris(PirateRadioSpawnRuleComponent component, IReadOnlyList<
8587
LoadMap = false,
8688
};
8789

88-
var salvageProto = _random.Pick(_prototypeManager.EnumeratePrototypes<SalvageMapPrototype>().ToList());
90+
var salvPrototypes = _prototypeManager.EnumeratePrototypes<SalvageMapPrototype>().ToList();
91+
var salvageProto = _random.Pick(salvPrototypes);
92+
93+
if (!_mapSystem.MapExists(GameTicker.DefaultMap))
94+
return;
95+
96+
// Round didn't start before running this, leading to a null-space test fail.
97+
if (GameTicker.DefaultMap == MapId.Nullspace)
98+
return;
99+
89100
if (!_map.TryLoad(GameTicker.DefaultMap, salvageProto.MapPath.ToString(), out _, debrisOptions))
90101
return;
91102

0 commit comments

Comments
 (0)