mirror of
https://github.com/tribufu/ServerManagers
synced 2026-05-06 15:17:34 +00:00
Rcon Command Changes
- moved the rcon commands to the gamedata files, so they can be extended.
This commit is contained in:
parent
f3ff807cd0
commit
e7100e6323
18 changed files with 266 additions and 152 deletions
|
|
@ -13450,6 +13450,20 @@
|
|||
{
|
||||
"ModId": "LostIsland",
|
||||
"ModName": "Lost Island"
|
||||
},
|
||||
{
|
||||
"ModId": "Fjordur",
|
||||
"ModName": "Fjordur"
|
||||
}
|
||||
],
|
||||
"RconInputModes": [
|
||||
{
|
||||
"Command": "Global",
|
||||
"Description": "Global"
|
||||
},
|
||||
{
|
||||
"Command": "Broadcast",
|
||||
"Description": "Broadcast"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -25,6 +25,7 @@
|
|||
<sys:String x:Key="Map_CrystalIsles">Crystal Isles</sys:String>
|
||||
<sys:String x:Key="Map_Gen2">Genesis: Part 2</sys:String>
|
||||
<sys:String x:Key="Map_LostIsland">Lost Island</sys:String>
|
||||
<sys:String x:Key="Map_Fjordur">Fjordur</sys:String>
|
||||
<!--#endregion-->
|
||||
|
||||
<!--#region Total Conversion Names -->
|
||||
|
|
@ -58,6 +59,7 @@
|
|||
<sys:String x:Key="Mod_CrystalIsles">Crystal Isles</sys:String>
|
||||
<sys:String x:Key="Mod_Genesis2">Genesis: Part 2</sys:String>
|
||||
<sys:String x:Key="Mod_LostIsland">Lost Island</sys:String>
|
||||
<sys:String x:Key="Mod_Fjordur">Fjordur</sys:String>
|
||||
<sys:String x:Key="Mod_PGM">PGM</sys:String>
|
||||
<!--#endregion-->
|
||||
|
||||
|
|
@ -107,6 +109,12 @@
|
|||
<sys:String x:Key="DiscordBotLogLevel_Debug">Debug</sys:String>
|
||||
<!--#endregion-->
|
||||
|
||||
<!--#region Rcon Message Modes -->
|
||||
<sys:String x:Key="InputMode_Command">Command</sys:String>
|
||||
<sys:String x:Key="InputMode_Global">Global</sys:String>
|
||||
<sys:String x:Key="InputMode_Broadcast">Broadcast</sys:String>
|
||||
<!--#endregion-->
|
||||
|
||||
<!--#region Application -->
|
||||
<sys:String x:Key="Application_RunAsAdministratorTitle">Run as Administrator</sys:String>
|
||||
<sys:String x:Key="Application_RunAsAdministratorLabel">This application requires administration priviledges to access ALL functionality. Would you like to Run as Administrator?</sys:String>
|
||||
|
|
@ -2654,10 +2662,6 @@
|
|||
<sys:String x:Key="RCON_ViewLogs_ErrorTitle">Can't open logs</sys:String>
|
||||
<sys:String x:Key="RCON_ViewLogs_ErrorLabel">Unable to open the logs directory at {0}. Please make sure this directory exists and that you have permission to access it.\nException: {1}</sys:String>
|
||||
|
||||
<sys:String x:Key="InputMode_Command">Command</sys:String>
|
||||
<sys:String x:Key="InputMode_Global">Global</sys:String>
|
||||
<sys:String x:Key="InputMode_Broadcast">Broadcast</sys:String>
|
||||
|
||||
<sys:String x:Key="ConsoleStatus_Disconnected">Disconnected</sys:String>
|
||||
<sys:String x:Key="ConsoleStatus_Connected">Connected</sys:String>
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ namespace ServerManagerTool.Lib
|
|||
public const string MOD_ALL = "All";
|
||||
public const string MOD_UNKNOWN = "Unknown";
|
||||
|
||||
public const string RCONINPUTMODE_COMMAND = "Command";
|
||||
|
||||
public static string MainDataFolder = Path.Combine(Environment.CurrentDirectory, Config.Default.GameDataDir);
|
||||
public static string UserDataFolder = Path.Combine(Config.Default.DataDir, Config.Default.GameDataDir);
|
||||
|
||||
|
|
@ -159,6 +161,17 @@ namespace ServerManagerTool.Lib
|
|||
{
|
||||
ModUtils.AddOfficialMods(gameData.OfficialMods.Where(m => !string.IsNullOrWhiteSpace(m.ModId)).Select(m => m.ModId).ToList());
|
||||
}
|
||||
|
||||
// rcon input modes
|
||||
gameData.RconInputModes.AddRange(userGameData.RconInputModes);
|
||||
|
||||
if (gameData.RconInputModes.Count > 0)
|
||||
{
|
||||
var modes1 = rconInputModes.ToList();
|
||||
modes1.AddRange(gameData.RconInputModes.Select(item => new ComboBoxItem { ValueMember = item.Command, DisplayMember = item.Description }));
|
||||
|
||||
rconInputModes = modes1.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
public static string FriendlyNameForClass(string className, bool returnNullIfNotFound = false) => string.IsNullOrWhiteSpace(className) ? (returnNullIfNotFound ? null : string.Empty) : GlobalizedApplication.Instance.GetResourceString(className) ?? (returnNullIfNotFound ? null : className);
|
||||
|
|
@ -430,5 +443,18 @@ namespace ServerManagerTool.Lib
|
|||
|
||||
public static string FriendlyEventSotFName(string eventName, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(eventName) ? string.Empty : GlobalizedApplication.Instance.GetResourceString("Event_" + eventName) ?? gameData?.Events?.FirstOrDefault(i => i.EventName.Equals(eventName) && i.IsSotF)?.Description ?? (returnEmptyIfNotFound ? string.Empty : eventName);
|
||||
#endregion
|
||||
|
||||
#region Rcon input Modes
|
||||
private static ComboBoxItem[] rconInputModes = new[]
|
||||
{
|
||||
new ComboBoxItem { ValueMember=RCONINPUTMODE_COMMAND, DisplayMember=FriendlyNameForClass($"InputMode_{RCONINPUTMODE_COMMAND}") },
|
||||
};
|
||||
|
||||
public static IEnumerable<ComboBoxItem> GetAllRconInputModes() => rconInputModes.Select(m => m.Duplicate());
|
||||
|
||||
public static IEnumerable<ComboBoxItem> GetMessageRconInputModes() => rconInputModes.Where(m => !m.ValueMember.Equals(RCONINPUTMODE_COMMAND, StringComparison.OrdinalIgnoreCase)).Select(m => m.Duplicate());
|
||||
|
||||
public static string FriendlyRconInputModeName(string rconInputMode, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(rconInputMode) ? string.Empty : GlobalizedApplication.Instance.GetResourceString("InputMode_" + rconInputMode) ?? gameData?.RconInputModes?.FirstOrDefault(i => i.Command.Equals(rconInputMode))?.Description ?? (returnEmptyIfNotFound ? string.Empty : rconInputMode);
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2437,7 +2437,7 @@ namespace ServerManagerTool.Lib
|
|||
return ServerRcon.RCON_COMMAND_SERVERCHAT;
|
||||
|
||||
default:
|
||||
return ServerRcon.RCON_COMMAND_BROADCAST;
|
||||
return commandValue.ToLower();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,6 @@ namespace ServerManagerTool.Lib
|
|||
private const string NoResponseMatch = "Server received, But no response!!";
|
||||
public const string NoResponseOutput = "NO_RESPONSE";
|
||||
|
||||
public const string RCON_COMMAND_BROADCAST = "broadcast";
|
||||
public const string RCON_COMMAND_LISTPLAYERS = "listplayers";
|
||||
public const string RCON_COMMAND_GETCHAT = "getchat";
|
||||
public const string RCON_COMMAND_SERVERCHAT = "serverchat";
|
||||
|
|
@ -315,18 +314,21 @@ namespace ServerManagerTool.Lib
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (command.command.Equals(RCON_COMMAND_BROADCAST, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
LogEvent(LogEventType.Chat, command.rawCommand);
|
||||
command.suppressOutput = true;
|
||||
}
|
||||
|
||||
if (command.command.Equals(RCON_COMMAND_SERVERCHAT, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
LogEvent(LogEventType.Chat, command.rawCommand);
|
||||
command.suppressOutput = true;
|
||||
}
|
||||
|
||||
foreach (var item in GameData.GetMessageRconInputModes())
|
||||
{
|
||||
if (command.command.Equals(item.ValueMember, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
LogEvent(LogEventType.Chat, command.rawCommand);
|
||||
command.suppressOutput = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This is bound to the UI thread
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ using ServerManagerTool.Common;
|
|||
using ServerManagerTool.Common.Lib;
|
||||
using ServerManagerTool.Common.Model;
|
||||
using ServerManagerTool.Common.Utils;
|
||||
using ServerManagerTool.Lib;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
|
|
@ -548,13 +549,10 @@ namespace ServerManagerTool
|
|||
var selectedValue = this.RconMessageModesComboBox?.SelectedValue ?? Config.RCON_MessageCommand;
|
||||
var list = new ComboBoxItemList();
|
||||
|
||||
foreach (InputMode inputMode in Enum.GetValues(typeof(InputMode)))
|
||||
foreach (var item in GameData.GetMessageRconInputModes())
|
||||
{
|
||||
if (inputMode == InputMode.Command)
|
||||
continue;
|
||||
|
||||
var displayMember = _globalizer.GetResourceString($"InputMode_{inputMode}") ?? inputMode.ToString();
|
||||
list.Add(new Common.Model.ComboBoxItem(inputMode.ToString(), displayMember));
|
||||
item.DisplayMember = GameData.FriendlyRconInputModeName(item.ValueMember);
|
||||
list.Add(item);
|
||||
}
|
||||
|
||||
this.RconMessageModes = list;
|
||||
|
|
|
|||
|
|
@ -20,12 +20,6 @@
|
|||
</ResourceDictionary.MergedDictionaries>
|
||||
|
||||
<local:ScrollToBottomAction x:Key="ScrollToBottomAction" />
|
||||
|
||||
<ObjectDataProvider MethodName="GetValues" ObjectType="{x:Type sys:Enum}" x:Key="InputModes">
|
||||
<ObjectDataProvider.MethodParameters>
|
||||
<x:Type TypeName="local:InputMode" />
|
||||
</ObjectDataProvider.MethodParameters>
|
||||
</ObjectDataProvider>
|
||||
</ResourceDictionary>
|
||||
</Window.Resources>
|
||||
|
||||
|
|
@ -239,7 +233,7 @@
|
|||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Label Grid.Column="0" Content="{DynamicResource RCON_ModeLabel}"/>
|
||||
<ComboBox Name="InputModesComboBox" Grid.Column="1" ItemsSource="{Binding Source={StaticResource InputModes}}" SelectedItem="{Binding CurrentInputMode, Mode=TwoWay}" Margin="0,0,2,0"/>
|
||||
<ComboBox Name="InputModesComboBox" Grid.Column="1" ItemsSource="{Binding ElementName=RCON, Path=RconInputModes}" SelectedValue="{Binding ElementName=RCON, Path=CurrentInputMode, Mode=TwoWay}" SelectedValuePath="ValueMember" DisplayMemberPath="DisplayMember" Margin="0,0,2,0"/>
|
||||
<TextBox Name="ConsoleInput" TabIndex="0" Grid.Column="2" KeyUp="ConsoleInput_KeyUp" BorderBrush="LightGray" VerticalContentAlignment="Center" IsTabStop="True"/>
|
||||
</Grid>
|
||||
</Grid>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
using ServerManagerTool.Common.Enums;
|
||||
using ServerManagerTool.Common.Extensions;
|
||||
using ServerManagerTool.Common.Lib;
|
||||
using ServerManagerTool.Common.Model;
|
||||
using ServerManagerTool.Common.Utils;
|
||||
using ServerManagerTool.Enums;
|
||||
using ServerManagerTool.Lib;
|
||||
using ServerManagerTool.Lib.ViewModel;
|
||||
using ServerManagerTool.Lib.ViewModel.RCON;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
@ -24,14 +24,6 @@ using WPFSharp.Globalizer;
|
|||
|
||||
namespace ServerManagerTool
|
||||
{
|
||||
[TypeConverter(typeof(EnumDescriptionTypeConverter))]
|
||||
public enum InputMode
|
||||
{
|
||||
Command,
|
||||
Global,
|
||||
Broadcast,
|
||||
}
|
||||
|
||||
public enum InputWindowMode
|
||||
{
|
||||
None,
|
||||
|
|
@ -169,7 +161,7 @@ namespace ServerManagerTool
|
|||
private GlobalizedApplication _globalizer = GlobalizedApplication.Instance;
|
||||
|
||||
public static readonly DependencyProperty CurrentConfigProperty = DependencyProperty.Register(nameof(CurrentConfig), typeof(Config), typeof(RCONWindow), new PropertyMetadata(Config.Default));
|
||||
public static readonly DependencyProperty CurrentInputModeProperty = DependencyProperty.Register(nameof(CurrentInputMode), typeof(InputMode), typeof(RCONWindow), new PropertyMetadata(InputMode.Command));
|
||||
public static readonly DependencyProperty CurrentInputModeProperty = DependencyProperty.Register(nameof(CurrentInputMode), typeof(string), typeof(RCONWindow), new PropertyMetadata(GameData.RCONINPUTMODE_COMMAND));
|
||||
public static readonly DependencyProperty PlayerFilteringProperty = DependencyProperty.Register(nameof(PlayerFiltering), typeof(PlayerFilterType), typeof(RCONWindow), new PropertyMetadata(PlayerFilterType.Online | PlayerFilterType.Offline | PlayerFilterType.Whitelisted));
|
||||
public static readonly DependencyProperty PlayerFilterStringProperty = DependencyProperty.Register(nameof(PlayerFilterString), typeof(string), typeof(RCONWindow), new PropertyMetadata(string.Empty));
|
||||
public static readonly DependencyProperty PlayerSortingProperty = DependencyProperty.Register(nameof(PlayerSorting), typeof(PlayerSortType), typeof(RCONWindow), new PropertyMetadata(PlayerSortType.Online));
|
||||
|
|
@ -177,12 +169,15 @@ namespace ServerManagerTool
|
|||
public static readonly DependencyProperty RCONParametersProperty = DependencyProperty.Register(nameof(RCONParameters), typeof(RCONParameters), typeof(RCONWindow), new PropertyMetadata(null));
|
||||
public static readonly DependencyProperty ScrollOnNewInputProperty = DependencyProperty.Register(nameof(ScrollOnNewInput), typeof(bool), typeof(RCONWindow), new PropertyMetadata(true));
|
||||
public static readonly DependencyProperty ServerRCONProperty = DependencyProperty.Register(nameof(ServerRCON), typeof(ServerRcon), typeof(RCONWindow), new PropertyMetadata(null));
|
||||
public static readonly DependencyProperty RconInputModesProperty = DependencyProperty.Register(nameof(RconInputModes), typeof(ComboBoxItemList), typeof(RCONWindow), new PropertyMetadata(null));
|
||||
|
||||
public RCONWindow(RCONParameters parameters)
|
||||
{
|
||||
InitializeComponent();
|
||||
WindowUtils.RemoveDefaultResourceDictionary(this, Config.Default.DefaultGlobalizationFile);
|
||||
|
||||
PopulateRconInputModesComboBox();
|
||||
|
||||
this.CurrentInputWindowMode = InputWindowMode.None;
|
||||
this.PlayerFiltering = (PlayerFilterType)Config.Default.RCON_PlayerListFilter;
|
||||
this.PlayerSorting = (PlayerSortType)Config.Default.RCON_PlayerListSort;
|
||||
|
|
@ -259,9 +254,9 @@ namespace ServerManagerTool
|
|||
set { SetValue(CurrentConfigProperty, value); }
|
||||
}
|
||||
|
||||
public InputMode CurrentInputMode
|
||||
public string CurrentInputMode
|
||||
{
|
||||
get { return (InputMode)GetValue(CurrentInputModeProperty); }
|
||||
get { return (string)GetValue(CurrentInputModeProperty); }
|
||||
set { SetValue(CurrentInputModeProperty, value); }
|
||||
}
|
||||
|
||||
|
|
@ -306,6 +301,12 @@ namespace ServerManagerTool
|
|||
get { return (ServerRcon)GetValue(ServerRCONProperty); }
|
||||
set { SetValue(ServerRCONProperty, value); }
|
||||
}
|
||||
|
||||
public ComboBoxItemList RconInputModes
|
||||
{
|
||||
get { return (ComboBoxItemList)GetValue(RconInputModesProperty); }
|
||||
set { SetValue(RconInputModesProperty, value); }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Commands
|
||||
|
|
@ -685,13 +686,7 @@ namespace ServerManagerTool
|
|||
|
||||
private void ResourceDictionaryChangedEvent(object source, ResourceDictionaryChangedEventArgs e)
|
||||
{
|
||||
// refresh the InputModes combobox list
|
||||
this.InputModesComboBox.Items.Refresh();
|
||||
|
||||
// refresh the InputModes combobox value
|
||||
var currentInputMode = CurrentInputMode;
|
||||
this.InputModesComboBox.SelectedItem = null;
|
||||
this.InputModesComboBox.SelectedItem = currentInputMode;
|
||||
PopulateRconInputModesComboBox();
|
||||
}
|
||||
|
||||
protected override void OnClosed(EventArgs e)
|
||||
|
|
@ -796,29 +791,29 @@ namespace ServerManagerTool
|
|||
{
|
||||
if (commandText.StartsWith("/"))
|
||||
{
|
||||
effectiveMode = InputMode.Command;
|
||||
effectiveMode = GameData.RCONINPUTMODE_COMMAND;
|
||||
commandText = commandText.Substring(1);
|
||||
}
|
||||
|
||||
switch (effectiveMode)
|
||||
{
|
||||
case InputMode.Command:
|
||||
case GameData.RCONINPUTMODE_COMMAND:
|
||||
this.ServerRCON.IssueCommand(commandText);
|
||||
break;
|
||||
|
||||
case InputMode.Broadcast:
|
||||
this.ServerRCON.IssueCommand($"{ServerRcon.RCON_COMMAND_BROADCAST} {commandText}");
|
||||
break;
|
||||
|
||||
case InputMode.Global:
|
||||
if (!String.IsNullOrWhiteSpace(Config.Default.RCON_AdminName))
|
||||
{
|
||||
this.ServerRCON.IssueCommand($"{ServerRcon.RCON_COMMAND_SERVERCHAT} [{Config.Default.RCON_AdminName}] {commandText}");
|
||||
}
|
||||
else
|
||||
case "Global":
|
||||
if (string.IsNullOrWhiteSpace(Config.Default.RCON_AdminName))
|
||||
{
|
||||
this.ServerRCON.IssueCommand($"{ServerRcon.RCON_COMMAND_SERVERCHAT} {commandText}");
|
||||
}
|
||||
else
|
||||
{
|
||||
this.ServerRCON.IssueCommand($"{ServerRcon.RCON_COMMAND_SERVERCHAT} [{Config.Default.RCON_AdminName}] {commandText}");
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
this.ServerRCON.IssueCommand($"{effectiveMode} {commandText}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -870,6 +865,24 @@ namespace ServerManagerTool
|
|||
windows.Clear();
|
||||
}
|
||||
|
||||
private void PopulateRconInputModesComboBox()
|
||||
{
|
||||
var selectedValue = this.InputModesComboBox?.SelectedValue ?? GameData.RCONINPUTMODE_COMMAND;
|
||||
var list = new ComboBoxItemList();
|
||||
|
||||
foreach (var item in GameData.GetAllRconInputModes())
|
||||
{
|
||||
item.DisplayMember = GameData.FriendlyRconInputModeName(item.ValueMember);
|
||||
list.Add(item);
|
||||
}
|
||||
|
||||
this.RconInputModes = list;
|
||||
if (this.InputModesComboBox != null)
|
||||
{
|
||||
this.InputModesComboBox.SelectedValue = selectedValue;
|
||||
}
|
||||
}
|
||||
|
||||
private void SetPlayerListWidth(double value)
|
||||
{
|
||||
if (value < this.playerListColumn.MinWidth)
|
||||
|
|
@ -914,16 +927,28 @@ namespace ServerManagerTool
|
|||
|
||||
private IEnumerable<Inline> FormatCommandInput(ConsoleCommand command)
|
||||
{
|
||||
if (command.command.Equals(ServerRcon.RCON_COMMAND_BROADCAST, StringComparison.OrdinalIgnoreCase))
|
||||
var commandValue = command?.command?.ToLower() ?? string.Empty;
|
||||
if (string.IsNullOrWhiteSpace(commandValue))
|
||||
{
|
||||
yield return new RCONOutput_Broadcast(command.args);
|
||||
yield return new LineBreak();
|
||||
}
|
||||
else
|
||||
|
||||
var found = false;
|
||||
foreach (var item in GameData.GetMessageRconInputModes())
|
||||
{
|
||||
if (item.ValueMember.Equals(commandValue, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
found = true;
|
||||
yield return new RCONOutput_Broadcast(command.args);
|
||||
}
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
yield return new RCONOutput_Command($"> {command.rawCommand}");
|
||||
}
|
||||
|
||||
if(!command.suppressOutput && !command.lines.IsEmpty())
|
||||
if (!command.suppressOutput && !command.lines.IsEmpty())
|
||||
{
|
||||
yield return new LineBreak();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue