diff --git a/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
index 8e6e3a82f..82dea8e96 100644
--- a/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
+++ b/Barotrauma/BarotraumaClient/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.9.0.6")]
-[assembly: AssemblyFileVersion("0.9.0.6")]
+[assembly: AssemblyVersion("0.9.1.0")]
+[assembly: AssemblyFileVersion("0.9.1.0")]
diff --git a/Barotrauma/BarotraumaClient/Source/Screens/ServerListScreen.cs b/Barotrauma/BarotraumaClient/Source/Screens/ServerListScreen.cs
index b856d5940..89dd98622 100644
--- a/Barotrauma/BarotraumaClient/Source/Screens/ServerListScreen.cs
+++ b/Barotrauma/BarotraumaClient/Source/Screens/ServerListScreen.cs
@@ -185,9 +185,15 @@ namespace Barotrauma
if (!(child.UserData is ServerInfo)) continue;
ServerInfo serverInfo = (ServerInfo)child.UserData;
+ Version remoteVersion = null;
+ if (!string.IsNullOrEmpty(serverInfo.GameVersion))
+ {
+ Version.TryParse(serverInfo.GameVersion, out remoteVersion);
+ }
+
bool incompatible =
(!serverInfo.ContentPackageHashes.Any() && serverInfo.ContentPackagesMatch(GameMain.Config.SelectedContentPackages)) ||
- (!string.IsNullOrEmpty(serverInfo.GameVersion) && serverInfo.GameVersion != GameMain.Version.ToString());
+ (remoteVersion != null && !NetworkMember.IsCompatible(GameMain.Version, remoteVersion));
child.Visible =
serverInfo.ServerName.ToLowerInvariant().Contains(searchBox.Text.ToLowerInvariant()) &&
diff --git a/Barotrauma/BarotraumaServer/Properties/AssemblyInfo.cs b/Barotrauma/BarotraumaServer/Properties/AssemblyInfo.cs
index 2ccbcdb86..a366a224d 100644
--- a/Barotrauma/BarotraumaServer/Properties/AssemblyInfo.cs
+++ b/Barotrauma/BarotraumaServer/Properties/AssemblyInfo.cs
@@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("0.9.0.6")]
-[assembly: AssemblyFileVersion("0.9.0.6")]
+[assembly: AssemblyVersion("0.9.1.0")]
+[assembly: AssemblyFileVersion("0.9.1.0")]
diff --git a/Barotrauma/BarotraumaServer/Source/Networking/GameServerLogin.cs b/Barotrauma/BarotraumaServer/Source/Networking/GameServerLogin.cs
index 84a0277ff..5743da4f1 100644
--- a/Barotrauma/BarotraumaServer/Source/Networking/GameServerLogin.cs
+++ b/Barotrauma/BarotraumaServer/Source/Networking/GameServerLogin.cs
@@ -339,13 +339,14 @@ namespace Barotrauma.Networking
return;
}
- if (clVersion != GameMain.Version.ToString())
+ bool? isCompatibleVersion = IsCompatible(clVersion, GameMain.Version.ToString());
+ if (isCompatibleVersion.HasValue && !isCompatibleVersion.Value)
{
DisconnectUnauthClient(inc, unauthClient, DisconnectReason.InvalidVersion,
$"DisconnectMessage.InvalidVersion~[version]={GameMain.Version.ToString()}~[clientversion]={clVersion}");
- Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (wrong game version)", ServerLog.MessageType.Error);
- DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (wrong game version)", Color.Red);
+ Log(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (incompatible game version)", ServerLog.MessageType.Error);
+ DebugConsole.NewMessage(clName + " (" + inc.SenderConnection.RemoteEndPoint.Address.ToString() + ") couldn't join the server (incompatible game version)", Color.Red);
return;
}
diff --git a/Barotrauma/BarotraumaShared/Source/Networking/NetworkMember.cs b/Barotrauma/BarotraumaShared/Source/Networking/NetworkMember.cs
index 2730bacb3..50bf9088e 100644
--- a/Barotrauma/BarotraumaShared/Source/Networking/NetworkMember.cs
+++ b/Barotrauma/BarotraumaShared/Source/Networking/NetworkMember.cs
@@ -241,6 +241,30 @@ namespace Barotrauma.Networking
public virtual void Update(float deltaTime) { }
public virtual void Disconnect() { }
- }
+ ///
+ /// Check if the two version are compatible (= if they can play together in multiplayer).
+ /// Returns null if compatibility could not be determined (invalid/unknown version number).
+ ///
+ public static bool? IsCompatible(string myVersion, string remoteVersion)
+ {
+ if (!Version.TryParse(myVersion, out Version myVersionNumber)) { return null; }
+ if (!Version.TryParse(remoteVersion, out Version remoteVersionNumber)) { return null; }
+
+ return IsCompatible(myVersionNumber, remoteVersionNumber);
+ }
+
+ ///
+ /// Check if the two version are compatible (= if they can play together in multiplayer).
+ ///
+ public static bool IsCompatible(Version myVersion, Version remoteVersion)
+ {
+ //major.minor.build.revision
+ //revision number is ignored, other values have to match
+ return
+ myVersion.Major == remoteVersion.Major &&
+ myVersion.Minor == remoteVersion.Minor &&
+ myVersion.Build == remoteVersion.Build;
+ }
+ }
}