diff --git a/ValheimServerGUI/Forms/MainWindow.Designer.cs b/ValheimServerGUI/Forms/MainWindow.Designer.cs
index ef40276..cbab179 100644
--- a/ValheimServerGUI/Forms/MainWindow.Designer.cs
+++ b/ValheimServerGUI/Forms/MainWindow.Designer.cs
@@ -50,6 +50,7 @@ private void InitializeComponent()
this.StatusStripLabelRight = new System.Windows.Forms.ToolStripStatusLabel();
this.Tabs = new System.Windows.Forms.TabControl();
this.TabServerControls = new System.Windows.Forms.TabPage();
+ this.ServerCrossplayField = new ValheimServerGUI.Controls.CheckboxFormField();
this.WorldSelectGroupBox = new System.Windows.Forms.GroupBox();
this.WorldSelectNewNameField = new ValheimServerGUI.Forms.Controls.TextFormField();
this.WorldSelectRadioNew = new ValheimServerGUI.Controls.RadioFormField();
@@ -254,6 +255,7 @@ private void InitializeComponent()
//
// TabServerControls
//
+ this.TabServerControls.Controls.Add(this.ServerCrossplayField);
this.TabServerControls.Controls.Add(this.WorldSelectGroupBox);
this.TabServerControls.Controls.Add(this.ServerPortField);
this.TabServerControls.Controls.Add(this.ButtonRestartServer);
@@ -271,6 +273,18 @@ private void InitializeComponent()
this.TabServerControls.Text = "Server Controls";
this.TabServerControls.UseVisualStyleBackColor = true;
//
+ // ServerCrossplayField
+ //
+ this.ServerCrossplayField.HelpText = "Allow players on other platforms to join your game\r\n(Microsoft Store, Xbox, etc.)" +
+ "\r\n\r\nYou may need to provide other players an Invite Code,\r\nwhich appears in game" +
+ " and in the server logs.";
+ this.ServerCrossplayField.LabelText = "Enable Crossplay";
+ this.ServerCrossplayField.Location = new System.Drawing.Point(151, 94);
+ this.ServerCrossplayField.Name = "ServerCrossplayField";
+ this.ServerCrossplayField.Size = new System.Drawing.Size(133, 17);
+ this.ServerCrossplayField.TabIndex = 18;
+ this.ServerCrossplayField.Value = false;
+ //
// WorldSelectGroupBox
//
this.WorldSelectGroupBox.Controls.Add(this.WorldSelectNewNameField);
@@ -880,5 +894,6 @@ private void InitializeComponent()
private System.Windows.Forms.Timer UpdateCheckTimer;
private System.Windows.Forms.ToolStripMenuItem MenuItemFilePreferences;
private System.Windows.Forms.ToolStripMenuItem MenuItemHelpBugReport;
+ private ValheimServerGUI.Controls.CheckboxFormField ServerCrossplayField;
}
}
\ No newline at end of file
diff --git a/ValheimServerGUI/Forms/MainWindow.cs b/ValheimServerGUI/Forms/MainWindow.cs
index 9335bc4..aa0f733 100644
--- a/ValheimServerGUI/Forms/MainWindow.cs
+++ b/ValheimServerGUI/Forms/MainWindow.cs
@@ -687,6 +687,7 @@ private void StartServer()
NewWorld = newWorld,
Public = this.CommunityServerField.Value,
Port = this.ServerPortField.Value,
+ Crossplay = this.ServerCrossplayField.Value,
};
try
@@ -712,6 +713,7 @@ private void StartServer()
prefs.ServerPassword = this.ServerPasswordField.Value;
prefs.ServerWorldName = worldName;
prefs.ServerPublic = this.CommunityServerField.Value;
+ prefs.ServerCrossplay = this.ServerCrossplayField.Value;
this.UserPrefsProvider.SavePreferences(prefs);
}
@@ -927,6 +929,7 @@ private void RefreshFormStateForServer()
this.ServerPasswordField.Enabled = allowServerChanges;
this.WorldSelectGroupBox.Enabled = allowServerChanges;
this.CommunityServerField.Enabled = allowServerChanges;
+ this.ServerCrossplayField.Enabled = allowServerChanges;
this.ButtonStartServer.Enabled = this.Server.CanStart;
this.ButtonRestartServer.Enabled = this.Server.CanRestart;
@@ -961,6 +964,7 @@ private void LoadFormValuesFromUserPrefs(UserPreferences prefs)
this.ServerPortField.Value = prefs.ServerPort;
this.ServerPasswordField.Value = prefs.ServerPassword;
this.CommunityServerField.Value = prefs.ServerPublic;
+ this.ServerCrossplayField.Value = prefs.ServerCrossplay;
this.ShowPasswordField.Value = false;
this.WorldSelectExistingNameField.Value = prefs.ServerWorldName;
diff --git a/ValheimServerGUI/Forms/MainWindow.resx b/ValheimServerGUI/Forms/MainWindow.resx
index d367c0b..9156b9d 100644
--- a/ValheimServerGUI/Forms/MainWindow.resx
+++ b/ValheimServerGUI/Forms/MainWindow.resx
@@ -57,8 +57,11 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
+
+ 17, 17
+
+
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADSSURBVDhPY6AYfPv27TwQ/yeA3wOBAFQLKvj87vn/O9uq
@@ -68,7 +71,7 @@
4ptlmmAAAAAASUVORK5CYII=
-
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAXpJREFUOE+Nk79Kw1AUh/sE0ifwDQSfoXtAcMkiCB0chFLXumTJ4pRVySIIoYMO
@@ -80,6 +83,9 @@
D/8uQJ9LMpCdAJO1wD1+nQCTcxg78e3rsCq1/gvS+wNO/eKaJR8tQgAAAABJRU5ErkJggg==
+
+ 125, 17
+
AAEAAAD/////AQAAAAAAAAAEAQAAAH9TeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0YDFbW1N5
@@ -88,7 +94,7 @@
CAkCAAAAAQAAAAEAAAARAgAAAAQAAAAGAwAAAAANAws=
-
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAARBJREFUOE+Vkz0OwjAMhXsUjtCBgbEHQOIKOQISKxIdERyAQyAY2Ni6wIaUHakz
@@ -106,14 +112,14 @@ If not, other players will need to "Join by IP" to connect to your game.
NOTE: It usually takes 1-2 minutes for your server to appear in the list in-game, but it can
take up to 15 minutes, and rarely not show up at all. You can always "Join by IP" as a fallback.
-
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAClJREFUOE9jGGbg27dv/4nBUOWYACS5UI0XLx41YGQYQAyGKh8egIEBAMuiAHSi
jpx4AAAAAElFTkSuQmCC
-
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAKNJREFUOE9jQAbfvn07/+XLFwMol3QANOA/EL///v17AlSINAAyIGZexP97L+/9
@@ -135,7 +141,16 @@ it yourself if you're hosting your server on another machine on your home networ
(different from the one you're playing on).
-
+
+ 235, 17
+
+
+ 339, 17
+
+
+ 447, 17
+
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAKNJREFUOE9jQAbfvn07/+XLFwMol3QANOA/EL///v17AlSINAAyIGZexP97L+/9
@@ -144,7 +159,7 @@ it yourself if you're hosting your server on another machine on your home networ
luQHKWcAAAAASUVORK5CYII=
-
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAARBJREFUOE+Vkz0OwjAMhXsUjtCBgbEHQOIKOQISKxIdERyAQyAY2Ni6wIaUHakz
@@ -155,225 +170,14 @@ it yourself if you're hosting your server on another machine on your home networ
TkSuQmCC
-
+
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
vAAADrwBlbxySQAAAClJREFUOE9jGGbg27dv/4nBUOWYACS5UI0XLx41YGQYQAyGKh8egIEBAMuiAHSi
jpx4AAAAAElFTkSuQmCC
-
-
- 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
- 7f8DbWhZKaNP5FoAAAAASUVORK5CYII=
-
-
-
+
AAABAAEAAAAAAAEAIABJMAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAMBBJ
REFUeNrtfVlwHNeV5XlZVdh3AiQBkiBAgjslUStlWYsty7LdrYUURUuiJGs80REdPRMxP/Plj4noCH9M
@@ -584,4 +388,10 @@ it yourself if you're hosting your server on another machine on your home networ
7f8DbWhZKaNP5FoAAAAASUVORK5CYII=
+
+ 621, 17
+
+
+ 778, 17
+
\ No newline at end of file
diff --git a/ValheimServerGUI/Game/UserPreferences.cs b/ValheimServerGUI/Game/UserPreferences.cs
index d6b954b..a27b2ac 100644
--- a/ValheimServerGUI/Game/UserPreferences.cs
+++ b/ValheimServerGUI/Game/UserPreferences.cs
@@ -35,6 +35,8 @@ public class UserPreferences
public int ServerPort { get; set; } = DefaultServerPort;
+ public bool ServerCrossplay { get; set; }
+
public static UserPreferences FromFile(UserPreferencesFile file)
{
var prefs = new UserPreferences();
@@ -49,7 +51,7 @@ public static UserPreferences FromFile(UserPreferencesFile file)
prefs.StartMinimized = file.StartMinimized ?? prefs.StartMinimized;
prefs.CheckServerRunning = file.CheckServerRunning ?? prefs.CheckServerRunning;
prefs.CheckForUpdates = file.CheckForUpdates ?? prefs.CheckForUpdates;
-
+
var server = file.Servers?.FirstOrDefault();
if (server != null)
@@ -59,6 +61,7 @@ public static UserPreferences FromFile(UserPreferencesFile file)
prefs.ServerWorldName = server.WorldName ?? prefs.ServerWorldName;
prefs.ServerPublic = server.CommunityServer ?? prefs.ServerPublic;
prefs.ServerPort = server.Port ?? prefs.ServerPort;
+ prefs.ServerCrossplay = server.Crossplay ?? prefs.ServerCrossplay;
}
return prefs;
@@ -85,6 +88,7 @@ public UserPreferencesFile ToFile()
WorldName = this.ServerWorldName,
CommunityServer = this.ServerPublic,
Port = this.ServerPort,
+ Crossplay = this.ServerCrossplay,
}
}
};
diff --git a/ValheimServerGUI/Game/UserPreferencesFile.cs b/ValheimServerGUI/Game/UserPreferencesFile.cs
index c95b5b5..35004ae 100644
--- a/ValheimServerGUI/Game/UserPreferencesFile.cs
+++ b/ValheimServerGUI/Game/UserPreferencesFile.cs
@@ -52,6 +52,9 @@ public class ServerPreferencesFile
[JsonProperty("port")]
public int? Port { get; set; }
+
+ [JsonProperty("crossplay")]
+ public bool? Crossplay { get; set; }
}
}
}
diff --git a/ValheimServerGUI/Game/ValheimServer.cs b/ValheimServerGUI/Game/ValheimServer.cs
index a59ae33..278e089 100644
--- a/ValheimServerGUI/Game/ValheimServer.cs
+++ b/ValheimServerGUI/Game/ValheimServer.cs
@@ -19,7 +19,7 @@ public class ValheimServer : IDisposable
///
public IValheimServerOptions Options { get; private set; } = new ValheimServerOptions();
- public ServerStatus Status
+ public ServerStatus Status
{
get => this._status;
private set
@@ -46,9 +46,9 @@ private set
private readonly IPlayerDataRepository PlayerDataRepository;
private readonly ValheimServerLogger ServerLogger;
private readonly IEventLogger ApplicationLogger;
-
+
public ValheimServer(
- IProcessProvider processProvider,
+ IProcessProvider processProvider,
IValheimFileProvider fileProvider,
IPlayerDataRepository playerDataRepository,
ValheimServerLogger serverLogger,
@@ -71,18 +71,18 @@ public ValheimServer(
private void InitializeLogBasedActions()
{
LogBasedActions.Add(@"Game server connected", this.OnServerConnected);
-
+
LogBasedActions.Add(@"Got connection SteamID (\d+?)\D*?$", this.OnPlayerConnecting);
LogBasedActions.Add(@"Got character ZDOID from (.+?) : ([\d-]+?)\D*?:(\d+?)\D*?$", this.OnPlayerConnected);
LogBasedActions.Add(@"Peer (\d+?) has wrong password", this.OnPlayerDisconnecting);
LogBasedActions.Add(@"Closing socket (\d+?)\D*?$", this.OnPlayerDisconnected); // Technically "disconnecting" but it's the best terminator I can find
-
+
LogBasedActions.Add(@"World saved \(\s*?([[\d\.]+?)\s*?ms\s*?\)\s*?$", this.OnWorldSaved);
}
private void InitializeStatusBasedActions()
{
- this.StatusChanged += BuildStatusHandler(ServerStatus.Stopped, () =>
+ this.StatusChanged += BuildStatusHandler(ServerStatus.Stopped, () =>
{
if (this.IsRestarting)
{
@@ -126,6 +126,12 @@ public void Start(IValheimServerOptions options)
var saveDataFolder = this.FileProvider.SaveDataFolder.FullName;
var publicFlag = options.Public ? 1 : 0;
var processArgs = @$"-nographics -batchmode -name ""{options.Name}"" -port {options.Port} -world ""{options.WorldName}"" -password ""{options.Password}"" -public {publicFlag} -savedir ""{saveDataFolder}""";
+
+ if (options.Crossplay)
+ {
+ processArgs += " -crossplay";
+ }
+
var process = this.ProcessProvider.AddBackgroundProcess(ProcessKeys.ValheimServer, exePath, processArgs);
process.StartInfo.EnvironmentVariables.Add("SteamAppId", Resources.ValheimSteamAppId);
diff --git a/ValheimServerGUI/Game/ValheimServerOptions.cs b/ValheimServerGUI/Game/ValheimServerOptions.cs
index bc47a1b..1459257 100644
--- a/ValheimServerGUI/Game/ValheimServerOptions.cs
+++ b/ValheimServerGUI/Game/ValheimServerOptions.cs
@@ -1,5 +1,4 @@
using System;
-using System.IO;
namespace ValheimServerGUI.Game
{
@@ -17,6 +16,8 @@ public class ValheimServerOptions : IValheimServerOptions
public int Port { get; set; }
+ public bool Crossplay { get; set; }
+
public void Validate()
{
// Ensure all required fields exist
@@ -55,5 +56,7 @@ public interface IValheimServerOptions
bool Public { get; }
int Port { get; set; }
+
+ bool Crossplay { get; }
}
}
diff --git a/ValheimServerGUI/ValheimServerGUI.csproj b/ValheimServerGUI/ValheimServerGUI.csproj
index 1efd17d..d841f7b 100644
--- a/ValheimServerGUI/ValheimServerGUI.csproj
+++ b/ValheimServerGUI/ValheimServerGUI.csproj
@@ -10,7 +10,7 @@
A simple user interface for running Valheim Dedicated Server on Windows.
2022
GNU GPLv3
- 2.0.0-rc.2
+ 2.0.0-rc.3
true