feat: Adds KR/EC client versions (No actual support yet). (#1506)

### Summary

- Adds KR/EC client versions to ClientVersion
- Adds distinction for enhanced versions in the page queue
- Adds KR Expansion flags
- Adds ProtocolChange enum support
- Adds missing Moongate checks for TerMur
- Adds better message for why a client version is not supported, and which ones are supported.
This commit is contained in:
Kamron Batman 2023-09-18 23:53:18 -07:00 committed by GitHub
parent cee4d0fb15
commit 0bec97639f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 284 additions and 103 deletions

View file

@ -28,32 +28,9 @@ public partial class NetState
public ClientVersion Version
{
get => _version;
set => ProtocolChanges = ProtocolChangesByVersion(_version = value);
set => ProtocolChanges = (_version = value)?.ProtocolChanges ?? ProtocolChanges.None;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ProtocolChanges ProtocolChangesByVersion(ClientVersion version) =>
version switch
{
var v when v >= ClientVersion.Version70610 => ProtocolChanges.Version70610,
var v when v >= ClientVersion.Version70500 => ProtocolChanges.Version70500,
var v when v >= ClientVersion.Version704565 => ProtocolChanges.Version704565,
var v when v >= ClientVersion.Version70331 => ProtocolChanges.Version70331,
var v when v >= ClientVersion.Version70300 => ProtocolChanges.Version70300,
var v when v >= ClientVersion.Version70160 => ProtocolChanges.Version70160,
var v when v >= ClientVersion.Version70130 => ProtocolChanges.Version70130,
var v when v >= ClientVersion.Version7090 => ProtocolChanges.Version7090,
var v when v >= ClientVersion.Version7000 => ProtocolChanges.Version7000,
var v when v >= ClientVersion.Version60142 => ProtocolChanges.Version60142,
var v when v >= ClientVersion.Version6017 => ProtocolChanges.Version6017,
var v when v >= ClientVersion.Version6000 => ProtocolChanges.Version6000,
var v when v >= ClientVersion.Version502b => ProtocolChanges.Version502b,
var v when v >= ClientVersion.Version500a => ProtocolChanges.Version500a,
var v when v >= ClientVersion.Version407a => ProtocolChanges.Version407a,
var v when v >= ClientVersion.Version400a => ProtocolChanges.Version400a,
_ => ProtocolChanges.None
};
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool HasProtocolChanges(ProtocolChanges changes) => (ProtocolChanges & changes) != 0;
@ -72,10 +49,10 @@ public partial class NetState
public bool NewMobileIncoming => HasProtocolChanges(ProtocolChanges.NewMobileIncoming);
public bool NewSecureTrading => HasProtocolChanges(ProtocolChanges.NewSecureTrading);
public bool IsUOTDClient =>
(Flags & ClientFlags.UOTD) != 0 || _version?.Type == ClientType.UOTD;
public bool IsUOTDClient => HasFlag(ClientFlags.UOTD) || _version?.Type == ClientType.UOTD;
public bool IsKRClient => _version?.Type == ClientType.KR;
public bool IsSAClient => _version?.Type == ClientType.SA;
public bool IsEnhancedClient => _version?.Type is ClientType.KR or ClientType.SA;
private ExpansionInfo m_Expansion;
@ -89,7 +66,14 @@ public partial class NetState
{
var info = ExpansionInfo.Table[i];
if (info.RequiredClient != null && Version >= info.RequiredClient || (Flags & info.ClientFlags) != 0)
// KR sends same client flags as EC
if (IsKRClient && (info.ClientFlags & ClientFlags.TerMur) != 0)
{
continue;
}
if ((info.RequiredClient == null || !IsKRClient) &&
Version >= info.RequiredClient || HasFlag(info.ClientFlags))
{
m_Expansion = info;
break;