]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Fix greytide virus hitting other maps (#33806)
authorslarticodefast <161409025+slarticodefast@users.noreply.github.com>
Wed, 11 Dec 2024 14:30:29 +0000 (15:30 +0100)
committerGitHub <noreply@github.com>
Wed, 11 Dec 2024 14:30:29 +0000 (15:30 +0100)
fix greytide virus hitting other maps

Content.Server/StationEvents/Events/GreytideVirusRule.cs

index f60d80ba9c576db4e7eafdf2dd5f33594dd15ad5..19d4438347255fb252ee1c199c625ad30fc1f7e8 100644 (file)
@@ -6,6 +6,7 @@ using Content.Shared.Doors.Components;
 using Content.Shared.Doors.Systems;
 using Content.Shared.Lock;
 using Content.Shared.GameTicking.Components;
+using Content.Shared.Station.Components;
 using Robust.Shared.Prototypes;
 using Robust.Shared.Random;
 
@@ -43,6 +44,9 @@ public sealed class GreytideVirusRule : StationEventSystem<GreytideVirusRuleComp
         if (virusComp.Severity == null)
             return;
 
+        if (!TryGetRandomStation(out var chosenStation))
+            return;
+
         // pick random access groups
         var chosen = _random.GetItems(virusComp.AccessGroups, virusComp.Severity.Value, allowDuplicates: false);
 
@@ -57,12 +61,16 @@ public sealed class GreytideVirusRule : StationEventSystem<GreytideVirusRuleComp
         var firelockQuery = GetEntityQuery<FirelockComponent>();
         var accessQuery = GetEntityQuery<AccessReaderComponent>();
 
-        var lockQuery = AllEntityQuery<LockComponent>();
-        while (lockQuery.MoveNext(out var lockUid, out var lockComp))
+        var lockQuery = AllEntityQuery<LockComponent, TransformComponent>();
+        while (lockQuery.MoveNext(out var lockUid, out var lockComp, out var xform))
         {
             if (!accessQuery.TryComp(lockUid, out var accessComp))
                 continue;
 
+            // make sure not to hit CentCom or other maps
+            if (CompOrNull<StationMemberComponent>(xform.GridUid)?.Station != chosenStation)
+                continue;
+
             // check access
             // the AreAccessTagsAllowed function is a little weird because it technically has support for certain tags to be locked out of opening something
             // which might have unintened side effects (see the comments in the function itself)
@@ -74,13 +82,17 @@ public sealed class GreytideVirusRule : StationEventSystem<GreytideVirusRuleComp
             _lock.Unlock(lockUid, null, lockComp);
         }
 
-        var airlockQuery = AllEntityQuery<AirlockComponent, DoorComponent>();
-        while (airlockQuery.MoveNext(out var airlockUid, out var airlockComp, out var doorComp))
+        var airlockQuery = AllEntityQuery<AirlockComponent, DoorComponent, TransformComponent>();
+        while (airlockQuery.MoveNext(out var airlockUid, out var airlockComp, out var doorComp, out var xform))
         {
             // don't space everything
             if (firelockQuery.HasComp(airlockUid))
                 continue;
 
+            // make sure not to hit CentCom or other maps
+            if (CompOrNull<StationMemberComponent>(xform.GridUid)?.Station != chosenStation)
+                continue;
+
             // use the access reader from the door electronics if they exist
             if (!_access.GetMainAccessReader(airlockUid, out var accessComp))
                 continue;