Fixed world login

This commit is contained in:
Hondacrx
2025-08-26 22:37:42 -04:00
parent 7bb4769eee
commit ec4f2a49d4
20 changed files with 80 additions and 74 deletions
+28 -28
View File
@@ -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);
+1 -1
View File
@@ -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);