while (query.MoveNext(out _, out _, out var gameRule))
{
var minPlayers = gameRule.MinPlayers;
+ if (!gameRule.CancelPresetOnTooFewPlayers)
+ continue;
if (args.Players.Length >= minPlayers)
continue;
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);
+ }
}
}
return false;
}
- if (ruleComp.MinPlayers > players)
+ if (ruleComp.MinPlayers > players && ruleComp.CancelPresetOnTooFewPlayers)
return false;
}
[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>
components:
- type: GameRule
minPlayers: 25
+ cancelPresetOnTooFewPlayers: false
- type: MeteorScheduler
- type: weightedRandomEntity
description: survival-description
rules:
- RampingStationEventScheduler
+ - GameRuleMeteorScheduler
- BasicRoundstartVariation
- type: gamePreset
- Revolutionary
- Zombie
- RampingStationEventScheduler
+ - GameRuleMeteorScheduler
- type: gamePreset
id: Extended
description: greenshift-description
rules:
- BasicRoundstartVariation
+ - GameRuleMeteorScheduler
- type: gamePreset
id: Secret