Add commands to add/end GameRules. (#7718)
This commit is contained in:
committed by
GitHub
parent
819f4b30e5
commit
2c289810ad
@@ -1,6 +1,9 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Content.Server.Administration;
|
||||
using Content.Server.GameTicking.Rules;
|
||||
using Content.Shared.Administration;
|
||||
using Robust.Shared.Console;
|
||||
using Robust.Shared.ViewVariables;
|
||||
|
||||
namespace Content.Server.GameTicking
|
||||
@@ -14,6 +17,34 @@ namespace Content.Server.GameTicking
|
||||
[ViewVariables] private readonly HashSet<GameRulePrototype> _startedGameRules = new();
|
||||
public IEnumerable<GameRulePrototype> StartedGameRules => _startedGameRules;
|
||||
|
||||
private void InitializeGameRules()
|
||||
{
|
||||
// Add game rule command.
|
||||
_consoleHost.RegisterCommand("addgamerule",
|
||||
string.Empty,
|
||||
"addgamerule <rules>",
|
||||
AddGameRuleCommand);
|
||||
|
||||
// End game rule command.
|
||||
_consoleHost.RegisterCommand("endgamerule",
|
||||
string.Empty,
|
||||
"endgamerule <rules>",
|
||||
EndGameRuleCommand);
|
||||
|
||||
// Clear game rules command.
|
||||
_consoleHost.RegisterCommand("cleargamerules",
|
||||
string.Empty,
|
||||
"cleargamerules",
|
||||
ClearGameRulesCommand);
|
||||
}
|
||||
|
||||
private void ShutdownGameRules()
|
||||
{
|
||||
_consoleHost.UnregisterCommand("addgamerule");
|
||||
_consoleHost.UnregisterCommand("endgamerule");
|
||||
_consoleHost.UnregisterCommand("cleargamerules");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Game rules can be 'started' separately from being added. 'Starting' them usually
|
||||
/// happens at round start while they can be added and removed before then.
|
||||
@@ -97,6 +128,50 @@ namespace Content.Server.GameTicking
|
||||
EndGameRule(rule);
|
||||
}
|
||||
}
|
||||
|
||||
#region Command Implementations
|
||||
|
||||
[AdminCommand(AdminFlags.Fun)]
|
||||
private void AddGameRuleCommand(IConsoleShell shell, string argstr, string[] args)
|
||||
{
|
||||
if (args.Length == 0)
|
||||
return;
|
||||
|
||||
foreach (var ruleId in args)
|
||||
{
|
||||
if (!_prototypeManager.TryIndex<GameRulePrototype>(ruleId, out var rule))
|
||||
continue;
|
||||
|
||||
AddGameRule(rule);
|
||||
|
||||
// Start rule if we're already in the middle of a round.
|
||||
if(RunLevel == GameRunLevel.InRound)
|
||||
StartGameRule(rule);
|
||||
}
|
||||
}
|
||||
|
||||
[AdminCommand(AdminFlags.Fun)]
|
||||
private void EndGameRuleCommand(IConsoleShell shell, string argstr, string[] args)
|
||||
{
|
||||
if (args.Length == 0)
|
||||
return;
|
||||
|
||||
foreach (var ruleId in args)
|
||||
{
|
||||
if (!_prototypeManager.TryIndex<GameRulePrototype>(ruleId, out var rule))
|
||||
continue;
|
||||
|
||||
EndGameRule(rule);
|
||||
}
|
||||
}
|
||||
|
||||
[AdminCommand(AdminFlags.Fun)]
|
||||
private void ClearGameRulesCommand(IConsoleShell shell, string argstr, string[] args)
|
||||
{
|
||||
ClearGameRules();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
Reference in New Issue
Block a user