From b19569962083e5e49b22b7fa857cdde706cc4e80 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 23 Sep 2015 11:31:59 +1000 Subject: [PATCH] Ignore extraneous byte for HackControl sent by older D3 servers, but doesn't work properly if jump height is >= 0. --- ClassicalSharp/Network/NetworkProcessor.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ClassicalSharp/Network/NetworkProcessor.cs b/ClassicalSharp/Network/NetworkProcessor.cs index abaf7058f..d89420cf4 100644 --- a/ClassicalSharp/Network/NetworkProcessor.cs +++ b/ClassicalSharp/Network/NetworkProcessor.cs @@ -102,6 +102,12 @@ namespace ClassicalSharp { while( reader.size > 0 ) { byte opcode = reader.buffer[0]; + // Fix for older D3 servers which wrote one byte too many for HackControl packets. + if( opcode == 0xFF && lastOpcode == PacketId.CpeHackControl ) { + reader.Remove( 1 ); + game.LocalPlayer.CalculateJumpVelocity( 1.4f ); // assume default jump height + continue; + } if( reader.size < packetSizes[opcode] ) break; ReadPacket( opcode ); } @@ -251,9 +257,11 @@ namespace ClassicalSharp { byte[] mapSize = new byte[4], map; FixedBufferStream gzippedMap; bool sendWomId = false, sentWomId = false; + PacketId lastOpcode; void ReadPacket( byte opcode ) { reader.Remove( 1 ); // remove opcode + lastOpcode = (PacketId)opcode; switch( (PacketId)opcode ) { case PacketId.Handshake: