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 - - - AAABAAEAAAAAAAEAIABJMAAAFgAAAIlQTkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAMBBJ - REFUeNrtfVlwHNeV5XlZVdh3AiQBkiBAgjslUStlWYsty7LdrYUURUuiJGs80REdPRMxP/Plj4noCH9M - 9NdEzNf0xPQSsklxp1ZTtCy3LFnWYpHiTpEEAWIHsa+FparyzUfuWblXFVDLvREIFLKqkFWZ75x33333 - 3AuQkZEVrLHZXz/6j3QZyMgKz8r/x5//kUV//RinS0FGVnhWujJaJNBlICMrXCMCICMrYAvr/5iLc/zv - 83RRyMjy0f7r3QwVRdrf7O/PxgwEEI0D//RXulBkZPlob2zjqChi6t/8n++P0BKAjKyAjQiAjIwIgIyM - jAiAjIyMCICMjIwIgIyMjAiAjIyMCICMjIwIgIyMjAiAjIyMCICMjIwIgIyMjAiAjIyMCICMjIwIgIyM - jAiAjIyMCICMjIwIgIyMLIssnPlTyFXHOdcek5lMLtPEmPa4YI1rv7NtuLDlOFFmT5pxAvjbXevx356+ - C5wDnHNwmQs4uMQJMB1XH0u/kfQa69fC9H/V18rH1OcNr+Ha/1HOo3wuznXP685ldYxzw+dSTmZ4rf6c - onaurzuG8OHF22CMQXLIBIAVqmPG8aufbJMeifp7lDxu9PfW6n4bjhme099vt/eazqc7hqQxaHwvuM1n - cBqHAO5MzeP60LQEfMbksZA5Eghn+ob+9O5mPLalKSsHm/UMww2/FKBavQSWx22mLc4tz/X//nQNH357 - HVwIASwsY78QPQGOB9fX4VdPb7e+to7Xl1vdNpt7zN3vo9O5lMnG03jilg+dxs2x8334u8NfAxDAhJD0 - fAZJILMEwDke2rAyy8YZ9wh6j4MlAOgNv0QOLi4CXAa/4gmwwlsK7F5f5+P6pgr6YPcy0+fi4OCJBYCF - AETABHkyYDlHABylRWHsWFOXf6B3Giyc214Pq3OJXAQX4xL4uQDOw2CsEGMlHA+11AUHvRPg0g16y7dw - j+dyHjeiyMETMTCBA0wA5yGwDC4JM+oBPLRhJQRhuWYy7vEmmVz8IKB3Wk64EAznHOAiwEVwcLCCDJRK - 1+nxjfXWBBoEiE73MstAn+xVJADOwLmY8fGQUQ/goY2rsgD01jeKpzxDBAd98h/Spynk+P+62lLUlRdn - GPR+gGh3jzN7LjU4CYDxzE8GmSMAjiVa/y8l6BFsOeFwLs4LccZPtt0tKwzXlqcD9E73MsPBPKvjXs7F - 1S2ipRkXGSIA6cPvbludXaB3GizpBr3rueRPRwQAgOOh9XWZj+AvZeDQB+gNo2eJh0PGPICW+krUV5ak - eZxkIpi39KB3GE4FCX5w4CH9DsBSBfMytFvgF/SW51qiXaCMEcBDG9Pk/mdxBD+lwcK5yzkLx0rCAu5p - qra+ZzkUwfe1nHA61xJaxpYAqQUAcyOCn8rA1P4kAri/uVbeLVqGCL7ruTIFeuvPwMWlHQ+ZIQAOPOg7 - AJirEXz/oB+YiOKDC534/aVO/PFKBwBWwDsAUgag8dovZTBvKXcLnD/D0Qt9+Jcvb2rPL8EyIAMEwBEJ - CdjV3JBloEfaI/hezxVPiPiyYwhnLnbizMV2XOoZlvf+uZz1K+X/MzXls4DogAMPr6+z2f9fIiA6nitp - 9KXtXJxzfH57DIfPdePUhduYnotK44IJuikhB8VArQ1VmIvFEQkXpQjE7I7gO51rZGYeH13pwfvn2vHx - 5U5MRucAyKDXCz0U4LOwjgQKyx5srvFwL5c+9TctwTyLcXNzZAZHvu3F4bOd6B6bAMS4jHVlTIQAFgJj - IVkklmNioBuD41j1D/+M+5rr8Ni2dXhiezO+v6kRVaVF6QOi0w1cJtB/c3sYH168jQ8vtONs54DE5kp2 - h3IjBUnxxww3WwATwmAyCRSWDoDjV+9ewtZVFbirsQrbG6uxtqYs6fq6g94PEJce9BNzMRz+thfHzt/G - X2/fAcSY9jrF81MngxCYEJb1AJkdD5nLA+AcZzsHcLa9C//r3QRCAnBv61o8sWMDHpcJobKkSPeO3Ivg - j80u4A9Xe3HmYgc+vHALYzOzmtYTetCHADD55gqmmT9kelx4SsAj524DiUVwMQ5wEZUlEexoqsOOplrs - aKzF9sYabG+sQk1pUfZH8HXnmo8l8OH1IRw+14WPrnUjFl/UxqlO9KWNC2UshAAhLP3OsEfIor9+TP3I - o/Mcm/4tHeCXBC4QY+BiDBDjcoaTBo5QSMD9G9bh8e2teHx7Mx5pa0RFSQTZHsG/2DOGM5e7cPr8LXzV - 3gNRTOi+F9MAzHSMDj3gTQSgMjwrzIIgPCGND7uxwgDJYxKwprYC2xvrsKOpBjsaa7B9dTU2N1SiOBxC - tgTzOOf4omsch8914+SFTkxF5XW9Cnrz0k+e8ZMmA9PYSINd/QWwulz7X6Uro0UZIADIAa4EOE8AYkJ+ - LMoXQha+qBWC5IvOGB7e3Iwntrfg8W3N+F5bI8qKQrZAtGGJjAUO/+cH5/B//3AWg5NT1rO8zOjaTWW6 - G6snAWYBehQe8C3HSlz6rQRI5clEy5jUjxdI1xcM2xprsaOxDttXy8TQWIX1tWVLBnoA6ByL4tDZbhz6 - 5hZ6xqeM6/qk8aEs+0JGAsjwZGBFAJlZAjAGQBv8nIfBDOAXpb9lJRxn0uMvb3Tjyxtd+KdT0v94ZMt6 - PLG9BY9tXYfvbVyF0qSPm2oE33mGMA/UwfEx+Q8N4NaufUh7rDK+1Y0t9PJfurECBoQEVRmpegCKSpJz - aEFUrqu4JOJq/wiu9g1r/48JKC+OYGdTnbSEWF2Dp7asxoYV5Q6g9zNupGOTczG8fbkfb/61w7Su199z - DzO9GgNY+nGRGQ/AwK565paLaunAD4iadyAf5/obrd4Ahke3tuCXP7gHrz6yJaPBPKsZond8Fpv++/+R - /lZBHjLO8o6uPQHecZyo98A4VhSgmz0C7bieLLg8nnTjhouAEMYH//A0HttQnwLotQcf3xzGv355C+9d - 7pJAz0UjuZviO8bxojxnLvyS+bGxdB6Axi+6Lyiv5ziXC16Ybqrq9unJwEgIf/7uNi73jODnD21COCQA - Sxg4XFNbhh/fswkfXWiXovVCRIvUGm4qgT7QOAHka8Z1h7g8bHSuv1KZkcu1E0yxJcm71I8vEQ2V5Xi0 - dUVKoFcslhDxizc/xfTcrHzEDHSH2V71HHXjZJktvHSn0t/k4IQwObeA9893Ys/9G1JK7PACevOBN76/ - Ex9dbNcit+rWXXbd1LwgA+Uxg3G8QD9mALO3IJloiNO88sBGedilojCUIkqnv7sjJeyogd6QcXZf4nV9 - DhFAQEJQGV6JHyTw5p+vYc99GxAkmOcOet0jE8E8u6sZNWVlmJxbkKv3YEkqt5KZiMGwL84tvAUYlhM/ - 37XGczDPajzpnzn6bReUZaC0Xx/RbdmFsmJd78eyKO1Mv0UiM6qguNoRsFCR9CNE8NGVXgxMzGo3SR+V - N4OecxP49eSiRRm46bje3VT+b0QQ8Or3d8oxi4T8IxI2s2HcwLiXDkEaQ60rKnDX6irjveS6cQOeTAhq - mXdumBRmFmI4faVbHadMCEvgF+SxGYoAMiEYSCCLJ4cszju1IAQWBhMiEDnDwS9u+gA9jKDn3kFvHixv - fH+rdFwUAVG/vUmWfWMHePXeNcn30gfodUX8cfLSAGKxBV0AT/IApFiQFg/KpaVgDiWeG/Pn//Wzaz5A - r5/tLWYCwBH0+sGys6kW97Y0gRtyG6jrUfaZdH9f3tXoMNtbgR6GMaP/f5L7L41FZlr752oSV44pT7Qt - lq7RGXx+c9Az6HmS+2dAug749m6h6gU8ugNSoEm3DCBdf9bZ7nXVWFNVbA16bgd66+Vi3+Q8/nyrTx6G - grrMYAZXP/csN6Vncn70m3+54QB6+AM9dwa9/omXHmhFaVGRGpTk5AVkoXHsv3u1bnhYgB7uMSLlDScu - 9oEn4poXKoR06/zctRz89JKrxZiA4990YHY+5juYl+zi6++/W0ARqCotwrP3btYlMFEwMNvAH2IM+3au - VF18S9An7QzYLQs5jqnuv+SBMiaAIffrN+SoByAFYeZjCRw/2xkQ9NwC3PbLCTPBvPHIFmhNHERaBmSZ - PbmxDtWlEY+gtxk38q/vhmZwsW8Y+r1/6DUfOWw56r9oSRW/+eJG5kDvsFvwxObVaKqtBuciuLIbABG0 - DMgC4xz7714VDPT6P+UHR873AjxuKd3NdcvdbyDfjC9uDaFrdNoj6OEf9DZuIWPAf35sR1LaMhHAsqMf - JWEBz2xtcAE94GWy4Jzj6Le3oW0tKpV68qN8Ww5TmJZl9S+f3fAcwbcCvRHjXgOHwH96ZBOYIKi7AZKU - lQhgue3ZbQ0oCTMX0LsnBCna/t7xScMWtFGrn9uW2wQASW775hc3IIpiYNAHjSE0VpfhyW3rpWWAWcdO - tjzGOV7cuTIl0OsDh8cu9kkEnyT7zg/dR24vYmRWHplZwJmrfZ4i+KmC3vw/33hkKwwCJlAwcBnRj5qS - MJ7cWGcDengCvfJELJ7AqYtdMFZ40rv/uW+5H8WQAzG/+aI9aTDYRfCDrAW154wxhOfuXoeasjJ1CUA5 - ActrL961EiHBfFutcz+SQQ/DZPFR+yjGZ2d1qb/55f7nAQFoOQGnL/didGbeUwTfhHQfoE9eTkQEhld2 - byGBUDYY59ivuv/OoPeSBXjsQo9a7IMZinrkj+w7DzwAyTWLJUQc+qrDPpiXRtAbCQZ445FN0oAggdBy - oh9NVcV4cG0VLF18+Ev9nVlI4PTVHpgFaSzPyrbnQRcKrRDHv/7lJvzu8bqDHpag1w+WnY012NW8Clxf - 3oyWAUtOAK/cvcoIeqcsQNN7zR7iu1cHMb+4kBz9z7PKzfnRhkZOzbw5NIWzXaPwHMzzBHpuCXqzZ/H6 - 97bo0oJJILTU4AcHXrnHZ+pv0nFd6u/FXmVwgekLe+ZZ1af86UOlBAO/vOUMegBeCoh4Ab1+OfHy/a0o - CkdIILRMdvfqcrTWllrcSxPoYQ965dfwzCI+ae/XxpWhxl9+VX7KEwLQgoGH/9qJ+cU4AmUBwuTi+wgc - VpeG8fy9G0kgtCym7P17V/c5LQuPXRowKv+YILV0y8PSb3nkAUhbNbOLcbyjuG8+g3lubqHbfvLru9tA - AqGlBz/jwM93+kn95Y7LwqMXelR4MLnQZz4o//KbAFQSYNIywA/o4Rf01jGEH25aiabaKhIILbE9ur4a - DeVFwUGvDg+OzvEozhuUf0LeKP/ynACUZQDDp+130DWmFA31AHoPbqGXwCED8MtHtpJAaCmNc7y4oyGw - 12beLTh0oV9qZ6cq/0J5o/zLcwKAyticAwe/6ggUzLPfLYCn3YI3dm+0EQgRCWQA/YgIDHu218OP18Yd - sgAP6er+KYG/fFH+5T8BKF4AGP79yw6IhrZRQOCEIJtdBOMWofSGxqoS/HDLOguBEFkm7OlNtagoElIC - vfLzde8k+sanoO/gK/V/zE/3Pw8JAOqNG5iawyc3hgK5ha6BQxPozYFDLRgo7waQQCgzxjn2b29wAD1c - Qa+3Y5cGpHvGrJR/+Wn5ubCR12u//boTQYJ5VoPFfbdA+7/PbG9CTVkplLbolBOQEfSjokjATzfVOIDe - ewWoRELEiYty9N9S+UceQK6gH0pOwHuXejEZjaUAeu6yW2BxnAMlEQEvPdAmAV/UC4SIANJpz2+tRyQk - GPL9/ZZ9U17+cccYxqPRvFb+FQgBQCsaGhdx7NtuBAnm+Q4cmgjmtQc3SGTE9QIhIoC0GefYt32Fs4vv - Anr9vTx2qT/vlX+FQwD6oqFfdwYK5nkLHAJ2uwW71lTjrjUNug5CtBuQRvSjoSyCx9ZXJYOe+ykBLh2f - j4l4/5q+6YfS0pvl9eyfxwQANZDzbe84bg5N+QB9CglBpv/4xsObYMgMpGBg2ghg/456uSmwS+qv3XHd - fXznuyFN+WeQ/+Z/1+f8JQB90dAvOjxH8INmARrHp0QwL923jgRCmcE/9m1fkXwwwFINHLL7z6G5//mp - /Cs8ApCLhh78pguLCdFjMM8N9HAEvb79VHVJGM/evV4nEKJCIelAf2tNMe5ZXY7A2g3dbsHQ7CI+ab8j - D5n8LfxRgAQAdTtncj6G310dsJ8hUiwMat9zDnj9wQ3QlgGUGJQOAnhpZ30gr81qi/DUtSEkEot5X/ij - MAkA0OoEfN1lP1hSAL3bcuKHbfVoqiGBULrADw4cuKvBeC89ZgFaeW3HLvWrUFCVf8r2HxFAzqMfyrru - 4xuDGJia85YFmCLo9QOTgeGN3W0kEEqTPdBUjqbKiKvX5iUL8PbEPM72jqBQlH8FSABQb6zIgbfO9sBz - MM9QRdYN9IDTbPTq/c0QDAIhWgYEM44Xt6/wCHr3hKCjlwcBMV4wyr/CJAC9QOirTmfQAzalowN2l5X/ - bK4pw+NtTTqBEOUEBAF/CMCL2+pSAr3+Xh652K+NESbkvfKvQAkAqhfQNR7FXzpH4ZYFaAlun6A3Lye0 - YCB1EApqP2ipQk1J2AH08JwFeG5gBp2jkzCX/dZvHxMB5A8DaAKhb7otQe8pCzBwRyGOZ7at0gmEKCfA - t3GOfdvqkoN5HvtAmt6AY1cGJU8sSflXGMG/wiMAORh44kIvZhZiwRKC7I471BJQCKYkEsKL97ZSB6Fg - 6EdJmOHZzbUGQvALeuV4IsFx6rJS9Tc/e/4RASRxgCYQOnmx3zvofaT+2refks7z+v3N0gxDHYR828/a - alASYu6NPWxAr7/Hn3RNYGgmv3v+EQEkM4Ca3PHbb3rSlwXoAnr9wNzVVI3NK2t0AiFaBngyzuXgnxXo - uY+lmnT82OU7Ban8K3ACgLre+6p7DDeHZ5BqFqBzzzkrguH4u4f1pcMpM9AD+lFTEsKPWqqQylJNCRzO - xRN47zuj+68q/woM/IVHALoI78GzPcFBb5v6696Q4uVdTSgKh0kg5MP2bqlFiMG316ZxhXbsdzfHMLe4 - qHP/dXv/Beb+FyYByDkBvznbA1EUPYAe7qD34YJWF0fwtzvWkUDIq3GOfVtrHa6vDeht+kBK0X+9+184 - yj8iAEB1+Uaji/joxrCnYJ4z6PUDE54Ciq/fv15+CS0DXNCPpooIdq8pDwZ6/ZPgmJiP4+P2Id04KCzl - HxGAngQA/PZsry3o05UFaHX8yQ0r0FRdQQIhDwSwf3utbd6FPehhuVtw4toIEmKsYJV/RAAS+qG4fx/e - uIPR2YVAwTzfgUMdwYABr93fQgIhd/xj/9ZaWAXzeIBy7sevDBoLfwj5X/WXCMCSA6QZIJbgOHy+3wL0 - AbvLOsUQTATz2n1rSSDkgv6dDSXYUleSEuiVw/3Ti/i6d1S+/0LyT4FagX5zpv78+zc9AUDPfQQOrQdm - c00pHt2wmgRCDgTwwpZaH6CHo9d2+PKQrPwTdMq/wgZ/ARMA1JyAmyOzONs3aQJoZkBvHpiv3dssPySB - kBn8jAMvbKnxAXpnAj90aUC58ZryL09bfhMBeGMAlf0PnuvzX1fOEfTwFEN4bvsqVJQUkUDIwr63thxN - FeGUQK8cv3BnFp2Gnn+FvfdPBKAQgBwMOnqxH/PxBLxE8O23CP0PzJIww0v3rLcQCBU4AXCOfcrsr7+O - AZZqnAPHrg3rWn4zWvsTASgcIGWDzS7G8d7VIU8RfPvdgmAxhFfvXWMhECpkApBafj/bVg3HLVgX0Gs/ - Ik5cHdTuNwsVRM8/IgCfJPDbb/vgNYLvXm0GnmMI9zVVYXNDNQmEdPZUSwVqigXnLViLa6vdEu34pz3T - GJom5R8RgDX6Vbfws84xdE/MewvmWYI+eAzhlw+sBwmElGuid/99pP7aLNWOXx22UP4VdvIPEUASCQjg - AA6e7/ee+ptCLQEzwRy4hwRCysUpjwh4urXCMe/COd8fqoc1Hxfx3nWl6Yde+Vd4hT+IAJwIQO4g9Jtz - fdKg8pIFmCLotX/LUVUcwt9sbdIJhAq3WtCzbVUoCQlJ15d7Sf01HT/TMYGZhQVS/hEBuHGANDsMTM/j - Tx3j9qB3ygIMWJtesVfvXSs/lzClBxeQcY4XNlf5A71T6u+1YVL+EQF4JQFpYBw834/ACUEplKl+srUW - TdXlBSwQ4mgoDeGJteUWwTw30CPJa5uYT+APHSPavSXlHxGAA/qhzBLvXhvC1FzcO+hVDAerTa+8XGDA - gV3rkgVCBeMFcOzdUi1PzN67MNttwb5zcwyxeOH2/CMC8M0B0joxJoo4evkO0pIF6AJ6M8G8vqtJilLr - BUKFEgzkwL7NVSmBXu+1Hbs6ZKP8owAgEYA1A6gkcPD8QKBgnuXA9NFGrLm6GI+2NlgIhPIf/S3VEexq - KPUBesBuqdY/s4gve+VYTpLyj8BPBGDLAdJscWFwGjdHo8FBn0JHoVfvWSM/LiCBEOfYv6UaQZdP5t2C - o9dGAR7Xuf+k/CMC8MYA6iD5t7P9PkAPeA4cuuwWPLe1HhXFhSQQkr7Xi5tNVX99gl4fODx+TXH/tX5/ - pPwjAvBGAHLR0EMXBxBLiB5B7zML0GG3oCQkYP9dawqqg9B9K0vQUhXxkHcBW9ArP1dG5vDdyDSMyj9y - /4kAPHOANHCm5uM4fWM0TaDXZ7C5V7Z59Z7GwukgxDn2KsE/l7wLaSmWDHr9W499N6pr+W0iATIiAG8k - IM0WBy/ccQA9PIFeH0OwDW6ZElnuW12BzSuqwCHmuUCII8SAvW0VntR9bvUXORel6D9Ayj8igMDoh7J1 - 9MfOMQxOLwQK5vnJAjQel/5847618t/5LRB6bG0ZGkrDtqB3TAgyHf+8bxZDM3Ok/CMCSJUDJNdR5Bxv - XRoKCHqfEW0Twfx8RwOKQqH8Fghxjn2bKuG2rjeA3qE9+InroxJZkvKPCCBFBoAiEnrz/KCjDiAl0DvE - EFaURvCTzavyuIMQR0mI4W9aK/yDHsnHYwmOt68Py7ePlH9EAClzgDR4uifn8ZeeSfgP5rmBHnCLIbx2 - d6M0mPN0GfB0aznKI8w/6C08pt/fnrJQ/lH0nwggRRIAgLcuDWug58Fr0xtB717k4snWajRWlsqZgWJ+ - CYQ4x762SsMlSSUL8Nj1UQvlXwgU/CMCCIp+dTCdvDaM2VjcemCmGfR66avAGF65u0l6QkzkUQchjppi - AU+uKwOc+vl5XD7NxhL4fYe+6Qcp/4gA0sIBkjs5H0vg7WtjniP49qCHK+jN//P1u1ZJAzmvOghxPLex - AhEBgUGvDxyeujmJWJx6/hEBpJ8B1EF18OId+4HpGfTcd1PL5upiPNJcl18dhLiy949AMRPzbsGJ6yNG - 918IUeEPIoD0kQBjAr7un0L72Jy3LEAH0Afpb/fq3avlQ/kgEOJoKg/h4VXF8LN8sssC7J+J4fOeCflW - KXv++uo/ZEQAKeGfqa7koUvDSQPTNguQW1Ws9Q56/eHnN9ehojiSJwIhjhc2VUhpuq75/u5ZgKduToDz - uOb2C6T8IwJILwNAKRp68NIQRLVSDwKVqfbb1BKcoyQkYN/2RrlgaY4LhDiwzyH11wh6AC5dmI9fHzUW - /iDlHxFA+jlAigOMRmP46NYkvETwk8CdYhuxV3eulGZNeRmQmwIhjs01EWyrLTKCHnagdy7Fdn1sAVeG - FeUfo8IfRACZJAFpUB26PKyOUVfQ89RArw963be6HG11FWrR0JwUCHGO/ZsrkCTyccoCdFg+Hb8xruv5 - Zyr7TUYEkEb0Q3ExT98ax0g0FiwL0PI4PBW5ADhev6cxhwVC0ud8YWO5Z3Wf9bVVvC7Z/Yfk/iv7/qT8 - IwLIEAdIsQCRcxy9OmY7MJNAn4b+dsrLXtq2IqcFQrtXF6OpPAS3db12ueyXT18NzqFvOmpy/UMg5R8R - QKYYQCWBNy8OpS8LkHsPHK4oDePptobcFAhxjn1t5d5B7+JJqe4/mLblR8k/RACZ5QBpsLWPz+HcYNQ0 - YN1AD6Rjt+DAjoYcFAhxRATg2ZZy13W9Leh11zAminivfUy9J5Clv6T8IwLINAOoGWZvXRkJFMzz1t/O - CHo9OJ5qqUJ9WXHOdRD64dpS1BQzG9B786SU3YI/dM9ifG4+WflH7j8RQMYJQHY5j10bxXw8kR7Qc+9u - sADgtZ2r5efF3BAIcY4XNpanAHpu2C04cXPcWvlH7j8RQOY5QJp1ZhcTeO/mpOcIvivofZTE/sVd9Tkk - EOIoDzP8ZF0JvCZAWYFe+ZmNiTjdoW/6Qco/IoClZQA1PfjQlVF4jeAHzQK0Or6usggPr63JGYHQz1pK - URJmpu+bvHwygh6w2i14r2OalH9EAMtPAowJ+Lx3Cl2Tiymk/nqPIZjz4g/saJCfznKBEOd4YWOZK+i9 - ZgEa3H9Qy28igGXBvzT7cABvXR2DayJLQNA7lcTe01aD8qwXCHHUlwh4fHWx4VjQ1N+RaAKf9UzK90AT - /5D7TwSw1AwAZQY6eGUEXOQB97QROIZQEmZ4YUuDhUAouwhgz4YyhAQ4ruvdujCrVX/bJ2XlH7NQ/hEB - EAEsKQdIA29wJoZPe2YswJ1afzsvy4kD2+o1gZCYhcFADuxpLXXJ9/f+fU+0T1DPPyKAbCMBJi0D7IJ5 - aQa99Jx0/IHVpWirK9cKhmbVMoCjpTKE+xoiSEfqb9dUDBeGSPlHBJA96IcSDHzv1iSmFhJGgPtsamkN - jmTQm2MIr+5oyFKBkBz8cwU9PCkn37oxKX0/Uv4RAWQPB0g5AbGEiOM3JtLS385vDOHlLbUICUKWCYSk - z/bihlIPoPeWC3H0xpha+IOUf0QA2cIAqjt66Oq4LeiTsgBTFcPoCGZFaQg/2VCXdQKhe1ZE0FIZ8gd6 - m4Sgr+/Mo296HlrLb1L+EQFkDQdILunFoSiujs4FamrpVwxjJpgD2+qzSyDEOfZuKA2UAGW1W3CyfcpU - +IPW/kQA2cMAWjvxqxNIpb+dPegBpxjCU+vLUV9alCUdhDgYgBdanVJ/uQvote+WEDnebh+X/rZU/hEJ - EAEsNwGAgYHhyHfjiCV4sCzAACWxlZcIYDiwvSFrOgg92liE+hIhMOj1uQF/7J3D+PwitfwmAshmDpBm - pqmFBE53TnsEvR74/kFvXk68saMuOwRCnEuzv8X39Qp6/fc6eUuO/htafpPyjwgg60hAmpGOfDfhEfTJ - 63r7FFm4bqWtqwhjd1PlMguEpMIfzzSbUn+VpqqOoEfS95pdFHH6tj71NyQvAQj8RADZhX4oM9Qfe6Yx - OBMLBnrbFFlvW2kHtq2Qn1s+gdBP1hajPMKMs70n0CfHTE53RzEfiyXX/aMAIBFA9nGANEhFEThyfQpe - I/hBS2JbBQ6fa61EedEyCoQ4x97WEmsX3yPoDam/tyZJ+UcEkDMMAGVH4LfXxjOTBeiylVYWEbB3U90y - CYSkwh8/WlME636J/r7vyFwcn/ZOyZeWlH9EADnBAdIyoHtqEV8MRBEkmJcMbu+yYs45Xt5SY9FBaGkI - 4PmWYqnlt5eli8v3fbtzFgl575+Uf0QAucIAmkDou6kMpP66F9R4cFUJ2mrLlr6DEAf2tpS4Snq9fF8O - jhO3puTPTso/IoBcIgA5GPjOrSlEYwkPoEcadwuk1x7YWrfEAiGO+hKG760MwV8ClBH0ym5B11Qc3w7N - ypeUlH9EADnFAVLCynxcxKn2meBiGJuS2F4Kary0uWqJBUIc+zeUgIH5ToBSgK9/+fGOGUBu+U3KPyKA - XGMAddZ66/pkGkDPfRfUWFEcwo/X1yydQIgDe9cX+Qa99W4Bx/Gbk6T8IwLIZQ6QlgHf3JlD+8Si72rA - nkDvUlDjwNaaJRIIcWyuDmFHbdgB9N6zAM+NLOI2Kf+IAHKcAWQvADh8Y9oC9H6q4yJQDOHHa0s1gVAm - Owhxjr0tRa7req9ZgCc7ZnTKP0ZrfyKAHCUASFHrt65PQhTFtJTEtga99XJCYAwvba7NcAch6X+92FKc - EuiVFyYSHO92TkJT/oVI+UcEkKscIM1eo3MJ/KFnTg+PjIHevJx4ZXNVxgVCD9aH0VjGLEAPT6DXf+dP - BxcwHCXlHxFA3pCAnBNwYzrlkthBCmq0VUfw4KryzAmEOMee9UXw1Q7dBHr98ZOd0xbKPwI/EUBuol8d - yGe6ZzA2H0cqJbGNoPceVX9lS438Z7oFQhwhBjy/PoJgqb/G4OV8XMT7t+V4iW7tT+4/EUAOc4AmEDra - Phu4JHYqBTWeby1DeVE4IwKhHzSGUVPE7L0YH1mPp3vmNeUfTHv/5AEQAeQoA0DZzjp4fRpBS2IbYO+z - oEZZWMBzG6otBEIpGufS3n9gNaPxe53smEZyy2+a/YkAcp4DpAHdPrGIc8OLgUpiBy2ooZzrlU1VFgKh - VEiAoyQE/HRNGEFrH+p3CyYWRPxHn9xdiVp+EwHkGQOobuzhmzMIlAXoCfT2QHxoZTHWVRanUSDE8bO1 - EZQIzFcjE+stQuDt23NG5R+1/CYCyCsCkN3aE7dmMJ/wk/qLwKA3A/EXW2vSJxDiwN7mCLyoGbkO+Ha7 - BVL0X+f+K7p/kPSXCCAvOEAKbEVjIj64Pecd9CkU1DAD8UBbZZoEQhw1RcATq0O254IB9M5Ll4GoiG+G - ovJ1Ekj5RwSQlwwgu7cMb92cDhTMg+Fl3msJKOeqLWZ4al1lGgRCHHubIwgp57Q4l594xZHOWbnnHyn/ - iADymgMk9/YvA/PomU54AkcS6Lk/0JuB+PKmytQFQhzY0xxxORfgdelytH1Kp/wTSPlHBJC3DAAwARzA - 4fZZpGNd7w56IxCfXlOCFSXhFDoIcTSWMty3QnA5l7ely8XxGG5PL0ILlIZI+UcEkMcEIAe53ro5Ay7y - YKD3UFDDDogCA15qq06hgxDH/pZI+lJ/b0ehtfwm5R8RQN5zgDTAB6MJfDq4YAMO76C3K6jhBMQDbRVy - TkAAgRAH9q8P25wLnkCvPMdFEac65IpJpPwjAigsEmA43D4XKJjnvlvgDMSNVSE8sLIsgECIY2eNgJYK - ZnMuf2rGz4biGKaef0QABYZ+KMuA33XPYmpR9Ah6/9p6JyC+vFEJBvoQCHGOvc3hlLsXKXkBJ2/PAqI+ - 9Zfy/okACoIDpBkvlgBOds5nBvTcGYh7WkpRGhJ8CYQYgBfWmav+Al53LKTDXFb+cXzQLQdCzco/yv4j - AshzBtCKht6KOoAeqYEesM3BLw0Bz7VW+hAIcTzSIKC+mPlSMyqg5ybv5qP+Rcwu2ij/CPxEAPnPAZLb - e2l0EVfHY2mIqluA3iUd9+WN5YZlgKNAiHPsUWd/D6m/FqDXf69Tt6Ok/CMCKGgGkN1e4K1b80hHQQ1n - 0CcvJ3bXR9BcUeRBIMQRYcCza0N6hDufy/R+PZlNLHL8sV9p+kHKPyKAQiUAuePtsY4oYgmeckENDW7e - cvAB4LVNlZ4EQk81CigPwTKYxx3Km1t9hvd6FhBLkPKPCKDgOUACwNSiiDN9i0i1oEaQGMKBjaWqQEhd - BlgQzd51IReCsQC9zW7Bqa5ZG+UfEQARQGExgJYTcGsupYIaQWMIdUUMTzbpcwLMcQCO8jDwo9V+Un8B - u9qHA3MJfDUkqyFJ+UcEQCbNgp/0L2BwLmENep5e0Js9Cy0YaLUM4HimSUCE+QG9fW7Aia4FVfkHRtF/ - IoCCx78mEDrauRC4oEawdFzpvU81RowCIYgGIBui/wFAr71MTv6RlX+MlH9EAGRaGuyhW3MwwtshmJci - EPUEExYY9reWawIhUesiVF8MPLICaUn9vTKZwPVJRfnHdMo/Ru4/EUAhc4A0G/bMJPDlcMxbFmAKQNTe - qRHMgQ2lyQIhcLywTpCOp1C3QHl0smtep/wzrf/JiAAKmwSkINiRjkWY0OStrZbndFzrCP7GSgH31pck - CYSeXyMgSCMTjY+k41wUcUJx/0n5RwRAZkA/lDXxu91ziMbFQME8txx8txjCK61lhszA9eXAXdXM87nM - oNcvM74YSWB4Lg79koeUf0QAZCoHSMCYTwDvdMe8gx5eQM9tQa9fTuxpLkJpiKkCof3rBDjXIzSeCw5Z - gCe75yViSXL/CfxEAGTQC4QOdy54AD18pON6CxyWhRieaS5T37+/2Sr1l7ucCzD3OoiJHO91R6FX/pH7 - TwRAlsQB0ux4dmQRt6YSCBLMS3LxPe0WaMdfaS0FGMP9KyJoLEGAcyUHLz8ajGM2Fqeef0QAZC4MoJUO - 71wMDnp40AHYxBZ2rwihuTyMvc3Fxnd6PheQnPo7T8o/IgAyTwQAAQwCjt5ecFlrOwDR026BfTDvtbZK - 7FkbtlnX+8hDAMdsXMTpPn3qLyn/iADIHDhAWiOPLXCcGYgHCuZ52y2AbQT/v2yKoDoCH+eyz0N4pzeu - 7v2T8o8IgMwTCUgAOda5GHz29dhRyEsE308MwXyuUz069x+k/MtGC9MlyCr0Q1kr/74/hrGFEtQVw6JU - H7d4aFHPjycfV6FvWf6PezyXxflM5xqY4/hyaF4jNYGy/7LR6E5kHQdI7rII4Hh3LPDs65ykYwZ98MCh - 3blO9cakrEKm7/pD4CcCIHNjACi1Ag51LqYMRE/BvKTjcA8oupzr7W6l74Gm+mMg958IgMwDB0iAuTWd - wLdjYmZAn1Ircu54rpvTHFcNyj/K/iMCIPNNAmACjnTFkY50XN+BQ5+g15/reM+iKfWXWn4TAZD5QT+U - YOCp7kXMx7n1bM+9pePagx5w2y0w8oD7uTgHTqnuPyn/iADIAnKAlBgUTQAfDIg6CKcT9O7LCes6hVbn - ko5/PS5iICor/xgp/4gAyIIygJoafKQrnpHUX98xBA+f4VTPIgDN/Tf2/CMCIAIg88EBEoi+GI6hJ8qt - QZ9ULgwpR/CdCcbuM3DERI73e+d1hT90Pf8I/EQAZL4ZQBXOHO1OLEkEX32Tp3PBcK7/GBIxuRhPbvlN - 0X8iALKABCDvox/uluoFBk399Q56n8sJ3Wc41btoUv7pCn+SB0AEQBaEAyQv4M4cx2cj/rIA/UbwPYPe - gmBm4sCZfl3qLyn/iADI0kUCkht9tDuBTEbw/cYQ9M/+biCBmCiS8o8IgCzN6IfiUp/uj2Mqhgyk/nIf - oOfJBGN2/0GFP4gAyNLIAVIsIMYZTvWKHkEPOO8WBAscWnUvGlkAPh+WqxgpwFekv5T9RwRAljIDaEVD - exLpCeYZjsNltwDOVX/75GYiivsvkPKPCIAszRwgLQOuTIq4NpW5YJ416J1jCG/3LiTV/SPlHxEAWXoZ - QBMI9XCkHsxz2y3wFjjsjnJcnozJH5H2/okAyDJHAPIMe6IngVjCCvQ8UATfGvTwlPp7pEduKa5W/CXl - HxEAWYY4QAoGTsU5fj+U/mCe+iYftQSO9y7qlH/U8psIgCyTDKAG2o72IEAwL0Dg0CEl+Ow4TMo/JfOP - 3H8iALIMcYC0DPjTcAJ35u1TgoNlAeqBD9cCIqf64tTzjwiAbIkZAGACOBiO9bGUI/hG0HtvLhLnwDv9 - cs1C6vlHBEC2hAQgk8DhXnFpQG/OAuTAJyPA5GIiWflH7j8RAFmmOUAKtPVEOb4aQ+AIvpcYgmXqLzje - 7ourwT+D8o9y/4kAyJaGBMAEHO01ATyVasCWoEfS/5yNA2cG9e4/Kf+IAMiWEv1QZt73B0VE4/4j+N5B - n7ycODMELCREi8IfNPsTAZAtEQdI4FsQGd4dFEzAdwO9dtwr6A2pv30xavlNBEC2zAygut9H++Argq8P - 5vnNAhxZ5PjzqD71N6RT/hH4iQDIlpADpBn43ARHxyzgNYLvDnr7GMK7A0DCsvAHFf4kAiBbagZQ195H - +gXPEXy/oNcvJ97pjxmj/0KIlH9EAGTLRgByBZ5jfYDI3SP4KsADVAPujjKcn5BVSKT8IwIgywYOkLyA - sRjw8WjIVzDP/rh14PDEAIfS9AOk/CMCIMsKBtByAvoYAmUBOoBeW0pwnOyPJ7f8pug/EQDZ8pMAYwI+ - HuYYi7HUswBNuwXgwPlJhu5ZUv4RAZBlIf4lUIoQcGJA8AF67rJboD14e5CrLb+YYQeAZn8iALLlZgCo - AiFlGZBqFqDuzQkOnOpT6pFbtfwmy1UL0yXIFw6Q1uMdUYb934QQQsJ628/WuJFMdIfnRBGTsUTy3j+5 - /0QAZNlFAmACvpkAuJgAF+WCHen55xLJCGEwIUzKPyIAsixDP6RgYAhcCAPgcoKOaLHfH5wApJr/1PSD - CIAsCzlA7iYshGXAihIB+DUrwlBmexYCE2jvnwiALBsZQAUmCwneYwBePATV3WcU/ScCIMsFEgDT7e+7 - vMXrv6akHyIAslwgAf1vwiuZjdFCjoyMCICMjIwIgIyMjAiAjIyMCICMjIwIgIyMjAiAjIyMCICMjIwI - gIyMjAiAjIwsl82QChxhwKNr6KKQkeWjFYWMf7O/Pxtj0V8/xgvzcpCRFbaVrowW0RKAjKyAjQiAjKyA - 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