I took a quick peek into the source, and it looks like this is where those OpCode errors you found are spit out:
zone/client_packet.cpp:
Code:
375 case CLIENT_CONNECTED: {
376 ClientPacketProc p;
377 p = ConnectedOpcodes[opcode];
378 if(p == NULL) {
379 char buffer[64];
380 app->build_header_dump(buffer);
381 mlog(CLIENT__NET_ERR, "Unhandled incoming opcode: %s", buffer);
382 if(app->size<1000)
383 DumpPacket(app->pBuffer, app->size);
384 else{
385 cout << "Dump limited to 1000 characters:\n";
386 DumpPacket(app->pBuffer, 1000);
387 }
388 break;
389 }
390
391 //call the processing routine
392 (this->*p)(app);
393 break;
394 }
You could relatively easily put some code in there to spit out the OpCode info to the terminal (
cerr is used elsewhere in the source). Then again, looking just above the above code,
someone already has:
Code:
337 #if EQDEBUG >= 9
338 cout << "Received 0x" << hex << setw(4) << setfill('0') << opcode << ", size=" << dec << app->size << endl;
339 #endif
340
341 #ifdef SOLAR
342 if(0 && opcode != OP_ClientUpdate)
343 {
344 LogFile->write(EQEMuLog::Debug,"HandlePacket() OPCODE debug enabled client %s", GetName());
345 cerr << "OPCODE: " << hex << setw(4) << setfill('0') << opcode << dec << ", size: " << app->size << endl;
346 DumpPacket(app);
347 }
348 #endif
So, you could set EQDEBUG=9 to get console output of what looks to be all of the OpCodes. This is done in the
zone makefile before compiling:
Code:
15 DFLAGS=-DEQDEBUG=5 -DCATCH_CRASH -DNO_PIDLOG -DSHAREMEM -DSPELL_EFFECT_SPAM -DFIELD_ITEMS -DCOMBINED -DAPP_OPCODE_SIZE=2 -Di386
If this works, I might put up a VM server to use locally to dig out some OpCodes. It sure beats packet sniffing + creating/fixing a program to decode it all
Then, we'll just need to figure out the packet structures if we don't have them already.