Browse Source

Fixing combine packet logic to match eqemu's

Part of issue #61
Image 4 years ago
parent
commit
ebc2400c4c
1 changed files with 22 additions and 21 deletions
  1. 22 21
      EQ2/source/common/EQPacket.cpp

+ 22 - 21
EQ2/source/common/EQPacket.cpp

@@ -324,29 +324,30 @@ bool EQProtocolPacket::combine(const EQProtocolPacket *rhs)
 	bool result=false;
 	//if(dont_combine)
 	//	return false;
-	//if (opcode==OP_Combined && size+rhs->size+5<256) {
-	if (opcode==OP_Combined && (rhs->size+3)<=255 && (rhs->size+3+size)<512) {
-		unsigned char *tmpbuffer=new unsigned char [size+rhs->size+3];
-		memcpy(tmpbuffer,pBuffer,size);
-		uint32 offset=size;
-		tmpbuffer[offset++]=rhs->Size();
-		offset+=rhs->serialize(tmpbuffer+offset);
-		size=offset;
+	//if (opcode==OP_Combined && size+rhs->size+5<256) {	
+	if (opcode == OP_Combined && size + rhs->size + 5 < 256) {
+		auto tmpbuffer = new unsigned char[size + rhs->size + 3];
+		memcpy(tmpbuffer, pBuffer, size);
+		uint32 offset = size;
+		tmpbuffer[offset++] = rhs->Size();
+		offset += rhs->serialize(tmpbuffer + offset);
+		size = offset;
 		delete[] pBuffer;
-		pBuffer=tmpbuffer;
-		result=true;
-	} else if( ((size+3) < 255) && ((rhs->size+3)<255) ) {
-		unsigned char *tmpbuffer=new unsigned char [size+rhs->size+6];
-		uint32 offset=0;
-		tmpbuffer[offset++]=Size();
-		offset+=serialize(tmpbuffer+offset);
-		tmpbuffer[offset++]=rhs->Size();
-		offset+=rhs->serialize(tmpbuffer+offset);
-		size=offset;
+		pBuffer = tmpbuffer;
+		result = true;
+	}
+	else if (size + rhs->size + 7 < 256) {
+		auto tmpbuffer = new unsigned char[size + rhs->size + 6];
+		uint32 offset = 0;
+		tmpbuffer[offset++] = Size();
+		offset += serialize(tmpbuffer + offset);
+		tmpbuffer[offset++] = rhs->Size();
+		offset += rhs->serialize(tmpbuffer + offset);
+		size = offset;
 		delete[] pBuffer;
-		pBuffer=tmpbuffer;
-		opcode=OP_Combined;
-		result=true;
+		pBuffer = tmpbuffer;
+		opcode = OP_Combined;
+		result = true;
 	}
 	return result;
 }