Fixed world login
This commit is contained in:
@@ -222,7 +222,7 @@ namespace Game.Networking
|
||||
public bool IsValidOpcode()
|
||||
{
|
||||
int opcodeArrayIndex = GetOpcodeArrayIndex(opcode);
|
||||
return opcodeArrayIndex >= 0 && opcodeArrayIndex < 1699;
|
||||
return opcodeArrayIndex >= 0 && opcodeArrayIndex < 1735;
|
||||
}
|
||||
|
||||
int GetOpcodeArrayIndex(uint opcode)
|
||||
@@ -230,33 +230,33 @@ namespace Game.Networking
|
||||
int idInGroup = (int)(opcode & 0xFFFF);
|
||||
switch (opcode >> 16)
|
||||
{
|
||||
case 0x2A: return idInGroup < 26 ? idInGroup + 0 : -1;
|
||||
case 0x2C: return idInGroup < 47 ? idInGroup + 26 : -1;
|
||||
case 0x2D: return idInGroup < 3 ? idInGroup + 73 : -1;
|
||||
case 0x2E: return idInGroup < 33 ? idInGroup + 76 : -1;
|
||||
case 0x30: return idInGroup < 739 ? idInGroup + 109 : -1;
|
||||
case 0x31: return idInGroup < 298 ? idInGroup + 848 : -1;
|
||||
case 0x32: return idInGroup < 12 ? idInGroup + 1146 : -1;
|
||||
case 0x33: return idInGroup < 130 ? idInGroup + 1158 : -1;
|
||||
case 0x35: return idInGroup < 396 ? idInGroup + 1288 : -1;
|
||||
case 0x36: return idInGroup < 15 ? idInGroup + 1684 : -1;
|
||||
case 0x37: return idInGroup < 831 ? idInGroup + 0 : -1;
|
||||
case 0x38: return idInGroup < 10 ? idInGroup + 831 : -1;
|
||||
case 0x3B: return idInGroup < 18 ? idInGroup + 841 : -1;
|
||||
case 0x3C: return idInGroup < 33 ? idInGroup + 859 : -1;
|
||||
case 0x3D: return idInGroup < 49 ? idInGroup + 892 : -1;
|
||||
case 0x3E: return idInGroup < 11 ? idInGroup + 941 : -1;
|
||||
case 0x3F: return idInGroup < 12 ? idInGroup + 952 : -1;
|
||||
case 0x41: return idInGroup < 82 ? idInGroup + 964 : -1;
|
||||
case 0x43: return idInGroup < 67 ? idInGroup + 1046 : -1;
|
||||
case 0x45: return idInGroup < 32 ? idInGroup + 1113 : -1;
|
||||
case 0x47: return idInGroup < 1 ? idInGroup + 1145 : -1;
|
||||
case 0x48: return idInGroup < 118 ? idInGroup + 1146 : -1;
|
||||
case 0x4A: return idInGroup < 46 ? idInGroup + 1264 : -1;
|
||||
case 0x4B: return idInGroup < 41 ? idInGroup + 1310 : -1;
|
||||
case 0x4D: return idInGroup < 85 ? idInGroup + 1351 : -1;
|
||||
case 0x4E: return idInGroup < 8 ? idInGroup + 1436 : -1;
|
||||
case 0x50: return idInGroup < 1 ? idInGroup + 1444 : -1;
|
||||
case 0x29: return idInGroup < 31 ? idInGroup + 0 : -1;
|
||||
case 0x2B: return idInGroup < 51 ? idInGroup + 31 : -1;
|
||||
case 0x2C: return idInGroup < 3 ? idInGroup + 82 : -1;
|
||||
case 0x2D: return idInGroup < 37 ? idInGroup + 85 : -1;
|
||||
case 0x2F: return idInGroup < 751 ? idInGroup + 122 : -1;
|
||||
case 0x30: return idInGroup < 301 ? idInGroup + 873 : -1;
|
||||
case 0x31: return idInGroup < 10 ? idInGroup + 1174 : -1;
|
||||
case 0x32: return idInGroup < 132 ? idInGroup + 1184 : -1;
|
||||
case 0x34: return idInGroup < 404 ? idInGroup + 1316 : -1;
|
||||
case 0x35: return idInGroup < 15 ? idInGroup + 1720 : -1;
|
||||
case 0x36: return idInGroup < 857 ? idInGroup + 0 : -1;
|
||||
case 0x37: return idInGroup < 5 ? idInGroup + 857 : -1;
|
||||
case 0x3A: return idInGroup < 18 ? idInGroup + 862 : -1;
|
||||
case 0x3B: return idInGroup < 36 ? idInGroup + 880 : -1;
|
||||
case 0x3C: return idInGroup < 49 ? idInGroup + 916 : -1;
|
||||
case 0x3D: return idInGroup < 11 ? idInGroup + 965 : -1;
|
||||
case 0x3E: return idInGroup < 12 ? idInGroup + 976 : -1;
|
||||
case 0x40: return idInGroup < 82 ? idInGroup + 988 : -1;
|
||||
case 0x42: return idInGroup < 71 ? idInGroup + 1070 : -1;
|
||||
case 0x44: return idInGroup < 33 ? idInGroup + 1141 : -1;
|
||||
case 0x46: return idInGroup < 1 ? idInGroup + 1174 : -1;
|
||||
case 0x48: return idInGroup < 120 ? idInGroup + 1175 : -1;
|
||||
case 0x4A: return idInGroup < 49 ? idInGroup + 1295 : -1;
|
||||
case 0x4B: return idInGroup < 41 ? idInGroup + 1344 : -1;
|
||||
case 0x4D: return idInGroup < 85 ? idInGroup + 1385 : -1;
|
||||
case 0x4E: return idInGroup < 8 ? idInGroup + 1470 : -1;
|
||||
case 0x50: return idInGroup < 1 ? idInGroup + 1478 : -1;
|
||||
default: return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteBit(SuccessInfo.NumPlayersHorde.HasValue);
|
||||
_worldPacket.WriteBit(SuccessInfo.NumPlayersAlliance.HasValue);
|
||||
_worldPacket.WriteBit(SuccessInfo.ExpansionTrialExpiration.HasValue);
|
||||
_worldPacket.WriteBit(SuccessInfo.NewBuildKeys != null);
|
||||
_worldPacket.WriteBit(SuccessInfo.CurrentBuild != null);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
{
|
||||
@@ -155,12 +155,12 @@ namespace Game.Networking.Packets
|
||||
if (SuccessInfo.ExpansionTrialExpiration.HasValue)
|
||||
_worldPacket.WriteInt64(SuccessInfo.ExpansionTrialExpiration.Value);
|
||||
|
||||
if (SuccessInfo.NewBuildKeys != null)
|
||||
if (SuccessInfo.CurrentBuild != null)
|
||||
{
|
||||
for (int i = 0; i < 16; ++i)
|
||||
{
|
||||
_worldPacket.WriteUInt8(SuccessInfo.NewBuildKeys.NewBuildKey[i]);
|
||||
_worldPacket.WriteUInt8(SuccessInfo.NewBuildKeys.SomeKey[i]);
|
||||
_worldPacket.WriteUInt8(SuccessInfo.CurrentBuild.BuildKey[i]);
|
||||
_worldPacket.WriteUInt8(SuccessInfo.CurrentBuild.ConfigKey[i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,7 +217,7 @@ namespace Game.Networking.Packets
|
||||
public ushort? NumPlayersHorde; // number of horde players in this realm. @todo implement
|
||||
public ushort? NumPlayersAlliance; // number of alliance players in this realm. @todo implement
|
||||
public long? ExpansionTrialExpiration; // expansion trial expiration unix timestamp
|
||||
public NewBuild NewBuildKeys;
|
||||
public BaseBuildKey CurrentBuild;
|
||||
|
||||
public struct GameTime
|
||||
{
|
||||
@@ -229,10 +229,10 @@ namespace Game.Networking.Packets
|
||||
public bool IsCAISEnabled;
|
||||
}
|
||||
|
||||
public class NewBuild
|
||||
public class BaseBuildKey
|
||||
{
|
||||
public Array<byte> NewBuildKey = new Array<byte>(16);
|
||||
public Array<byte> SomeKey = new Array<byte>(16);
|
||||
public Array<byte> BuildKey = new Array<byte>(16);
|
||||
public Array<byte> ConfigKey = new Array<byte>(16);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -337,7 +337,7 @@ namespace Game.Networking.Packets
|
||||
{
|
||||
DosResponse = _worldPacket.ReadUInt64();
|
||||
Key = _worldPacket.ReadUInt64();
|
||||
LocalChallenge = _worldPacket.ReadBytes(16);
|
||||
LocalChallenge = _worldPacket.ReadBytes(32);
|
||||
Digest = _worldPacket.ReadBytes(24);
|
||||
}
|
||||
|
||||
@@ -402,7 +402,7 @@ namespace Game.Networking.Packets
|
||||
{
|
||||
HmacSha512 toSign = new(EncryptionKey);
|
||||
toSign.Process(BitConverter.GetBytes(Enabled), 1);
|
||||
toSign.Finish(EnableEncryptionSeed, 16);
|
||||
toSign.Finish(EnableEncryptionSeed, 32);
|
||||
|
||||
_worldPacket.WriteInt32(RegionGroup);
|
||||
_worldPacket.WriteBytes(Ed25519.Sign(toSign.Digest, expandedPrivateKey, 0, EnableEncryptionContext));
|
||||
|
||||
@@ -84,7 +84,7 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteCString(Stats.NameAlt[i]);
|
||||
}
|
||||
|
||||
for (var i = 0; i < 2; ++i)
|
||||
for (var i = 0; i < Stats.Flags.Length; ++i)
|
||||
_worldPacket.WriteUInt32(Stats.Flags[i]);
|
||||
|
||||
_worldPacket.WriteInt8(Stats.CreatureType);
|
||||
|
||||
@@ -347,13 +347,13 @@ namespace Game.Networking.Packets
|
||||
|
||||
Visual.Write(_worldPacket);
|
||||
|
||||
_worldPacket.WriteUInt16(Reason);
|
||||
_worldPacket.WriteUInt8(Reason);
|
||||
}
|
||||
|
||||
public ObjectGuid CasterUnit;
|
||||
public uint SpellID;
|
||||
public SpellCastVisual Visual;
|
||||
public ushort Reason;
|
||||
public byte Reason;
|
||||
public ObjectGuid CastID;
|
||||
}
|
||||
|
||||
|
||||
@@ -332,6 +332,7 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteBit(PlayerIdentityOptionsEnabled);
|
||||
_worldPacket.WriteBit(AccountExportEnabled);
|
||||
_worldPacket.WriteBit(AccountLockedPostExport);
|
||||
|
||||
_worldPacket.WriteBits(RealmHiddenAlert.GetByteCount() + 1, 11);
|
||||
|
||||
_worldPacket.WriteBit(BNSendWhisperUseV2Services);
|
||||
@@ -372,7 +373,7 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteInt32(LaunchDurationETA.Value);
|
||||
|
||||
if (!RealmHiddenAlert.IsEmpty())
|
||||
_worldPacket.WriteString(RealmHiddenAlert);
|
||||
_worldPacket.WriteCString(RealmHiddenAlert);
|
||||
|
||||
foreach (var sourceRegion in LiveRegionCharacterCopySourceRegions)
|
||||
_worldPacket.WriteInt32(sourceRegion);
|
||||
|
||||
@@ -536,7 +536,7 @@ namespace Game.Networking
|
||||
sessionKeyHmac.Finish(SessionKeySeed, SessionKeySeed.Length);
|
||||
|
||||
_sessionKey = new byte[40];
|
||||
var sessionKeyGenerator = new SessionKeyGenerator512(sessionKeyHmac.Digest, 32);
|
||||
var sessionKeyGenerator = new SessionKeyGenerator512(sessionKeyHmac.Digest);
|
||||
sessionKeyGenerator.Generate(_sessionKey, 40);
|
||||
|
||||
HmacSha512 encryptKeyGen = new(_sessionKey);
|
||||
|
||||
Reference in New Issue
Block a user