]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Missing meteor presets (#29044)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Sun, 16 Jun 2024 19:37:43 +0000 (15:37 -0400)
committerGitHub <noreply@github.com>
Sun, 16 Jun 2024 19:37:43 +0000 (21:37 +0200)
* add meteors into missing game presets

* changes for real

* implement code

* this too

Content.IntegrationTests/Tests/GameRules/FailAndStartPresetTest.cs
Content.Server/GameTicking/Rules/GameRuleSystem.cs
Content.Server/GameTicking/Rules/SecretRuleSystem.cs
Content.Shared/GameTicking/Components/GameRuleComponent.cs
Resources/Prototypes/GameRules/meteorswarms.yml
Resources/Prototypes/game_presets.yml

index 09a27c1baea82675cd5eaa51695ffa31c14507b9..f660eccf30ad916aadc3d13def9d7034b9459771 100644 (file)
@@ -140,6 +140,8 @@ public sealed class TestRuleSystem : EntitySystem
         while (query.MoveNext(out _, out _, out var gameRule))
         {
             var minPlayers = gameRule.MinPlayers;
+            if (!gameRule.CancelPresetOnTooFewPlayers)
+                continue;
             if (args.Players.Length >= minPlayers)
                 continue;
 
index 730748ce6b9ec64f84a39ef29abb40e34131f8bb..cb5b117549520b55a4fb527997c018f9a2ea4ebf 100644 (file)
@@ -41,11 +41,18 @@ public abstract partial class GameRuleSystem<T> : EntitySystem where T : ICompon
             if (args.Players.Length >= minPlayers)
                 continue;
 
-            ChatManager.SendAdminAnnouncement(Loc.GetString("preset-not-enough-ready-players",
-                ("readyPlayersCount", args.Players.Length),
-                ("minimumPlayers", minPlayers),
-                ("presetName", ToPrettyString(uid))));
-            args.Cancel();
+            if (gameRule.CancelPresetOnTooFewPlayers)
+            {
+                ChatManager.SendAdminAnnouncement(Loc.GetString("preset-not-enough-ready-players",
+                    ("readyPlayersCount", args.Players.Length),
+                    ("minimumPlayers", minPlayers),
+                    ("presetName", ToPrettyString(uid))));
+                args.Cancel();
+            }
+            else
+            {
+                ForceEndSelf(uid, gameRule);
+            }
         }
     }
 
index 320f9d197aac65d756a2786caf97bfa691a624af..8608f250d486afadf62bb0ce7ca14bdf3cfdcbaf 100644 (file)
@@ -164,7 +164,7 @@ public sealed class SecretRuleSystem : GameRuleSystem<SecretRuleComponent>
                 return false;
             }
 
-            if (ruleComp.MinPlayers > players)
+            if (ruleComp.MinPlayers > players && ruleComp.CancelPresetOnTooFewPlayers)
                 return false;
         }
 
index 4e93c2b0038202dc06b341d9b8e8abbb7a1896f9..87a5822d4747dee43ae38d1ce22d7a020bbf61a2 100644 (file)
@@ -23,6 +23,13 @@ public sealed partial class GameRuleComponent : Component
     [DataField]
     public int MinPlayers;
 
+    /// <summary>
+    /// If true, this rule not having enough players will cancel the preset selection.
+    /// If false, it will simply not run silently.
+    /// </summary>
+    [DataField]
+    public bool CancelPresetOnTooFewPlayers = true;
+
     /// <summary>
     /// A delay for when the rule the is started and when the starting logic actually runs.
     /// </summary>
index 70dd5265b04495614ba3e420339656505dfa8162..b85032f0564c52c96d1020bb1ebf0afa2793e15f 100644 (file)
@@ -4,6 +4,7 @@
   components:
   - type: GameRule
     minPlayers: 25
+    cancelPresetOnTooFewPlayers: false
   - type: MeteorScheduler
 
 - type: weightedRandomEntity
index 8876468bbdb5d1f14cae8ab863c4d2337109efb7..39523a1a378058d8252c0e2b93749173f0ad26d1 100644 (file)
@@ -7,6 +7,7 @@
   description: survival-description
   rules:
     - RampingStationEventScheduler
+    - GameRuleMeteorScheduler
     - BasicRoundstartVariation
 
 - type: gamePreset
@@ -20,6 +21,7 @@
     - Revolutionary
     - Zombie
     - RampingStationEventScheduler
+    - GameRuleMeteorScheduler
 
 - type: gamePreset
   id: Extended
@@ -44,6 +46,7 @@
   description: greenshift-description
   rules:
   - BasicRoundstartVariation
+  - GameRuleMeteorScheduler
 
 - type: gamePreset
   id: Secret