diff --git a/src/interface.cpp b/src/interface.cpp index dae9d56..1091a8d 100755 --- a/src/interface.cpp +++ b/src/interface.cpp @@ -4329,7 +4329,7 @@ void EQInterface::newExp(uint32_t newExp, uint32_t totalExp, if (m_stsbarExp) { - char expperc[5]; + char expperc[20]; sprintf(expperc, "%.2f", totalTick*100.0/330.0); m_stsbarExp->setText(QString("Exp: %1 (%2/330, %3%)") diff --git a/src/main.cpp b/src/main.cpp index 340899b..121cec1 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -83,7 +83,7 @@ static const char *id="@(#) $Id: main.cpp,v 1.35 2005/10/05 15:29:08 cmmalone Ex #define RESTORE_ZONE_STATE 7 #define RESTORE_SPAWNS 8 #define RESTORE_ALL 9 - +#define P99_KEY 129 /* Note that ASCII 32 is a space, best to stop at 31 and pick up again at 128 or higher */ @@ -148,6 +148,7 @@ static struct option option_list[] = { {"restore-zone", no_argument, NULL, RESTORE_ZONE_STATE}, {"restore-spawns", no_argument, NULL, RESTORE_SPAWNS}, {"restore-all", no_argument, NULL, RESTORE_ALL}, + {"p99-key", required_argument, NULL, P99_KEY}, {0, 0, 0, 0} }; @@ -675,6 +676,12 @@ int main (int argc, char **argv) showeq_params->restoreSpawns = true; break; } + case P99_KEY: + { + pSEQPrefs->setPrefString("P99Key", "PacketLogging", + optarg, XMLPreferences::Runtime); + break; + } /* Spit out the help */ diff --git a/src/packetstream.cpp b/src/packetstream.cpp index 4f1cd8a..d4615d7 100644 --- a/src/packetstream.cpp +++ b/src/packetstream.cpp @@ -392,6 +392,13 @@ void EQPacketStream::dispatchPacket(uint8_t* data, size_t len, uint16_t opCode, const EQPacketOPCode* opcodeEntry) { + // sanity check + if(len > 65535) + { + seqWarn("dispatchPacket: attempting to dispatch packet len > 65535, dropping..."); + return; + } + emit decodedPacket(data, len, m_dir, opCode, opcodeEntry); bool unknown = true; @@ -561,6 +568,13 @@ void EQPacketStream::handlePacket(EQUDPIPPacketFormat& packet) return; } // Only accept packets that pass the EQ protocol-level CRC check. This helps // weed out non-EQ packets that we might see. #ifdef APPLY_CRC_CHECK diff --git a/src/player.cpp b/src/player.cpp index a1a49f2..b22bcb6 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -614,15 +614,15 @@ void Player::updateExp(const uint8_t* data) // if this is just setting the percentage, then do nothing (use info from // player packet). +#if 0 if (exp->type == 0) { // signal the setting of experience - emit setExp(m_currentExp, exp->exp, m_minExp, m_maxExp, m_tickExp); // nothing more to do. return; } - +#endif uint32_t realExp = (m_tickExp * exp->exp) + m_minExp; uint32_t expIncrement; @@ -654,10 +654,11 @@ void Player::updateExp(const uint8_t* data) m_freshKill = false; } else - emit expGained( "Unknown", // Randomly blessed with xp? - 0, // don't know what gave it so, level 0 - expIncrement, - m_zoneMgr->longZoneName()); + emit setExp(m_currentExp, exp->exp, m_minExp, m_maxExp, m_tickExp); +// emit expGained( "Unknown", // Randomly blessed with xp? +// 0, // don't know what gave it so, level 0 +// expIncrement, +// m_zoneMgr->longZoneName()); if (showeq_params->savePlayerState) savePlayerState(); diff --git a/src/util.cpp b/src/util.cpp index f371218..b1a3568 100755 --- a/src/util.cpp +++ b/src/util.cpp @@ -967,6 +967,13 @@ uint32_t calcCRC32(const uint8_t* p, // Seeded CRC16 needed by the packet layer. uint16_t calcCRC16(uint8_t* p, uint32_t length, uint32_t seed) { + // sanity check + if(length > 25600) + { + seqWarn("calcCRC16 called for length > 25600"); + return 0xDEAD; + } + #include "crctab.h" unsigned long crc = 0L ^ 0xffffffff;