diff --git a/src/ARKServerManager/Lib/ServerProfile.cs b/src/ARKServerManager/Lib/ServerProfile.cs
index 5419c1e8..f03a05d5 100644
--- a/src/ARKServerManager/Lib/ServerProfile.cs
+++ b/src/ARKServerManager/Lib/ServerProfile.cs
@@ -1228,6 +1228,22 @@ namespace ServerManagerTool.Lib
get { return (float)GetValue(EventColorsChanceOverrideProperty); }
set { SetValue(EventColorsChanceOverrideProperty, value); }
}
+
+ public static readonly DependencyProperty NewYear1UTCProperty = DependencyProperty.Register(nameof(NewYear1UTC), typeof(DateTime), typeof(ServerProfile), new PropertyMetadata(DateTime.MinValue));
+ [DataMember]
+ public DateTime NewYear1UTC
+ {
+ get { return (DateTime)GetValue(NewYear1UTCProperty); }
+ set { SetValue(NewYear1UTCProperty, value); }
+ }
+
+ public static readonly DependencyProperty NewYear2UTCProperty = DependencyProperty.Register(nameof(NewYear2UTC), typeof(DateTime), typeof(ServerProfile), new PropertyMetadata(DateTime.MinValue));
+ [DataMember]
+ public DateTime NewYear2UTC
+ {
+ get { return (DateTime)GetValue(NewYear2UTCProperty); }
+ set { SetValue(NewYear2UTCProperty, value); }
+ }
#endregion
#region Rules
@@ -4116,6 +4132,16 @@ namespace ServerManagerTool.Lib
serverArgs.Append("?EventColorsChanceOverride=").Append(this.EventColorsChanceOverride);
}
+ if (this.NewYear1UTC != DateTime.MinValue)
+ {
+ serverArgs.Append("?NewYear1UTC=").Append((new DateTimeOffset(this.NewYear1UTC.ToUniversalTime())).ToUnixTimeSeconds().ToString());
+ }
+
+ if (this.NewYear2UTC != DateTime.MinValue)
+ {
+ serverArgs.Append("?NewYear2UTC=").Append((new DateTimeOffset(this.NewYear2UTC.ToUniversalTime())).ToUnixTimeSeconds().ToString());
+ }
+
if (!string.IsNullOrWhiteSpace(this.AdditionalArgs))
{
var addArgs = this.AdditionalArgs.TrimStart();
@@ -4423,6 +4449,11 @@ namespace ServerManagerTool.Lib
serverArgs.Append(" -MaxNumOfSaveBackups=").Append(this.MaxNumOfSaveBackups);
}
+ if (this.NewYear1UTC != DateTime.MinValue || this.NewYear2UTC != DateTime.MinValue)
+ {
+ serverArgs.Append(" -NewYearEvent");
+ }
+
return serverArgs.ToString();
}
@@ -6136,6 +6167,8 @@ namespace ServerManagerTool.Lib
this.ClearValue(EventNameProperty);
this.ClearValue(EventColorsChanceOverrideProperty);
+ this.ClearValue(NewYear1UTCProperty);
+ this.ClearValue(NewYear2UTCProperty);
}
public void ResetSOTFSection()
@@ -6923,6 +6956,8 @@ namespace ServerManagerTool.Lib
this.SetValue(EventNameProperty, sourceProfile.EventName);
this.SetValue(EventColorsChanceOverrideProperty, sourceProfile.EventColorsChanceOverride);
+ this.SetValue(NewYear1UTCProperty, sourceProfile.NewYear1UTC);
+ this.SetValue(NewYear2UTCProperty, sourceProfile.NewYear2UTC);
}
private void SyncServerFiles(ServerProfile sourceProfile)
diff --git a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml
index 54bb60c5..43b6cd31 100644
--- a/src/ARKServerManager/UserControls/ServerSettingsControl.xaml
+++ b/src/ARKServerManager/UserControls/ServerSettingsControl.xaml
@@ -1817,6 +1817,7 @@
+
@@ -1832,7 +1833,53 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/ServerManager.Common/Converters/DateTimeToStringConverter.cs b/src/ServerManager.Common/Converters/DateTimeToStringConverter.cs
new file mode 100644
index 00000000..cdcfa2aa
--- /dev/null
+++ b/src/ServerManager.Common/Converters/DateTimeToStringConverter.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Globalization;
+using System.Windows.Data;
+using System.Windows.Markup;
+
+namespace ServerManagerTool.Common.Converters
+{
+ public class DateTimeToStringConverter : MarkupExtension, IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ DateTime datetime = (DateTime)value;
+ if (datetime == DateTime.MinValue)
+ return "";
+
+ return datetime.ToString("yyyy.MM.dd HH:mm:ss");
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is null || value.ToString() == string.Empty)
+ return DateTime.MinValue;
+
+ if (!DateTime.TryParse(value.ToString(), out DateTime datetime))
+ return DateTime.MinValue;
+
+ return datetime;
+ }
+
+ public override object ProvideValue(IServiceProvider serviceProvider)
+ {
+ return this;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/ServerManager.Common/ValidationRules/DateTimeValidationRules.cs b/src/ServerManager.Common/ValidationRules/DateTimeValidationRules.cs
new file mode 100644
index 00000000..92ef0446
--- /dev/null
+++ b/src/ServerManager.Common/ValidationRules/DateTimeValidationRules.cs
@@ -0,0 +1,40 @@
+using ServerManagerTool.Common.Extensions;
+using System;
+using System.Windows.Controls;
+
+namespace ServerManagerTool.Common.ValidationRules
+{
+ public class DateTimeValidationRule : ValidationRule
+ {
+ private static readonly DateTime MinUnixDate = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
+ private static readonly DateTime MaxUnixDate = new DateTime(2038, 1, 19, 3, 14, 7, 0, DateTimeKind.Utc);
+
+ public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
+ {
+ string strDateTime = (string)value;
+
+ if (strDateTime.IsEmpty())
+ {
+ return new ValidationResult(true, null);
+ }
+
+ if (!DateTime.TryParse(strDateTime, out DateTime datetime))
+ {
+ return new ValidationResult(false, "Invalid Date. Date must be formatted as yyyy.mm.dd hh:mm:ss");
+ }
+
+ if (datetime.ToUniversalTime() <= MinUnixDate)
+ {
+ return new ValidationResult(false, $"Invalid Date. The Date must be after {MinUnixDate.ToLocalTime().ToString("yyyy.MM.dd HH:mm:ss")}");
+ }
+
+ if (datetime.ToUniversalTime() >= MaxUnixDate)
+ {
+ return new ValidationResult(false, $"Invalid Date. The Date must be before {MaxUnixDate.ToLocalTime().ToString("yyyy.MM.dd HH:mm:ss")}");
+ }
+
+
+ return new ValidationResult(true, null);
+ }
+ }
+}