BluespaceLockerRule.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using Content.Server.Resist;
  2. using Content.Server.StationEvents.Components;
  3. using Content.Server.Storage.Components;
  4. using Content.Server.Storage.EntitySystems;
  5. using Content.Shared.Access.Components;
  6. using Content.Shared.Station.Components;
  7. using Content.Shared.GameTicking.Components;
  8. using Content.Shared.Coordinates;
  9. namespace Content.Server.StationEvents.Events;
  10. public sealed class BluespaceLockerRule : StationEventSystem<BluespaceLockerRuleComponent>
  11. {
  12. [Dependency] private readonly BluespaceLockerSystem _bluespaceLocker = default!;
  13. protected override void Started(EntityUid uid, BluespaceLockerRuleComponent component, GameRuleComponent gameRule, GameRuleStartedEvent args)
  14. {
  15. base.Started(uid, component, gameRule, args);
  16. var targets = new List<EntityUid>();
  17. var query = EntityQueryEnumerator<EntityStorageComponent, ResistLockerComponent>();
  18. while (query.MoveNext(out var storageUid, out _, out _))
  19. {
  20. targets.Add(storageUid);
  21. }
  22. RobustRandom.Shuffle(targets);
  23. foreach (var potentialLink in targets)
  24. {
  25. if (HasComp<AccessReaderComponent>(potentialLink) ||
  26. HasComp<BluespaceLockerComponent>(potentialLink) ||
  27. !HasComp<StationMemberComponent>(potentialLink.ToCoordinates().GetGridUid(EntityManager)))
  28. continue;
  29. var comp = AddComp<BluespaceLockerComponent>(potentialLink);
  30. comp.PickLinksFromSameMap = true;
  31. comp.MinBluespaceLinks = 1;
  32. comp.BehaviorProperties.BluespaceEffectOnTeleportSource = true;
  33. comp.AutoLinksBidirectional = true;
  34. comp.AutoLinksUseProperties = true;
  35. comp.AutoLinkProperties.BluespaceEffectOnInit = true;
  36. comp.AutoLinkProperties.BluespaceEffectOnTeleportSource = true;
  37. _bluespaceLocker.GetTarget(potentialLink, comp, true);
  38. _bluespaceLocker.BluespaceEffect(potentialLink, comp, comp, true);
  39. Sawmill.Info($"Converted {ToPrettyString(potentialLink)} to bluespace locker");
  40. return;
  41. }
  42. }
  43. }