From 1d33ebbfe41992c6f42f46f548c333c1663e21ec Mon Sep 17 00:00:00 2001 From: Kelsi Date: Mon, 9 Mar 2026 19:42:27 -0700 Subject: [PATCH] Wire SMSG_MULTIPLE_MOVES to handleCompressedMoves and parse SMSG_PROCRESIST - SMSG_MULTIPLE_MOVES uses the same uint8-size+uint16-opcode format as SMSG_COMPRESSED_MOVES; route it to handleCompressedMoves() so bundled monster movement updates are processed instead of dropped - SMSG_PROCRESIST: parse caster/victim GUIDs and show MISS combat text when the player's proc was resisted by an enemy spell --- src/game/game_handler.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/game/game_handler.cpp b/src/game/game_handler.cpp index 3c4d3bf9..4a87b120 100644 --- a/src/game/game_handler.cpp +++ b/src/game/game_handler.cpp @@ -1771,10 +1771,17 @@ void GameHandler::handlePacket(network::Packet& packet) { break; // ---- Spell proc resist log ---- - case Opcode::SMSG_PROCRESIST: - // guid(8) + guid(8) + uint32 spellId + uint8 logSchoolMask — just consume - packet.setReadPos(packet.getSize()); + case Opcode::SMSG_PROCRESIST: { + // casterGuid(8) + victimGuid(8) + uint32 spellId + uint8 logSchoolMask + if (packet.getSize() - packet.getReadPos() >= 17) { + /*uint64_t caster =*/ packet.readUInt64(); + uint64_t victim = packet.readUInt64(); + uint32_t spellId = packet.readUInt32(); + if (victim == playerGuid) + addCombatText(CombatTextEntry::MISS, 0, spellId, false); + } break; + } // ---- Loot start roll (Need/Greed popup trigger) ---- case Opcode::SMSG_LOOT_START_ROLL: { @@ -4802,7 +4809,8 @@ void GameHandler::handlePacket(network::Packet& packet) { // ---- Multiple aggregated packets/moves ---- case Opcode::SMSG_MULTIPLE_MOVES: - packet.setReadPos(packet.getSize()); + // Same wire format as SMSG_COMPRESSED_MOVES: uint8 size + uint16 opcode + payload[] + handleCompressedMoves(packet); break; case Opcode::SMSG_MULTIPLE_PACKETS: {