diff --git a/ARK Server Manager/ARK Server Manager.csproj b/ARK Server Manager/ARK Server Manager.csproj
index 469e21a6..ee8c5c4c 100644
--- a/ARK Server Manager/ARK Server Manager.csproj
+++ b/ARK Server Manager/ARK Server Manager.csproj
@@ -31,7 +31,7 @@
Ark Server Manager
Ark Server Manager
false
- 1
+ 6
1.0.326.%2a
false
true
@@ -161,11 +161,13 @@
Designer
+
+
@@ -173,8 +175,11 @@
+
+
+
diff --git a/ARK Server Manager/App.config b/ARK Server Manager/App.config
index aea86336..f456ae2e 100644
--- a/ARK Server Manager/App.config
+++ b/ARK Server Manager/App.config
@@ -92,7 +92,7 @@
+login anonymous +quit
- +login anonymous +force_install_dir "{0}" "+app_update 376030 {1}" +quit
+ +login anonymous +force_install_dir "{0}" "+app_update 376030 {1} {2}" +quit
Servers
@@ -121,7 +121,7 @@
Profiles
-
+
.profile
@@ -167,7 +167,7 @@
http://arkservermanager.freeforums.net/thread/1194/faq-frequently-asked
- +login anonymous +force_install_dir "{0}" "+app_update 445400 {1}" +quit
+ +login anonymous +force_install_dir "{0}" "+app_update 445400 {1} {2}" +quit
https://survivetheark.com/index.php?/forums/forum/5-changelog-patch-notes/
@@ -310,7 +310,7 @@
http://arkservermanager.freeforums.net/board/22/plugins
-
+
.asmprofile
@@ -361,6 +361,27 @@
http://arksm.azurewebsites.net/downloads/arkservermanager/beta/versionfeed.xml
+
+ release
+
+
+ -beta {0}
+
+
+ -betapassword {0}
+
+
+ __
+
+
+ appmanifest_376030.acf
+
+
+ appmanifest_407530.acf
+
+
+ steamapps
+
@@ -674,6 +695,12 @@
True
+
+ False
+
+
+ False
+
diff --git a/ARK Server Manager/App.xaml.cs b/ARK Server Manager/App.xaml.cs
index db7bd951..a6ce2276 100644
--- a/ARK Server Manager/App.xaml.cs
+++ b/ARK Server Manager/App.xaml.cs
@@ -164,22 +164,6 @@ private static void MigrateSettings()
Config.Default.Reload();
Config.Default.UpgradeConfig = false;
-#if false
- object previousEnableSettingsCache = null;
- try { previousEnableSettingsCache = Config.Default.GetPreviousVersion(nameof(Config.Default.GLOBAL_EnableServerCache)); }
- catch (SettingsPropertyNotFoundException) { /* this would get thrown if we were renaming a property, see http://www.codeproject.com/Articles/247333/Renaming-User-Settings-properties-between-software */ }
-
- if (previousEnableSettingsCache == null)
- {
- int serverupdatePeriod = 0;
- Int32.TryParse(Config.Default.GetPreviousVersion(nameof(Config.Default.AutoUpdate_UpdatePeriod)).ToString(), out serverupdatePeriod);
- if (!String.IsNullOrWhiteSpace(Config.Default.GetPreviousVersion(nameof(Config.Default.AutoUpdate_CacheDir)).ToString()) &&
- serverupdatePeriod > 0)
- {
- Config.Default.GLOBAL_EnableServerCache = true;
- }
- }
-#endif
Config.Default.Save();
}
}
diff --git a/ARK Server Manager/Common/Converters/InvertBooleanToVisibilityConverter.cs b/ARK Server Manager/Common/Converters/InvertBooleanToVisibilityConverter.cs
new file mode 100644
index 00000000..b4e62175
--- /dev/null
+++ b/ARK Server Manager/Common/Converters/InvertBooleanToVisibilityConverter.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Globalization;
+using System.Windows;
+using System.Windows.Data;
+
+namespace ARK_Server_Manager.Lib.ViewModel
+{
+ public class InvertBooleanToVisibilityConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ bool flag = false;
+ if (value is bool)
+ {
+ flag = (bool)value;
+ }
+ else if (value is bool?)
+ {
+ bool? nullable = (bool?)value;
+ flag = nullable.HasValue && nullable.Value;
+ }
+ return flag ? Visibility.Collapsed : Visibility.Visible;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is Visibility)
+ return (Visibility)value == Visibility.Collapsed;
+ return false;
+ }
+ }
+}
diff --git a/ARK Server Manager/Common/Lib/SteamCmdUpdater.cs b/ARK Server Manager/Common/Lib/SteamCmdUpdater.cs
index ff5882cc..bc5c5685 100644
--- a/ARK Server Manager/Common/Lib/SteamCmdUpdater.cs
+++ b/ARK Server Manager/Common/Lib/SteamCmdUpdater.cs
@@ -76,8 +76,6 @@ enum Status
{ Status.Cancelled, Update.AsCancelled("AutoUpdater_Status_Cancelled") }
};
- public static bool IsAutoUpdateCacheEnabled => Config.Default.AutoUpdate_EnableUpdate && Config.Default.AutoUpdate_UpdatePeriod >= 0 && !string.IsNullOrWhiteSpace(Config.Default.AutoUpdate_CacheDir) && Directory.Exists(Config.Default.AutoUpdate_CacheDir);
-
public static string GetLogFolder() => IOUtils.NormalizePath(Path.Combine(Config.Default.DataDir, Config.Default.LogsDir));
public static Version GetServerVersion(string versionFile)
diff --git a/ARK Server Manager/Common/Model/SteamCmdManifestDetails.cs b/ARK Server Manager/Common/Model/SteamCmdManifestDetails.cs
new file mode 100644
index 00000000..5f41860c
--- /dev/null
+++ b/ARK Server Manager/Common/Model/SteamCmdManifestDetails.cs
@@ -0,0 +1,90 @@
+using NeXt.Vdf;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace ARK_Server_Manager.Lib.Model
+{
+ public class SteamCmdManifestDetailsResult
+ {
+ public static void ClearUserConfigBetaKeys(VdfValue data)
+ {
+ var vdfTable = data as VdfTable;
+ if (vdfTable != null)
+ {
+ var value = vdfTable.FirstOrDefault(v => v.Name.Equals("UserConfig", StringComparison.OrdinalIgnoreCase));
+ var tableValue = value as VdfTable;
+ if (tableValue != null && tableValue.Count > 0)
+ {
+ var betaKeyItems = tableValue.Where(v => v.Name.Equals("betakey", StringComparison.OrdinalIgnoreCase)).ToArray();
+ foreach (var item in betaKeyItems)
+ {
+ tableValue.Remove(item);
+ }
+ }
+ }
+ }
+
+ public static SteamCmdAppManifest Deserialize(VdfValue data)
+ {
+ var result = new SteamCmdAppManifest();
+
+ var vdfTable = data as VdfTable;
+ if (vdfTable != null)
+ {
+ var value = vdfTable.FirstOrDefault(v => v.Name.Equals("appid", StringComparison.OrdinalIgnoreCase));
+ if (value != null) result.appid = GetValue(value);
+
+ value = vdfTable.FirstOrDefault(v => v.Name.Equals("UserConfig", StringComparison.OrdinalIgnoreCase));
+ var tableValue = value as VdfTable;
+ if (tableValue != null && tableValue.Count > 0)
+ {
+ result.UserConfig = new List();
+
+ foreach (var item in tableValue)
+ {
+ if (item is VdfTable)
+ {
+ var temp = new SteamCmdManifestUserConfig();
+ temp.betakey = item.Name;
+
+ result.UserConfig.Add(temp);
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public static string GetValue(VdfValue data)
+ {
+ if (data == null)
+ return null;
+
+ switch (data.Type)
+ {
+ case VdfValueType.Decimal:
+ return ((VdfDecimal)data).Content.ToString("G0");
+ case VdfValueType.Long:
+ return ((VdfLong)data).Content.ToString("G0");
+ case VdfValueType.String:
+ return ((VdfString)data).Content;
+ default:
+ return null;
+ }
+ }
+ }
+
+ public class SteamCmdAppManifest
+ {
+ public string appid { get; set; }
+
+ public List UserConfig { get; set; }
+ }
+
+ public class SteamCmdManifestUserConfig
+ {
+ public string betakey { get; set; }
+ }
+}
diff --git a/ARK Server Manager/Common/Serialization/SystemIniFile.cs b/ARK Server Manager/Common/Serialization/SystemIniFile.cs
index 5e6ebc9e..949e2e65 100644
--- a/ARK Server Manager/Common/Serialization/SystemIniFile.cs
+++ b/ARK Server Manager/Common/Serialization/SystemIniFile.cs
@@ -52,11 +52,12 @@ public class IniFileEntryAttribute : Attribute
/// The file into which the setting should be serialized.
/// The section in the ini file.
/// The key within the section. Defaults to the same name as the attributed field.
- public IniFileEntryAttribute(IniFiles file, IniFileSections section, string key = "")
+ public IniFileEntryAttribute(IniFiles file, IniFileSections section, string key = "", ServerProfileCategory category = ServerProfileCategory.Unknown)
{
this.File = file;
this.Section = section;
this.Key = key;
+ this.Category = category;
this.QuotedString = QuotedStringType.False;
}
@@ -68,6 +69,11 @@ public IniFileEntryAttribute(IniFiles file, IniFileSections section, string key
///
public IniFileSections Section;
+ ///
+ /// The category of the setting.
+ ///
+ public ServerProfileCategory Category;
+
///
/// The key within the section.
///
@@ -147,22 +153,22 @@ public SystemIniFile(string INIPath)
basePath = INIPath;
}
- public void Deserialize(object obj, string[] exclusions)
+ public void Deserialize(object obj, ServerProfileCategory[] exclusions)
{
var iniFiles = new Dictionary();
var fields = obj.GetType().GetProperties().Where(f => f.IsDefined(typeof(IniFileEntryAttribute), false));
if (exclusions == null)
- exclusions = new string[0];
+ exclusions = new ServerProfileCategory[0];
foreach (var field in fields)
{
- if (exclusions.Contains(field.Name))
- continue;
-
var attributes = field.GetCustomAttributes(typeof(IniFileEntryAttribute), false);
foreach (var attr in attributes.OfType())
{
+ if (exclusions.Contains(attr.Category))
+ continue;
+
if (attr.Section == IniFileSections.Custom)
{
// this code is to handle custom sections
@@ -258,22 +264,22 @@ public void Deserialize(object obj, string[] exclusions)
}
}
- public void Serialize(object obj, string[] exclusions)
+ public void Serialize(object obj, ServerProfileCategory[] exclusions)
{
var iniFiles = new Dictionary();
var fields = obj.GetType().GetProperties().Where(f => f.IsDefined(typeof(IniFileEntryAttribute), false));
if (exclusions == null)
- exclusions = new string[0];
+ exclusions = new ServerProfileCategory[0];
foreach (var field in fields)
{
- if (exclusions.Contains(field.Name))
- continue;
-
var attributes = field.GetCustomAttributes(typeof(IniFileEntryAttribute), false).OfType();
foreach (var attr in attributes)
{
+ if (exclusions.Contains(attr.Category))
+ continue;
+
if (attr.Section == IniFileSections.Custom)
{
// this code is to handle custom sections
diff --git a/ARK Server Manager/Common/Utils/SteamUtils.cs b/ARK Server Manager/Common/Utils/SteamUtils.cs
index 26f0d649..f9baf073 100644
--- a/ARK Server Manager/Common/Utils/SteamUtils.cs
+++ b/ARK Server Manager/Common/Utils/SteamUtils.cs
@@ -196,6 +196,17 @@ public static SteamUserDetailResponse GetSteamUserDetails(List steamIdLi
}
}
+ public static SteamCmdAppManifest ReadSteamCmdAppManifestFile(string file)
+ {
+ if (string.IsNullOrWhiteSpace(file) || !File.Exists(file))
+ return null;
+
+ var vdfSerializer = VdfDeserializer.FromFile(file);
+ var vdf = vdfSerializer.Deserialize();
+
+ return SteamCmdManifestDetailsResult.Deserialize(vdf);
+ }
+
public static SteamCmdAppWorkshop ReadSteamCmdAppWorkshopFile(string file)
{
if (string.IsNullOrWhiteSpace(file) || !File.Exists(file))
diff --git a/ARK Server Manager/Config.Designer.cs b/ARK Server Manager/Config.Designer.cs
index e84948a5..97dd9c1c 100644
--- a/ARK Server Manager/Config.Designer.cs
+++ b/ARK Server Manager/Config.Designer.cs
@@ -82,7 +82,7 @@ public string ConfigDirectory {
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("+login anonymous +force_install_dir \"{0}\" \"+app_update 376030 {1}\" +quit")]
+ [global::System.Configuration.DefaultSettingValueAttribute("+login anonymous +force_install_dir \"{0}\" \"+app_update 376030 {1} {2}\" +quit")]
public string SteamCmdInstallServerArgsFormat {
get {
return ((string)(this["SteamCmdInstallServerArgsFormat"]));
@@ -173,9 +173,9 @@ public string ProfilesDir {
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute(".profile")]
- public string ProfileExtension {
+ public string ProfileExtensionOld {
get {
- return ((string)(this["ProfileExtension"]));
+ return ((string)(this["ProfileExtensionOld"]));
}
}
@@ -595,7 +595,7 @@ public int CustomLevelXPIncrease_Dino {
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("+login anonymous +force_install_dir \"{0}\" \"+app_update 445400 {1}\" +quit")]
+ [global::System.Configuration.DefaultSettingValueAttribute("+login anonymous +force_install_dir \"{0}\" \"+app_update 445400 {1} {2}\" +quit")]
public string SteamCmdInstallServerArgsFormat_SotF {
get {
return ((string)(this["SteamCmdInstallServerArgsFormat_SotF"]));
@@ -1811,9 +1811,9 @@ public string ASMPluginUrl {
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute(".asmprofile")]
- public string ProfileExtensionNew {
+ public string ProfileExtension {
get {
- return ((string)(this["ProfileExtensionNew"]));
+ return ((string)(this["ProfileExtension"]));
}
}
@@ -2118,5 +2118,92 @@ public bool RCON_ShowPlayerAvatars {
this["RCON_ShowPlayerAvatars"] = value;
}
}
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("release")]
+ public string DefaultServerBranchName {
+ get {
+ return ((string)(this["DefaultServerBranchName"]));
+ }
+ }
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("-beta {0}")]
+ public string SteamCmdInstallServerBetaNameArgsFormat {
+ get {
+ return ((string)(this["SteamCmdInstallServerBetaNameArgsFormat"]));
+ }
+ }
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("-betapassword {0}")]
+ public string SteamCmdInstallServerBetaPasswordArgsFormat {
+ get {
+ return ((string)(this["SteamCmdInstallServerBetaPasswordArgsFormat"]));
+ }
+ }
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("__")]
+ public string ServerBranchFolderPrefix {
+ get {
+ return ((string)(this["ServerBranchFolderPrefix"]));
+ }
+ }
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("appmanifest_376030.acf")]
+ public string ArkSteamManifestFile {
+ get {
+ return ((string)(this["ArkSteamManifestFile"]));
+ }
+ }
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("appmanifest_407530.acf")]
+ public string ArkSteamManifestFile_SotF {
+ get {
+ return ((string)(this["ArkSteamManifestFile_SotF"]));
+ }
+ }
+
+ [global::System.Configuration.ApplicationScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("steamapps")]
+ public string SteamManifestFolderRelativePath {
+ get {
+ return ((string)(this["SteamManifestFolderRelativePath"]));
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool SectionPGMEnabled {
+ get {
+ return ((bool)(this["SectionPGMEnabled"]));
+ }
+ set {
+ this["SectionPGMEnabled"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool SectionSOTFEnabled {
+ get {
+ return ((bool)(this["SectionSOTFEnabled"]));
+ }
+ set {
+ this["SectionSOTFEnabled"] = value;
+ }
+ }
}
}
diff --git a/ARK Server Manager/Config.settings b/ARK Server Manager/Config.settings
index d9f7a898..5a6443bc 100644
--- a/ARK Server Manager/Config.settings
+++ b/ARK Server Manager/Config.settings
@@ -21,7 +21,7 @@
- +login anonymous +force_install_dir "{0}" "+app_update 376030 {1}" +quit
+ +login anonymous +force_install_dir "{0}" "+app_update 376030 {1} {2}" +quit
Servers
@@ -50,7 +50,7 @@
Profiles
-
+
.profile
@@ -168,7 +168,7 @@
1000
- +login anonymous +force_install_dir "{0}" "+app_update 445400 {1}" +quit
+ +login anonymous +force_install_dir "{0}" "+app_update 445400 {1} {2}" +quit
https://survivetheark.com/index.php?/forums/forum/5-changelog-patch-notes/
@@ -506,7 +506,7 @@
http://arkservermanager.freeforums.net/board/22/plugins
-
+
.asmprofile
@@ -596,5 +596,32 @@
True
+
+ release
+
+
+ -beta {0}
+
+
+ -betapassword {0}
+
+
+ __
+
+
+ appmanifest_376030.acf
+
+
+ appmanifest_407530.acf
+
+
+ steamapps
+
+
+ False
+
+
+ False
+
\ No newline at end of file
diff --git a/ARK Server Manager/GameData/SurvivalEvolved.gamedata b/ARK Server Manager/GameData/SurvivalEvolved.gamedata
index 0cc11fe4..a9940196 100644
--- a/ARK Server Manager/GameData/SurvivalEvolved.gamedata
+++ b/ARK Server Manager/GameData/SurvivalEvolved.gamedata
@@ -12972,5 +12972,17 @@
{
"XPRequired": 2525000
}
+ ],
+ "Branches": [
+ {
+ "IsSotF": false,
+ "BranchName": "halloween",
+ "Description": "Halloween Event"
+ },
+ {
+ "IsSotF": false,
+ "BranchName": "holidayevent",
+ "Description": "Christmas Event"
+ }
]
}
\ No newline at end of file
diff --git a/ARK Server Manager/Globalization/en-US/en-US.xaml b/ARK Server Manager/Globalization/en-US/en-US.xaml
index f644e63d..d366eb21 100644
--- a/ARK Server Manager/Globalization/en-US/en-US.xaml
+++ b/ARK Server Manager/Globalization/en-US/en-US.xaml
@@ -294,6 +294,10 @@
If enabled, the map spawner overrides will be managed by ASM.
Enable Supply Crate Overrides
If enabled, the supply crate overrides will be managed by ASM.
+ Enable PGM Ark Settings
+ If enabled, the PGM settings will be managed by ASM.
+ Enable SotF Settings
+ If enabled, the SotF settings will be managed by ASM.
WARNING: While any of these options are disabled, ASM will not read or write the associated overrides settings. Re-enabling any of these options will cause ALL existing associated overrides to be removed from the config file.
Server Startup Options
Player Level Increase:
@@ -836,6 +840,12 @@
Tribe Log Destroyed Enemy Structures
If enabled, the enemy-structure destruction log (for the victim tribe) wil display the attacker tribe in the Tribe Logs, instead of a generic structure destruction message.
+ Branch Details
+ Branch Name:
+ The name of the branch to download (leave blank to use the release branch).
+ Branch Password:
+ The password that is used to access the branch download.
+
Command Line
Launcher Args:
Additional command-line args for the server launcher. Use this with caution! For more information search 'Microsoft Start Command' on the internet.
@@ -1400,8 +1410,10 @@
Only Allow Selected Engrams
If enabled, only the selected engrams will be available to learn in game.
Select all the engrams.
- Unselect all then engrams.
+ Unselect all the engrams.
Filter:
+ Filter Only Selected Engrams
+ If enabled, only the selected engram will be visible.
Selected
Name
Mod
diff --git a/ARK Server Manager/Globalization/ru-RU/ru-RU.xaml b/ARK Server Manager/Globalization/ru-RU/ru-RU.xaml
index ecc64c72..9e659d78 100644
--- a/ARK Server Manager/Globalization/ru-RU/ru-RU.xaml
+++ b/ARK Server Manager/Globalization/ru-RU/ru-RU.xaml
@@ -603,8 +603,8 @@
Запустить ARK сервер.
RCON
Открыть окно RCON.
- Players
- Open the Player List window.
+ Игроки
+ Открыть окно списка игроков.
Обновить / Проверить
Обновление до последней версии ARK сервера, который в настоящее время доступен для загрузки.
Установить
@@ -836,6 +836,12 @@
Лог Племени об уничтожении строений Врагом
Если включено, журнал уничтожения строений противником (для Племени жертвы) отобразит Племя злоумышленника в журналах Племени, а не общее сообщение об уничтожении строений.
+ Детали веток
+ Имя веток:
+ Имя загружаемой ветви (оставьте пустым для использования стандартной ветви выпуска).
+ Пароль ветки:
+ Пароль, используемый для доступа к загрузке ветви.
+
Командная строка
Launcher Args:
Дополнительные аргументы командной строки для серверной пусковой установки. Используйте это с осторожностью! Для получения дополнительной информации найдите «Microsoft Start Command» в Интернете.
diff --git a/ARK Server Manager/Lib/Enums/LevelProgression.cs b/ARK Server Manager/Lib/Enums/LevelProgression.cs
new file mode 100644
index 00000000..d065f8a6
--- /dev/null
+++ b/ARK Server Manager/Lib/Enums/LevelProgression.cs
@@ -0,0 +1,8 @@
+namespace ARK_Server_Manager.Lib
+{
+ public enum LevelProgression
+ {
+ Player,
+ Dino
+ };
+}
diff --git a/ARK Server Manager/Lib/Enums/ServerProfileCategory.cs b/ARK Server Manager/Lib/Enums/ServerProfileCategory.cs
new file mode 100644
index 00000000..59b90127
--- /dev/null
+++ b/ARK Server Manager/Lib/Enums/ServerProfileCategory.cs
@@ -0,0 +1,25 @@
+namespace ARK_Server_Manager.Lib
+{
+ public enum ServerProfileCategory
+ {
+ Unknown,
+ Administration,
+ AutomaticManagement,
+ Rules,
+ ChatAndNotifications,
+ HudAndVisuals,
+ Players,
+ Dinos,
+ Environment,
+ Structures,
+ Engrams,
+ ServerFiles,
+ CustomSettings,
+ CustomLevels,
+ MapSpawnerOverrides,
+ CraftingOverrides,
+ SupplyCrateOverrides,
+ PGM,
+ SOTF,
+ }
+}
diff --git a/ARK Server Manager/Lib/GameData.cs b/ARK Server Manager/Lib/GameData.cs
index 4d8f2637..01a5076a 100644
--- a/ARK Server Manager/Lib/GameData.cs
+++ b/ARK Server Manager/Lib/GameData.cs
@@ -129,6 +129,20 @@ public static void Initialize()
levelsPlayer = gameData.PlayerLevels.ConvertAll(item => new Level { EngramPoints = item.EngramPoints, XPRequired = item.XPRequired }).ToArray();
DefaultMaxExperiencePointsPlayer = levelsPlayer.Max(l => l.XPRequired) + 1;
}
+
+ // branches
+ gameData.Branches.AddRange(userGameData.Branches);
+
+ if (gameData.Branches.Count > 0)
+ {
+ var branches1 = branches.ToList();
+ branches1.AddRange(gameData.Branches.Where(item => !item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.BranchName, DisplayMember = item.Description }));
+ var branches2 = branchesSotF.ToList();
+ branches2.AddRange(gameData.Branches.Where(item => item.IsSotF).ToList().ConvertAll(item => new ComboBoxItem { ValueMember = item.BranchName, DisplayMember = item.Description }));
+
+ branches = branches1.ToArray();
+ branchesSotF = branches2.ToArray();
+ }
}
public static string FriendlyNameForClass(string className, bool returnNullIfNotFound = false) => string.IsNullOrWhiteSpace(className) ? (returnNullIfNotFound ? null : string.Empty) : GlobalizedApplication.Instance.GetResourceString(className) ?? (returnNullIfNotFound ? null : className);
@@ -144,7 +158,7 @@ public static void Initialize()
public static DinoTamable IsTameableForClass(string className) => gameData?.Creatures?.FirstOrDefault(c => c.ClassName.Equals(className))?.IsTameable ?? DinoTamable.True;
- public static string NameTagForClass(string className) => gameData?.Creatures?.FirstOrDefault(c => c.ClassName.Equals(className))?.NameTag ?? null;
+ public static string NameTagForClass(string className, bool returnEmptyIfNotFound = false) => gameData?.Creatures?.FirstOrDefault(c => c.ClassName.Equals(className))?.NameTag ?? (returnEmptyIfNotFound ? string.Empty : className);
public static string FriendlyCreatureNameForClass(string className, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(className) ? string.Empty : GlobalizedApplication.Instance.GetResourceString(className) ?? gameData?.Creatures?.FirstOrDefault(i => i.ClassName.Equals(className))?.Description ?? (returnEmptyIfNotFound ? string.Empty : className);
@@ -348,5 +362,25 @@ internal static bool[] GetStatMultiplierInclusions_PlayerPerLevel()
public static IEnumerable LevelsPlayer => levelsPlayer.Select(l => l.Duplicate());
#endregion
+
+ #region Branches
+ private static ComboBoxItem[] branches = new[]
+ {
+ new ComboBoxItem { ValueMember="", DisplayMember="" },
+ };
+
+ public static IEnumerable GetBranches() => branches.Select(d => d.Duplicate());
+
+ public static string FriendlyBranchName(string branchName, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(branchName) ? string.Empty : GlobalizedApplication.Instance.GetResourceString(branchName) ?? gameData?.Branches?.FirstOrDefault(i => i.BranchName.Equals(branchName) && !i.IsSotF)?.Description ?? (returnEmptyIfNotFound ? string.Empty : branchName);
+
+ private static ComboBoxItem[] branchesSotF = new[]
+ {
+ new ComboBoxItem { ValueMember="", DisplayMember="" },
+ };
+
+ public static IEnumerable GetBranchesSotF() => branchesSotF.Select(d => d.Duplicate());
+
+ public static string FriendlyBranchSotFName(string branchName, bool returnEmptyIfNotFound = false) => string.IsNullOrWhiteSpace(branchName) ? string.Empty : GlobalizedApplication.Instance.GetResourceString(branchName) ?? gameData?.Branches?.FirstOrDefault(i => i.BranchName.Equals(branchName) && i.IsSotF)?.Description ?? (returnEmptyIfNotFound ? string.Empty : branchName);
+ #endregion
}
}
diff --git a/ARK Server Manager/Lib/Model/Engram.cs b/ARK Server Manager/Lib/Model/Engram.cs
index 55321b7c..5afe2528 100644
--- a/ARK Server Manager/Lib/Model/Engram.cs
+++ b/ARK Server Manager/Lib/Model/Engram.cs
@@ -46,6 +46,7 @@ public override void FromIniValues(IEnumerable iniValues)
e.EngramPointsCost = item.EngramPointsCost;
e.EngramHidden = item.EngramHidden;
e.RemoveEngramPreReq = item.RemoveEngramPreReq;
+ e.SaveEngramOverride = item.SaveEngramOverride;
}
IsEnabled = (Count != 0);
@@ -55,12 +56,18 @@ public override void FromIniValues(IEnumerable iniValues)
public override IEnumerable ToIniValues()
{
- if (!OnlyAllowSelectedEngrams)
- return base.ToIniValues();
+ if (OnlyAllowSelectedEngrams)
+ {
+ if (string.IsNullOrWhiteSpace(IniCollectionKey))
+ return this.Where(d => d.SaveEngramOverride).Select(d => d.ToINIValue());
+
+ return this.Where(d => d.SaveEngramOverride).Select(d => $"{this.IniCollectionKey}={d.ToINIValue()}");
+ }
+
+ if (string.IsNullOrWhiteSpace(IniCollectionKey))
+ return this.Where(d => d.ShouldSave(OnlyAllowSelectedEngrams)).Select(d => d.ToINIValue());
- var values = new List();
- values.AddRange(this.Where(d => d.SaveEngramOverride).Select(d => $"{this.IniCollectionKey}={d.ToINIValue()}"));
- return values;
+ return this.Where(d => d.ShouldSave(OnlyAllowSelectedEngrams)).Select(d => $"{this.IniCollectionKey}={d.ToINIValue()}");
}
}
@@ -187,9 +194,9 @@ public override bool IsEquivalent(AggregateIniValue other)
return String.Equals(this.EngramClassName, ((EngramEntry)other).EngramClassName, StringComparison.OrdinalIgnoreCase);
}
- public override bool ShouldSave()
+ public bool ShouldSave(bool OnlyAllowSelectedEngrams)
{
- if (!KnownEngram || SaveEngramOverride)
+ if (!KnownEngram || OnlyAllowSelectedEngrams && SaveEngramOverride)
return true;
var engramEntry = GameData.GetEngramForClass(EngramClassName);
diff --git a/ARK Server Manager/Lib/Server.cs b/ARK Server Manager/Lib/Server.cs
index 987ee049..c867941f 100644
--- a/ARK Server Manager/Lib/Server.cs
+++ b/ARK Server Manager/Lib/Server.cs
@@ -78,10 +78,10 @@ public async Task StopAsync()
await this.Runtime.StopAsync();
}
- public async Task UpgradeAsync(CancellationToken cancellationToken, bool updateServer, bool validate, bool updateMods, ProgressDelegate progressCallback)
+ public async Task UpgradeAsync(CancellationToken cancellationToken, bool updateServer, ServerBranchSnapshot branch, bool validate, bool updateMods, ProgressDelegate progressCallback)
{
await this.Runtime.AttachToProfile(this.Profile);
- var success = await this.Runtime.UpgradeAsync(cancellationToken, updateServer, validate, updateMods, progressCallback);
+ var success = await this.Runtime.UpgradeAsync(cancellationToken, updateServer, branch, validate, updateMods, progressCallback);
this.Profile.LastInstalledVersion = this.Runtime.Version.ToString();
return success;
}
diff --git a/ARK Server Manager/Lib/ServerApp.cs b/ARK Server Manager/Lib/ServerApp.cs
index 24184223..803a22c0 100644
--- a/ARK Server Manager/Lib/ServerApp.cs
+++ b/ARK Server Manager/Lib/ServerApp.cs
@@ -88,6 +88,7 @@ public enum ServerProcessType
private const int DIRECTORIES_PER_LINE = 200;
private static readonly object LockObjectMessage = new object();
+ private static readonly object LockObjectBranchMessage = new object();
private static readonly object LockObjectProfileMessage = new object();
private static DateTime _startTime = DateTime.Now;
private static string _logPrefix = "";
@@ -130,11 +131,11 @@ private void BackupServer()
LogProfileMessage("------------------------");
LogProfileMessage("Started server backup...");
LogProfileMessage("------------------------");
- LogProfileMessage($"ASM version: {App.Version}");
+ LogProfileMessage($"Server Manager version: {App.Version}");
- emailMessage.AppendLine("ASM Backup Summary:");
+ emailMessage.AppendLine("Server Manager Backup Summary:");
emailMessage.AppendLine();
- emailMessage.AppendLine($"ASM version: {App.Version}");
+ emailMessage.AppendLine($"Server Manager version: {App.Version}");
// Find the server process.
Process process = GetServerProcess();
@@ -238,7 +239,7 @@ private void ShutdownServer(bool restartServer, bool updateServer, CancellationT
LogProfileMessage("Started server shutdown...");
LogProfileMessage("--------------------------");
}
- LogProfileMessage($"ASM version: {App.Version}");
+ LogProfileMessage($"Server Manager version: {App.Version}");
// stop the server
StopServer(cancellationToken);
@@ -501,7 +502,7 @@ private void StopServer(CancellationToken cancellationToken)
var delay = sent ? 60000 - Config.Default.SendMessageDelay : 60000;
Task.Delay(delay, cancellationToken).Wait(cancellationToken);
}
- catch {}
+ catch { }
}
// check if we need to perform a world save (not required for SotF servers)
@@ -756,7 +757,7 @@ private void UpgradeLocal(bool validate, CancellationToken cancellationToken)
};
var steamCmdInstallServerArgsFormat = _profile.SotFEnabled ? Config.Default.SteamCmdInstallServerArgsFormat_SotF : Config.Default.SteamCmdInstallServerArgsFormat;
- var steamCmdArgs = String.Format(steamCmdInstallServerArgsFormat, _profile.InstallDirectory, validate ? "validate" : string.Empty);
+ var steamCmdArgs = String.Format(steamCmdInstallServerArgsFormat, _profile.InstallDirectory, string.Empty, validate ? "validate" : string.Empty);
success = ServerUpdater.UpgradeServerAsync(steamCmdFile, steamCmdArgs, _profile.InstallDirectory, Config.Default.SteamCmdRedirectOutput ? serverOutputHandler : null, cancellationToken, SteamCMDProcessWindowStyle).Result;
if (success && downloadSuccessful)
@@ -1106,9 +1107,10 @@ private void UpdateFiles()
LogProfileMessage("Started server update...");
LogProfileMessage("------------------------");
LogProfileMessage($"Server Manager version: {App.Version}");
+ LogProfileMessage($"Server branch: {GetBranchName(_profile.BranchName)}");
// check if the server needs to be updated
- var serverCacheLastUpdated = GetServerLatestTime(GetServerCacheTimeFile());
+ var serverCacheLastUpdated = GetServerLatestTime(GetServerCacheTimeFile(_profile?.BranchName));
var serverLastUpdated = GetServerLatestTime(GetServerTimeFile());
var updateServer = serverCacheLastUpdated > serverLastUpdated;
@@ -1218,12 +1220,14 @@ private void UpdateFiles()
try
{
- if (Directory.Exists(Config.Default.AutoUpdate_CacheDir))
+ var cacheFolder = GetServerCacheFolder(_profile?.BranchName);
+
+ if (Directory.Exists(cacheFolder))
{
LogProfileMessage($"Smart cache copy: {Config.Default.AutoUpdate_UseSmartCopy}.");
// update the server files from the cache.
- DirectoryCopy(Config.Default.AutoUpdate_CacheDir, _profile.InstallDirectory, true, Config.Default.AutoUpdate_UseSmartCopy, null);
+ DirectoryCopy(cacheFolder, _profile.InstallDirectory, true, Config.Default.AutoUpdate_UseSmartCopy, null);
LogProfileMessage("Updated server from cache. See ARK patch notes.");
LogProfileMessage(Config.Default.ArkSE_PatchNotesUrl);
@@ -1429,7 +1433,7 @@ private void UpdateModCache()
LogMessage("----------------------------");
LogMessage("Starting mod cache update...");
LogMessage("----------------------------");
- LogMessage($"ASM version: {App.Version}");
+ LogMessage($"Server Manager version: {App.Version}");
LogMessage($"Downloading mod information for {modIdList.Count} mods from steam.");
@@ -1615,12 +1619,13 @@ private void UpdateModCache()
ExitCode = EXITCODE_NORMALEXIT;
}
- private void UpdateServerCache()
+ private void UpdateServerCache(string branchName, string branchPassword)
{
- LogMessage("-------------------------------");
- LogMessage("Starting server cache update...");
- LogMessage("-------------------------------");
- LogMessage($"ASM version: {App.Version}");
+ LogBranchMessage(branchName, "-------------------------------");
+ LogBranchMessage(branchName, "Starting server cache update...");
+ LogBranchMessage(branchName, "-------------------------------");
+ LogBranchMessage(branchName, $"Server Manager version: {App.Version}");
+ LogBranchMessage(branchName, $"Server branch: {GetBranchName(branchName)}");
var gotNewVersion = false;
var downloadSuccessful = false;
@@ -1628,7 +1633,7 @@ private void UpdateServerCache()
var steamCmdFile = SteamCmdUpdater.GetSteamCmdFile();
if (string.IsNullOrWhiteSpace(steamCmdFile) || !File.Exists(steamCmdFile))
{
- LogError($"SteamCMD could not be found. Expected location is {steamCmdFile}");
+ LogBranchError(branchName, $"SteamCMD could not be found. Expected location is {steamCmdFile}");
ExitCode = EXITCODE_STEAMCMDNOTFOUND;
return;
}
@@ -1636,7 +1641,7 @@ private void UpdateServerCache()
DataReceivedEventHandler serverOutputHandler = (s, e) =>
{
var dataValue = e.Data ?? string.Empty;
- LogMessage(dataValue);
+ LogBranchMessage(branchName, dataValue);
if (!gotNewVersion && dataValue.Contains("downloading,"))
{
gotNewVersion = true;
@@ -1647,7 +1652,18 @@ private void UpdateServerCache()
}
};
- LogMessage("Server update started.");
+ // create the branch arguments
+ var steamCmdInstallServerBetaArgs = new StringBuilder();
+ if (!string.IsNullOrWhiteSpace(branchName))
+ {
+ steamCmdInstallServerBetaArgs.AppendFormat(Config.Default.SteamCmdInstallServerBetaNameArgsFormat, branchName);
+ if (!string.IsNullOrWhiteSpace(branchPassword))
+ steamCmdInstallServerBetaArgs.AppendFormat(Config.Default.SteamCmdInstallServerBetaPasswordArgsFormat, branchPassword);
+ }
+
+ var cacheFolder = GetServerCacheFolder(branchName);
+
+ LogBranchMessage(branchName, "Server update started.");
var attempt = 0;
while (true)
@@ -1657,11 +1673,11 @@ private void UpdateServerCache()
gotNewVersion = false;
// update the server cache
- var validateString = String.Empty;
- if (Config.Default.AutoUpdate_ValidateServerFiles)
- validateString = "validate";
- var steamCmdArgs = String.Format(Config.Default.SteamCmdInstallServerArgsFormat, Config.Default.AutoUpdate_CacheDir, validateString);
- var success = ServerUpdater.UpgradeServerAsync(steamCmdFile, steamCmdArgs, Config.Default.AutoUpdate_CacheDir, Config.Default.SteamCmdRedirectOutput ? serverOutputHandler : null, CancellationToken.None, SteamCMDProcessWindowStyle).Result;
+ var validate = Config.Default.AutoUpdate_ValidateServerFiles;
+ var steamCmdInstallServerArgsFormat = Config.Default.SteamCmdInstallServerArgsFormat;
+ var steamCmdArgs = String.Format(steamCmdInstallServerArgsFormat, cacheFolder, steamCmdInstallServerBetaArgs, validate ? "validate" : string.Empty);
+
+ var success = ServerUpdater.UpgradeServerAsync(steamCmdFile, steamCmdArgs, cacheFolder, Config.Default.SteamCmdRedirectOutput ? serverOutputHandler : null, CancellationToken.None, SteamCMDProcessWindowStyle).Result;
if (success && downloadSuccessful)
// download was successful, exit loop and continue.
break;
@@ -1670,14 +1686,14 @@ private void UpdateServerCache()
var logError = "Server cache update failed";
if (Config.Default.AutoUpdate_RetryOnFail)
logError += $" - attempt {attempt}.";
- LogError(logError);
+ LogBranchError(branchName, logError);
// check if we have reached the max failed attempt limit.
if (!Config.Default.AutoUpdate_RetryOnFail || attempt >= STEAM_MAXRETRIES)
{
// failed max limit reached
if (Config.Default.SteamCmdRedirectOutput)
- LogMessage($"If the server cache update keeps failing try disabling the '{_globalizer.GetResourceString("GlobalSettings_SteamCmdRedirectOutputLabel")}' option in the ASM settings window.");
+ LogBranchMessage(branchName, $"If the server cache update keeps failing try disabling the '{_globalizer.GetResourceString("GlobalSettings_SteamCmdRedirectOutputLabel")}' option in the ASM settings window.");
ExitCode = EXITCODE_CACHESERVERUPDATEFAILED;
return;
@@ -1686,29 +1702,29 @@ private void UpdateServerCache()
Task.Delay(5000).Wait();
}
- if (Directory.Exists(Config.Default.AutoUpdate_CacheDir))
+ if (Directory.Exists(cacheFolder))
{
if (!Config.Default.SteamCmdRedirectOutput)
// check if any of the server files have changed.
- gotNewVersion = HasNewServerVersion(Config.Default.AutoUpdate_CacheDir, _startTime);
+ gotNewVersion = HasNewServerVersion(cacheFolder, _startTime);
if (gotNewVersion)
{
- LogMessage("***** New version downloaded. *****");
+ LogBranchMessage(branchName, "***** New version downloaded. *****");
- var latestCacheTimeFile = GetServerCacheTimeFile();
+ var latestCacheTimeFile = GetServerCacheTimeFile(branchName);
File.WriteAllText(latestCacheTimeFile, _startTime.ToString("o", CultureInfo.CurrentCulture));
}
else
- LogMessage("No new version.");
+ LogBranchMessage(branchName, "No new version.");
}
else
- LogMessage($"Server cache does not exist.");
+ LogBranchMessage(branchName, $"Server cache does not exist.");
- LogMessage("-----------------------------");
- LogMessage("Finished server cache update.");
- LogMessage("-----------------------------");
- LogMessage("");
+ LogBranchMessage(branchName, "-----------------------------");
+ LogBranchMessage(branchName, "Finished server cache update.");
+ LogBranchMessage(branchName, "-----------------------------");
+ LogBranchMessage(branchName, "");
ExitCode = EXITCODE_NORMALEXIT;
}
@@ -1785,7 +1801,6 @@ public void CreateProfileBackupArchiveFile(ServerProfileSnapshot profile = null)
var backupFile = IOUtils.NormalizePath(Path.Combine(backupFolder, backupFileName));
var profileFile = IOUtils.NormalizePath(Path.Combine(Config.Default.ConfigDirectory, $"{_profile.ProfileName}{Config.Default.ProfileExtension}"));
- var profileFileNew = IOUtils.NormalizePath(Path.Combine(Config.Default.ConfigDirectory, $"{_profile.ProfileName}{Config.Default.ProfileExtensionNew}"));
var gameIniFile = IOUtils.NormalizePath(Path.Combine(_profile.InstallDirectory, Config.Default.ServerConfigRelativePath, Config.Default.ServerGameConfigFile));
var gusIniFile = IOUtils.NormalizePath(Path.Combine(_profile.InstallDirectory, Config.Default.ServerConfigRelativePath, Config.Default.ServerGameUserSettingsConfigFile));
var launcherFile = GetLauncherFile();
@@ -1800,9 +1815,6 @@ public void CreateProfileBackupArchiveFile(ServerProfileSnapshot profile = null)
if (File.Exists(profileFile))
files.Add(profileFile);
- if (File.Exists(profileFileNew))
- files.Add(profileFileNew);
-
if (File.Exists(gameIniFile))
files.Add(gameIniFile);
@@ -2125,6 +2137,10 @@ public static void DirectoryCopy(string sourceFolder, string destinationFolder,
}
}
+ public static string GetBranchName(string branchName) => string.IsNullOrWhiteSpace(branchName) ? Config.Default.DefaultServerBranchName : branchName;
+
+ public static string GetBranchLogFile(string branchName) => IOUtils.NormalizePath(Path.Combine(SteamCmdUpdater.GetLogFolder(), _logPrefix, $"{_startTime.ToString("yyyyMMdd_HHmmss")}{(string.IsNullOrWhiteSpace(branchName) ? string.Empty : $"_{branchName}")}.log"));
+
private string GetLauncherFile() => IOUtils.NormalizePath(Path.Combine(_profile.InstallDirectory, Config.Default.ServerConfigRelativePath, Config.Default.LauncherFile));
private static string GetLogFile() => IOUtils.NormalizePath(Path.Combine(SteamCmdUpdater.GetLogFolder(), _logPrefix, $"{_startTime.ToString("yyyyMMdd_HHmmss")}.log"));
@@ -2207,7 +2223,9 @@ public static string GetServerBackupFolder(string profileName)
return IOUtils.NormalizePath(Path.Combine(Config.Default.BackupPath, Config.Default.ServersInstallDir, profileName));
}
- private static string GetServerCacheTimeFile() => IOUtils.NormalizePath(Path.Combine(Config.Default.AutoUpdate_CacheDir, Config.Default.LastUpdatedTimeFile));
+ private static string GetServerCacheFolder(string branchName) => IOUtils.NormalizePath(Path.Combine(Config.Default.AutoUpdate_CacheDir, $"{Config.Default.ServerBranchFolderPrefix}{GetBranchName(branchName)}"));
+
+ private static string GetServerCacheTimeFile(string branchName) => IOUtils.NormalizePath(Path.Combine(GetServerCacheFolder(branchName), Config.Default.LastUpdatedTimeFile));
private string GetServerExecutableFile() => IOUtils.NormalizePath(Path.Combine(_profile.InstallDirectory, Config.Default.ServerBinaryRelativePath, Config.Default.ServerExe));
@@ -2294,7 +2312,7 @@ private static void LoadProfiles()
_profiles = new Dictionary();
- foreach (var profileFile in Directory.EnumerateFiles(Config.Default.ConfigDirectory, "*" + Config.Default.ProfileExtensionNew))
+ foreach (var profileFile in Directory.EnumerateFiles(Config.Default.ConfigDirectory, "*" + Config.Default.ProfileExtension))
{
try
{
@@ -2345,6 +2363,52 @@ private static void LogMessage(string message)
Debug.WriteLine(message);
}
+ private void LogBranchError(string branchName, string error, bool includeProgressCallback = true)
+ {
+ if (string.IsNullOrWhiteSpace(error))
+ return;
+
+ LogBranchMessage(branchName, $"***** ERROR: {error}", includeProgressCallback);
+ }
+
+ private void LogBranchMessage(string branchName, string message, bool includeProgressCallback = true)
+ {
+ message = message ?? string.Empty;
+
+ if (OutputLogs)
+ {
+ var logFile = GetBranchLogFile(branchName);
+ lock (LockObjectBranchMessage)
+ {
+ if (!Directory.Exists(Path.GetDirectoryName(logFile)))
+ Directory.CreateDirectory(Path.GetDirectoryName(logFile));
+
+ int retries = 0;
+ while (retries < 3)
+ {
+ try
+ {
+ File.AppendAllLines(logFile, new[] { $"{DateTime.Now.ToString("o", CultureInfo.CurrentCulture)}: {message}" }, Encoding.Unicode);
+ break;
+ }
+ catch (IOException)
+ {
+ retries++;
+ Task.Delay(WRITELOG_ERRORRETRYDELAY).Wait();
+ }
+ }
+ }
+ }
+
+ if (includeProgressCallback)
+ ProgressCallback?.Invoke(0, message);
+
+ if (_profile != null)
+ Debug.WriteLine($"[Branch {GetBranchName(branchName) ?? "unknown"}] {message}");
+ else
+ Debug.WriteLine(message);
+ }
+
private void LogProfileError(string error, bool includeProgressCallback = true)
{
if (string.IsNullOrWhiteSpace(error))
@@ -2386,7 +2450,7 @@ private void LogProfileMessage(string message, bool includeProgressCallback = tr
ProgressCallback?.Invoke(0, message);
if (_profile != null)
- Debug.WriteLine($"[{_profile?.ProfileName ?? "unknown"}] {message}");
+ Debug.WriteLine($"[Profile {_profile?.ProfileName ?? "unknown"}] {message}");
else
Debug.WriteLine(message);
}
@@ -2704,7 +2768,7 @@ public int PerformProfileShutdown(ServerProfileSnapshot profile, bool performRes
return ExitCode;
}
- public int PerformProfileUpdate(ServerProfileSnapshot profile)
+ public int PerformProfileUpdate(ServerBranchSnapshot branch, ServerProfileSnapshot profile)
{
_profile = profile;
@@ -2721,7 +2785,7 @@ public int PerformProfileUpdate(ServerProfileSnapshot profile)
try
{
- LogMessage($"[{_profile.ProfileName}] Started server update process.");
+ LogBranchMessage(branch.BranchName, $"[{_profile.ProfileName}] Started server update process.");
// try to establish a mutex for the profile.
mutex = new Mutex(true, GetMutexName(_profile.InstallDirectory), out createdNew);
@@ -2733,7 +2797,7 @@ public int PerformProfileUpdate(ServerProfileSnapshot profile)
{
UpdateFiles();
- LogMessage($"[{_profile.ProfileName}] Finished server update process.");
+ LogBranchMessage(branch.BranchName, $"[{_profile.ProfileName}] Finished server update process.");
if (ExitCode != EXITCODE_NORMALEXIT)
{
@@ -2745,7 +2809,7 @@ public int PerformProfileUpdate(ServerProfileSnapshot profile)
else
{
ExitCode = EXITCODE_PROCESSALREADYRUNNING;
- LogMessage($"[{_profile.ProfileName}] Cancelled server update process, could not lock server.");
+ LogBranchMessage(branch.BranchName, $"[{_profile.ProfileName}] Cancelled server update process, could not lock server.");
}
}
catch (Exception ex)
@@ -2781,6 +2845,116 @@ public int PerformProfileUpdate(ServerProfileSnapshot profile)
return ExitCode;
}
+ public int PerformServerBranchUpdate(ServerBranchSnapshot branch)
+ {
+ if (branch == null)
+ return EXITCODE_NORMALEXIT;
+
+ ExitCode = EXITCODE_NORMALEXIT;
+
+ Mutex mutex = null;
+ var createdNew = false;
+
+ try
+ {
+ LogBranchMessage(branch.BranchName, $"Started branch update process.");
+
+ var cacheFolder = GetServerCacheFolder(branch.BranchName);
+
+ // try to establish a mutex for the profile.
+ mutex = new Mutex(true, GetMutexName(cacheFolder), out createdNew);
+ if (!createdNew)
+ createdNew = mutex.WaitOne(new TimeSpan(0, MUTEX_TIMEOUT, 0));
+
+ // check if the mutex was established
+ if (createdNew)
+ {
+ // update the server cache for the branch
+ UpdateServerCache(branch.BranchName, branch.BranchPassword);
+
+ if (ExitCode != EXITCODE_NORMALEXIT)
+ {
+ if (Config.Default.EmailNotify_AutoUpdate)
+ SendEmail($"{GetBranchName(branch.BranchName)} branch update", Config.Default.Alert_UpdateProcessError, true);
+ ProcessAlert(AlertType.Error, Config.Default.Alert_UpdateProcessError);
+ }
+
+ if (ExitCode == EXITCODE_NORMALEXIT)
+ {
+ // get the profile associated with the branch
+ var profiles = _profiles.Keys.Where(p => p.EnableAutoUpdate && p.BranchName.Equals(branch.BranchName, StringComparison.OrdinalIgnoreCase)).ToArray();
+ var profileExitCodes = new ConcurrentDictionary();
+
+ if (Config.Default.AutoUpdate_ParallelUpdate)
+ {
+ Parallel.ForEach(profiles, profile =>
+ {
+ var app = new ServerApp();
+ app.SendAlerts = true;
+ app.SendEmails = true;
+ app.ServerProcess = ServerProcess;
+ app.SteamCMDProcessWindowStyle = ProcessWindowStyle.Hidden;
+ profileExitCodes.TryAdd(profile, app.PerformProfileUpdate(branch, profile));
+ });
+ }
+ else
+ {
+ foreach (var profile in _profiles.Keys.Where(p => p.EnableAutoUpdate))
+ {
+ var app = new ServerApp();
+ app.SendAlerts = true;
+ app.SendEmails = true;
+ app.ServerProcess = ServerProcess;
+ app.SteamCMDProcessWindowStyle = ProcessWindowStyle.Hidden;
+ profileExitCodes.TryAdd(profile, app.PerformProfileUpdate(branch, profile));
+ }
+ }
+
+ if (profileExitCodes.Any(c => !c.Value.Equals(EXITCODE_NORMALEXIT)))
+ ExitCode = EXITCODE_EXITWITHERRORS;
+ }
+
+ LogBranchMessage(branch.BranchName, $"Finished branch update process.");
+ }
+ else
+ {
+ ExitCode = EXITCODE_PROCESSALREADYRUNNING;
+ LogBranchMessage(branch.BranchName, "Cancelled branch update process, could not lock branch folder.");
+ }
+ }
+ catch (Exception ex)
+ {
+ LogBranchError(branch.BranchName, ex.Message);
+ LogBranchError(branch.BranchName, ex.GetType().ToString());
+ if (ex.InnerException != null)
+ {
+ LogBranchMessage(branch.BranchName, $"InnerException - {ex.InnerException.Message}");
+ LogBranchMessage(branch.BranchName, ex.InnerException.GetType().ToString());
+ }
+ LogBranchMessage(branch.BranchName, $"StackTrace\r\n{ex.StackTrace}");
+
+ if (Config.Default.EmailNotify_AutoUpdate)
+ SendEmail($"{GetBranchName(branch.BranchName)} branch update", Config.Default.Alert_UpdateProcessError, true);
+ ProcessAlert(AlertType.Error, Config.Default.Alert_UpdateProcessError);
+ ExitCode = EXITCODE_UNKNOWNTHREADERROR;
+ }
+ finally
+ {
+ if (mutex != null)
+ {
+ if (createdNew)
+ {
+ mutex.ReleaseMutex();
+ mutex.Dispose();
+ }
+ mutex = null;
+ }
+ }
+
+ LogBranchMessage(branch.BranchName, $"Exitcode = {ExitCode}");
+ return ExitCode;
+ }
+
public static int PerformAutoBackup()
{
_logPrefix = LOGPREFIX_AUTOBACKUP;
@@ -2935,44 +3109,38 @@ public static int PerformAutoUpdate()
// load all the profiles, do this at the very start in case the user changes one or more while the process is running.
LoadProfiles();
+ // update the mods - needs to be done before the server cache updates
ServerApp app = new ServerApp();
app.ServerProcess = ServerProcessType.AutoUpdate;
app.SteamCMDProcessWindowStyle = ProcessWindowStyle.Hidden;
- app.UpdateServerCache();
+ app.UpdateModCache();
exitCode = app.ExitCode;
if (exitCode == EXITCODE_NORMALEXIT)
{
- app.SteamCMDProcessWindowStyle = ProcessWindowStyle.Hidden;
- app.UpdateModCache();
- exitCode = app.ExitCode;
- }
-
- if (exitCode == EXITCODE_NORMALEXIT)
- {
- var exitCodes = new ConcurrentDictionary();
+ var branches = _profiles.Keys.Where(p => p.EnableAutoUpdate).Select(p => new ServerBranchSnapshot() { BranchName = p.BranchName, BranchPassword = p.BranchPassword}).Distinct(new ServerBranchSnapshotComparer()).ToArray();
+ var exitCodes = new ConcurrentDictionary();
+ // update the server cache for each branch
if (Config.Default.AutoUpdate_ParallelUpdate)
{
- Parallel.ForEach(_profiles.Keys.Where(p => p.EnableAutoUpdate), profile => {
+ Parallel.ForEach(branches, branch => {
app = new ServerApp();
- app.SendAlerts = true;
- app.SendEmails = true;
app.ServerProcess = ServerProcessType.AutoUpdate;
app.SteamCMDProcessWindowStyle = ProcessWindowStyle.Hidden;
- exitCodes.TryAdd(profile, app.PerformProfileUpdate(profile));
+ app.PerformServerBranchUpdate(branch);
+ exitCodes.TryAdd(branch, app.ExitCode);
});
}
else
{
- foreach (var profile in _profiles.Keys.Where(p => p.EnableAutoUpdate))
+ foreach (var branch in branches)
{
app = new ServerApp();
- app.SendAlerts = true;
- app.SendEmails = true;
app.ServerProcess = ServerProcessType.AutoUpdate;
app.SteamCMDProcessWindowStyle = ProcessWindowStyle.Hidden;
- exitCodes.TryAdd(profile, app.PerformProfileUpdate(profile));
+ app.PerformServerBranchUpdate(branch);
+ exitCodes.TryAdd(branch, app.ExitCode);
}
}
diff --git a/ARK Server Manager/Lib/ServerBranchSnapshot.cs b/ARK Server Manager/Lib/ServerBranchSnapshot.cs
new file mode 100644
index 00000000..e07f1a76
--- /dev/null
+++ b/ARK Server Manager/Lib/ServerBranchSnapshot.cs
@@ -0,0 +1,36 @@
+using System;
+using System.Collections.Generic;
+
+namespace ARK_Server_Manager.Lib
+{
+ public class ServerBranchSnapshot
+ {
+ public string BranchName = string.Empty;
+ public string BranchPassword = string.Empty;
+ }
+
+ public class ServerBranchSnapshotComparer : IEqualityComparer
+ {
+ public bool Equals(ServerBranchSnapshot x, ServerBranchSnapshot y)
+ {
+ //Check whether the compared objects reference the same data.
+ if (Object.ReferenceEquals(x, y)) return true;
+
+ //Check whether any of the compared objects is null.
+ if (x is null || y is null)
+ return false;
+
+ //Check whether the snapshot' properties are equal.
+ return x.BranchName == y.BranchName;
+ }
+
+ public int GetHashCode(ServerBranchSnapshot snapshot)
+ {
+ //Check whether the object is null
+ if (snapshot is null) return 0;
+
+ //Get hash code for the Name field if it is not null.
+ return snapshot.BranchName == null ? 0 : snapshot.BranchName.GetHashCode();
+ }
+ }
+}
diff --git a/ARK Server Manager/Lib/ServerManager.cs b/ARK Server Manager/Lib/ServerManager.cs
index 779873f0..08939a6a 100644
--- a/ARK Server Manager/Lib/ServerManager.cs
+++ b/ARK Server Manager/Lib/ServerManager.cs
@@ -70,14 +70,14 @@ public void Remove(Server server, bool deleteProfile)
{
try
{
+ var profileFileOld = server.Profile.GetProfileFileOld();
+ if (File.Exists(profileFileOld))
+ File.Delete(profileFileOld);
+
var profileFile = server.Profile.GetProfileFile();
if (File.Exists(profileFile))
File.Delete(profileFile);
- var profileFileNew = server.Profile.GetProfileFileNew();
- if (File.Exists(profileFileNew))
- File.Delete(profileFileNew);
-
var profileFolder = server.Profile.GetProfileIniDir();
if (Directory.Exists(profileFolder))
Directory.Delete(profileFolder, recursive: true);
diff --git a/ARK Server Manager/Lib/ServerProfile.cs b/ARK Server Manager/Lib/ServerProfile.cs
index a1d3ae18..c4e03831 100644
--- a/ARK Server Manager/Lib/ServerProfile.cs
+++ b/ARK Server Manager/Lib/ServerProfile.cs
@@ -1,6 +1,7 @@
using ARK_Server_Manager.Lib.Model;
using ARK_Server_Manager.Lib.Utils;
using ARK_Server_Manager.Lib.ViewModel;
+using NeXt.Vdf;
using System;
using System.Collections.Generic;
using System.IO;
@@ -9,46 +10,15 @@
using System.Runtime.Serialization;
using System.Text;
using System.Windows;
-using System.Xml.Serialization;
using TinyCsvParser;
namespace ARK_Server_Manager.Lib
{
- [XmlRoot("ArkServerProfile")]
[DataContract]
public class ServerProfile : DependencyObject
{
- public enum ServerProfileSection
- {
- AdministrationSection,
- AutomaticManagement,
- RulesSection,
- ChatAndNotificationsSection,
- HudAndVisualsSection,
- PlayerSettingsSection,
- DinoSettingsSection,
- EnvironmentSection,
- StructuresSection,
- EngramsSection,
- ServerFiles,
- CustomSettingsSection,
- CustomLevelsSection,
- MapSpawnerOverridesSection,
- CraftingOverridesSection,
- SupplyCrateOverridesSection,
- PGMSection,
- SOTFSection,
- }
-
- public enum LevelProgression
- {
- Player,
- Dino
- };
-
private const char CSV_DELIMITER = ';';
- [XmlIgnore]
private string _lastSaveLocation = String.Empty;
private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
@@ -103,7 +73,6 @@ private ServerProfile()
#region Properties
public static readonly DependencyProperty IsDirtyProperty = DependencyProperty.Register(nameof(IsDirty), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
- [XmlIgnore]
public bool IsDirty
{
get { return (bool)GetValue(IsDirtyProperty); }
@@ -145,7 +114,7 @@ public string LastInstalledVersion
#region Administration
public static readonly DependencyProperty ServerNameProperty = DependencyProperty.Register(nameof(ServerName), typeof(string), typeof(ServerProfile), new PropertyMetadata(Config.Default.DefaultServerName));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.SessionSettings, "SessionName")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.SessionSettings, "SessionName", Category = ServerProfileCategory.Administration)]
public string ServerName
{
get { return (string)GetValue(ServerNameProperty); }
@@ -157,7 +126,6 @@ public string ServerName
}
public static readonly DependencyProperty ServerNameLengthProperty = DependencyProperty.Register(nameof(ServerNameLength), typeof(int), typeof(ServerProfile), new PropertyMetadata(0));
- [XmlIgnore]
public int ServerNameLength
{
get { return (int)GetValue(ServerNameLengthProperty); }
@@ -165,7 +133,6 @@ public int ServerNameLength
}
public static readonly DependencyProperty ServerNameLengthToLongProperty = DependencyProperty.Register(nameof(ServerNameLengthToLong), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
- [XmlIgnore]
public bool ServerNameLengthToLong
{
get { return (bool)GetValue(ServerNameLengthToLongProperty); }
@@ -174,7 +141,7 @@ public bool ServerNameLengthToLong
public static readonly DependencyProperty ServerPasswordProperty = DependencyProperty.Register(nameof(ServerPassword), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerPassword")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
public string ServerPassword
{
get { return (string)GetValue(ServerPasswordProperty); }
@@ -183,7 +150,7 @@ public string ServerPassword
public static readonly DependencyProperty AdminPasswordProperty = DependencyProperty.Register(nameof(AdminPassword), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerAdminPassword")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerAdminPassword", Category = ServerProfileCategory.Administration)]
public string AdminPassword
{
get { return (string)GetValue(AdminPasswordProperty); }
@@ -192,35 +159,35 @@ public string AdminPassword
public static readonly DependencyProperty SpectatorPasswordProperty = DependencyProperty.Register(nameof(SpectatorPassword), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
public string SpectatorPassword
{
get { return (string)GetValue(SpectatorPasswordProperty); }
set { SetValue(SpectatorPasswordProperty, value); }
}
- public static readonly DependencyProperty ServerConnectionPortProperty = DependencyProperty.Register(nameof(ServerConnectionPort), typeof(int), typeof(ServerProfile), new PropertyMetadata(7777));
+ public static readonly DependencyProperty ServerPortProperty = DependencyProperty.Register(nameof(ServerPort), typeof(int), typeof(ServerProfile), new PropertyMetadata(7777));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.SessionSettings, "Port")]
- public int ServerConnectionPort
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.SessionSettings, "Port", Category = ServerProfileCategory.Administration)]
+ public int ServerPort
{
- get { return (int)GetValue(ServerConnectionPortProperty); }
- set { SetValue(ServerConnectionPortProperty, value); }
+ get { return (int)GetValue(ServerPortProperty); }
+ set { SetValue(ServerPortProperty, value); }
}
- public static readonly DependencyProperty ServerPortProperty = DependencyProperty.Register(nameof(ServerPort), typeof(int), typeof(ServerProfile), new PropertyMetadata(27015));
+ public static readonly DependencyProperty QueryPortProperty = DependencyProperty.Register(nameof(QueryPort), typeof(int), typeof(ServerProfile), new PropertyMetadata(27015));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.SessionSettings, "QueryPort")]
- public int ServerPort
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.SessionSettings, Category = ServerProfileCategory.Administration)]
+ public int QueryPort
{
- get { return (int)GetValue(ServerPortProperty); }
- set { SetValue(ServerPortProperty, value); }
+ get { return (int)GetValue(QueryPortProperty); }
+ set { SetValue(QueryPortProperty, value); }
}
public static readonly DependencyProperty ServerIPProperty = DependencyProperty.Register(nameof(ServerIP), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.SessionSettings, "MultiHome")]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.MultiHome, "MultiHome", WriteBoolValueIfNonEmpty = true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.SessionSettings, "MultiHome", Category = ServerProfileCategory.Administration)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.MultiHome, "MultiHome", Category = ServerProfileCategory.Administration, WriteBoolValueIfNonEmpty = true)]
public string ServerIP
{
get { return (string)GetValue(ServerIPProperty); }
@@ -261,7 +228,7 @@ public bool EnableBanListURL
public static readonly DependencyProperty BanListURLProperty = DependencyProperty.Register(nameof(BanListURL), typeof(string), typeof(ServerProfile), new PropertyMetadata("http://arkdedicated.com/banlist.txt"));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableBanListURL), QuotedString = QuotedStringType.True)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration, ConditionedOn = nameof(EnableBanListURL), QuotedString = QuotedStringType.True)]
public string BanListURL
{
get { return (string)GetValue(BanListURLProperty); }
@@ -270,7 +237,7 @@ public string BanListURL
public static readonly DependencyProperty MaxPlayersProperty = DependencyProperty.Register(nameof(MaxPlayers), typeof(int), typeof(ServerProfile), new PropertyMetadata(70));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.GameSession, "MaxPlayers")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.GameSession, Category = ServerProfileCategory.Administration)]
public int MaxPlayers
{
get { return (int)GetValue(MaxPlayersProperty); }
@@ -287,7 +254,7 @@ public bool EnableKickIdlePlayers
public static readonly DependencyProperty KickIdlePlayersPeriodProperty = DependencyProperty.Register(nameof(KickIdlePlayersPeriod), typeof(int), typeof(ServerProfile), new PropertyMetadata(3600));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableKickIdlePlayers))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration, ConditionedOn = nameof(EnableKickIdlePlayers))]
public int KickIdlePlayersPeriod
{
get { return (int)GetValue(KickIdlePlayersPeriodProperty); }
@@ -296,7 +263,7 @@ public int KickIdlePlayersPeriod
public static readonly DependencyProperty RCONEnabledProperty = DependencyProperty.Register(nameof(RCONEnabled), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
public bool RCONEnabled
{
get { return (bool)GetValue(RCONEnabledProperty); }
@@ -305,7 +272,7 @@ public bool RCONEnabled
public static readonly DependencyProperty RCONPortProperty = DependencyProperty.Register(nameof(RCONPort), typeof(int), typeof(ServerProfile), new PropertyMetadata(32330));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
public int RCONPort
{
get { return (int)GetValue(RCONPortProperty); }
@@ -314,7 +281,7 @@ public int RCONPort
public static readonly DependencyProperty RCONServerGameLogBufferProperty = DependencyProperty.Register(nameof(RCONServerGameLogBuffer), typeof(int), typeof(ServerProfile), new PropertyMetadata(600));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
public int RCONServerGameLogBuffer
{
get { return (int)GetValue(RCONServerGameLogBufferProperty); }
@@ -323,7 +290,7 @@ public int RCONServerGameLogBuffer
public static readonly DependencyProperty AdminLoggingProperty = DependencyProperty.Register(nameof(AdminLogging), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
public bool AdminLogging
{
get { return (bool)GetValue(AdminLoggingProperty); }
@@ -348,7 +315,7 @@ public string TotalConversionModId
public static readonly DependencyProperty ServerModIdsProperty = DependencyProperty.Register(nameof(ServerModIds), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Key = "ActiveMods")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ActiveMods", Category = ServerProfileCategory.Administration)]
public string ServerModIds
{
get { return (string)GetValue(ServerModIdsProperty); }
@@ -364,8 +331,7 @@ public bool EnableExtinctionEvent
}
public static readonly DependencyProperty ExtinctionEventTimeIntervalProperty = DependencyProperty.Register(nameof(ExtinctionEventTimeInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(2592000));
- [XmlIgnore]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableExtinctionEvent))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration, ConditionedOn = nameof(EnableExtinctionEvent))]
public int ExtinctionEventTimeInterval
{
get { return (int)GetValue(ExtinctionEventTimeIntervalProperty); }
@@ -373,8 +339,7 @@ public int ExtinctionEventTimeInterval
}
public static readonly DependencyProperty ExtinctionEventUTCProperty = DependencyProperty.Register(nameof(ExtinctionEventUTC), typeof(int), typeof(ServerProfile), new PropertyMetadata(0));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "NextExtinctionEventUTC", ClearWhenOff = nameof(EnableExtinctionEvent))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "NextExtinctionEventUTC", Category = ServerProfileCategory.Administration, ClearWhenOff = nameof(EnableExtinctionEvent))]
public int ExtinctionEventUTC
{
get { return (int)GetValue(ExtinctionEventUTCProperty); }
@@ -383,7 +348,7 @@ public int ExtinctionEventUTC
public static readonly DependencyProperty AutoSavePeriodMinutesProperty = DependencyProperty.Register(nameof(AutoSavePeriodMinutes), typeof(float), typeof(ServerProfile), new PropertyMetadata(15.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
public float AutoSavePeriodMinutes
{
get { return (float)GetValue(AutoSavePeriodMinutesProperty); }
@@ -392,7 +357,7 @@ public float AutoSavePeriodMinutes
public static readonly DependencyProperty MOTDProperty = DependencyProperty.Register(nameof(MOTD), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.MessageOfTheDay, "Message", ClearSection = true, Multiline = true, QuotedString = QuotedStringType.Remove)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.MessageOfTheDay, "Message", Category = ServerProfileCategory.Administration, ClearSection = true, Multiline = true, QuotedString = QuotedStringType.Remove)]
public string MOTD
{
get { return (string)GetValue(MOTDProperty); }
@@ -404,7 +369,6 @@ public string MOTD
}
public static readonly DependencyProperty MOTDLengthProperty = DependencyProperty.Register(nameof(MOTDLength), typeof(int), typeof(ServerProfile), new PropertyMetadata(0));
- [XmlIgnore]
public int MOTDLength
{
get { return (int)GetValue(MOTDLengthProperty); }
@@ -412,7 +376,6 @@ public int MOTDLength
}
public static readonly DependencyProperty MOTDLengthToLongProperty = DependencyProperty.Register(nameof(MOTDLengthToLong), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
- [XmlIgnore]
public bool MOTDLengthToLong
{
get { return (bool)GetValue(MOTDLengthToLongProperty); }
@@ -421,7 +384,7 @@ public bool MOTDLengthToLong
public static readonly DependencyProperty MOTDDurationProperty = DependencyProperty.Register(nameof(MOTDDuration), typeof(int), typeof(ServerProfile), new PropertyMetadata(20));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.MessageOfTheDay, "Duration")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.MessageOfTheDay, "Duration", Category = ServerProfileCategory.Administration)]
public int MOTDDuration
{
get { return (int)GetValue(MOTDDurationProperty); }
@@ -486,7 +449,7 @@ public bool EnableServerAutoForceRespawnWildDinosInterval
public static readonly DependencyProperty ServerAutoForceRespawnWildDinosIntervalProperty = DependencyProperty.Register(nameof(ServerAutoForceRespawnWildDinosInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(86400));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableServerAutoForceRespawnWildDinosInterval))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration, ConditionedOn = nameof(EnableServerAutoForceRespawnWildDinosInterval))]
public int ServerAutoForceRespawnWildDinosInterval
{
get { return (int)GetValue(ServerAutoForceRespawnWildDinosIntervalProperty); }
@@ -527,7 +490,7 @@ public bool NotifyAdminCommandsInChat
public static readonly DependencyProperty MaxTribeLogsProperty = DependencyProperty.Register(nameof(MaxTribeLogs), typeof(int), typeof(ServerProfile), new PropertyMetadata(100));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Administration)]
public int MaxTribeLogs
{
get { return (int)GetValue(MaxTribeLogsProperty); }
@@ -536,7 +499,7 @@ public int MaxTribeLogs
public static readonly DependencyProperty TribeLogDestroyedEnemyStructuresProperty = DependencyProperty.Register(nameof(TribeLogDestroyedEnemyStructures), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
public bool TribeLogDestroyedEnemyStructures
{
get { return (bool)GetValue(TribeLogDestroyedEnemyStructuresProperty); }
@@ -655,6 +618,31 @@ public bool UseNoHangDetection
set { SetValue(UseNoHangDetectionProperty, value); }
}
+ public static readonly DependencyProperty AllowHideDamageSourceFromLogsProperty = DependencyProperty.Register(nameof(AllowHideDamageSourceFromLogs), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
+ [DataMember]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Administration)]
+ public bool AllowHideDamageSourceFromLogs
+ {
+ get { return (bool)GetValue(AllowHideDamageSourceFromLogsProperty); }
+ set { SetValue(AllowHideDamageSourceFromLogsProperty, value); }
+ }
+
+ public static readonly DependencyProperty ServerAllowAnselProperty = DependencyProperty.Register(nameof(ServerAllowAnsel), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
+ [DataMember]
+ public bool ServerAllowAnsel
+ {
+ get { return (bool)GetValue(ServerAllowAnselProperty); }
+ set { SetValue(ServerAllowAnselProperty, value); }
+ }
+
+ public static readonly DependencyProperty NoDinosProperty = DependencyProperty.Register(nameof(NoDinos), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
+ [DataMember]
+ public bool NoDinos
+ {
+ get { return (bool)GetValue(NoDinosProperty); }
+ set { SetValue(NoDinosProperty, value); }
+ }
+
public static readonly DependencyProperty CrossArkClusterIdProperty = DependencyProperty.Register(nameof(CrossArkClusterId), typeof(string), typeof(ServerProfile), new PropertyMetadata(string.Empty));
[DataMember]
public string CrossArkClusterId
@@ -671,6 +659,22 @@ public bool ClusterDirOverride
set { SetValue(ClusterDirOverrideProperty, value); }
}
+ public static readonly DependencyProperty BranchNameProperty = DependencyProperty.Register(nameof(BranchName), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
+ [DataMember]
+ public string BranchName
+ {
+ get { return (string)GetValue(BranchNameProperty); }
+ set { SetValue(BranchNameProperty, value); }
+ }
+
+ public static readonly DependencyProperty BranchPasswordProperty = DependencyProperty.Register(nameof(BranchPassword), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
+ [DataMember]
+ public string BranchPassword
+ {
+ get { return (string)GetValue(BranchPasswordProperty); }
+ set { SetValue(BranchPasswordProperty, value); }
+ }
+
public static readonly DependencyProperty AdditionalArgsProperty = DependencyProperty.Register(nameof(AdditionalArgs), typeof(string), typeof(ServerProfile), new PropertyMetadata(String.Empty));
[DataMember]
public string AdditionalArgs
@@ -694,31 +698,6 @@ public string LauncherArgs
get { return (string)GetValue(LauncherArgsProperty); }
set { SetValue(LauncherArgsProperty, value); }
}
-
- public static readonly DependencyProperty AllowHideDamageSourceFromLogsProperty = DependencyProperty.Register(nameof(AllowHideDamageSourceFromLogs), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
- [DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
- public bool AllowHideDamageSourceFromLogs
- {
- get { return (bool)GetValue(AllowHideDamageSourceFromLogsProperty); }
- set { SetValue(AllowHideDamageSourceFromLogsProperty, value); }
- }
-
- public static readonly DependencyProperty ServerAllowAnselProperty = DependencyProperty.Register(nameof(ServerAllowAnsel), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
- [DataMember]
- public bool ServerAllowAnsel
- {
- get { return (bool)GetValue(ServerAllowAnselProperty); }
- set { SetValue(ServerAllowAnselProperty, value); }
- }
-
- public static readonly DependencyProperty NoDinosProperty = DependencyProperty.Register(nameof(NoDinos), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
- [DataMember]
- public bool NoDinos
- {
- get { return (bool)GetValue(NoDinosProperty); }
- set { SetValue(NoDinosProperty, value); }
- }
#endregion
#region Automatic Management
@@ -822,7 +801,7 @@ public bool AutoRestartIfShutdown
#region Rules
public static readonly DependencyProperty EnableHardcoreProperty = DependencyProperty.Register(nameof(EnableHardcore), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerHardcore")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerHardcore", Category = ServerProfileCategory.Rules)]
public bool EnableHardcore
{
get { return (bool)GetValue(EnableHardcoreProperty); }
@@ -831,7 +810,7 @@ public bool EnableHardcore
public static readonly DependencyProperty EnablePVPProperty = DependencyProperty.Register(nameof(EnablePVP), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerPVE", InvertBoolean = true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerPVE", Category = ServerProfileCategory.Rules, InvertBoolean = true)]
public bool EnablePVP
{
get { return (bool)GetValue(EnablePVPProperty); }
@@ -840,7 +819,7 @@ public bool EnablePVP
public static readonly DependencyProperty AllowCaveBuildingPvEProperty = DependencyProperty.Register(nameof(AllowCaveBuildingPvE), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public bool AllowCaveBuildingPvE
{
get { return (bool)GetValue(AllowCaveBuildingPvEProperty); }
@@ -849,7 +828,7 @@ public bool AllowCaveBuildingPvE
public static readonly DependencyProperty DisableFriendlyFirePvPProperty = DependencyProperty.Register(nameof(DisableFriendlyFirePvP), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableFriendlyFire")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableFriendlyFire", Category = ServerProfileCategory.Rules)]
public bool DisableFriendlyFirePvP
{
get { return (bool)GetValue(DisableFriendlyFirePvPProperty); }
@@ -858,7 +837,7 @@ public bool DisableFriendlyFirePvP
public static readonly DependencyProperty DisableFriendlyFirePvEProperty = DependencyProperty.Register(nameof(DisableFriendlyFirePvE), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bPvEDisableFriendlyFire")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bPvEDisableFriendlyFire", Category = ServerProfileCategory.Rules)]
public bool DisableFriendlyFirePvE
{
get { return (bool)GetValue(DisableFriendlyFirePvEProperty); }
@@ -867,7 +846,7 @@ public bool DisableFriendlyFirePvE
public static readonly DependencyProperty DisableLootCratesProperty = DependencyProperty.Register(nameof(DisableLootCrates), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableLootCrates")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableLootCrates", Category = ServerProfileCategory.Rules)]
public bool DisableLootCrates
{
get { return (bool)GetValue(DisableLootCratesProperty); }
@@ -884,7 +863,7 @@ public bool AllowCrateSpawnsOnTopOfStructures
public static readonly DependencyProperty EnableExtraStructurePreventionVolumesProperty = DependencyProperty.Register(nameof(EnableExtraStructurePreventionVolumes), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public bool EnableExtraStructurePreventionVolumes
{
get { return (bool)GetValue(EnableExtraStructurePreventionVolumesProperty); }
@@ -901,7 +880,7 @@ public bool EnableDifficultyOverride
public static readonly DependencyProperty OverrideOfficialDifficultyProperty = DependencyProperty.Register(nameof(OverrideOfficialDifficulty), typeof(float), typeof(ServerProfile), new PropertyMetadata(4.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableDifficultyOverride))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(EnableDifficultyOverride))]
public float OverrideOfficialDifficulty
{
get { return (float)GetValue(OverrideOfficialDifficultyProperty); }
@@ -910,7 +889,7 @@ public float OverrideOfficialDifficulty
public static readonly DependencyProperty DifficultyOffsetProperty = DependencyProperty.Register(nameof(DifficultyOffset), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableDifficultyOverride))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(EnableDifficultyOverride))]
public float DifficultyOffset
{
get { return (float)GetValue(DifficultyOffsetProperty); }
@@ -919,7 +898,7 @@ public float DifficultyOffset
public static readonly DependencyProperty MaxNumberOfPlayersInTribeProperty = DependencyProperty.Register(nameof(MaxNumberOfPlayersInTribe), typeof(int), typeof(ServerProfile), new PropertyMetadata(70));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules)]
public int MaxNumberOfPlayersInTribe
{
get { return (int)GetValue(MaxNumberOfPlayersInTribeProperty); }
@@ -928,7 +907,7 @@ public int MaxNumberOfPlayersInTribe
public static readonly DependencyProperty EnableTributeDownloadsProperty = DependencyProperty.Register(nameof(EnableTributeDownloads), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "NoTributeDownloads", InvertBoolean = true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "NoTributeDownloads", Category = ServerProfileCategory.Rules, InvertBoolean = true)]
public bool EnableTributeDownloads
{
get { return (bool)GetValue(EnableTributeDownloadsProperty); }
@@ -937,7 +916,7 @@ public bool EnableTributeDownloads
public static readonly DependencyProperty PreventDownloadSurvivorsProperty = DependencyProperty.Register(nameof(PreventDownloadSurvivors), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableTributeDownloads))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(EnableTributeDownloads))]
public bool PreventDownloadSurvivors
{
get { return (bool)GetValue(PreventDownloadSurvivorsProperty); }
@@ -946,7 +925,7 @@ public bool PreventDownloadSurvivors
public static readonly DependencyProperty PreventDownloadItemsProperty = DependencyProperty.Register(nameof(PreventDownloadItems), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableTributeDownloads))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(EnableTributeDownloads))]
public bool PreventDownloadItems
{
get { return (bool)GetValue(PreventDownloadItemsProperty); }
@@ -955,7 +934,7 @@ public bool PreventDownloadItems
public static readonly DependencyProperty PreventDownloadDinosProperty = DependencyProperty.Register(nameof(PreventDownloadDinos), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableTributeDownloads))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(EnableTributeDownloads))]
public bool PreventDownloadDinos
{
get { return (bool)GetValue(PreventDownloadDinosProperty); }
@@ -964,7 +943,7 @@ public bool PreventDownloadDinos
public static readonly DependencyProperty PreventUploadSurvivorsProperty = DependencyProperty.Register(nameof(PreventUploadSurvivors), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public bool PreventUploadSurvivors
{
get { return (bool)GetValue(PreventUploadSurvivorsProperty); }
@@ -973,7 +952,7 @@ public bool PreventUploadSurvivors
public static readonly DependencyProperty PreventUploadItemsProperty = DependencyProperty.Register(nameof(PreventUploadItems), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public bool PreventUploadItems
{
get { return (bool)GetValue(PreventUploadItemsProperty); }
@@ -982,7 +961,7 @@ public bool PreventUploadItems
public static readonly DependencyProperty PreventUploadDinosProperty = DependencyProperty.Register(nameof(PreventUploadDinos), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public bool PreventUploadDinos
{
get { return (bool)GetValue(PreventUploadDinosProperty); }
@@ -1029,28 +1008,24 @@ public bool OverrideMinimumDinoReuploadInterval
set { SetValue(OverrideMinimumDinoReuploadIntervalProperty, value); }
}
- [XmlIgnore]
public bool SaveTributeCharacterExpirationSeconds
{
get { return !string.IsNullOrWhiteSpace(this.CrossArkClusterId) && OverrideTributeCharacterExpirationSeconds; }
set { value = value; }
}
- [XmlIgnore]
public bool SaveTributeItemExpirationSeconds
{
get { return !string.IsNullOrWhiteSpace(this.CrossArkClusterId) && OverrideTributeItemExpirationSeconds; }
set { value = value; }
}
- [XmlIgnore]
public bool SaveTributeDinoExpirationSeconds
{
get { return !string.IsNullOrWhiteSpace(this.CrossArkClusterId) && OverrideTributeDinoExpirationSeconds; }
set { value = value; }
}
- [XmlIgnore]
public bool SaveMinimumDinoReuploadInterval
{
get { return !string.IsNullOrWhiteSpace(this.CrossArkClusterId) && OverrideMinimumDinoReuploadInterval; }
@@ -1059,7 +1034,7 @@ public bool SaveMinimumDinoReuploadInterval
public static readonly DependencyProperty TributeCharacterExpirationSecondsProperty = DependencyProperty.Register(nameof(TributeCharacterExpirationSeconds), typeof(int), typeof(ServerProfile), new PropertyMetadata(86400));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(SaveTributeCharacterExpirationSeconds))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(SaveTributeCharacterExpirationSeconds))]
public int TributeCharacterExpirationSeconds
{
get { return (int)GetValue(TributeCharacterExpirationSecondsProperty); }
@@ -1068,7 +1043,7 @@ public int TributeCharacterExpirationSeconds
public static readonly DependencyProperty TributeItemExpirationSecondsProperty = DependencyProperty.Register(nameof(TributeItemExpirationSeconds), typeof(int), typeof(ServerProfile), new PropertyMetadata(86400));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(SaveTributeItemExpirationSeconds))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(SaveTributeItemExpirationSeconds))]
public int TributeItemExpirationSeconds
{
get { return (int)GetValue(TributeItemExpirationSecondsProperty); }
@@ -1077,7 +1052,7 @@ public int TributeItemExpirationSeconds
public static readonly DependencyProperty TributeDinoExpirationSecondsProperty = DependencyProperty.Register(nameof(TributeDinoExpirationSeconds), typeof(int), typeof(ServerProfile), new PropertyMetadata(86400));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(SaveTributeDinoExpirationSeconds))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(SaveTributeDinoExpirationSeconds))]
public int TributeDinoExpirationSeconds
{
get { return (int)GetValue(TributeDinoExpirationSecondsProperty); }
@@ -1086,7 +1061,7 @@ public int TributeDinoExpirationSeconds
public static readonly DependencyProperty MinimumDinoReuploadIntervalProperty = DependencyProperty.Register(nameof(MinimumDinoReuploadInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(43200));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(SaveMinimumDinoReuploadInterval))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(SaveMinimumDinoReuploadInterval))]
public int MinimumDinoReuploadInterval
{
get { return (int)GetValue(MinimumDinoReuploadIntervalProperty); }
@@ -1095,7 +1070,7 @@ public int MinimumDinoReuploadInterval
public static readonly DependencyProperty CrossARKAllowForeignDinoDownloadsProperty = DependencyProperty.Register(nameof(CrossARKAllowForeignDinoDownloads), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public bool CrossARKAllowForeignDinoDownloads
{
get { return (bool)GetValue(CrossARKAllowForeignDinoDownloadsProperty); }
@@ -1104,7 +1079,7 @@ public bool CrossARKAllowForeignDinoDownloads
public static readonly DependencyProperty IncreasePvPRespawnIntervalProperty = DependencyProperty.Register(nameof(IncreasePvPRespawnInterval), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Key = "bIncreasePvPRespawnInterval")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bIncreasePvPRespawnInterval", Category = ServerProfileCategory.Rules)]
public bool IncreasePvPRespawnInterval
{
get { return (bool)GetValue(IncreasePvPRespawnIntervalProperty); }
@@ -1113,7 +1088,7 @@ public bool IncreasePvPRespawnInterval
public static readonly DependencyProperty IncreasePvPRespawnIntervalCheckPeriodProperty = DependencyProperty.Register(nameof(IncreasePvPRespawnIntervalCheckPeriod), typeof(int), typeof(ServerProfile), new PropertyMetadata(300));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(IncreasePvPRespawnInterval))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(IncreasePvPRespawnInterval))]
public int IncreasePvPRespawnIntervalCheckPeriod
{
get { return (int)GetValue(IncreasePvPRespawnIntervalCheckPeriodProperty); }
@@ -1122,7 +1097,7 @@ public int IncreasePvPRespawnIntervalCheckPeriod
public static readonly DependencyProperty IncreasePvPRespawnIntervalMultiplierProperty = DependencyProperty.Register(nameof(IncreasePvPRespawnIntervalMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(IncreasePvPRespawnInterval))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(IncreasePvPRespawnInterval))]
public float IncreasePvPRespawnIntervalMultiplier
{
get { return (float)GetValue(IncreasePvPRespawnIntervalMultiplierProperty); }
@@ -1131,7 +1106,7 @@ public float IncreasePvPRespawnIntervalMultiplier
public static readonly DependencyProperty IncreasePvPRespawnIntervalBaseAmountProperty = DependencyProperty.Register(nameof(IncreasePvPRespawnIntervalBaseAmount), typeof(int), typeof(ServerProfile), new PropertyMetadata(60));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(IncreasePvPRespawnInterval))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(IncreasePvPRespawnInterval))]
public int IncreasePvPRespawnIntervalBaseAmount
{
get { return (int)GetValue(IncreasePvPRespawnIntervalBaseAmountProperty); }
@@ -1140,7 +1115,7 @@ public int IncreasePvPRespawnIntervalBaseAmount
public static readonly DependencyProperty PreventOfflinePvPProperty = DependencyProperty.Register(nameof(PreventOfflinePvP), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public bool PreventOfflinePvP
{
get { return (bool)GetValue(PreventOfflinePvPProperty); }
@@ -1149,7 +1124,7 @@ public bool PreventOfflinePvP
public static readonly DependencyProperty PreventOfflinePvPIntervalProperty = DependencyProperty.Register(nameof(PreventOfflinePvPInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(900));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(PreventOfflinePvP))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(PreventOfflinePvP))]
public int PreventOfflinePvPInterval
{
get { return (int)GetValue(PreventOfflinePvPIntervalProperty); }
@@ -1158,7 +1133,7 @@ public int PreventOfflinePvPInterval
public static readonly DependencyProperty PreventOfflinePvPConnectionInvincibleIntervalProperty = DependencyProperty.Register(nameof(PreventOfflinePvPConnectionInvincibleInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(5));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(PreventOfflinePvP))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(PreventOfflinePvP))]
public int PreventOfflinePvPConnectionInvincibleInterval
{
get { return (int)GetValue(PreventOfflinePvPConnectionInvincibleIntervalProperty); }
@@ -1167,7 +1142,7 @@ public int PreventOfflinePvPConnectionInvincibleInterval
public static readonly DependencyProperty AutoPvETimerProperty = DependencyProperty.Register(nameof(AutoPvETimer), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Key = "bAutoPvETimer")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAutoPvETimer", Category = ServerProfileCategory.Rules)]
public bool AutoPvETimer
{
get { return (bool)GetValue(AutoPvETimerProperty); }
@@ -1176,7 +1151,7 @@ public bool AutoPvETimer
public static readonly DependencyProperty AutoPvEUseSystemTimeProperty = DependencyProperty.Register(nameof(AutoPvEUseSystemTime), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Key = "bAutoPvEUseSystemTime", ConditionedOn = nameof(AutoPvETimer))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAutoPvEUseSystemTime", Category = ServerProfileCategory.Rules, ConditionedOn = nameof(AutoPvETimer))]
public bool AutoPvEUseSystemTime
{
get { return (bool)GetValue(AutoPvEUseSystemTimeProperty); }
@@ -1185,7 +1160,7 @@ public bool AutoPvEUseSystemTime
public static readonly DependencyProperty AutoPvEStartTimeSecondsProperty = DependencyProperty.Register(nameof(AutoPvEStartTimeSeconds), typeof(int), typeof(ServerProfile), new PropertyMetadata(0));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(AutoPvETimer))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(AutoPvETimer))]
public int AutoPvEStartTimeSeconds
{
get { return (int)GetValue(AutoPvEStartTimeSecondsProperty); }
@@ -1194,7 +1169,7 @@ public int AutoPvEStartTimeSeconds
public static readonly DependencyProperty AutoPvEStopTimeSecondsProperty = DependencyProperty.Register(nameof(AutoPvEStopTimeSeconds), typeof(int), typeof(ServerProfile), new PropertyMetadata(0));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(AutoPvETimer))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(AutoPvETimer))]
public int AutoPvEStopTimeSeconds
{
get { return (int)GetValue(AutoPvEStopTimeSecondsProperty); }
@@ -1203,7 +1178,7 @@ public int AutoPvEStopTimeSeconds
public static readonly DependencyProperty AllowTribeWarPvEProperty = DependencyProperty.Register(nameof(AllowTribeWarPvE), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bPvEAllowTribeWar")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bPvEAllowTribeWar", Category = ServerProfileCategory.Rules)]
public bool AllowTribeWarPvE
{
get { return (bool)GetValue(AllowTribeWarPvEProperty); }
@@ -1212,7 +1187,7 @@ public bool AllowTribeWarPvE
public static readonly DependencyProperty AllowTribeWarCancelPvEProperty = DependencyProperty.Register(nameof(AllowTribeWarCancelPvE), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bPvEAllowTribeWarCancel")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bPvEAllowTribeWarCancel", Category = ServerProfileCategory.Rules)]
public bool AllowTribeWarCancelPvE
{
get { return (bool)GetValue(AllowTribeWarCancelPvEProperty); }
@@ -1221,7 +1196,7 @@ public bool AllowTribeWarCancelPvE
public static readonly DependencyProperty AllowTribeAlliancesProperty = DependencyProperty.Register(nameof(AllowTribeAlliances), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "PreventTribeAlliances", InvertBoolean = true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "PreventTribeAlliances", Category = ServerProfileCategory.Rules, InvertBoolean = true)]
public bool AllowTribeAlliances
{
get { return (bool)GetValue(AllowTribeAlliancesProperty); }
@@ -1230,7 +1205,7 @@ public bool AllowTribeAlliances
public static readonly DependencyProperty MaxAlliancesPerTribeProperty = DependencyProperty.Register(nameof(MaxAlliancesPerTribe), typeof(int), typeof(ServerProfile), new PropertyMetadata(10));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(AllowTribeAlliances))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(AllowTribeAlliances))]
public int MaxAlliancesPerTribe
{
get { return (int)GetValue(MaxAlliancesPerTribeProperty); }
@@ -1239,7 +1214,7 @@ public int MaxAlliancesPerTribe
public static readonly DependencyProperty MaxTribesPerAllianceProperty = DependencyProperty.Register(nameof(MaxTribesPerAlliance), typeof(int), typeof(ServerProfile), new PropertyMetadata(10));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(AllowTribeAlliances))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(AllowTribeAlliances))]
public int MaxTribesPerAlliance
{
get { return (int)GetValue(MaxTribesPerAllianceProperty); }
@@ -1248,7 +1223,7 @@ public int MaxTribesPerAlliance
public static readonly DependencyProperty AllowCustomRecipesProperty = DependencyProperty.Register(nameof(AllowCustomRecipes), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAllowCustomRecipes")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAllowCustomRecipes", Category = ServerProfileCategory.Rules)]
public bool AllowCustomRecipes
{
get { return (bool)GetValue(AllowCustomRecipesProperty); }
@@ -1257,7 +1232,7 @@ public bool AllowCustomRecipes
public static readonly DependencyProperty CustomRecipeEffectivenessMultiplierProperty = DependencyProperty.Register(nameof(CustomRecipeEffectivenessMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules)]
public float CustomRecipeEffectivenessMultiplier
{
get { return (float)GetValue(CustomRecipeEffectivenessMultiplierProperty); }
@@ -1266,7 +1241,7 @@ public float CustomRecipeEffectivenessMultiplier
public static readonly DependencyProperty CustomRecipeSkillMultiplierProperty = DependencyProperty.Register(nameof(CustomRecipeSkillMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules)]
public float CustomRecipeSkillMultiplier
{
get { return (float)GetValue(CustomRecipeSkillMultiplierProperty); }
@@ -1275,7 +1250,7 @@ public float CustomRecipeSkillMultiplier
public static readonly DependencyProperty EnableDiseasesProperty = DependencyProperty.Register(nameof(EnableDiseases), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "PreventDiseases", InvertBoolean = true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "PreventDiseases", Category = ServerProfileCategory.Rules, InvertBoolean = true)]
public bool EnableDiseases
{
get { return (bool)GetValue(EnableDiseasesProperty); }
@@ -1284,7 +1259,7 @@ public bool EnableDiseases
public static readonly DependencyProperty NonPermanentDiseasesProperty = DependencyProperty.Register(nameof(NonPermanentDiseases), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableDiseases))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(EnableDiseases))]
public bool NonPermanentDiseases
{
get { return (bool)GetValue(NonPermanentDiseasesProperty); }
@@ -1301,7 +1276,7 @@ public bool OverrideNPCNetworkStasisRangeScale
public static readonly DependencyProperty NPCNetworkStasisRangeScalePlayerCountStartProperty = DependencyProperty.Register(nameof(NPCNetworkStasisRangeScalePlayerCountStart), typeof(int), typeof(ServerProfile), new PropertyMetadata(70));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(OverrideNPCNetworkStasisRangeScale))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(OverrideNPCNetworkStasisRangeScale))]
public int NPCNetworkStasisRangeScalePlayerCountStart
{
get { return (int)GetValue(NPCNetworkStasisRangeScalePlayerCountStartProperty); }
@@ -1310,7 +1285,7 @@ public int NPCNetworkStasisRangeScalePlayerCountStart
public static readonly DependencyProperty NPCNetworkStasisRangeScalePlayerCountEndProperty = DependencyProperty.Register(nameof(NPCNetworkStasisRangeScalePlayerCountEnd), typeof(int), typeof(ServerProfile), new PropertyMetadata(120));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(OverrideNPCNetworkStasisRangeScale))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(OverrideNPCNetworkStasisRangeScale))]
public int NPCNetworkStasisRangeScalePlayerCountEnd
{
get { return (int)GetValue(NPCNetworkStasisRangeScalePlayerCountEndProperty); }
@@ -1319,7 +1294,7 @@ public int NPCNetworkStasisRangeScalePlayerCountEnd
public static readonly DependencyProperty NPCNetworkStasisRangeScalePercentEndProperty = DependencyProperty.Register(nameof(NPCNetworkStasisRangeScalePercentEnd), typeof(float), typeof(ServerProfile), new PropertyMetadata(0.5f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(OverrideNPCNetworkStasisRangeScale))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules, ConditionedOn = nameof(OverrideNPCNetworkStasisRangeScale))]
public float NPCNetworkStasisRangeScalePercentEnd
{
get { return (float)GetValue(NPCNetworkStasisRangeScalePercentEndProperty); }
@@ -1328,7 +1303,7 @@ public float NPCNetworkStasisRangeScalePercentEnd
public static readonly DependencyProperty UseCorpseLocatorProperty = DependencyProperty.Register(nameof(UseCorpseLocator), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bUseCorpseLocator")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bUseCorpseLocator", Category = ServerProfileCategory.Rules)]
public bool UseCorpseLocator
{
get { return (bool)GetValue(UseCorpseLocatorProperty); }
@@ -1337,7 +1312,7 @@ public bool UseCorpseLocator
public static readonly DependencyProperty PreventSpawnAnimationsProperty = DependencyProperty.Register(nameof(PreventSpawnAnimations), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public bool PreventSpawnAnimations
{
get { return (bool)GetValue(PreventSpawnAnimationsProperty); }
@@ -1346,7 +1321,7 @@ public bool PreventSpawnAnimations
public static readonly DependencyProperty AllowUnlimitedRespecsProperty = DependencyProperty.Register(nameof(AllowUnlimitedRespecs), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAllowUnlimitedRespecs")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAllowUnlimitedRespecs", Category = ServerProfileCategory.Rules)]
public bool AllowUnlimitedRespecs
{
get { return (bool)GetValue(AllowUnlimitedRespecsProperty); }
@@ -1355,7 +1330,7 @@ public bool AllowUnlimitedRespecs
public static readonly DependencyProperty AllowPlatformSaddleMultiFloorsProperty = DependencyProperty.Register(nameof(AllowPlatformSaddleMultiFloors), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAllowPlatformSaddleMultiFloors")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAllowPlatformSaddleMultiFloors", Category = ServerProfileCategory.Rules)]
public bool AllowPlatformSaddleMultiFloors
{
get { return (bool)GetValue(AllowPlatformSaddleMultiFloorsProperty); }
@@ -1364,7 +1339,7 @@ public bool AllowPlatformSaddleMultiFloors
public static readonly DependencyProperty OxygenSwimSpeedStatMultiplierProperty = DependencyProperty.Register(nameof(OxygenSwimSpeedStatMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public float OxygenSwimSpeedStatMultiplier
{
get { return (float)GetValue(OxygenSwimSpeedStatMultiplierProperty); }
@@ -1373,7 +1348,7 @@ public float OxygenSwimSpeedStatMultiplier
public static readonly DependencyProperty SupplyCrateLootQualityMultiplierProperty = DependencyProperty.Register(nameof(SupplyCrateLootQualityMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules)]
public float SupplyCrateLootQualityMultiplier
{
get { return (float)GetValue(SupplyCrateLootQualityMultiplierProperty); }
@@ -1382,7 +1357,7 @@ public float SupplyCrateLootQualityMultiplier
public static readonly DependencyProperty FishingLootQualityMultiplierProperty = DependencyProperty.Register(nameof(FishingLootQualityMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules)]
public float FishingLootQualityMultiplier
{
get { return (float)GetValue(FishingLootQualityMultiplierProperty); }
@@ -1399,7 +1374,7 @@ public bool EnableNoFishLoot
public static readonly DependencyProperty UseCorpseLifeSpanMultiplierProperty = DependencyProperty.Register(nameof(UseCorpseLifeSpanMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules)]
public float UseCorpseLifeSpanMultiplier
{
get { return (float)GetValue(UseCorpseLifeSpanMultiplierProperty); }
@@ -1408,7 +1383,7 @@ public float UseCorpseLifeSpanMultiplier
public static readonly DependencyProperty GlobalPoweredBatteryDurabilityDecreasePerSecondProperty = DependencyProperty.Register(nameof(GlobalPoweredBatteryDurabilityDecreasePerSecond), typeof(float), typeof(ServerProfile), new PropertyMetadata(4.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules)]
public float GlobalPoweredBatteryDurabilityDecreasePerSecond
{
get { return (float)GetValue(GlobalPoweredBatteryDurabilityDecreasePerSecondProperty); }
@@ -1417,7 +1392,7 @@ public float GlobalPoweredBatteryDurabilityDecreasePerSecond
public static readonly DependencyProperty TribeNameChangeCooldownProperty = DependencyProperty.Register(nameof(TribeNameChangeCooldown), typeof(int), typeof(ServerProfile), new PropertyMetadata(15));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Rules)]
public int TribeNameChangeCooldown
{
get { return (int)GetValue(TribeNameChangeCooldownProperty); }
@@ -1426,7 +1401,7 @@ public int TribeNameChangeCooldown
public static readonly DependencyProperty RandomSupplyCratePointsProperty = DependencyProperty.Register(nameof(RandomSupplyCratePoints), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Rules)]
public bool RandomSupplyCratePoints
{
get { return (bool)GetValue(RandomSupplyCratePointsProperty); }
@@ -1437,7 +1412,7 @@ public bool RandomSupplyCratePoints
#region Chat and Notifications
public static readonly DependencyProperty EnableGlobalVoiceChatProperty = DependencyProperty.Register(nameof(EnableGlobalVoiceChat), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "globalVoiceChat")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "globalVoiceChat", Category = ServerProfileCategory.ChatAndNotifications)]
public bool EnableGlobalVoiceChat
{
get { return (bool)GetValue(EnableGlobalVoiceChatProperty); }
@@ -1446,7 +1421,7 @@ public bool EnableGlobalVoiceChat
public static readonly DependencyProperty EnableProximityChatProperty = DependencyProperty.Register(nameof(EnableProximityChat), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "proximityChat")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "proximityChat", Category = ServerProfileCategory.ChatAndNotifications)]
public bool EnableProximityChat
{
get { return (bool)GetValue(EnableProximityChatProperty); }
@@ -1455,7 +1430,7 @@ public bool EnableProximityChat
public static readonly DependencyProperty EnablePlayerLeaveNotificationsProperty = DependencyProperty.Register(nameof(EnablePlayerLeaveNotifications), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "alwaysNotifyPlayerLeft")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "alwaysNotifyPlayerLeft", Category = ServerProfileCategory.ChatAndNotifications)]
public bool EnablePlayerLeaveNotifications
{
get { return (bool)GetValue(EnablePlayerLeaveNotificationsProperty); }
@@ -1464,7 +1439,7 @@ public bool EnablePlayerLeaveNotifications
public static readonly DependencyProperty EnablePlayerJoinedNotificationsProperty = DependencyProperty.Register(nameof(EnablePlayerJoinedNotifications), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "alwaysNotifyPlayerJoined")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "alwaysNotifyPlayerJoined", Category = ServerProfileCategory.ChatAndNotifications)]
public bool EnablePlayerJoinedNotifications
{
get { return (bool)GetValue(EnablePlayerJoinedNotificationsProperty); }
@@ -1475,7 +1450,7 @@ public bool EnablePlayerJoinedNotifications
#region HUD and Visuals
public static readonly DependencyProperty AllowCrosshairProperty = DependencyProperty.Register(nameof(AllowCrosshair), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerCrosshair")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerCrosshair", Category = ServerProfileCategory.HudAndVisuals)]
public bool AllowCrosshair
{
get { return (bool)GetValue(AllowCrosshairProperty); }
@@ -1484,7 +1459,7 @@ public bool AllowCrosshair
public static readonly DependencyProperty AllowHUDProperty = DependencyProperty.Register(nameof(AllowHUD), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerForceNoHud", InvertBoolean = true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ServerForceNoHud", Category = ServerProfileCategory.HudAndVisuals, InvertBoolean = true)]
public bool AllowHUD
{
get { return (bool)GetValue(AllowHUDProperty); }
@@ -1493,7 +1468,7 @@ public bool AllowHUD
public static readonly DependencyProperty AllowThirdPersonViewProperty = DependencyProperty.Register(nameof(AllowThirdPersonView), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "AllowThirdPersonPlayer")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "AllowThirdPersonPlayer", Category = ServerProfileCategory.HudAndVisuals)]
public bool AllowThirdPersonView
{
get { return (bool)GetValue(AllowThirdPersonViewProperty); }
@@ -1502,7 +1477,7 @@ public bool AllowThirdPersonView
public static readonly DependencyProperty AllowMapPlayerLocationProperty = DependencyProperty.Register(nameof(AllowMapPlayerLocation), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ShowMapPlayerLocation")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "ShowMapPlayerLocation", Category = ServerProfileCategory.HudAndVisuals)]
public bool AllowMapPlayerLocation
{
get { return (bool)GetValue(AllowMapPlayerLocationProperty); }
@@ -1511,7 +1486,7 @@ public bool AllowMapPlayerLocation
public static readonly DependencyProperty AllowPVPGammaProperty = DependencyProperty.Register(nameof(AllowPVPGamma), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "EnablePVPGamma")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "EnablePVPGamma", Category = ServerProfileCategory.HudAndVisuals)]
public bool AllowPVPGamma
{
get { return (bool)GetValue(AllowPVPGammaProperty); }
@@ -1520,7 +1495,7 @@ public bool AllowPVPGamma
public static readonly DependencyProperty AllowPvEGammaProperty = DependencyProperty.Register(nameof(AllowPvEGamma), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "DisablePvEGamma", InvertBoolean = true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "DisablePvEGamma", Category = ServerProfileCategory.HudAndVisuals, InvertBoolean = true)]
public bool AllowPvEGamma
{
get { return (bool)GetValue(AllowPvEGammaProperty); }
@@ -1529,7 +1504,7 @@ public bool AllowPvEGamma
public static readonly DependencyProperty ShowFloatingDamageTextProperty = DependencyProperty.Register(nameof(ShowFloatingDamageText), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.HudAndVisuals)]
public bool ShowFloatingDamageText
{
get { return (bool)GetValue(ShowFloatingDamageTextProperty); }
@@ -1538,7 +1513,7 @@ public bool ShowFloatingDamageText
public static readonly DependencyProperty AllowHitMarkersProperty = DependencyProperty.Register(nameof(AllowHitMarkers), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.HudAndVisuals)]
public bool AllowHitMarkers
{
get { return (bool)GetValue(AllowHitMarkersProperty); }
@@ -1549,7 +1524,7 @@ public bool AllowHitMarkers
#region Player Settings
public static readonly DependencyProperty EnableFlyerCarryProperty = DependencyProperty.Register(nameof(EnableFlyerCarry), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "AllowFlyerCarryPVE")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "AllowFlyerCarryPVE", Category = ServerProfileCategory.Players)]
public bool EnableFlyerCarry
{
get { return (bool)GetValue(EnableFlyerCarryProperty); }
@@ -1558,7 +1533,7 @@ public bool EnableFlyerCarry
public static readonly DependencyProperty XPMultiplierProperty = DependencyProperty.Register(nameof(XPMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Players)]
public float XPMultiplier
{
get { return (float)GetValue(XPMultiplierProperty); }
@@ -1567,7 +1542,7 @@ public float XPMultiplier
public static readonly DependencyProperty OverrideMaxExperiencePointsPlayerProperty = DependencyProperty.Register(nameof(OverrideMaxExperiencePointsPlayer), typeof(int), typeof(ServerProfile), new PropertyMetadata(GameData.DefaultMaxExperiencePointsPlayer));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Players)]
public int OverrideMaxExperiencePointsPlayer
{
get { return (int)GetValue(OverrideMaxExperiencePointsPlayerProperty); }
@@ -1576,7 +1551,7 @@ public int OverrideMaxExperiencePointsPlayer
public static readonly DependencyProperty PlayerDamageMultiplierProperty = DependencyProperty.Register(nameof(PlayerDamageMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Players)]
public float PlayerDamageMultiplier
{
get { return (float)GetValue(PlayerDamageMultiplierProperty); }
@@ -1585,7 +1560,7 @@ public float PlayerDamageMultiplier
public static readonly DependencyProperty PlayerResistanceMultiplierProperty = DependencyProperty.Register(nameof(PlayerResistanceMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Players)]
public float PlayerResistanceMultiplier
{
get { return (float)GetValue(PlayerResistanceMultiplierProperty); }
@@ -1594,7 +1569,7 @@ public float PlayerResistanceMultiplier
public static readonly DependencyProperty PlayerCharacterWaterDrainMultiplierProperty = DependencyProperty.Register(nameof(PlayerCharacterWaterDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Players)]
public float PlayerCharacterWaterDrainMultiplier
{
get { return (float)GetValue(PlayerCharacterWaterDrainMultiplierProperty); }
@@ -1603,7 +1578,7 @@ public float PlayerCharacterWaterDrainMultiplier
public static readonly DependencyProperty PlayerCharacterFoodDrainMultiplierProperty = DependencyProperty.Register(nameof(PlayerCharacterFoodDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Players)]
public float PlayerCharacterFoodDrainMultiplier
{
get { return (float)GetValue(PlayerCharacterFoodDrainMultiplierProperty); }
@@ -1612,7 +1587,7 @@ public float PlayerCharacterFoodDrainMultiplier
public static readonly DependencyProperty PlayerCharacterStaminaDrainMultiplierProperty = DependencyProperty.Register(nameof(PlayerCharacterStaminaDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Players)]
public float PlayerCharacterStaminaDrainMultiplier
{
get { return (float)GetValue(PlayerCharacterStaminaDrainMultiplierProperty); }
@@ -1621,7 +1596,7 @@ public float PlayerCharacterStaminaDrainMultiplier
public static readonly DependencyProperty PlayerCharacterHealthRecoveryMultiplierProperty = DependencyProperty.Register(nameof(PlayerCharacterHealthRecoveryMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Players)]
public float PlayerCharacterHealthRecoveryMultiplier
{
get { return (float)GetValue(PlayerCharacterHealthRecoveryMultiplierProperty); }
@@ -1630,7 +1605,7 @@ public float PlayerCharacterHealthRecoveryMultiplier
public static readonly DependencyProperty HarvestingDamageMultiplierPlayerProperty = DependencyProperty.Register(nameof(PlayerHarvestingDamageMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Players)]
public float PlayerHarvestingDamageMultiplier
{
get { return (float)GetValue(HarvestingDamageMultiplierPlayerProperty); }
@@ -1638,8 +1613,7 @@ public float PlayerHarvestingDamageMultiplier
}
public static readonly DependencyProperty PlayerBaseStatMultipliersProperty = DependencyProperty.Register(nameof(PlayerBaseStatMultipliers), typeof(StatsMultiplierArray), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Players)]
public StatsMultiplierArray PlayerBaseStatMultipliers
{
get { return (StatsMultiplierArray)GetValue(PlayerBaseStatMultipliersProperty); }
@@ -1647,8 +1621,7 @@ public StatsMultiplierArray PlayerBaseStatMultipliers
}
public static readonly DependencyProperty PerLevelStatsMultiplier_PlayerProperty = DependencyProperty.Register(nameof(PerLevelStatsMultiplier_Player), typeof(StatsMultiplierArray), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Players)]
public StatsMultiplierArray PerLevelStatsMultiplier_Player
{
get { return (StatsMultiplierArray)GetValue(PerLevelStatsMultiplier_PlayerProperty); }
@@ -1657,7 +1630,7 @@ public StatsMultiplierArray PerLevelStatsMultiplier_Player
public static readonly DependencyProperty CraftingSkillBonusMultiplierProperty = DependencyProperty.Register(nameof(CraftingSkillBonusMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Players)]
public float CraftingSkillBonusMultiplier
{
get { return (float)GetValue(CraftingSkillBonusMultiplierProperty); }
@@ -1668,7 +1641,7 @@ public float CraftingSkillBonusMultiplier
#region Dino Settings
public static readonly DependencyProperty OverrideMaxExperiencePointsDinoProperty = DependencyProperty.Register(nameof(OverrideMaxExperiencePointsDino), typeof(int), typeof(ServerProfile), new PropertyMetadata(GameData.DefaultMaxExperiencePointsDino));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public int OverrideMaxExperiencePointsDino
{
get { return (int)GetValue(OverrideMaxExperiencePointsDinoProperty); }
@@ -1677,7 +1650,7 @@ public int OverrideMaxExperiencePointsDino
public static readonly DependencyProperty DinoDamageMultiplierProperty = DependencyProperty.Register(nameof(DinoDamageMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float DinoDamageMultiplier
{
get { return (float)GetValue(DinoDamageMultiplierProperty); }
@@ -1686,7 +1659,7 @@ public float DinoDamageMultiplier
public static readonly DependencyProperty TamedDinoDamageMultiplierProperty = DependencyProperty.Register(nameof(TamedDinoDamageMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float TamedDinoDamageMultiplier
{
get { return (float)GetValue(TamedDinoDamageMultiplierProperty); }
@@ -1695,7 +1668,7 @@ public float TamedDinoDamageMultiplier
public static readonly DependencyProperty DinoResistanceMultiplierProperty = DependencyProperty.Register(nameof(DinoResistanceMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float DinoResistanceMultiplier
{
get { return (float)GetValue(DinoResistanceMultiplierProperty); }
@@ -1704,7 +1677,7 @@ public float DinoResistanceMultiplier
public static readonly DependencyProperty TamedDinoResistanceMultiplierProperty = DependencyProperty.Register(nameof(TamedDinoResistanceMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float TamedDinoResistanceMultiplier
{
get { return (float)GetValue(TamedDinoResistanceMultiplierProperty); }
@@ -1713,7 +1686,7 @@ public float TamedDinoResistanceMultiplier
public static readonly DependencyProperty MaxTamedDinosProperty = DependencyProperty.Register(nameof(MaxTamedDinos), typeof(int), typeof(ServerProfile), new PropertyMetadata(4000));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public int MaxTamedDinos
{
get { return (int)GetValue(MaxTamedDinosProperty); }
@@ -1722,7 +1695,7 @@ public int MaxTamedDinos
public static readonly DependencyProperty DinoCharacterFoodDrainMultiplierProperty = DependencyProperty.Register(nameof(DinoCharacterFoodDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float DinoCharacterFoodDrainMultiplier
{
get { return (float)GetValue(DinoCharacterFoodDrainMultiplierProperty); }
@@ -1731,7 +1704,7 @@ public float DinoCharacterFoodDrainMultiplier
public static readonly DependencyProperty DinoCharacterStaminaDrainMultiplierProperty = DependencyProperty.Register(nameof(DinoCharacterStaminaDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float DinoCharacterStaminaDrainMultiplier
{
get { return (float)GetValue(DinoCharacterStaminaDrainMultiplierProperty); }
@@ -1740,7 +1713,7 @@ public float DinoCharacterStaminaDrainMultiplier
public static readonly DependencyProperty DinoCharacterHealthRecoveryMultiplierProperty = DependencyProperty.Register(nameof(DinoCharacterHealthRecoveryMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float DinoCharacterHealthRecoveryMultiplier
{
get { return (float)GetValue(DinoCharacterHealthRecoveryMultiplierProperty); }
@@ -1749,7 +1722,7 @@ public float DinoCharacterHealthRecoveryMultiplier
public static readonly DependencyProperty DinoCountMultiplierProperty = DependencyProperty.Register(nameof(DinoCountMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float DinoCountMultiplier
{
get { return (float)GetValue(DinoCountMultiplierProperty); }
@@ -1776,7 +1749,7 @@ public float DinoTurretDamageMultiplier
public static readonly DependencyProperty AllowRaidDinoFeedingProperty = DependencyProperty.Register(nameof(AllowRaidDinoFeeding), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public bool AllowRaidDinoFeeding
{
get { return (bool)GetValue(AllowRaidDinoFeedingProperty); }
@@ -1785,7 +1758,7 @@ public bool AllowRaidDinoFeeding
public static readonly DependencyProperty RaidDinoCharacterFoodDrainMultiplierProperty = DependencyProperty.Register(nameof(RaidDinoCharacterFoodDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float RaidDinoCharacterFoodDrainMultiplier
{
get { return (float)GetValue(RaidDinoCharacterFoodDrainMultiplierProperty); }
@@ -1802,7 +1775,7 @@ public bool EnableAllowCaveFlyers
public static readonly DependencyProperty AllowFlyingStaminaRecoveryProperty = DependencyProperty.Register(nameof(AllowFlyingStaminaRecovery), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(AllowFlyingStaminaRecovery))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos, ConditionedOn = nameof(AllowFlyingStaminaRecovery))]
public bool AllowFlyingStaminaRecovery
{
get { return (bool)GetValue(AllowFlyingStaminaRecoveryProperty); }
@@ -1811,7 +1784,7 @@ public bool AllowFlyingStaminaRecovery
public static readonly DependencyProperty PreventMateBoostProperty = DependencyProperty.Register(nameof(PreventMateBoost), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(PreventMateBoost))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos, ConditionedOn = nameof(PreventMateBoost))]
public bool PreventMateBoost
{
get { return (bool)GetValue(PreventMateBoostProperty); }
@@ -1820,7 +1793,7 @@ public bool PreventMateBoost
public static readonly DependencyProperty DisableDinoDecayPvEProperty = DependencyProperty.Register(nameof(DisableDinoDecayPvE), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public bool DisableDinoDecayPvE
{
get { return (bool)GetValue(DisableDinoDecayPvEProperty); }
@@ -1829,7 +1802,7 @@ public bool DisableDinoDecayPvE
public static readonly DependencyProperty DisableDinoDecayPvPProperty = DependencyProperty.Register(nameof(DisableDinoDecayPvP), typeof(bool), typeof(ServerProfile), new PropertyMetadata(true));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "PvPDinoDecay", InvertBoolean=true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "PvPDinoDecay", Category = ServerProfileCategory.Dinos, InvertBoolean=true)]
public bool DisableDinoDecayPvP
{
get { return (bool)GetValue(DisableDinoDecayPvPProperty); }
@@ -1838,7 +1811,7 @@ public bool DisableDinoDecayPvP
public static readonly DependencyProperty AutoDestroyDecayedDinosProperty = DependencyProperty.Register(nameof(AutoDestroyDecayedDinos), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public bool AutoDestroyDecayedDinos
{
get { return (bool)GetValue(AutoDestroyDecayedDinosProperty); }
@@ -1847,7 +1820,7 @@ public bool AutoDestroyDecayedDinos
public static readonly DependencyProperty PvEDinoDecayPeriodMultiplierProperty = DependencyProperty.Register(nameof(PvEDinoDecayPeriodMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float PvEDinoDecayPeriodMultiplier
{
get { return (float)GetValue(PvEDinoDecayPeriodMultiplierProperty); }
@@ -1864,7 +1837,7 @@ public bool ForceFlyerExplosives
public static readonly DependencyProperty AllowMultipleAttachedC4Property = DependencyProperty.Register(nameof(AllowMultipleAttachedC4), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(AllowMultipleAttachedC4))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos, ConditionedOn = nameof(AllowMultipleAttachedC4))]
public bool AllowMultipleAttachedC4
{
get { return (bool)GetValue(AllowMultipleAttachedC4Property); }
@@ -1873,7 +1846,7 @@ public bool AllowMultipleAttachedC4
public static readonly DependencyProperty DisableDinoRidingProperty = DependencyProperty.Register(nameof(DisableDinoRiding), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableDinoRiding", ConditionedOn = nameof(DisableDinoRiding))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableDinoRiding", Category = ServerProfileCategory.Dinos, ConditionedOn = nameof(DisableDinoRiding))]
public bool DisableDinoRiding
{
get { return (bool)GetValue(DisableDinoRidingProperty); }
@@ -1882,7 +1855,7 @@ public bool DisableDinoRiding
public static readonly DependencyProperty DisableDinoTamingProperty = DependencyProperty.Register(nameof(DisableDinoTaming), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableDinoTaming", ConditionedOn = nameof(DisableDinoTaming))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableDinoTaming", Category = ServerProfileCategory.Dinos, ConditionedOn = nameof(DisableDinoTaming))]
public bool DisableDinoTaming
{
get { return (bool)GetValue(DisableDinoTamingProperty); }
@@ -1891,7 +1864,7 @@ public bool DisableDinoTaming
public static readonly DependencyProperty MaxPersonalTamedDinosProperty = DependencyProperty.Register(nameof(MaxPersonalTamedDinos), typeof(float), typeof(ServerProfile), new PropertyMetadata(40.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public float MaxPersonalTamedDinos
{
get { return (float)GetValue(MaxPersonalTamedDinosProperty); }
@@ -1900,7 +1873,7 @@ public float MaxPersonalTamedDinos
public static readonly DependencyProperty PersonalTamedDinosSaddleStructureCostProperty = DependencyProperty.Register(nameof(PersonalTamedDinosSaddleStructureCost), typeof(int), typeof(ServerProfile), new PropertyMetadata(19));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public int PersonalTamedDinosSaddleStructureCost
{
get { return (int)GetValue(PersonalTamedDinosSaddleStructureCostProperty); }
@@ -1909,7 +1882,7 @@ public int PersonalTamedDinosSaddleStructureCost
public static readonly DependencyProperty UseTameLimitForStructuresOnlyProperty = DependencyProperty.Register(nameof(UseTameLimitForStructuresOnly), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bUseTameLimitForStructuresOnly", ConditionedOn = nameof(UseTameLimitForStructuresOnly))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bUseTameLimitForStructuresOnly", Category = ServerProfileCategory.Dinos, ConditionedOn = nameof(UseTameLimitForStructuresOnly))]
public bool UseTameLimitForStructuresOnly
{
get { return (bool)GetValue(UseTameLimitForStructuresOnlyProperty); }
@@ -1917,7 +1890,6 @@ public bool UseTameLimitForStructuresOnly
}
public static readonly DependencyProperty DinoSettingsProperty = DependencyProperty.Register(nameof(DinoSettings), typeof(DinoSettingsList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
public DinoSettingsList DinoSettings
{
get { return (DinoSettingsList)GetValue(DinoSettingsProperty); }
@@ -1925,8 +1897,7 @@ public DinoSettingsList DinoSettings
}
public static readonly DependencyProperty PerLevelStatsMultiplier_DinoWildProperty = DependencyProperty.Register(nameof(PerLevelStatsMultiplier_DinoWild), typeof(StatsMultiplierArray), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public StatsMultiplierArray PerLevelStatsMultiplier_DinoWild
{
get { return (StatsMultiplierArray)GetValue(PerLevelStatsMultiplier_DinoWildProperty); }
@@ -1934,8 +1905,7 @@ public StatsMultiplierArray PerLevelStatsMultiplier_DinoWild
}
public static readonly DependencyProperty PerLevelStatsMultiplier_DinoTamedProperty = DependencyProperty.Register(nameof(PerLevelStatsMultiplier_DinoTamed), typeof(StatsMultiplierArray), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public StatsMultiplierArray PerLevelStatsMultiplier_DinoTamed
{
get { return (StatsMultiplierArray)GetValue(PerLevelStatsMultiplier_DinoTamedProperty); }
@@ -1943,8 +1913,7 @@ public StatsMultiplierArray PerLevelStatsMultiplier_DinoTamed
}
public static readonly DependencyProperty PerLevelStatsMultiplier_DinoTamed_AddProperty = DependencyProperty.Register(nameof(PerLevelStatsMultiplier_DinoTamed_Add), typeof(StatsMultiplierArray), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public StatsMultiplierArray PerLevelStatsMultiplier_DinoTamed_Add
{
get { return (StatsMultiplierArray)GetValue(PerLevelStatsMultiplier_DinoTamed_AddProperty); }
@@ -1952,8 +1921,7 @@ public StatsMultiplierArray PerLevelStatsMultiplier_DinoTamed_Add
}
public static readonly DependencyProperty PerLevelStatsMultiplier_DinoTamed_AffinityProperty = DependencyProperty.Register(nameof(PerLevelStatsMultiplier_DinoTamed_Affinity), typeof(StatsMultiplierArray), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public StatsMultiplierArray PerLevelStatsMultiplier_DinoTamed_Affinity
{
get { return (StatsMultiplierArray)GetValue(PerLevelStatsMultiplier_DinoTamed_AffinityProperty); }
@@ -1962,7 +1930,7 @@ public StatsMultiplierArray PerLevelStatsMultiplier_DinoTamed_Affinity
public static readonly DependencyProperty MatingIntervalMultiplierProperty = DependencyProperty.Register(nameof(MatingIntervalMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float MatingIntervalMultiplier
{
get { return (float)GetValue(MatingIntervalMultiplierProperty); }
@@ -1971,7 +1939,7 @@ public float MatingIntervalMultiplier
public static readonly DependencyProperty EggHatchSpeedMultiplierProperty = DependencyProperty.Register(nameof(EggHatchSpeedMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float EggHatchSpeedMultiplier
{
get { return (float)GetValue(EggHatchSpeedMultiplierProperty); }
@@ -1980,7 +1948,7 @@ public float EggHatchSpeedMultiplier
public static readonly DependencyProperty BabyMatureSpeedMultiplierProperty = DependencyProperty.Register(nameof(BabyMatureSpeedMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float BabyMatureSpeedMultiplier
{
get { return (float)GetValue(BabyMatureSpeedMultiplierProperty); }
@@ -1989,7 +1957,7 @@ public float BabyMatureSpeedMultiplier
public static readonly DependencyProperty BabyFoodConsumptionSpeedMultiplierProperty = DependencyProperty.Register(nameof(BabyFoodConsumptionSpeedMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float BabyFoodConsumptionSpeedMultiplier
{
get { return (float)GetValue(BabyFoodConsumptionSpeedMultiplierProperty); }
@@ -1998,7 +1966,7 @@ public float BabyFoodConsumptionSpeedMultiplier
public static readonly DependencyProperty DisableImprintDinoBuffProperty = DependencyProperty.Register(nameof(DisableImprintDinoBuff), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public bool DisableImprintDinoBuff
{
get { return (bool)GetValue(DisableImprintDinoBuffProperty); }
@@ -2007,7 +1975,7 @@ public bool DisableImprintDinoBuff
public static readonly DependencyProperty AllowAnyoneBabyImprintCuddleProperty = DependencyProperty.Register(nameof(AllowAnyoneBabyImprintCuddle), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Dinos)]
public bool AllowAnyoneBabyImprintCuddle
{
get { return (bool)GetValue(AllowAnyoneBabyImprintCuddleProperty); }
@@ -2016,7 +1984,7 @@ public bool AllowAnyoneBabyImprintCuddle
public static readonly DependencyProperty BabyImprintingStatScaleMultiplierProperty = DependencyProperty.Register(nameof(BabyImprintingStatScaleMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float BabyImprintingStatScaleMultiplier
{
get { return (float)GetValue(BabyImprintingStatScaleMultiplierProperty); }
@@ -2025,7 +1993,7 @@ public float BabyImprintingStatScaleMultiplier
public static readonly DependencyProperty BabyCuddleIntervalMultiplierProperty = DependencyProperty.Register(nameof(BabyCuddleIntervalMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float BabyCuddleIntervalMultiplier
{
get { return (float)GetValue(BabyCuddleIntervalMultiplierProperty); }
@@ -2034,7 +2002,7 @@ public float BabyCuddleIntervalMultiplier
public static readonly DependencyProperty BabyCuddleGracePeriodMultiplierProperty = DependencyProperty.Register(nameof(BabyCuddleGracePeriodMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float BabyCuddleGracePeriodMultiplier
{
get { return (float)GetValue(BabyCuddleGracePeriodMultiplierProperty); }
@@ -2043,7 +2011,7 @@ public float BabyCuddleGracePeriodMultiplier
public static readonly DependencyProperty BabyCuddleLoseImprintQualitySpeedMultiplierProperty = DependencyProperty.Register(nameof(BabyCuddleLoseImprintQualitySpeedMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float BabyCuddleLoseImprintQualitySpeedMultiplier
{
get { return (float)GetValue(BabyCuddleLoseImprintQualitySpeedMultiplierProperty); }
@@ -2053,8 +2021,7 @@ public float BabyCuddleLoseImprintQualitySpeedMultiplier
public static readonly DependencyProperty DinoSpawnsProperty = DependencyProperty.Register(nameof(DinoSpawnWeightMultipliers), typeof(AggregateIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public AggregateIniValueList DinoSpawnWeightMultipliers
{
get { return (AggregateIniValueList)GetValue(DinoSpawnsProperty); }
@@ -2062,8 +2029,7 @@ public AggregateIniValueList DinoSpawnWeightMultipliers
}
public static readonly DependencyProperty TamedDinoClassDamageMultipliersProperty = DependencyProperty.Register(nameof(TamedDinoClassDamageMultipliers), typeof(AggregateIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public AggregateIniValueList TamedDinoClassDamageMultipliers
{
get { return (AggregateIniValueList)GetValue(TamedDinoClassDamageMultipliersProperty); }
@@ -2071,8 +2037,7 @@ public AggregateIniValueList TamedDinoClassDamageMultipliers
}
public static readonly DependencyProperty TamedDinoClassResistanceMultipliersProperty = DependencyProperty.Register(nameof(TamedDinoClassResistanceMultipliers), typeof(AggregateIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public AggregateIniValueList TamedDinoClassResistanceMultipliers
{
get { return (AggregateIniValueList)GetValue(TamedDinoClassResistanceMultipliersProperty); }
@@ -2080,8 +2045,7 @@ public AggregateIniValueList TamedDinoClassResistanceMultiplier
}
public static readonly DependencyProperty DinoClassDamageMultipliersProperty = DependencyProperty.Register(nameof(DinoClassDamageMultipliers), typeof(AggregateIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public AggregateIniValueList DinoClassDamageMultipliers
{
get { return (AggregateIniValueList)GetValue(DinoClassDamageMultipliersProperty); }
@@ -2089,8 +2053,7 @@ public AggregateIniValueList DinoClassDamageMultipliers
}
public static readonly DependencyProperty DinoClassResistanceMultipliersProperty = DependencyProperty.Register(nameof(DinoClassResistanceMultipliers), typeof(AggregateIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public AggregateIniValueList DinoClassResistanceMultipliers
{
get { return (AggregateIniValueList)GetValue(DinoClassResistanceMultipliersProperty); }
@@ -2098,8 +2061,7 @@ public AggregateIniValueList DinoClassResistanceMultipliers
}
public static readonly DependencyProperty NPCReplacementsProperty = DependencyProperty.Register(nameof(NPCReplacements), typeof(AggregateIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public AggregateIniValueList NPCReplacements
{
get { return (AggregateIniValueList)GetValue(NPCReplacementsProperty); }
@@ -2107,8 +2069,7 @@ public AggregateIniValueList NPCReplacements
}
public static readonly DependencyProperty PreventDinoTameClassNamesProperty = DependencyProperty.Register(nameof(PreventDinoTameClassNames), typeof(StringIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public StringIniValueList PreventDinoTameClassNames
{
get { return (StringIniValueList)GetValue(PreventDinoTameClassNamesProperty); }
@@ -2117,7 +2078,7 @@ public StringIniValueList PreventDinoTameClassNames
public static readonly DependencyProperty WildDinoCharacterFoodDrainMultiplierProperty = DependencyProperty.Register(nameof(WildDinoCharacterFoodDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float WildDinoCharacterFoodDrainMultiplier
{
get { return (float)GetValue(WildDinoCharacterFoodDrainMultiplierProperty); }
@@ -2126,7 +2087,7 @@ public float WildDinoCharacterFoodDrainMultiplier
public static readonly DependencyProperty TamedDinoCharacterFoodDrainMultiplierProperty = DependencyProperty.Register(nameof(TamedDinoCharacterFoodDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float TamedDinoCharacterFoodDrainMultiplier
{
get { return (float)GetValue(TamedDinoCharacterFoodDrainMultiplierProperty); }
@@ -2135,7 +2096,7 @@ public float TamedDinoCharacterFoodDrainMultiplier
public static readonly DependencyProperty WildDinoTorporDrainMultiplierProperty = DependencyProperty.Register(nameof(WildDinoTorporDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float WildDinoTorporDrainMultiplier
{
get { return (float)GetValue(WildDinoTorporDrainMultiplierProperty); }
@@ -2144,7 +2105,7 @@ public float WildDinoTorporDrainMultiplier
public static readonly DependencyProperty TamedDinoTorporDrainMultiplierProperty = DependencyProperty.Register(nameof(TamedDinoTorporDrainMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float TamedDinoTorporDrainMultiplier
{
get { return (float)GetValue(TamedDinoTorporDrainMultiplierProperty); }
@@ -2153,7 +2114,7 @@ public float TamedDinoTorporDrainMultiplier
public static readonly DependencyProperty PassiveTameIntervalMultiplierProperty = DependencyProperty.Register(nameof(PassiveTameIntervalMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Dinos)]
public float PassiveTameIntervalMultiplier
{
get { return (float)GetValue(PassiveTameIntervalMultiplierProperty); }
@@ -2164,7 +2125,7 @@ public float PassiveTameIntervalMultiplier
#region Environment
public static readonly DependencyProperty TamingSpeedMultiplierProperty = DependencyProperty.Register(nameof(TamingSpeedMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment)]
public float TamingSpeedMultiplier
{
get { return (float)GetValue(TamingSpeedMultiplierProperty); }
@@ -2173,7 +2134,7 @@ public float TamingSpeedMultiplier
public static readonly DependencyProperty HarvestAmountMultiplierProperty = DependencyProperty.Register(nameof(HarvestAmountMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment)]
public float HarvestAmountMultiplier
{
get { return (float)GetValue(HarvestAmountMultiplierProperty); }
@@ -2182,7 +2143,7 @@ public float HarvestAmountMultiplier
public static readonly DependencyProperty ResourcesRespawnPeriodMultiplierProperty = DependencyProperty.Register(nameof(ResourcesRespawnPeriodMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment)]
public float ResourcesRespawnPeriodMultiplier
{
get { return (float)GetValue(ResourcesRespawnPeriodMultiplierProperty); }
@@ -2191,7 +2152,7 @@ public float ResourcesRespawnPeriodMultiplier
public static readonly DependencyProperty ResourceNoReplenishRadiusPlayersProperty = DependencyProperty.Register(nameof(ResourceNoReplenishRadiusPlayers), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float ResourceNoReplenishRadiusPlayers
{
get { return (float)GetValue(ResourceNoReplenishRadiusPlayersProperty); }
@@ -2200,7 +2161,7 @@ public float ResourceNoReplenishRadiusPlayers
public static readonly DependencyProperty ResourceNoReplenishRadiusStructuresProperty = DependencyProperty.Register(nameof(ResourceNoReplenishRadiusStructures), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float ResourceNoReplenishRadiusStructures
{
get { return (float)GetValue(ResourceNoReplenishRadiusStructuresProperty); }
@@ -2209,7 +2170,7 @@ public float ResourceNoReplenishRadiusStructures
public static readonly DependencyProperty HarvestHealthMultiplierProperty = DependencyProperty.Register(nameof(HarvestHealthMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment)]
public float HarvestHealthMultiplier
{
get { return (float)GetValue(HarvestHealthMultiplierProperty); }
@@ -2218,7 +2179,7 @@ public float HarvestHealthMultiplier
public static readonly DependencyProperty UseOptimizedHarvestingHealthProperty = DependencyProperty.Register(nameof(UseOptimizedHarvestingHealth), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(UseOptimizedHarvestingHealth))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment, ConditionedOn = nameof(UseOptimizedHarvestingHealth))]
public bool UseOptimizedHarvestingHealth
{
get { return (bool)GetValue(UseOptimizedHarvestingHealthProperty); }
@@ -2227,7 +2188,7 @@ public bool UseOptimizedHarvestingHealth
public static readonly DependencyProperty ClampResourceHarvestDamageProperty = DependencyProperty.Register(nameof(ClampResourceHarvestDamage), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(ClampResourceHarvestDamage))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment, ConditionedOn = nameof(ClampResourceHarvestDamage))]
public bool ClampResourceHarvestDamage
{
get { return (bool)GetValue(ClampResourceHarvestDamageProperty); }
@@ -2236,7 +2197,7 @@ public bool ClampResourceHarvestDamage
public static readonly DependencyProperty ClampItemSpoilingTimesProperty = DependencyProperty.Register(nameof(ClampItemSpoilingTimes), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(ClampItemSpoilingTimes))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment, ConditionedOn = nameof(ClampItemSpoilingTimes))]
public bool ClampItemSpoilingTimes
{
get { return (bool)GetValue(ClampItemSpoilingTimesProperty); }
@@ -2244,8 +2205,7 @@ public bool ClampItemSpoilingTimes
}
public static readonly DependencyProperty HarvestResourceItemAmountClassMultipliersProperty = DependencyProperty.Register(nameof(HarvestResourceItemAmountClassMultipliers), typeof(ResourceClassMultiplierList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public ResourceClassMultiplierList HarvestResourceItemAmountClassMultipliers
{
get { return (ResourceClassMultiplierList)GetValue(HarvestResourceItemAmountClassMultipliersProperty); }
@@ -2254,7 +2214,7 @@ public ResourceClassMultiplierList HarvestResourceItemAmountClassMultipliers
public static readonly DependencyProperty BaseTemperatureMultiplierProperty = DependencyProperty.Register(nameof(BaseTemperatureMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float BaseTemperatureMultiplier
{
get { return (float)GetValue(BaseTemperatureMultiplierProperty); }
@@ -2263,7 +2223,7 @@ public float BaseTemperatureMultiplier
public static readonly DependencyProperty DayCycleSpeedScaleProperty = DependencyProperty.Register(nameof(DayCycleSpeedScale), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment)]
public float DayCycleSpeedScale
{
get { return (float)GetValue(DayCycleSpeedScaleProperty); }
@@ -2272,7 +2232,7 @@ public float DayCycleSpeedScale
public static readonly DependencyProperty DayTimeSpeedScaleProperty = DependencyProperty.Register(nameof(DayTimeSpeedScale), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment)]
public float DayTimeSpeedScale
{
get { return (float)GetValue(DayTimeSpeedScaleProperty); }
@@ -2281,7 +2241,7 @@ public float DayTimeSpeedScale
public static readonly DependencyProperty NightTimeSpeedScaleProperty = DependencyProperty.Register(nameof(NightTimeSpeedScale), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment)]
public float NightTimeSpeedScale
{
get { return (float)GetValue(NightTimeSpeedScaleProperty); }
@@ -2290,7 +2250,7 @@ public float NightTimeSpeedScale
public static readonly DependencyProperty GlobalSpoilingTimeMultiplierProperty = DependencyProperty.Register(nameof(GlobalSpoilingTimeMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float GlobalSpoilingTimeMultiplier
{
get { return (float)GetValue(GlobalSpoilingTimeMultiplierProperty); }
@@ -2299,7 +2259,7 @@ public float GlobalSpoilingTimeMultiplier
public static readonly DependencyProperty GlobalCorpseDecompositionTimeMultiplierProperty = DependencyProperty.Register(nameof(GlobalCorpseDecompositionTimeMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float GlobalItemDecompositionTimeMultiplier
{
get { return (float)GetValue(GlobalItemDecompositionTimeMultiplierProperty); }
@@ -2308,7 +2268,7 @@ public float GlobalItemDecompositionTimeMultiplier
public static readonly DependencyProperty GlobalItemDecompositionTimeMultiplierProperty = DependencyProperty.Register(nameof(GlobalItemDecompositionTimeMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float GlobalCorpseDecompositionTimeMultiplier
{
get { return (float)GetValue(GlobalCorpseDecompositionTimeMultiplierProperty); }
@@ -2317,7 +2277,7 @@ public float GlobalCorpseDecompositionTimeMultiplier
public static readonly DependencyProperty CropDecaySpeedMultiplierProperty = DependencyProperty.Register(nameof(CropDecaySpeedMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float CropDecaySpeedMultiplier
{
get { return (float)GetValue(CropDecaySpeedMultiplierProperty); }
@@ -2326,7 +2286,7 @@ public float CropDecaySpeedMultiplier
public static readonly DependencyProperty CropGrowthSpeedMultiplierProperty = DependencyProperty.Register(nameof(CropGrowthSpeedMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float CropGrowthSpeedMultiplier
{
get { return (float)GetValue(CropGrowthSpeedMultiplierProperty); }
@@ -2335,7 +2295,7 @@ public float CropGrowthSpeedMultiplier
public static readonly DependencyProperty LayEggIntervalMultiplierProperty = DependencyProperty.Register(nameof(LayEggIntervalMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float LayEggIntervalMultiplier
{
get { return (float)GetValue(LayEggIntervalMultiplierProperty); }
@@ -2344,7 +2304,7 @@ public float LayEggIntervalMultiplier
public static readonly DependencyProperty PoopIntervalMultiplierProperty = DependencyProperty.Register(nameof(PoopIntervalMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float PoopIntervalMultiplier
{
get { return (float)GetValue(PoopIntervalMultiplierProperty); }
@@ -2353,7 +2313,7 @@ public float PoopIntervalMultiplier
public static readonly DependencyProperty HairGrowthSpeedMultiplierProperty = DependencyProperty.Register(nameof(HairGrowthSpeedMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float HairGrowthSpeedMultiplier
{
get { return (float)GetValue(HairGrowthSpeedMultiplierProperty); }
@@ -2362,7 +2322,7 @@ public float HairGrowthSpeedMultiplier
public static readonly DependencyProperty CraftXPMultiplierProperty = DependencyProperty.Register(nameof(CraftXPMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float CraftXPMultiplier
{
get { return (float)GetValue(CraftXPMultiplierProperty); }
@@ -2371,7 +2331,7 @@ public float CraftXPMultiplier
public static readonly DependencyProperty GenericXPMultiplierProperty = DependencyProperty.Register(nameof(GenericXPMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float GenericXPMultiplier
{
get { return (float)GetValue(GenericXPMultiplierProperty); }
@@ -2380,7 +2340,7 @@ public float GenericXPMultiplier
public static readonly DependencyProperty HarvestXPMultiplierProperty = DependencyProperty.Register(nameof(HarvestXPMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float HarvestXPMultiplier
{
get { return (float)GetValue(HarvestXPMultiplierProperty); }
@@ -2389,7 +2349,7 @@ public float HarvestXPMultiplier
public static readonly DependencyProperty KillXPMultiplierProperty = DependencyProperty.Register(nameof(KillXPMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float KillXPMultiplier
{
get { return (float)GetValue(KillXPMultiplierProperty); }
@@ -2398,7 +2358,7 @@ public float KillXPMultiplier
public static readonly DependencyProperty SpecialXPMultiplierProperty = DependencyProperty.Register(nameof(SpecialXPMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Environment)]
public float SpecialXPMultiplier
{
get { return (float)GetValue(SpecialXPMultiplierProperty); }
@@ -2407,7 +2367,7 @@ public float SpecialXPMultiplier
public static readonly DependencyProperty DisableWeatherFogProperty = DependencyProperty.Register(nameof(DisableWeatherFog), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Environment)]
public bool DisableWeatherFog
{
get { return (bool)GetValue(DisableWeatherFogProperty); }
@@ -2418,7 +2378,7 @@ public bool DisableWeatherFog
#region Structures
public static readonly DependencyProperty StructureResistanceMultiplierProperty = DependencyProperty.Register(nameof(StructureResistanceMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public float StructureResistanceMultiplier
{
get { return (float)GetValue(StructureResistanceMultiplierProperty); }
@@ -2427,7 +2387,7 @@ public float StructureResistanceMultiplier
public static readonly DependencyProperty StructureDamageMultiplierProperty = DependencyProperty.Register(nameof(StructureDamageMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public float StructureDamageMultiplier
{
get { return (float)GetValue(StructureDamageMultiplierProperty); }
@@ -2436,7 +2396,7 @@ public float StructureDamageMultiplier
public static readonly DependencyProperty StructureDamageRepairCooldownProperty = DependencyProperty.Register(nameof(StructureDamageRepairCooldown), typeof(int), typeof(ServerProfile), new PropertyMetadata(180));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Structures)]
public int StructureDamageRepairCooldown
{
get { return (int)GetValue(StructureDamageRepairCooldownProperty); }
@@ -2445,7 +2405,7 @@ public int StructureDamageRepairCooldown
public static readonly DependencyProperty PvPStructureDecayProperty = DependencyProperty.Register(nameof(PvPStructureDecay), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public bool PvPStructureDecay
{
get { return (bool)GetValue(PvPStructureDecayProperty); }
@@ -2454,7 +2414,7 @@ public bool PvPStructureDecay
public static readonly DependencyProperty PvPZoneStructureDamageMultiplierProperty = DependencyProperty.Register(nameof(PvPZoneStructureDamageMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(6.0f));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Structures)]
public float PvPZoneStructureDamageMultiplier
{
get { return (float)GetValue(PvPZoneStructureDamageMultiplierProperty); }
@@ -2463,7 +2423,7 @@ public float PvPZoneStructureDamageMultiplier
public static readonly DependencyProperty MaxStructuresVisibleProperty = DependencyProperty.Register(nameof(MaxStructuresVisible), typeof(float), typeof(ServerProfile), new PropertyMetadata(10500f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "TheMaxStructuresInRange")]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "TheMaxStructuresInRange", Category = ServerProfileCategory.Structures)]
public float MaxStructuresVisible
{
get { return (float)GetValue(MaxStructuresVisibleProperty); }
@@ -2472,7 +2432,7 @@ public float MaxStructuresVisible
public static readonly DependencyProperty PerPlatformMaxStructuresMultiplierProperty = DependencyProperty.Register(nameof(PerPlatformMaxStructuresMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public float PerPlatformMaxStructuresMultiplier
{
get { return (float)GetValue(PerPlatformMaxStructuresMultiplierProperty); }
@@ -2481,7 +2441,7 @@ public float PerPlatformMaxStructuresMultiplier
public static readonly DependencyProperty MaxPlatformSaddleStructureLimitProperty = DependencyProperty.Register(nameof(MaxPlatformSaddleStructureLimit), typeof(int), typeof(ServerProfile), new PropertyMetadata(50));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public int MaxPlatformSaddleStructureLimit
{
get { return (int)GetValue(MaxPlatformSaddleStructureLimitProperty); }
@@ -2490,7 +2450,7 @@ public int MaxPlatformSaddleStructureLimit
public static readonly DependencyProperty OverrideStructurePlatformPreventionProperty = DependencyProperty.Register(nameof(OverrideStructurePlatformPrevention), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public bool OverrideStructurePlatformPrevention
{
get { return (bool)GetValue(OverrideStructurePlatformPreventionProperty); }
@@ -2499,7 +2459,7 @@ public bool OverrideStructurePlatformPrevention
public static readonly DependencyProperty FlyerPlatformAllowUnalignedDinoBasingProperty = DependencyProperty.Register(nameof(FlyerPlatformAllowUnalignedDinoBasing), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bFlyerPlatformAllowUnalignedDinoBasing")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bFlyerPlatformAllowUnalignedDinoBasing", Category = ServerProfileCategory.Structures)]
public bool FlyerPlatformAllowUnalignedDinoBasing
{
get { return (bool)GetValue(FlyerPlatformAllowUnalignedDinoBasingProperty); }
@@ -2508,7 +2468,7 @@ public bool FlyerPlatformAllowUnalignedDinoBasing
public static readonly DependencyProperty PvEAllowStructuresAtSupplyDropsProperty = DependencyProperty.Register(nameof(PvEAllowStructuresAtSupplyDrops), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public bool PvEAllowStructuresAtSupplyDrops
{
get { return (bool)GetValue(PvEAllowStructuresAtSupplyDropsProperty); }
@@ -2517,7 +2477,7 @@ public bool PvEAllowStructuresAtSupplyDrops
public static readonly DependencyProperty EnableStructureDecayPvEProperty = DependencyProperty.Register(nameof(EnableStructureDecayPvE), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "DisableStructureDecayPVE", InvertBoolean = true)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "DisableStructureDecayPVE", Category = ServerProfileCategory.Structures, InvertBoolean = true)]
public bool EnableStructureDecayPvE
{
get { return (bool)GetValue(EnableStructureDecayPvEProperty); }
@@ -2526,7 +2486,7 @@ public bool EnableStructureDecayPvE
public static readonly DependencyProperty PvEStructureDecayDestructionPeriodProperty = DependencyProperty.Register(nameof(PvEStructureDecayDestructionPeriod), typeof(float), typeof(ServerProfile), new PropertyMetadata(0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableStructureDecayPvE))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures, ConditionedOn = nameof(EnableStructureDecayPvE))]
public float PvEStructureDecayDestructionPeriod
{
get { return (float)GetValue(PvEStructureDecayDestructionPeriodProperty); }
@@ -2535,7 +2495,7 @@ public float PvEStructureDecayDestructionPeriod
public static readonly DependencyProperty PvEStructureDecayPeriodMultiplierProperty = DependencyProperty.Register(nameof(PvEStructureDecayPeriodMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(1.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, ConditionedOn = nameof(EnableStructureDecayPvE))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures, ConditionedOn = nameof(EnableStructureDecayPvE))]
public float PvEStructureDecayPeriodMultiplier
{
get { return (float)GetValue(PvEStructureDecayPeriodMultiplierProperty); }
@@ -2544,7 +2504,7 @@ public float PvEStructureDecayPeriodMultiplier
public static readonly DependencyProperty AutoDestroyOldStructuresMultiplierProperty = DependencyProperty.Register(nameof(AutoDestroyOldStructuresMultiplier), typeof(float), typeof(ServerProfile), new PropertyMetadata(0.0f));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public float AutoDestroyOldStructuresMultiplier
{
get { return (float)GetValue(AutoDestroyOldStructuresMultiplierProperty); }
@@ -2553,7 +2513,7 @@ public float AutoDestroyOldStructuresMultiplier
public static readonly DependencyProperty ForceAllStructureLockingProperty = DependencyProperty.Register(nameof(ForceAllStructureLocking), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public bool ForceAllStructureLocking
{
get { return (bool)GetValue(ForceAllStructureLockingProperty); }
@@ -2562,7 +2522,7 @@ public bool ForceAllStructureLocking
public static readonly DependencyProperty PassiveDefensesDamageRiderlessDinosProperty = DependencyProperty.Register(nameof(PassiveDefensesDamageRiderlessDinos), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bPassiveDefensesDamageRiderlessDinos")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bPassiveDefensesDamageRiderlessDinos", Category = ServerProfileCategory.Structures)]
public bool PassiveDefensesDamageRiderlessDinos
{
get { return (bool)GetValue(PassiveDefensesDamageRiderlessDinosProperty); }
@@ -2579,7 +2539,7 @@ public bool EnableAutoDestroyStructures
public static readonly DependencyProperty OnlyAutoDestroyCoreStructuresProperty = DependencyProperty.Register(nameof(OnlyAutoDestroyCoreStructures), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public bool OnlyAutoDestroyCoreStructures
{
get { return (bool)GetValue(OnlyAutoDestroyCoreStructuresProperty); }
@@ -2588,7 +2548,7 @@ public bool OnlyAutoDestroyCoreStructures
public static readonly DependencyProperty OnlyDecayUnsnappedCoreStructuresProperty = DependencyProperty.Register(nameof(OnlyDecayUnsnappedCoreStructures), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public bool OnlyDecayUnsnappedCoreStructures
{
get { return (bool)GetValue(OnlyDecayUnsnappedCoreStructuresProperty); }
@@ -2597,7 +2557,7 @@ public bool OnlyDecayUnsnappedCoreStructures
public static readonly DependencyProperty FastDecayUnsnappedCoreStructuresProperty = DependencyProperty.Register(nameof(FastDecayUnsnappedCoreStructures), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public bool FastDecayUnsnappedCoreStructures
{
get { return (bool)GetValue(FastDecayUnsnappedCoreStructuresProperty); }
@@ -2606,7 +2566,7 @@ public bool FastDecayUnsnappedCoreStructures
public static readonly DependencyProperty DestroyUnconnectedWaterPipesProperty = DependencyProperty.Register(nameof(DestroyUnconnectedWaterPipes), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Category = ServerProfileCategory.Structures)]
public bool DestroyUnconnectedWaterPipes
{
get { return (bool)GetValue(DestroyUnconnectedWaterPipesProperty); }
@@ -2615,7 +2575,7 @@ public bool DestroyUnconnectedWaterPipes
public static readonly DependencyProperty DisableStructurePlacementCollisionProperty = DependencyProperty.Register(nameof(DisableStructurePlacementCollision), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableStructurePlacementCollision")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bDisableStructurePlacementCollision", Category = ServerProfileCategory.Structures)]
public bool DisableStructurePlacementCollision
{
get { return (bool)GetValue(DisableStructurePlacementCollisionProperty); }
@@ -2632,7 +2592,7 @@ public bool EnableFastDecayInterval
public static readonly DependencyProperty FastDecayIntervalProperty = DependencyProperty.Register(nameof(FastDecayInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(43200));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(EnableFastDecayInterval))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Structures, ConditionedOn = nameof(EnableFastDecayInterval))]
public int FastDecayInterval
{
get { return (int)GetValue(FastDecayIntervalProperty); }
@@ -2641,7 +2601,7 @@ public int FastDecayInterval
public static readonly DependencyProperty LimitTurretsInRangeProperty = DependencyProperty.Register(nameof(LimitTurretsInRange), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bLimitTurretsInRange")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bLimitTurretsInRange", Category = ServerProfileCategory.Structures)]
public bool LimitTurretsInRange
{
get { return (bool)GetValue(LimitTurretsInRangeProperty); }
@@ -2650,7 +2610,7 @@ public bool LimitTurretsInRange
public static readonly DependencyProperty LimitTurretsRangeProperty = DependencyProperty.Register(nameof(LimitTurretsRange), typeof(int), typeof(ServerProfile), new PropertyMetadata(10000));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(LimitTurretsInRange))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Structures, ConditionedOn = nameof(LimitTurretsInRange))]
public int LimitTurretsRange
{
get { return (int)GetValue(LimitTurretsRangeProperty); }
@@ -2659,7 +2619,7 @@ public int LimitTurretsRange
public static readonly DependencyProperty LimitTurretsNumProperty = DependencyProperty.Register(nameof(LimitTurretsNum), typeof(int), typeof(ServerProfile), new PropertyMetadata(100));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, ConditionedOn = nameof(LimitTurretsInRange))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Structures, ConditionedOn = nameof(LimitTurretsInRange))]
public int LimitTurretsNum
{
get { return (int)GetValue(LimitTurretsNumProperty); }
@@ -2668,7 +2628,7 @@ public int LimitTurretsNum
public static readonly DependencyProperty HardLimitTurretsInRangeProperty = DependencyProperty.Register(nameof(HardLimitTurretsInRange), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bHardLimitTurretsInRange")]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bHardLimitTurretsInRange", Category = ServerProfileCategory.Structures)]
public bool HardLimitTurretsInRange
{
get { return (bool)GetValue(HardLimitTurretsInRangeProperty); }
@@ -2679,7 +2639,7 @@ public bool HardLimitTurretsInRange
#region Engrams
public static readonly DependencyProperty OnlyAllowSpecifiedEngramsProperty = DependencyProperty.Register(nameof(OnlyAllowSpecifiedEngrams), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bOnlyAllowSpecifiedEngrams", ConditionedOn = nameof(OnlyAllowSpecifiedEngrams))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bOnlyAllowSpecifiedEngrams", Category = ServerProfileCategory.Engrams, ConditionedOn = nameof(OnlyAllowSpecifiedEngrams))]
public bool OnlyAllowSpecifiedEngrams
{
get { return (bool)GetValue(OnlyAllowSpecifiedEngramsProperty); }
@@ -2687,8 +2647,7 @@ public bool OnlyAllowSpecifiedEngrams
}
public static readonly DependencyProperty OverrideNamedEngramEntriesProperty = DependencyProperty.Register(nameof(OverrideNamedEngramEntries), typeof(EngramEntryList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.Engrams)]
public EngramEntryList OverrideNamedEngramEntries
{
get { return (EngramEntryList)GetValue(OverrideNamedEngramEntriesProperty); }
@@ -2697,7 +2656,7 @@ public EngramEntryList OverrideNamedEngramEntries
public static readonly DependencyProperty AutoUnlockAllEngramsProperty = DependencyProperty.Register(nameof(AutoUnlockAllEngrams), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAutoUnlockAllEngrams", ConditionedOn = nameof(AutoUnlockAllEngrams))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "bAutoUnlockAllEngrams", Category = ServerProfileCategory.Engrams, ConditionedOn = nameof(AutoUnlockAllEngrams))]
public bool AutoUnlockAllEngrams
{
get { return (bool)GetValue(AutoUnlockAllEngramsProperty); }
@@ -2707,8 +2666,7 @@ public bool AutoUnlockAllEngrams
#region Crafting Overrides
public static readonly DependencyProperty ConfigOverrideItemCraftingCostsProperty = DependencyProperty.Register(nameof(ConfigOverrideItemCraftingCosts), typeof(AggregateIniValueList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.CraftingOverrides)]
public AggregateIniValueList ConfigOverrideItemCraftingCosts
{
get { return (AggregateIniValueList)GetValue(ConfigOverrideItemCraftingCostsProperty); }
@@ -2718,8 +2676,6 @@ public AggregateIniValueList ConfigOverrideItemCraftingCosts
#region Custom Levels
public static readonly DependencyProperty EnableLevelProgressionsProperty = DependencyProperty.Register(nameof(EnableLevelProgressions), typeof(bool), typeof(ServerProfile), new PropertyMetadata(false));
- [XmlIgnore]
- //[DataMember]
public bool EnableLevelProgressions
{
get { return (bool)GetValue(EnableLevelProgressionsProperty); }
@@ -2727,8 +2683,6 @@ public bool EnableLevelProgressions
}
public static readonly DependencyProperty PlayerLevelsProperty = DependencyProperty.Register(nameof(PlayerLevels), typeof(LevelList), typeof(ServerProfile), new PropertyMetadata());
- [XmlIgnore]
- //[DataMember]
public LevelList PlayerLevels
{
get { return (LevelList)GetValue(PlayerLevelsProperty); }
@@ -2736,8 +2690,6 @@ public LevelList PlayerLevels
}
public static readonly DependencyProperty DinoLevelsProperty = DependencyProperty.Register(nameof(DinoLevels), typeof(LevelList), typeof(ServerProfile), new PropertyMetadata());
- [XmlIgnore]
- //[DataMember]
public LevelList DinoLevels
{
get { return (LevelList)GetValue(DinoLevelsProperty); }
@@ -2747,8 +2699,7 @@ public LevelList DinoLevels
#region Custom Settings
public static readonly DependencyProperty CustomGameUserSettingsSectionsProperty = DependencyProperty.Register(nameof(CustomGameUserSettingsSections), typeof(CustomSectionList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.Custom)]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.Custom, Category = ServerProfileCategory.CustomSettings)]
public CustomSectionList CustomGameUserSettingsSections
{
get { return (CustomSectionList)GetValue(CustomGameUserSettingsSectionsProperty); }
@@ -2802,7 +2753,7 @@ public bool PGM_Enabled
public static readonly DependencyProperty PGM_NameProperty = DependencyProperty.Register(nameof(PGM_Name), typeof(string), typeof(ServerProfile), new PropertyMetadata(Config.Default.DefaultPGMapName));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "PGMapName", ConditionedOn = nameof(PGM_Enabled))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "PGMapName", Category = ServerProfileCategory.PGM, ConditionedOn = nameof(PGM_Enabled))]
public string PGM_Name
{
get { return (string)GetValue(PGM_NameProperty); }
@@ -2811,7 +2762,7 @@ public string PGM_Name
public static readonly DependencyProperty PGM_TerrainProperty = DependencyProperty.Register(nameof(PGM_Terrain), typeof(PGMTerrain), typeof(ServerProfile), new PropertyMetadata(null));
[DataMember]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "PGTerrainPropertiesString", ConditionedOn = nameof(PGM_Enabled))]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, "PGTerrainPropertiesString", Category = ServerProfileCategory.PGM, ConditionedOn = nameof(PGM_Enabled))]
public PGMTerrain PGM_Terrain
{
get { return (PGMTerrain)GetValue(PGM_TerrainProperty); }
@@ -2822,8 +2773,7 @@ public PGMTerrain PGM_Terrain
#region NPC Spawn Overrides
public static readonly DependencyProperty ConfigAddNPCSpawnEntriesContainerProperty = DependencyProperty.Register(nameof(ConfigAddNPCSpawnEntriesContainer), typeof(NPCSpawnContainerList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.MapSpawnerOverrides)]
public NPCSpawnContainerList ConfigAddNPCSpawnEntriesContainer
{
get { return (NPCSpawnContainerList)GetValue(ConfigAddNPCSpawnEntriesContainerProperty); }
@@ -2831,8 +2781,7 @@ public NPCSpawnContainerList ConfigAddNPCSpawnEntriesContaine
}
public static readonly DependencyProperty ConfigSubtractNPCSpawnEntriesContainerProperty = DependencyProperty.Register(nameof(ConfigSubtractNPCSpawnEntriesContainer), typeof(NPCSpawnContainerList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.MapSpawnerOverrides)]
public NPCSpawnContainerList ConfigSubtractNPCSpawnEntriesContainer
{
get { return (NPCSpawnContainerList)GetValue(ConfigSubtractNPCSpawnEntriesContainerProperty); }
@@ -2840,8 +2789,7 @@ public NPCSpawnContainerList ConfigSubtractNPCSpawnEntriesCon
}
public static readonly DependencyProperty ConfigOverrideNPCSpawnEntriesContainerProperty = DependencyProperty.Register(nameof(ConfigOverrideNPCSpawnEntriesContainer), typeof(NPCSpawnContainerList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.MapSpawnerOverrides)]
public NPCSpawnContainerList ConfigOverrideNPCSpawnEntriesContainer
{
get { return (NPCSpawnContainerList)GetValue(ConfigOverrideNPCSpawnEntriesContainerProperty); }
@@ -2849,7 +2797,6 @@ public NPCSpawnContainerList ConfigOverrideNPCSpawnEntriesCon
}
public static readonly DependencyProperty NPCSpawnSettingsProperty = DependencyProperty.Register(nameof(NPCSpawnSettings), typeof(NPCSpawnSettingsList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
public NPCSpawnSettingsList NPCSpawnSettings
{
get { return (NPCSpawnSettingsList)GetValue(NPCSpawnSettingsProperty); }
@@ -2859,8 +2806,7 @@ public NPCSpawnSettingsList NPCSpawnSettings
#region Supply Drop Overrides
public static readonly DependencyProperty ConfigOverrideSupplyCrateItemsProperty = DependencyProperty.Register(nameof(ConfigOverrideSupplyCrateItems), typeof(SupplyCrateOverrideList), typeof(ServerProfile), new PropertyMetadata(null));
- [XmlIgnore]
- [IniFileEntry(IniFiles.Game, IniFileSections.GameMode)]
+ [IniFileEntry(IniFiles.Game, IniFileSections.GameMode, Category = ServerProfileCategory.SupplyCrateOverrides)]
public SupplyCrateOverrideList ConfigOverrideSupplyCrateItems
{
get { return (SupplyCrateOverrideList)GetValue(ConfigOverrideSupplyCrateItemsProperty); }
@@ -2911,7 +2857,7 @@ public bool SOTF_OutputGameReport
public static readonly DependencyProperty SOTF_MaxNumberOfPlayersInTribeProperty = DependencyProperty.Register(nameof(SOTF_MaxNumberOfPlayersInTribe), typeof(int), typeof(ServerProfile), new PropertyMetadata(2));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Key = "MaxNumberOfPlayersInTribe", ConditionedOn = nameof(SOTF_Enabled))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "MaxNumberOfPlayersInTribe", Category = ServerProfileCategory.SOTF, ConditionedOn = nameof(SOTF_Enabled))]
public int SOTF_MaxNumberOfPlayersInTribe
{
get { return (int)GetValue(SOTF_MaxNumberOfPlayersInTribeProperty); }
@@ -2920,7 +2866,7 @@ public int SOTF_MaxNumberOfPlayersInTribe
public static readonly DependencyProperty SOTF_BattleNumOfTribesToStartGameProperty = DependencyProperty.Register(nameof(SOTF_BattleNumOfTribesToStartGame), typeof(int), typeof(ServerProfile), new PropertyMetadata(15));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Key = "BattleNumOfTribesToStartGame", ConditionedOn = nameof(SOTF_Enabled))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "BattleNumOfTribesToStartGame", Category = ServerProfileCategory.SOTF, ConditionedOn = nameof(SOTF_Enabled))]
public int SOTF_BattleNumOfTribesToStartGame
{
get { return (int)GetValue(SOTF_BattleNumOfTribesToStartGameProperty); }
@@ -2929,7 +2875,7 @@ public int SOTF_BattleNumOfTribesToStartGame
public static readonly DependencyProperty SOTF_TimeToCollapseRODProperty = DependencyProperty.Register(nameof(SOTF_TimeToCollapseROD), typeof(int), typeof(ServerProfile), new PropertyMetadata(9000));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Key = "TimeToCollapseROD", ConditionedOn = nameof(SOTF_Enabled))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "TimeToCollapseROD", Category = ServerProfileCategory.SOTF, ConditionedOn = nameof(SOTF_Enabled))]
public int SOTF_TimeToCollapseROD
{
get { return (int)GetValue(SOTF_TimeToCollapseRODProperty); }
@@ -2938,7 +2884,7 @@ public int SOTF_TimeToCollapseROD
public static readonly DependencyProperty SOTF_BattleAutoStartGameIntervalProperty = DependencyProperty.Register(nameof(SOTF_BattleAutoStartGameInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(60));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Key = "BattleAutoStartGameInterval", ConditionedOn = nameof(SOTF_Enabled))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "BattleAutoStartGameInterval", Category = ServerProfileCategory.SOTF, ConditionedOn = nameof(SOTF_Enabled))]
public int SOTF_BattleAutoStartGameInterval
{
get { return (int)GetValue(SOTF_BattleAutoStartGameIntervalProperty); }
@@ -2947,7 +2893,7 @@ public int SOTF_BattleAutoStartGameInterval
public static readonly DependencyProperty SOTF_BattleAutoRestartGameIntervalProperty = DependencyProperty.Register(nameof(SOTF_BattleAutoRestartGameInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(45));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Key = "BattleAutoRestartGameInterval", ConditionedOn = nameof(SOTF_Enabled))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "BattleAutoRestartGameInterval", Category = ServerProfileCategory.SOTF, ConditionedOn = nameof(SOTF_Enabled))]
public int SOTF_BattleAutoRestartGameInterval
{
get { return (int)GetValue(SOTF_BattleAutoRestartGameIntervalProperty); }
@@ -2956,7 +2902,7 @@ public int SOTF_BattleAutoRestartGameInterval
public static readonly DependencyProperty SOTF_BattleSuddenDeathIntervalProperty = DependencyProperty.Register(nameof(SOTF_BattleSuddenDeathInterval), typeof(int), typeof(ServerProfile), new PropertyMetadata(300));
[DataMember]
- [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, Key = "BattleSuddenDeathInterval", ConditionedOn = nameof(SOTF_Enabled))]
+ [IniFileEntry(IniFiles.GameUserSettings, IniFileSections.ServerSettings, "BattleSuddenDeathInterval", Category = ServerProfileCategory.SOTF, ConditionedOn = nameof(SOTF_Enabled))]
public int SOTF_BattleSuddenDeathInterval
{
get { return (int)GetValue(SOTF_BattleSuddenDeathIntervalProperty); }
@@ -3101,6 +3047,34 @@ public void ChangeInstallationFolder(string folder)
SetupServerFilesWatcher();
}
+ public void ClearSteamAppManifestBranch()
+ {
+ if (!string.IsNullOrWhiteSpace(BranchName))
+ return;
+
+ try
+ {
+ var manifestFile = ModUtils.GetSteamManifestFile(InstallDirectory, SOTF_Enabled);
+ if (string.IsNullOrWhiteSpace(manifestFile) || !File.Exists(manifestFile))
+ return;
+
+ // load the manifest files
+ var vdfDeserializer = VdfDeserializer.FromFile(manifestFile);
+ var vdf = vdfDeserializer.Deserialize();
+
+ // clear any of th beta keys values
+ SteamCmdManifestDetailsResult.ClearUserConfigBetaKeys(vdf);
+
+ // save the manifest file
+ var vdfSerializer = new VdfSerializer(vdf);
+ vdfSerializer.Serialize(manifestFile);
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message, "Clear Branch Error", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
+ }
+
internal static ServerProfile FromDefaults()
{
var settings = new ServerProfile();
@@ -3154,26 +3128,33 @@ private void GetDefaultDirectories()
}
}
- private static string[] GetExclusions()
+ private static ServerProfileCategory[] GetExclusions()
{
- var exclusions = new List();
+ var exclusions = new List();
if (!Config.Default.SectionCraftingOverridesEnabled)
{
- exclusions.Add(nameof(ConfigOverrideItemCraftingCosts));
+ exclusions.Add(ServerProfileCategory.CraftingOverrides);
}
if (!Config.Default.SectionMapSpawnerOverridesEnabled)
{
- exclusions.Add(nameof(ConfigAddNPCSpawnEntriesContainer));
- exclusions.Add(nameof(ConfigSubtractNPCSpawnEntriesContainer));
- exclusions.Add(nameof(ConfigOverrideNPCSpawnEntriesContainer));
- exclusions.Add(nameof(NPCSpawnSettings));
+ exclusions.Add(ServerProfileCategory.MapSpawnerOverrides);
}
if (!Config.Default.SectionSupplyCrateOverridesEnabled)
{
- exclusions.Add(nameof(ConfigOverrideSupplyCrateItems));
+ exclusions.Add(ServerProfileCategory.SupplyCrateOverrides);
+ }
+
+ if (!Config.Default.SectionPGMEnabled)
+ {
+ exclusions.Add(ServerProfileCategory.PGM);
+ }
+
+ if (!Config.Default.SectionSOTFEnabled)
+ {
+ exclusions.Add(ServerProfileCategory.SOTF);
}
return exclusions.ToArray();
@@ -3205,7 +3186,7 @@ public string GetLauncherFile()
public string GetProfileIniDir()
{
- return Path.Combine(Path.GetDirectoryName(GetProfileFile()), this.ProfileName);
+ return Path.Combine(Path.GetDirectoryName(GetProfileFileOld()), this.ProfileName);
}
public string GetProfileKey()
@@ -3213,14 +3194,14 @@ public string GetProfileKey()
return TaskSchedulerUtils.ComputeKey(this.InstallDirectory);
}
- public string GetProfileFile()
+ public string GetProfileFileOld()
{
- return Path.Combine(Config.Default.ConfigDirectory, Path.ChangeExtension(this.ProfileName, Config.Default.ProfileExtension));
+ return Path.Combine(Config.Default.ConfigDirectory, Path.ChangeExtension(this.ProfileName, Config.Default.ProfileExtensionOld));
}
- public string GetProfileFileNew()
+ public string GetProfileFile()
{
- return Path.Combine(Config.Default.ConfigDirectory, Path.ChangeExtension(this.ProfileName, Config.Default.ProfileExtensionNew));
+ return Path.Combine(Config.Default.ConfigDirectory, Path.ChangeExtension(this.ProfileName, Config.Default.ProfileExtension));
}
public string GetServerAppId()
@@ -3254,8 +3235,8 @@ public string GetServerArgs()
{
serverArgs.Append("?MultiHome=").Append(this.ServerIP);
}
- serverArgs.Append("?Port=").Append(this.ServerConnectionPort);
- serverArgs.Append("?QueryPort=").Append(this.ServerPort);
+ serverArgs.Append("?Port=").Append(this.ServerPort);
+ serverArgs.Append("?QueryPort=").Append(this.QueryPort);
serverArgs.Append("?MaxPlayers=").Append(this.MaxPlayers);
if (this.UseRawSockets)
@@ -3263,19 +3244,19 @@ public string GetServerArgs()
serverArgs.Append("?bRawSockets");
}
- if (this.ForceFlyerExplosives)
+ if (!string.IsNullOrWhiteSpace(this.AltSaveDirectoryName))
{
- serverArgs.Append("?ForceFlyerExplosives=true");
+ serverArgs.Append($"?AltSaveDirectoryName={this.AltSaveDirectoryName}");
}
- if (!string.IsNullOrWhiteSpace(this.AltSaveDirectoryName))
+ if (this.ForceFlyerExplosives)
{
- serverArgs.Append($"?AltSaveDirectoryName={this.AltSaveDirectoryName}");
+ serverArgs.Append("?ForceFlyerExplosives=true");
}
serverArgs.Append($"?AllowCrateSpawnsOnTopOfStructures={this.AllowCrateSpawnsOnTopOfStructures.ToString()}");
- if (this.SOTF_Enabled)
+ if (Config.Default.SectionSOTFEnabled && this.SOTF_Enabled)
{
serverArgs.Append("?EvoEventInterval=").Append(this.SOTF_EvoEventInterval);
serverArgs.Append("?RingStartTime=").Append(this.SOTF_RingStartTime);
@@ -3319,7 +3300,7 @@ public string GetServerArgs()
serverArgs.Append(" -nofishloot");
}
- if(this.SOTF_Enabled)
+ if (Config.Default.SectionSOTFEnabled && this.SOTF_Enabled)
{
if (this.SOTF_OutputGameReport)
{
@@ -3506,12 +3487,12 @@ public static ServerProfile LoadFrom(string file)
if (string.IsNullOrWhiteSpace(file) || !File.Exists(file))
return null;
+ if (Path.GetExtension(file) == Config.Default.ProfileExtensionOld)
+ return null;
+
if (Path.GetExtension(file) == Config.Default.ProfileExtension)
return LoadFromProfileFile(file);
- if (Path.GetExtension(file) == Config.Default.ProfileExtensionNew)
- return LoadFromProfileFileNew(file);
-
var filePath = Path.GetDirectoryName(file);
if (!filePath.EndsWith(Config.Default.ServerConfigRelativePath))
return null;
@@ -3585,61 +3566,13 @@ public static ServerProfile LoadFromProfileFile(string file)
return null;
ServerProfile settings = null;
- XmlSerializer serializer = new XmlSerializer(typeof(ServerProfile));
- using (var reader = File.OpenRead(file))
- {
- settings = (ServerProfile)serializer.Deserialize(reader);
- }
-
- var profileIniPath = Path.Combine(Path.ChangeExtension(file, null), Config.Default.ServerGameUserSettingsConfigFile);
- var configIniPath = Path.Combine(settings.InstallDirectory, Config.Default.ServerConfigRelativePath, Config.Default.ServerGameUserSettingsConfigFile);
- if (File.Exists(configIniPath))
- {
- settings = LoadFromINIFiles(configIniPath, settings);
- }
- else if (File.Exists(profileIniPath))
- {
- settings = LoadFromINIFiles(profileIniPath, settings);
- }
-
- if (settings.PlayerLevels.Count == 0)
- {
- settings.ResetLevelProgressionToOfficial(LevelProgression.Player);
- settings.ResetLevelProgressionToOfficial(LevelProgression.Dino);
- settings.EnableLevelProgressions = false;
- }
-
- //
- // Since these are not inserted the normal way, we force a recomputation here.
- //
- settings.PlayerLevels.UpdateTotals();
- settings.DinoLevels.UpdateTotals();
- settings.DinoSettings.RenderToView();
- if (Config.Default.SectionMapSpawnerOverridesEnabled)
- settings.NPCSpawnSettings.RenderToView();
- if (Config.Default.SectionSupplyCrateOverridesEnabled)
- settings.ConfigOverrideSupplyCrateItems.RenderToView();
-
- settings.LoadServerFileAdministrators();
- settings.LoadServerFileExclusive();
- settings.LoadServerFileWhitelisted();
- settings.SetupServerFilesWatcher();
-
- settings._lastSaveLocation = file;
- settings.IsDirty = false;
- return settings;
- }
-
- public static ServerProfile LoadFromProfileFileNew(string file)
- {
- if (string.IsNullOrWhiteSpace(file) || !File.Exists(file))
- return null;
+ settings = JsonUtils.DeserializeFromFile(file);
- if (Path.GetExtension(file) != Config.Default.ProfileExtensionNew)
- return null;
+ if (settings.PGM_Enabled)
+ Config.Default.SectionPGMEnabled = true;
- ServerProfile settings = null;
- settings = JsonUtils.DeserializeFromFile(file);
+ if (settings.SOTF_Enabled)
+ Config.Default.SectionSOTFEnabled = true;
var profileIniPath = Path.Combine(Path.ChangeExtension(file, null), Config.Default.ServerGameUserSettingsConfigFile);
var configIniPath = Path.Combine(settings.InstallDirectory, Config.Default.ServerConfigRelativePath, Config.Default.ServerGameUserSettingsConfigFile);
@@ -3689,6 +3622,9 @@ public void Save(bool updateFolderPermissions, bool updateSchedules, ProgressDel
if (SOTF_Enabled)
{
+ BranchName = string.Empty;
+ BranchPassword = string.Empty;
+
// ensure that the auto settings are switched off for SotF servers
EnableAutoBackup = false;
EnableAutoShutdown1 = false;
@@ -3702,6 +3638,8 @@ public void Save(bool updateFolderPermissions, bool updateSchedules, ProgressDel
PGM_Enabled = false;
}
+ ClearSteamAppManifestBranch();
+
if (!OverrideNamedEngramEntries.IsEnabled)
OnlyAllowSpecifiedEngrams = false;
OverrideNamedEngramEntries.OnlyAllowSelectedEngrams = OnlyAllowSpecifiedEngrams;
@@ -3757,6 +3695,16 @@ public void Save(bool updateFolderPermissions, bool updateSchedules, ProgressDel
this.ConfigOverrideSupplyCrateItems.RenderToModel();
}
+ if (!Config.Default.SectionPGMEnabled)
+ {
+ PGM_Enabled = false;
+ }
+
+ if (!Config.Default.SectionSOTFEnabled)
+ {
+ SOTF_Enabled = false;
+ }
+
//
// Save the profile
//
@@ -3776,14 +3724,14 @@ public void Save(bool updateFolderPermissions, bool updateSchedules, ProgressDel
//
// If this was a rename, remove the old profile after writing the new one.
//
- if (!String.Equals(GetProfileFileNew(), this._lastSaveLocation, StringComparison.OrdinalIgnoreCase))
+ if (!String.Equals(GetProfileFile(), this._lastSaveLocation, StringComparison.OrdinalIgnoreCase))
{
try
{
if (File.Exists(this._lastSaveLocation))
File.Delete(this._lastSaveLocation);
- var profileFile = Path.ChangeExtension(this._lastSaveLocation, Config.Default.ProfileExtension);
+ var profileFile = Path.ChangeExtension(this._lastSaveLocation, Config.Default.ProfileExtensionOld);
if (File.Exists(profileFile))
File.Delete(profileFile);
@@ -3796,7 +3744,7 @@ public void Save(bool updateFolderPermissions, bool updateSchedules, ProgressDel
// We tried...
}
- this._lastSaveLocation = GetProfileFileNew();
+ this._lastSaveLocation = GetProfileFile();
}
progressCallback?.Invoke(0, "Saving Launcher File...");
@@ -3823,14 +3771,19 @@ public void SaveProfile()
//
// Save the profile
//
- var serializer = new XmlSerializer(this.GetType());
- using (var stream = File.Open(GetProfileFile(), FileMode.Create))
+ JsonUtils.Serialize(this, GetProfileFile());
+ this.IsDirty = false;
+
+ // delete the old profile
+ var oldProfileFile = GetProfileFileOld();
+ if (File.Exists(oldProfileFile))
{
- serializer.Serialize(stream, this);
+ try
+ {
+ File.Delete(oldProfileFile);
+ }
+ catch (Exception) {}
}
-
- JsonUtils.Serialize(this, GetProfileFileNew());
- this.IsDirty = false;
}
private void SaveLauncher()
@@ -3987,9 +3940,9 @@ public bool Validate(bool forceValidate, out string validationMessage)
var appId = SOTF_Enabled ? Config.Default.AppId_SotF : Config.Default.AppId;
// checking the port values are within the valid range
- if (ServerConnectionPort < ushort.MinValue || ServerConnectionPort > ushort.MaxValue)
- result.AppendLine($"The server port is outside the valid range ({ushort.MinValue}-{ushort.MaxValue}).");
if (ServerPort < ushort.MinValue || ServerPort > ushort.MaxValue)
+ result.AppendLine($"The server port is outside the valid range ({ushort.MinValue}-{ushort.MaxValue}).");
+ if (QueryPort < ushort.MinValue || QueryPort > ushort.MaxValue)
result.AppendLine($"The query port is outside the valid range ({ushort.MinValue}-{ushort.MaxValue}).");
if (RCONPort < ushort.MinValue || RCONPort > ushort.MaxValue)
result.AppendLine($"The rcon port is outside the valid range ({ushort.MinValue}-{ushort.MaxValue}).");
@@ -4165,20 +4118,6 @@ public bool Validate(bool forceValidate, out string validationMessage)
}
public string ToOutputString()
- {
- //
- // serializes the profile to a string
- //
- var result = new StringBuilder();
- var serializer = new XmlSerializer(this.GetType());
- using (var stream = new StringWriter(result))
- {
- serializer.Serialize(stream, this);
- }
- return result.ToString();
- }
-
- public string ToOutputStringNew()
{
//
// serializes the profile to a string
@@ -4562,8 +4501,8 @@ public void ResetAdministrationSection()
this.ClearValue(AdminPasswordProperty);
this.ClearValue(SpectatorPasswordProperty);
- this.ClearValue(ServerConnectionPortProperty);
this.ClearValue(ServerPortProperty);
+ this.ClearValue(QueryPortProperty);
this.ClearValue(ServerIPProperty);
this.ClearValue(UseRawSocketsProperty);
this.ClearValue(NoNetThreadingProperty);
@@ -4599,6 +4538,11 @@ public void ResetAdministrationSection()
this.ClearValue(WebAlarmKeyProperty);
this.ClearValue(WebAlarmUrlProperty);
+ this.ClearValue(BranchNameProperty);
+ this.ClearValue(BranchPasswordProperty);
+
+ this.ClearValue(LauncherArgsOverrideProperty);
+ this.ClearValue(LauncherArgsProperty);
this.ClearValue(AdditionalArgsProperty);
}
@@ -4943,65 +4887,65 @@ public void UpdateOverrideMaxExperiencePointsPlayer()
#endregion
#region Sync Methods
- public void SyncSettings(ServerProfileSection section, ServerProfile sourceProfile)
+ public void SyncSettings(ServerProfileCategory section, ServerProfile sourceProfile)
{
if (sourceProfile == null)
return;
switch (section)
{
- case ServerProfileSection.AdministrationSection:
+ case ServerProfileCategory.Administration:
SyncAdministrationSection(sourceProfile);
break;
- case ServerProfileSection.AutomaticManagement:
+ case ServerProfileCategory.AutomaticManagement:
SyncAutomaticManagement(sourceProfile);
break;
- case ServerProfileSection.RulesSection:
+ case ServerProfileCategory.Rules:
SyncRulesSection(sourceProfile);
break;
- case ServerProfileSection.ChatAndNotificationsSection:
+ case ServerProfileCategory.ChatAndNotifications:
SyncChatAndNotificationsSection(sourceProfile);
break;
- case ServerProfileSection.HudAndVisualsSection:
+ case ServerProfileCategory.HudAndVisuals:
SyncHudAndVisualsSection(sourceProfile);
break;
- case ServerProfileSection.PlayerSettingsSection:
+ case ServerProfileCategory.Players:
SyncPlayerSettingsSection(sourceProfile);
break;
- case ServerProfileSection.DinoSettingsSection:
+ case ServerProfileCategory.Dinos:
SyncDinoSettingsSection(sourceProfile);
break;
- case ServerProfileSection.EnvironmentSection:
+ case ServerProfileCategory.Environment:
SyncEnvironmentSection(sourceProfile);
break;
- case ServerProfileSection.StructuresSection:
+ case ServerProfileCategory.Structures:
SyncStructuresSection(sourceProfile);
break;
- case ServerProfileSection.EngramsSection:
+ case ServerProfileCategory.Engrams:
SyncEngramsSection(sourceProfile);
break;
- case ServerProfileSection.ServerFiles:
+ case ServerProfileCategory.ServerFiles:
SyncServerFiles(sourceProfile);
break;
- case ServerProfileSection.CustomSettingsSection:
+ case ServerProfileCategory.CustomSettings:
SyncCustomSettingsSection(sourceProfile);
break;
- case ServerProfileSection.CustomLevelsSection:
+ case ServerProfileCategory.CustomLevels:
SyncCustomLevelsSection(sourceProfile);
break;
- case ServerProfileSection.MapSpawnerOverridesSection:
+ case ServerProfileCategory.MapSpawnerOverrides:
SyncNPCSpawnOverridesSection(sourceProfile);
break;
- case ServerProfileSection.CraftingOverridesSection:
+ case ServerProfileCategory.CraftingOverrides:
SyncCraftingOverridesSection(sourceProfile);
break;
- case ServerProfileSection.SupplyCrateOverridesSection:
+ case ServerProfileCategory.SupplyCrateOverrides:
SyncSupplyCrateOverridesSection(sourceProfile);
break;
- case ServerProfileSection.PGMSection:
+ case ServerProfileCategory.PGM:
SyncPGMSection(sourceProfile);
break;
- case ServerProfileSection.SOTFSection:
+ case ServerProfileCategory.SOTF:
SyncSOTFSection(sourceProfile);
break;
}
@@ -5012,8 +4956,8 @@ private void SyncAdministrationSection(ServerProfile sourceProfile)
this.SetValue(ServerPasswordProperty, sourceProfile.ServerPassword);
this.SetValue(AdminPasswordProperty, sourceProfile.AdminPassword);
this.SetValue(SpectatorPasswordProperty, sourceProfile.SpectatorPassword);
- this.SetValue(ServerConnectionPortProperty, sourceProfile.ServerConnectionPort);
this.SetValue(ServerPortProperty, sourceProfile.ServerPort);
+ this.SetValue(QueryPortProperty, sourceProfile.QueryPort);
this.SetValue(ServerIPProperty, sourceProfile.ServerIP);
this.SetValue(UseRawSocketsProperty, sourceProfile.UseRawSockets);
this.SetValue(NoNetThreadingProperty, sourceProfile.NoNetThreading);
@@ -5078,9 +5022,12 @@ private void SyncAdministrationSection(ServerProfile sourceProfile)
this.SetValue(CrossArkClusterIdProperty, sourceProfile.CrossArkClusterId);
this.SetValue(ClusterDirOverrideProperty, sourceProfile.ClusterDirOverride);
- this.SetValue(AdditionalArgsProperty, sourceProfile.AdditionalArgs);
+ this.SetValue(BranchNameProperty, sourceProfile.BranchName);
+ this.SetValue(BranchPasswordProperty, sourceProfile.BranchPassword);
+
this.SetValue(LauncherArgsOverrideProperty, sourceProfile.LauncherArgsOverride);
this.SetValue(LauncherArgsProperty, sourceProfile.LauncherArgs);
+ this.SetValue(AdditionalArgsProperty, sourceProfile.AdditionalArgs);
}
private void SyncAutomaticManagement(ServerProfile sourceProfile)
diff --git a/ARK Server Manager/Lib/ServerProfileSnapshot.cs b/ARK Server Manager/Lib/ServerProfileSnapshot.cs
index a98aab48..ae23c6e1 100644
--- a/ARK Server Manager/Lib/ServerProfileSnapshot.cs
+++ b/ARK Server Manager/Lib/ServerProfileSnapshot.cs
@@ -25,10 +25,12 @@ public class ServerProfileSnapshot
public string ServerMapModId;
public string TotalConversionModId;
public List ServerModIds;
- public string LastInstalledVersion;
public int MotDDuration;
public bool ForceRespawnDinos;
+ public string BranchName;
+ public string BranchPassword;
+
public string SchedulerKey;
public bool EnableAutoBackup;
public bool EnableAutoUpdate;
@@ -45,6 +47,7 @@ public class ServerProfileSnapshot
public int MaxPlayerCount;
public bool ServerUpdated;
+ public string LastInstalledVersion;
public static ServerProfileSnapshot Create(ServerProfile profile)
{
@@ -60,8 +63,8 @@ public static ServerProfileSnapshot Create(ServerProfile profile)
ServerName = profile.ServerName,
ServerArgs = profile.GetServerArgs(),
ServerIP = string.IsNullOrWhiteSpace(profile.ServerIP) ? IPAddress.Loopback.ToString() : profile.ServerIP.Trim(),
- ServerPort = profile.ServerConnectionPort,
- QueryPort = profile.ServerPort,
+ ServerPort = profile.ServerPort,
+ QueryPort = profile.QueryPort,
UseRawSockets = profile.UseRawSockets,
RCONEnabled = profile.RCONEnabled,
RCONPort = profile.RCONPort,
@@ -72,6 +75,9 @@ public static ServerProfileSnapshot Create(ServerProfile profile)
MotDDuration = Math.Max(profile.MOTDDuration, 10),
ForceRespawnDinos = profile.ForceRespawnDinos,
+ BranchName = profile.BranchName,
+ BranchPassword = profile.BranchPassword,
+
SchedulerKey = profile.GetProfileKey(),
EnableAutoBackup = profile.EnableAutoBackup,
EnableAutoUpdate = profile.EnableAutoUpdate,
@@ -85,10 +91,10 @@ public static ServerProfileSnapshot Create(ServerProfile profile)
SotFEnabled = profile.SOTF_Enabled,
- LastInstalledVersion = profile.LastInstalledVersion ?? new Version(0, 0).ToString(),
MaxPlayerCount = profile.MaxPlayers,
ServerUpdated = false,
+ LastInstalledVersion = profile.LastInstalledVersion ?? new Version(0, 0).ToString(),
};
}
diff --git a/ARK Server Manager/Lib/ServerRuntime.cs b/ARK Server Manager/Lib/ServerRuntime.cs
index 3505e3c9..c9d83be2 100644
--- a/ARK Server Manager/Lib/ServerRuntime.cs
+++ b/ARK Server Manager/Lib/ServerRuntime.cs
@@ -7,6 +7,7 @@
using System.IO;
using System.Linq;
using System.Net;
+using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
@@ -118,7 +119,7 @@ public int OutOfDateModCount
public void Dispose()
{
- this.updateRegistration.DisposeAsync().DoNotWait();
+ this.updateRegistration?.DisposeAsync().DoNotWait();
}
public Task AttachToProfile(ServerProfile profile)
@@ -134,8 +135,7 @@ private void AttachToProfileCore(ServerProfile profile)
this.ProfileSnapshot = ServerProfileSnapshot.Create(profile);
- Version lastInstalled;
- if (Version.TryParse(profile.LastInstalledVersion, out lastInstalled))
+ if (Version.TryParse(profile.LastInstalledVersion, out Version lastInstalled))
{
this.Version = lastInstalled;
}
@@ -158,8 +158,8 @@ private void GetProfilePropertyChanges(ServerProfile profile)
new[] {
ServerProfile.ProfileNameProperty,
ServerProfile.InstallDirectoryProperty,
+ ServerProfile.QueryPortProperty,
ServerProfile.ServerPortProperty,
- ServerProfile.ServerConnectionPortProperty,
ServerProfile.ServerIPProperty,
ServerProfile.MaxPlayersProperty,
@@ -284,8 +284,8 @@ private void ProcessStatusUpdate(IAsyncDisposable registration, ServerStatusWatc
break;
}
- this.Players = 0;
- this.MaxPlayers = this.ProfileSnapshot.MaxPlayerCount;
+ this.Players = update.Players?.Count ?? 0;
+ this.MaxPlayers = update.ServerInfo?.MaxPlayers ?? this.ProfileSnapshot.MaxPlayerCount;
if (update.ServerInfo != null)
{
@@ -293,16 +293,11 @@ private void ProcessStatusUpdate(IAsyncDisposable registration, ServerStatusWatc
if (match.Success && match.Groups.Count >= 2)
{
var serverVersion = match.Groups[1].Value;
- Version temp;
- if (!String.IsNullOrWhiteSpace(serverVersion) && Version.TryParse(serverVersion, out temp))
+ if (!String.IsNullOrWhiteSpace(serverVersion) && Version.TryParse(serverVersion, out Version temp))
{
this.Version = temp;
}
}
-
- // set the player count using the players list, as this should only contain the current valid players.
- this.Players = update.Players.Count;
- this.MaxPlayers = update.ServerInfo.MaxPlayers;
}
UpdateModStatus();
@@ -360,13 +355,10 @@ private void RegisterForUpdates()
private void UnregisterForUpdates()
{
- if (this.updateRegistration != null)
- {
- this.updateRegistration.DisposeAsync().DoNotWait();
- this.updateRegistration = null;
- }
+ this.updateRegistration?.DisposeAsync().DoNotWait();
+ this.updateRegistration = null;
}
-
+
private void CheckServerWorldFileExists()
{
@@ -458,8 +450,6 @@ public async Task StopAsync()
case ServerStatus.Initializing:
try
{
- UnregisterForUpdates();
-
if (this.serverProcess != null)
{
UpdateServerStatus(ServerStatus.Stopping, SteamStatus.Unavailable, false);
@@ -484,12 +474,12 @@ public async Task StopAsync()
}
- public async Task UpgradeAsync(CancellationToken cancellationToken, bool updateServer, bool validate, bool updateMods, ProgressDelegate progressCallback)
+ public async Task UpgradeAsync(CancellationToken cancellationToken, bool updateServer, ServerBranchSnapshot branch, bool validate, bool updateMods, ProgressDelegate progressCallback)
{
- return await UpgradeAsync(cancellationToken, updateServer, validate, updateMods, null, progressCallback);
+ return await UpgradeAsync(cancellationToken, updateServer, branch, validate, updateMods, null, progressCallback);
}
- public async Task UpgradeAsync(CancellationToken cancellationToken, bool updateServer, bool validate, bool updateMods, string[] updateModIds, ProgressDelegate progressCallback)
+ public async Task UpgradeAsync(CancellationToken cancellationToken, bool updateServer, ServerBranchSnapshot branch, bool validate, bool updateMods, string[] updateModIds, ProgressDelegate progressCallback)
{
if (updateServer && !Environment.Is64BitOperatingSystem)
{
@@ -532,12 +522,25 @@ public async Task UpgradeAsync(CancellationToken cancellationToken, bool u
// *********************
progressCallback?.Invoke(0, $"{SteamCmdUpdater.OUTPUT_PREFIX} Starting server update.");
+ progressCallback?.Invoke(0, $"{SteamCmdUpdater.OUTPUT_PREFIX} Server branch: {ServerApp.GetBranchName(branch?.BranchName)}.");
+
+ // create the branch arguments
+ var steamCmdInstallServerBetaArgs = new StringBuilder();
+ if (!string.IsNullOrWhiteSpace(branch?.BranchName))
+ {
+ steamCmdInstallServerBetaArgs.AppendFormat(Config.Default.SteamCmdInstallServerBetaNameArgsFormat, branch.BranchName);
+ if (!string.IsNullOrWhiteSpace(branch?.BranchPassword))
+ steamCmdInstallServerBetaArgs.AppendFormat(Config.Default.SteamCmdInstallServerBetaPasswordArgsFormat, branch?.BranchPassword);
+ }
// Check if this is a new server installation.
- if (isNewInstallation)
+ if (isNewInstallation && !this.ProfileSnapshot.SotFEnabled && Config.Default.AutoUpdate_EnableUpdate && !string.IsNullOrWhiteSpace(Config.Default.AutoUpdate_CacheDir))
{
+ var branchName = string.IsNullOrWhiteSpace(branch?.BranchName) ? Config.Default.DefaultServerBranchName : branch.BranchName;
+ var cacheFolder = IOUtils.NormalizePath(Path.Combine(Config.Default.AutoUpdate_CacheDir, $"{Config.Default.ServerBranchFolderPrefix}{branchName}"));
+
// check if the auto-update facility is enabled and the cache folder defined.
- if (!this.ProfileSnapshot.SotFEnabled && Config.Default.AutoUpdate_EnableUpdate && !string.IsNullOrWhiteSpace(Config.Default.AutoUpdate_CacheDir) && Directory.Exists(Config.Default.AutoUpdate_CacheDir))
+ if (!string.IsNullOrWhiteSpace(cacheFolder) && Directory.Exists(cacheFolder))
{
// Auto-Update enabled and cache foldler exists.
progressCallback?.Invoke(0, $"{SteamCmdUpdater.OUTPUT_PREFIX} Installing server from local cache...may take a while to copy all the files.");
@@ -545,12 +548,12 @@ public async Task UpgradeAsync(CancellationToken cancellationToken, bool u
// Install the server files from the cache.
var installationFolder = this.ProfileSnapshot.InstallDirectory;
int count = 0;
- await Task.Run(() =>
- ServerApp.DirectoryCopy(Config.Default.AutoUpdate_CacheDir, installationFolder, true, Config.Default.AutoUpdate_UseSmartCopy, (p, m, n) =>
- {
- count++;
- progressCallback?.Invoke(0, ".", count % DIRECTORIES_PER_LINE == 0);
- }), cancellationToken);
+ await Task.Run(() =>
+ ServerApp.DirectoryCopy(cacheFolder, installationFolder, true, Config.Default.AutoUpdate_UseSmartCopy, (p, m, n) =>
+ {
+ count++;
+ progressCallback?.Invoke(0, ".", count % DIRECTORIES_PER_LINE == 0);
+ }), cancellationToken);
}
}
@@ -573,7 +576,7 @@ await Task.Run(() =>
};
var steamCmdInstallServerArgsFormat = this.ProfileSnapshot.SotFEnabled ? Config.Default.SteamCmdInstallServerArgsFormat_SotF : Config.Default.SteamCmdInstallServerArgsFormat;
- var steamCmdArgs = String.Format(steamCmdInstallServerArgsFormat, this.ProfileSnapshot.InstallDirectory, validate ? "validate" : string.Empty);
+ var steamCmdArgs = String.Format(steamCmdInstallServerArgsFormat, this.ProfileSnapshot.InstallDirectory, steamCmdInstallServerBetaArgs, validate ? "validate" : string.Empty);
success = await ServerUpdater.UpgradeServerAsync(steamCmdFile, steamCmdArgs, this.ProfileSnapshot.InstallDirectory, Config.Default.SteamCmdRedirectOutput ? serverOutputHandler : null, cancellationToken, ProcessWindowStyle.Minimized);
if (success && downloadSuccessful)
diff --git a/ARK Server Manager/Lib/Utils/GameDataUtils.cs b/ARK Server Manager/Lib/Utils/GameDataUtils.cs
index bbe6352d..41065675 100644
--- a/ARK Server Manager/Lib/Utils/GameDataUtils.cs
+++ b/ARK Server Manager/Lib/Utils/GameDataUtils.cs
@@ -35,6 +35,7 @@ public static void ReadAllData(out BaseGameData data, string dataFolder = null,
data.Mods.AddRange(fileData.Mods);
data.PlayerLevels.AddRange(fileData.PlayerLevels);
data.CreatureLevels.AddRange(fileData.CreatureLevels);
+ data.Branches.AddRange(fileData.Branches);
}
}
@@ -416,6 +417,9 @@ public class BaseGameData
[DataMember(IsRequired = false)]
public List CreatureLevels = new List();
+ [DataMember(IsRequired = false)]
+ public List Branches = new List();
+
public static BaseGameData Load(string file, bool isUserData)
{
if (string.IsNullOrWhiteSpace(file) || !File.Exists(file))
@@ -430,6 +434,7 @@ public static BaseGameData Load(string file, bool isUserData)
data.Inventories.ForEach(c => c.IsUserData = isUserData);
data.GameMaps.ForEach(c => c.IsUserData = isUserData);
data.Mods.ForEach(c => c.IsUserData = isUserData);
+ data.Branches.ForEach(c => c.IsUserData = isUserData);
return data;
}
@@ -588,4 +593,17 @@ public class CreatureLevelDataItem
[DataMember]
public int XPRequired = 0;
}
+
+ [DataContract]
+ public class BranchDataItem
+ {
+ [DataMember]
+ public bool IsSotF = false;
+ [DataMember]
+ public string BranchName = string.Empty;
+ [DataMember]
+ public string Description = string.Empty;
+
+ public bool IsUserData = false;
+ }
}
diff --git a/ARK Server Manager/Lib/Utils/ModUtils.cs b/ARK Server Manager/Lib/Utils/ModUtils.cs
index d5cfca29..31929350 100644
--- a/ARK Server Manager/Lib/Utils/ModUtils.cs
+++ b/ARK Server Manager/Lib/Utils/ModUtils.cs
@@ -260,6 +260,14 @@ public static string GetModType(string installDirectory, string modId)
return metaInformation != null && metaInformation.ContainsKey("ModType") ? metaInformation["ModType"] : MODTYPE_UNKNOWN;
}
+ public static string GetSteamManifestFile(string installDirectory, bool isSotF)
+ {
+ if (isSotF)
+ return IOUtils.NormalizePath(Path.Combine(installDirectory, Config.Default.SteamManifestFolderRelativePath, Config.Default.ArkSteamManifestFile_SotF));
+
+ return IOUtils.NormalizePath(Path.Combine(installDirectory, Config.Default.SteamManifestFolderRelativePath, Config.Default.ArkSteamManifestFile));
+ }
+
public static string GetSteamWorkshopFile(bool isSotF)
{
if (isSotF)
diff --git a/ARK Server Manager/Lib/ViewModel/DinoSettingsList.cs b/ARK Server Manager/Lib/ViewModel/DinoSettingsList.cs
index cb57ef82..b499b27a 100644
--- a/ARK Server Manager/Lib/ViewModel/DinoSettingsList.cs
+++ b/ARK Server Manager/Lib/ViewModel/DinoSettingsList.cs
@@ -96,6 +96,9 @@ public void RenderToView()
foreach(var entry in this.DinoSpawnWeightMultipliers)
{
+ if (string.IsNullOrWhiteSpace(entry.DinoNameTag))
+ continue;
+
var dinoSettings = this.FirstOrDefault(vi => vi.NameTag == entry.DinoNameTag);
if (dinoSettings == null)
{
@@ -113,6 +116,9 @@ public void RenderToView()
foreach(var entry in this.PreventDinoTameClassNames)
{
+ if (string.IsNullOrWhiteSpace(entry))
+ continue;
+
var dinoSettings = this.FirstOrDefault(vi => vi.ClassName == entry);
if (dinoSettings == null)
{
@@ -128,6 +134,9 @@ public void RenderToView()
foreach(var entry in this.NpcReplacements)
{
+ if (string.IsNullOrWhiteSpace(entry.FromClassName))
+ continue;
+
var dinoSettings = this.FirstOrDefault(vi => vi.ClassName == entry.FromClassName);
if (dinoSettings == null)
{
@@ -144,6 +153,9 @@ public void RenderToView()
foreach (var entry in this.TamedDinoClassDamageMultipliers)
{
+ if (string.IsNullOrWhiteSpace(entry.ClassName))
+ continue;
+
var dinoSettings = this.FirstOrDefault(vi => vi.ClassName == entry.ClassName);
if (dinoSettings == null)
{
@@ -159,6 +171,9 @@ public void RenderToView()
foreach(var entry in this.TamedDinoClassResistanceMultipliers)
{
+ if (string.IsNullOrWhiteSpace(entry.ClassName))
+ continue;
+
var dinoSettings = this.FirstOrDefault(vi => vi.ClassName == entry.ClassName);
if (dinoSettings == null)
{
@@ -174,6 +189,9 @@ public void RenderToView()
foreach (var entry in this.DinoClassDamageMultipliers)
{
+ if (string.IsNullOrWhiteSpace(entry.ClassName))
+ continue;
+
var dinoSettings = this.FirstOrDefault(vi => vi.ClassName == entry.ClassName);
if (dinoSettings == null)
{
@@ -189,6 +207,9 @@ public void RenderToView()
foreach (var entry in this.DinoClassResistanceMultipliers)
{
+ if (string.IsNullOrWhiteSpace(entry.ClassName))
+ continue;
+
var dinoSettings = this.FirstOrDefault(vi => vi.ClassName == entry.ClassName);
if (dinoSettings == null)
{
@@ -219,7 +240,8 @@ public void RenderToModel()
{
if (entry.HasNameTag && !string.IsNullOrWhiteSpace(entry.NameTag))
{
- if (!entry.OverrideSpawnLimitPercentage.Equals(DinoSpawn.DEFAULT_OVERRIDE_SPAWN_LIMIT_PERCENTAGE) ||
+ if (!entry.KnownDino ||
+ !entry.OverrideSpawnLimitPercentage.Equals(DinoSpawn.DEFAULT_OVERRIDE_SPAWN_LIMIT_PERCENTAGE) ||
!entry.SpawnLimitPercentage.Equals(DinoSpawn.DEFAULT_SPAWN_LIMIT_PERCENTAGE) ||
!entry.SpawnWeightMultiplier.Equals(DinoSpawn.DEFAULT_SPAWN_WEIGHT_MULTIPLIER))
{
diff --git a/ARK Server Manager/VersionFeed.xml b/ARK Server Manager/VersionFeed.xml
index c39e2088..e78cb0b9 100644
--- a/ARK Server Manager/VersionFeed.xml
+++ b/ARK Server Manager/VersionFeed.xml
@@ -5,14 +5,50 @@
Ark Server Manager Version Feed
This is the Ark Server Manager release version feed.
- 2018-05-06T21:50:00Z
+ 2018-05-07T10:10:00Z
+
+
+ urn:uuid:C74E7548-6527-410D-8163-A3ACE1BB6326
+ 1.0.326 (1.0.326.5)
+ 1.0.326.5
+
+ 2018-05-07T10:10:00Z
+
+
+
+ BUGFIX
+
+
+ Engrams - fixed bug that would clear the selected engrams.
+ Dinos - fixed bug that would clear the dino spawn multipliers.
+
+
NEW
+
+
+
+ Beta branch support now added to the server manager and works with the Manual and Auto update processes.
+
+ NOTE: This change affects the server cache and will force your server to perform an update when the next auto-update is run.
+
+
+
+ Profiles - added global options to enable/disable ASM controlling PGM and SotF settings (default disabled).
+
+
+
+
+
+ bletch
+ bletch1971@hotmail.com
+
+
urn:uuid:43CF5187-4C93-4FE7-A1CD-58F0D08A09E7
1.0.325 (1.0.325.5)
1.0.325.5
- 2018-05-06T21:50:00Z
+ 2018-05-05T21:50:00Z
@@ -27,6 +63,28 @@
Player List - synchronized the method of reading the player and tribe profile files with the RCON player list. This list will take longer to display results as it is not able to show online players.
Player List - removed players from list when the player profile no longer exists (eg. cluster transfer).
+
+ NOTE: Player Avatars Images will only load if you have less than 300 player profiles. If you have more than 300 player profiles then you will only see the ? image. The reason is because the player avatar images are what is causing the lag and freezing. 300 profiles is about the limit when the performance starts to degrade.
+
+
+
+
+
+ bletch
+ bletch1971@hotmail.com
+
+
+
+
+ urn:uuid:3A04F64A-8303-4EEA-99EE-0F8F54ED49C1
+ 1.0.324 (1.0.324.0)
+ 1.0.324.0
+
+ 2018-05-05T21:50:00Z
+
+
diff --git a/ARK Server Manager/VersionFeedBeta.xml b/ARK Server Manager/VersionFeedBeta.xml
index 637c7518..e8482ce1 100644
--- a/ARK Server Manager/VersionFeedBeta.xml
+++ b/ARK Server Manager/VersionFeedBeta.xml
@@ -5,46 +5,27 @@
Ark Server Manager Version Feed
This is the Ark Server Manager beta version feed.
- 2018-05-06T21:50:00Z
+ 2018-05-07T10:10:00Z
- urn:uuid:F4D2FA46-FA8F-477C-A97A-46CB2F37F3AA
- 1.0.325 (1.0.325.5)
- 1.0.325.5
-
- 2018-05-06T21:50:00Z
+ urn:uuid:248DD4A5-B39D-4BF5-B32F-49D80A7836E9
+ 1.0.326 (1.0.326.5)
+ 1.0.326.5
+
+ 2018-05-07T10:10:00Z
- CHANGE
+ NEW
- RCON Window - some minor tweaks to the player list loading.
- FR Translation file updated. (thanks @angemymy)
+ Profiles - added global options to enable/disable ASM controlling PGM and SotF settings (default disabled).
-
-
-
-
- bletch
- bletch1971@hotmail.com
-
-
-
-
- urn:uuid:A7EEA467-7B31-43D3-BC33-B2EA7E205E96
- 1.0.325 (1.0.325.4)
- 1.0.325.4
-
- 2018-05-04T09:50:00Z
-
-
-
CHANGE
- RCON Window - some minor tweaks to the player list loading.
- RU Translation file updated. (thanks @varlonec)
+ Profiles - removed the loading and saving of the old xml profile.
+ Profiles - changed the way exclusions are passed to the config file load/save. Allows for whole sections to be excluded, rather than individual settings.
@@ -56,24 +37,19 @@
- urn:uuid:0F540C85-4562-48CD-9E49-BE6E2137DFCC
- 1.0.325 (1.0.325.3)
- 1.0.325.3
-
- 2018-05-04T05:00:00Z
+ urn:uuid:73DD522F-75AC-49E6-BE31-1C8D437F2C18
+ 1.0.326 (1.0.326.3)
+ 1.0.326.3
+
+ 2018-05-06T21:10:00Z
BUGFIX
- RCON Player List - list is now loaded in two parts. The first part will load the online players only and displays only basic information (Steam Name and Steam Id). The second part will read the player and tribe profile files and requests player data from steam. Then they are merged together.
- Player List - synchronized the method of reading the player and tribe profile files with the RCON player list. This list will take longer to display results as it is not able to show online players.
-
-
CHANGE
-
-
- RCON Window - text is now colored dependant on what type of message is being displayed.
+ Engrams - fixed bug that would clear the selected engrams.
+ Dino - fixed bug that would clear the dino spawn multipliers.
@@ -85,19 +61,18 @@
- urn:uuid:74E089A7-6425-4ACE-A410-40319D43A843
- 1.0.325 (1.0.325.2)
- 1.0.325.2
-
- 2018-05-03T05:30:00Z
+ urn:uuid:E5402078-0F90-465D-A941-9BABB8C6C720
+ 1.0.326 (1.0.326.2)
+ 1.0.326.2
+
+ 2018-05-06T09:30:00Z
- CHANGE
+ BUGFIX
- RCON Player List - removed players from list when the player profile no longer exists (eg. cluster transfer).
- Player List - removed players from list when the player profile no longer exists (eg. cluster transfer).
+ Fixed a bug with the manual server installation (not update) when auto-update cache path was not set.
@@ -109,24 +84,23 @@
- urn:uuid:988725AC-060D-4E93-9C5D-D8CE38FD5D22
- 1.0.325 (1.0.325.1)
- 1.0.325.1
-
- 2018-05-03T03:40:00Z
+ urn:uuid:D413C7E9-3622-4E53-A280-A5E491F142FC
+ 1.0.326 (1.0.326.1)
+ 1.0.326.1
+
+ 2018-05-06T00:00:00Z
- BUGFIX
-
-
- RCON Player List - Fixed player list showing online players as Invalid.
- RCON Player List - Fixed player list showing duplicate player profiles.
-
-
CHANGE
+
NEW
- RU Translation file updated. (thanks @varlonec)
+
+ Beta branch support now added to the server manager and works with the Manual and Auto update processes.
+
+ NOTE: This change affects the server cache and will force your server to perform an update when the next auto-update is run.
+
+
diff --git a/ARK Server Manager/Windows/GlobalSettingsControl.xaml b/ARK Server Manager/Windows/GlobalSettingsControl.xaml
index 923c77fd..02a7a2dc 100644
--- a/ARK Server Manager/Windows/GlobalSettingsControl.xaml
+++ b/ARK Server Manager/Windows/GlobalSettingsControl.xaml
@@ -161,6 +161,7 @@
+
@@ -172,7 +173,10 @@
-
+
+
+
+
diff --git a/ARK Server Manager/Windows/MainWindow.xaml.cs b/ARK Server Manager/Windows/MainWindow.xaml.cs
index 80fa54dc..ed2dfff9 100644
--- a/ARK Server Manager/Windows/MainWindow.xaml.cs
+++ b/ARK Server Manager/Windows/MainWindow.xaml.cs
@@ -151,7 +151,7 @@ private void Window_Loaded(object sender, RoutedEventArgs e)
TaskUtils.RunOnUIThreadAsync(() =>
{
// We need to load the set of existing servers, or create a blank one if we don't have any...
- foreach (var profile in Directory.EnumerateFiles(Config.Default.ConfigDirectory, "*" + Config.Default.ProfileExtensionNew))
+ foreach (var profile in Directory.EnumerateFiles(Config.Default.ConfigDirectory, "*" + Config.Default.ProfileExtension))
{
try
{
diff --git a/ARK Server Manager/Windows/ProfileSyncWindow.xaml.cs b/ARK Server Manager/Windows/ProfileSyncWindow.xaml.cs
index c8527e0b..1e998e24 100644
--- a/ARK Server Manager/Windows/ProfileSyncWindow.xaml.cs
+++ b/ARK Server Manager/Windows/ProfileSyncWindow.xaml.cs
@@ -16,7 +16,7 @@ public class ProfileSection : DependencyObject
{
public static readonly DependencyProperty SelectedProperty = DependencyProperty.Register(nameof(Selected), typeof(bool), typeof(ProfileSection), new PropertyMetadata(false));
public static readonly DependencyProperty SectionNameProperty = DependencyProperty.Register(nameof(SectionName), typeof(string), typeof(ProfileSection), new PropertyMetadata(string.Empty));
- public static readonly DependencyProperty SectionProperty = DependencyProperty.Register(nameof(Section), typeof(ServerProfile.ServerProfileSection), typeof(ProfileSection));
+ public static readonly DependencyProperty SectionProperty = DependencyProperty.Register(nameof(Section), typeof(ServerProfileCategory), typeof(ProfileSection));
public bool Selected
{
@@ -28,9 +28,9 @@ public string SectionName
get { return (string)GetValue(SectionNameProperty); }
set { SetValue(SectionNameProperty, value); }
}
- public ServerProfile.ServerProfileSection Section
+ public ServerProfileCategory Section
{
- get { return (ServerProfile.ServerProfileSection)GetValue(SectionProperty); }
+ get { return (ServerProfileCategory)GetValue(SectionProperty); }
set { SetValue(SectionProperty, value); }
}
}
@@ -172,27 +172,29 @@ private void CreateProfileSectionList()
{
ProfileSections.Clear();
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.AdministrationSection, SectionName = _globalizer.GetResourceString("ServerSettings_AdministrationSectionLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.AutomaticManagement, SectionName = _globalizer.GetResourceString("ServerSettings_AutomaticManagementLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.RulesSection, SectionName = _globalizer.GetResourceString("ServerSettings_RulesLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.ChatAndNotificationsSection, SectionName = _globalizer.GetResourceString("ServerSettings_ChatAndNotificationsLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.HudAndVisualsSection, SectionName = _globalizer.GetResourceString("ServerSettings_HUDAndVisualsLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.PlayerSettingsSection, SectionName = _globalizer.GetResourceString("ServerSettings_PlayerSettingsLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.DinoSettingsSection, SectionName = _globalizer.GetResourceString("ServerSettings_DinoSettingsLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.EnvironmentSection, SectionName = _globalizer.GetResourceString("ServerSettings_EnvironmentLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.StructuresSection, SectionName = _globalizer.GetResourceString("ServerSettings_StructuresLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.EngramsSection, SectionName = _globalizer.GetResourceString("ServerSettings_EngramsLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.ServerFiles, SectionName = _globalizer.GetResourceString("ServerSettings_ServerFilesLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.CustomSettingsSection, SectionName = _globalizer.GetResourceString("ServerSettings_CustomSettingsLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.CustomLevelsSection, SectionName = _globalizer.GetResourceString("ServerSettings_CustomLevelProgressionsLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.Administration, SectionName = _globalizer.GetResourceString("ServerSettings_AdministrationSectionLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.AutomaticManagement, SectionName = _globalizer.GetResourceString("ServerSettings_AutomaticManagementLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.Rules, SectionName = _globalizer.GetResourceString("ServerSettings_RulesLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.ChatAndNotifications, SectionName = _globalizer.GetResourceString("ServerSettings_ChatAndNotificationsLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.HudAndVisuals, SectionName = _globalizer.GetResourceString("ServerSettings_HUDAndVisualsLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.Players, SectionName = _globalizer.GetResourceString("ServerSettings_PlayerSettingsLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.Dinos, SectionName = _globalizer.GetResourceString("ServerSettings_DinoSettingsLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.Environment, SectionName = _globalizer.GetResourceString("ServerSettings_EnvironmentLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.Structures, SectionName = _globalizer.GetResourceString("ServerSettings_StructuresLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.Engrams, SectionName = _globalizer.GetResourceString("ServerSettings_EngramsLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.ServerFiles, SectionName = _globalizer.GetResourceString("ServerSettings_ServerFilesLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.CustomSettings, SectionName = _globalizer.GetResourceString("ServerSettings_CustomSettingsLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.CustomLevels, SectionName = _globalizer.GetResourceString("ServerSettings_CustomLevelProgressionsLabel") });
if (Config.Default.SectionCraftingOverridesEnabled)
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.CraftingOverridesSection, SectionName = _globalizer.GetResourceString("ServerSettings_CraftingOverridesLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.CraftingOverrides, SectionName = _globalizer.GetResourceString("ServerSettings_CraftingOverridesLabel") });
if (Config.Default.SectionMapSpawnerOverridesEnabled)
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.MapSpawnerOverridesSection, SectionName = _globalizer.GetResourceString("ServerSettings_MapSpawnerOverridesLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.MapSpawnerOverrides, SectionName = _globalizer.GetResourceString("ServerSettings_MapSpawnerOverridesLabel") });
if (Config.Default.SectionSupplyCrateOverridesEnabled)
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.SupplyCrateOverridesSection, SectionName = _globalizer.GetResourceString("ServerSettings_SupplyCrateOverridesLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.PGMSection, SectionName = _globalizer.GetResourceString("ServerSettings_PGMLabel") });
- ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfile.ServerProfileSection.SOTFSection, SectionName = _globalizer.GetResourceString("ServerSettings_SOTFLabel") });
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.SupplyCrateOverrides, SectionName = _globalizer.GetResourceString("ServerSettings_SupplyCrateOverridesLabel") });
+ if (Config.Default.SectionPGMEnabled)
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.PGM, SectionName = _globalizer.GetResourceString("ServerSettings_PGMLabel") });
+ if (Config.Default.SectionSOTFEnabled)
+ ProfileSections.Add(new ProfileSection() { Selected = false, Section = ServerProfileCategory.SOTF, SectionName = _globalizer.GetResourceString("ServerSettings_SOTFLabel") });
}
private void PerformProfileSync()
diff --git a/ARK Server Manager/Windows/ServerSettingsControl.xaml b/ARK Server Manager/Windows/ServerSettingsControl.xaml
index 236bc99f..6129b707 100644
--- a/ARK Server Manager/Windows/ServerSettingsControl.xaml
+++ b/ARK Server Manager/Windows/ServerSettingsControl.xaml
@@ -29,8 +29,9 @@
+
-
+
@@ -1027,10 +1028,10 @@
-
+
-
+
@@ -1452,7 +1453,60 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2960,8 +3014,8 @@
-
-
+
+
@@ -2971,7 +3025,7 @@
-
+
@@ -2986,7 +3040,7 @@
-
+
@@ -2997,13 +3051,27 @@
+
+
+
+
+
-
+
@@ -3060,7 +3128,7 @@
-