Files
crystall-punk-14/Content.Server/StationEvents/Events/BluespaceLockerRule.cs

54 lines
2.1 KiB
C#
Raw Permalink Normal View History

2023-01-13 16:20:28 -06:00
using Content.Server.Resist;
2023-04-25 20:23:14 -04:00
using Content.Server.StationEvents.Components;
2023-01-13 16:20:28 -06:00
using Content.Server.Storage.Components;
2023-01-17 12:18:21 -06:00
using Content.Server.Storage.EntitySystems;
2023-01-13 16:20:28 -06:00
using Content.Shared.Access.Components;
using Content.Shared.Station.Components;
using Content.Shared.GameTicking.Components;
2023-01-13 16:20:28 -06:00
using Content.Shared.Coordinates;
namespace Content.Server.StationEvents.Events;
2023-04-25 20:23:14 -04:00
public sealed class BluespaceLockerRule : StationEventSystem<BluespaceLockerRuleComponent>
2023-01-13 16:20:28 -06:00
{
2023-01-17 12:18:21 -06:00
[Dependency] private readonly BluespaceLockerSystem _bluespaceLocker = default!;
2023-01-13 16:20:28 -06:00
2023-04-25 20:23:14 -04:00
protected override void Started(EntityUid uid, BluespaceLockerRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
2023-01-13 16:20:28 -06:00
{
2023-04-25 20:23:14 -04:00
base.Started(uid, component, gameRule, args);
2023-01-13 16:20:28 -06:00
var targets = new List<EntityUid>();
var query = EntityQueryEnumerator<EntityStorageComponent, ResistLockerComponent>();
while (query.MoveNext(out var storageUid, out _, out _))
{
targets.Add(storageUid);
}
2023-04-25 20:23:14 -04:00
RobustRandom.Shuffle(targets);
2023-01-13 16:20:28 -06:00
foreach (var potentialLink in targets)
2023-01-13 16:20:28 -06:00
{
if (HasComp<AccessReaderComponent>(potentialLink) ||
HasComp<BluespaceLockerComponent>(potentialLink) ||
!HasComp<StationMemberComponent>(potentialLink.ToCoordinates().GetGridUid(EntityManager)))
continue;
2023-01-17 12:18:21 -06:00
var comp = AddComp<BluespaceLockerComponent>(potentialLink);
2023-01-13 16:20:28 -06:00
comp.PickLinksFromSameMap = true;
comp.MinBluespaceLinks = 1;
comp.BehaviorProperties.BluespaceEffectOnTeleportSource = true;
comp.AutoLinksBidirectional = true;
comp.AutoLinksUseProperties = true;
2023-01-17 12:18:21 -06:00
comp.AutoLinkProperties.BluespaceEffectOnInit = true;
2023-01-13 16:20:28 -06:00
comp.AutoLinkProperties.BluespaceEffectOnTeleportSource = true;
2023-01-18 00:00:53 -06:00
_bluespaceLocker.GetTarget(potentialLink, comp, true);
2023-01-17 12:18:21 -06:00
_bluespaceLocker.BluespaceEffect(potentialLink, comp, comp, true);
2023-01-13 16:20:28 -06:00
Sawmill.Info($"Converted {ToPrettyString(potentialLink)} to bluespace locker");
return;
}
}
}