mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-15 17:03:50 +00:00
fix: remove Classic spline fallback, add no-parabolic WotLK variant
The Classic fallback silently succeeded on WotLK data by false-positive matching, consuming wrong bytes and producing corrupt entity data that was silently dropped — resulting in zero other players/NPCs visible. Now tries 4 WotLK-only variants in order: 1. Full WotLK (durationMod+durationModNext+vertAccel+effectStart+compressed) 2. Full WotLK uncompressed 3. WotLK without parabolic fields (durationMod+durationModNext+points) 4. WotLK without parabolic, compressed This covers servers that don't unconditionally send vertAccel+effectStart (the MEMORY.md says AzerothCore does, but other cores may not).
This commit is contained in:
parent
559f100204
commit
37300d65ce
1 changed files with 14 additions and 4 deletions
|
|
@ -1044,16 +1044,26 @@ bool UpdateObjectParser::parseMovementBlock(network::Packet& packet, UpdateBlock
|
|||
}
|
||||
}
|
||||
|
||||
// Try 2: Classic/fallback format (uncompressed points immediately after splineId)
|
||||
if (!splineParsed) {
|
||||
// WotLK compressed+uncompressed both failed. Try without the parabolic
|
||||
// fields (some cores don't send vertAccel+effectStart unconditionally).
|
||||
packet.setReadPos(beforeSplineHeader);
|
||||
splineParsed = tryParseSplinePoints(false, "classic-fallback");
|
||||
if (bytesAvailable(8)) {
|
||||
packet.readFloat(); // durationMod
|
||||
packet.readFloat(); // durationModNext
|
||||
// Skip parabolic fields — try points directly
|
||||
splineParsed = tryParseSplinePoints(false, "wotlk-no-parabolic");
|
||||
if (!splineParsed) {
|
||||
bool useComp = (splineFlags & (0x00080000 | 0x00002000)) == 0;
|
||||
splineParsed = tryParseSplinePoints(useComp, "wotlk-no-parabolic-compressed");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!splineParsed) {
|
||||
LOG_WARNING("Spline parse failed for guid=0x", std::hex, block.guid, std::dec,
|
||||
LOG_WARNING("WotLK spline parse failed for guid=0x", std::hex, block.guid, std::dec,
|
||||
" splineFlags=0x", std::hex, splineFlags, std::dec,
|
||||
" — aborting movement block");
|
||||
" remaining=", packet.getRemainingSize());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue