diff --git a/FASTER/Models/ServerCfg.cs b/FASTER/Models/ServerCfg.cs index d5f14f3..f5a827b 100644 --- a/FASTER/Models/ServerCfg.cs +++ b/FASTER/Models/ServerCfg.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.ComponentModel; using System.Globalization; +using System.IO; using System.Linq; namespace FASTER.Models @@ -93,6 +94,8 @@ public class ServerCfg : INotifyPropertyChanged private uint maxMem = 1024; private bool cpuCountOverride; private ushort cpuCount; + private bool bePathOverride; + private string bePath; private string commandLineParams; private string serverCfgContent; @@ -770,6 +773,16 @@ public bool CpuCountOverride } } + public bool EnableCustomBePath + { + get => bePathOverride; + set + { + bePathOverride = value; + RaisePropertyChanged("EnableCustomBePath"); + } + } + public uint MaxMem { get => maxMem; @@ -779,6 +792,16 @@ public uint MaxMem RaisePropertyChanged("MaxMem"); } } + + public string CustomBePath + { + get => bePath; + set + { + bePath = value; + RaisePropertyChanged("CustomBePath"); + } + } public ushort CpuCount { diff --git a/FASTER/Models/ServerProfile.cs b/FASTER/Models/ServerProfile.cs index c9015a4..8c2094d 100644 --- a/FASTER/Models/ServerProfile.cs +++ b/FASTER/Models/ServerProfile.cs @@ -64,6 +64,8 @@ public class ServerProfile : INotifyPropertyChanged private bool _efDlcChecked; private bool _enableHT = true; private bool _enableRanking; + private bool _enableHugePages; + private bool _loadMissionToMemory; private List _profileMods = new List(); private string _profileModsFilter = ""; @@ -75,6 +77,12 @@ public class ServerProfile : INotifyPropertyChanged private Arma3Profile _armaProfile; private BasicCfg _basicCfg; + private bool _enableExThreads; + private bool _exThreadGeometry; + private bool _exThreadTextures; + private bool _exThreadFiles; + private byte _exThreads = 0; + //PUBLIC VAR DECLARATIONS public string Id { @@ -234,6 +242,75 @@ public bool EnableHyperThreading RaisePropertyChanged("EnableHyperThreading"); } } + + public bool EnableHugePages + { + get => _enableHugePages; + set + { + _enableHugePages = value; + RaisePropertyChanged("EnableHugePages"); + } + } + + public bool EnableLoadMissionToMemory + { + get => _loadMissionToMemory; + set + { + _loadMissionToMemory = value; + RaisePropertyChanged("EnableLoadMissionToMemory"); + } + } + + public bool EnableExtraThreads + { + get => _enableExThreads; + set + { + _enableExThreads = value; + RaisePropertyChanged("EnableExtraThreads"); + } + } + + public bool ExThreadGeometry + { + get => _exThreadGeometry; + set + { + _exThreadGeometry = value; + RaisePropertyChanged("ExThreadGeometry"); + } + } + + public bool ExThreadTextures + { + get => _exThreadTextures; + set + { + _exThreadTextures = value; + RaisePropertyChanged("ExThreadTextures"); + } + } + + public bool ExThreadFiles + { + get => _exThreadFiles; + set + { + _exThreadFiles = value; + RaisePropertyChanged("ExThreadFiles"); + } + } + + public void ProcessExThreads() + { + _exThreads = (byte)( + (_exThreadFiles ? 1 : 0) | + (_exThreadTextures ? 2 : 0) | + (_exThreadGeometry ? 4 : 0) + ); + } public bool RankingChecked { @@ -547,6 +624,10 @@ private string GetCommandLine() $"{(ServerCfg.AutoInit ? " -autoInit" : "")}", $"{(ServerCfg.MaxMemOverride ? $" -maxMem={ServerCfg.MaxMem}" : "")}", $"{(ServerCfg.CpuCountOverride ? $" -cpuCount={ServerCfg.CpuCount}" : "")}", + $"{(EnableHugePages ? " -hugePages" : "")}", + $"{(EnableExtraThreads ? $" -exThreads={_exThreads}" : "")}", + $"{(EnableLoadMissionToMemory ? $" -loadMissionToMemory" : "")}", + $"{(ServerCfg.EnableCustomBePath && !string.IsNullOrWhiteSpace(ServerCfg.CustomBePath) && Path.Exists(ServerCfg.CustomBePath) ? $" -bePath=\"{ServerCfg.CustomBePath}\"" : "")}", $"{(!string.IsNullOrWhiteSpace(ServerCfg.CommandLineParameters) ? $" {ServerCfg.CommandLineParameters}" : "")}" }; @@ -571,6 +652,11 @@ private void Class_PropertyChanged(object sender, PropertyChangedEventArgs e) public event PropertyChangedEventHandler PropertyChanged; internal void RaisePropertyChanged(string property) { + if (property == "ExThreadGeometry" || property == "ExThreadTextures" || property == "ExThreadFiles") + { + ProcessExThreads(); + } + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property)); if(property != "CommandLine") PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CommandLine))); diff --git a/FASTER/ViewModel/ProfileViewModel.cs b/FASTER/ViewModel/ProfileViewModel.cs index b9b6f71..e8f1dee 100644 --- a/FASTER/ViewModel/ProfileViewModel.cs +++ b/FASTER/ViewModel/ProfileViewModel.cs @@ -349,6 +349,16 @@ internal void SelectServerFile() { MessageBox.Show("Please enter a valid arma3server executable location"); } } + internal void SelectCustomBePath() + { + var path = MainWindow.Instance.SelectFolder(Properties.Settings.Default.serverPath); + + if (path == null) + return; + + Profile.ServerCfg.CustomBePath = path; + } + internal async Task CopyModKeys() { var mods = new List(); diff --git a/FASTER/Views/Profile.xaml b/FASTER/Views/Profile.xaml index b5add5f..33c0470 100644 --- a/FASTER/Views/Profile.xaml +++ b/FASTER/Views/Profile.xaml @@ -865,6 +865,11 @@ + + + + + @@ -883,11 +888,59 @@ - + + + + + + + +