diff --git a/src/ARKServerManager.Common/Utils/GameDataUtils.cs b/src/ARKServerManager.Common/Utils/GameDataUtils.cs index 9f74cff0..acddc094 100644 --- a/src/ARKServerManager.Common/Utils/GameDataUtils.cs +++ b/src/ARKServerManager.Common/Utils/GameDataUtils.cs @@ -43,6 +43,7 @@ namespace ServerManagerTool.Utils data.Branches.AddRange(fileData.Branches); data.Events.AddRange(fileData.Events); data.OfficialMods.AddRange(fileData.OfficialMods); + data.RconInputModes.AddRange(fileData.RconInputModes); if (fileData.PlayerAdditionalLevels > 0 && fileData.PlayerAdditionalLevels > data.PlayerAdditionalLevels) data.PlayerAdditionalLevels = fileData.PlayerAdditionalLevels; @@ -137,6 +138,9 @@ namespace ServerManagerTool.Utils [DataMember(IsRequired = false)] public List OfficialMods = new List(); + [DataMember(IsRequired = false)] + public List RconInputModes = new List(); + public static MainGameData Load(string file, bool isUserData) { if (string.IsNullOrWhiteSpace(file) || !File.Exists(file)) @@ -157,6 +161,7 @@ namespace ServerManagerTool.Utils data.Branches.ForEach(c => c.IsUserData = isUserData); data.Events.ForEach(c => c.IsUserData = isUserData); data.OfficialMods.ForEach(c => c.IsUserData = isUserData); + data.RconInputModes.ForEach(c => c.IsUserData = isUserData); } return data; } @@ -300,4 +305,15 @@ namespace ServerManagerTool.Utils public bool IsUserData = false; } + + [DataContract] + public class RconInputModeItem + { + [DataMember] + public string Command = string.Empty; + [DataMember] + public string Description = string.Empty; + + public bool IsUserData = false; + } } diff --git a/src/ARKServerManager/GameData/SurvivalEvolved.gamedata b/src/ARKServerManager/GameData/SurvivalEvolved.gamedata index 72e8f43d..297d31f0 100644 --- a/src/ARKServerManager/GameData/SurvivalEvolved.gamedata +++ b/src/ARKServerManager/GameData/SurvivalEvolved.gamedata @@ -13450,6 +13450,20 @@ { "ModId": "LostIsland", "ModName": "Lost Island" + }, + { + "ModId": "Fjordur", + "ModName": "Fjordur" + } + ], + "RconInputModes": [ + { + "Command": "Global", + "Description": "Global" + }, + { + "Command": "Broadcast", + "Description": "Broadcast" } ] } \ No newline at end of file diff --git a/src/ARKServerManager/Globalization/en-US/en-US.xaml b/src/ARKServerManager/Globalization/en-US/en-US.xaml index 36ead293..334f6c99 100644 --- a/src/ARKServerManager/Globalization/en-US/en-US.xaml +++ b/src/ARKServerManager/Globalization/en-US/en-US.xaml @@ -25,6 +25,7 @@ Crystal Isles Genesis: Part 2 Lost Island + Fjordur @@ -58,6 +59,7 @@ Crystal Isles Genesis: Part 2 Lost Island + Fjordur PGM @@ -107,6 +109,12 @@ Debug + + Command + Global + Broadcast + + Run as Administrator This application requires administration priviledges to access ALL functionality. Would you like to Run as Administrator? @@ -2654,10 +2662,6 @@ Can't open logs Unable to open the logs directory at {0}. Please make sure this directory exists and that you have permission to access it.\nException: {1} - Command - Global - Broadcast - Disconnected Connected diff --git a/src/ARKServerManager/Lib/GameData.cs b/src/ARKServerManager/Lib/GameData.cs index 6f2a1db2..64904487 100644 --- a/src/ARKServerManager/Lib/GameData.cs +++ b/src/ARKServerManager/Lib/GameData.cs @@ -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 GetAllRconInputModes() => rconInputModes.Select(m => m.Duplicate()); + + public static IEnumerable 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 } } diff --git a/src/ARKServerManager/Lib/ServerApp.cs b/src/ARKServerManager/Lib/ServerApp.cs index 470cf562..d2998ef5 100644 --- a/src/ARKServerManager/Lib/ServerApp.cs +++ b/src/ARKServerManager/Lib/ServerApp.cs @@ -2437,7 +2437,7 @@ namespace ServerManagerTool.Lib return ServerRcon.RCON_COMMAND_SERVERCHAT; default: - return ServerRcon.RCON_COMMAND_BROADCAST; + return commandValue.ToLower(); } } diff --git a/src/ARKServerManager/Lib/ServerRCON.cs b/src/ARKServerManager/Lib/ServerRCON.cs index 5b36d482..e3d0ba76 100644 --- a/src/ARKServerManager/Lib/ServerRCON.cs +++ b/src/ARKServerManager/Lib/ServerRCON.cs @@ -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 diff --git a/src/ARKServerManager/UserControls/GlobalSettingsControl.xaml.cs b/src/ARKServerManager/UserControls/GlobalSettingsControl.xaml.cs index 4e2f474f..cbd342e1 100644 --- a/src/ARKServerManager/UserControls/GlobalSettingsControl.xaml.cs +++ b/src/ARKServerManager/UserControls/GlobalSettingsControl.xaml.cs @@ -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; diff --git a/src/ARKServerManager/Windows/RCONWindow.xaml b/src/ARKServerManager/Windows/RCONWindow.xaml index 83a29287..1a10bd43 100644 --- a/src/ARKServerManager/Windows/RCONWindow.xaml +++ b/src/ARKServerManager/Windows/RCONWindow.xaml @@ -20,12 +20,6 @@ - - - - - - @@ -239,7 +233,7 @@