mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-04-17 01:23:51 +00:00
Vanilla/Turtle WoW compatibility: fix UPDATE_OBJECT, chat, equipment, creatures
- Route SMSG_UPDATE_OBJECT through polymorphic parsers for correct vanilla format (uint8 updateFlags, 6 speeds vs WotLK uint16/9) - Fix SMSG_DESTROY_OBJECT for vanilla (8 bytes, no isDeath field) - Add MSG_MOVE_* handlers for other player movement relay - Add ClassicPacketParsers::parseMessageChat with targetGuid read and monster-type name handling - Resolve chat sender names from player name cache before display - Fix CSV DBC field 0 always treated as numeric ID (fixes 16+ garbled Turtle CSVs including Map, AreaTable, Spell, CreatureDisplayInfo) - Add CSV DBC validation: reject garbled CSVs (>80% zero IDs) and fall back to binary DBC files - Fix ItemDisplayInfo texture component field index (14+ not 15+) for binary DBC with gender-aware suffix resolution - Spawn other players as visible M2 models via creature callback - Map name cache dedup prevents overwrites from duplicate CSV records
This commit is contained in:
parent
430c2bdcfa
commit
fb0ae26fe6
13 changed files with 689 additions and 106 deletions
|
|
@ -861,6 +861,9 @@ private:
|
|||
void handleMonsterMove(network::Packet& packet);
|
||||
void handleMonsterMoveTransport(network::Packet& packet);
|
||||
|
||||
// ---- Other player movement (MSG_MOVE_* from server) ----
|
||||
void handleOtherPlayerMovement(network::Packet& packet);
|
||||
|
||||
// ---- Phase 5 handlers ----
|
||||
void handleLootResponse(network::Packet& packet);
|
||||
void handleLootReleaseResponse(network::Packet& packet);
|
||||
|
|
@ -1226,6 +1229,19 @@ private:
|
|||
std::vector<uint8_t> wardenModuleKey_; // 16 bytes RC4
|
||||
uint32_t wardenModuleSize_ = 0;
|
||||
std::vector<uint8_t> wardenModuleData_; // Downloaded module chunks
|
||||
std::vector<uint8_t> wardenLoadedModuleImage_; // Parsed module image for key derivation
|
||||
|
||||
// Pre-computed challenge/response entries from .cr file
|
||||
struct WardenCREntry {
|
||||
uint8_t seed[16];
|
||||
uint8_t reply[20];
|
||||
uint8_t clientKey[16]; // Encrypt key (client→server)
|
||||
uint8_t serverKey[16]; // Decrypt key (server→client)
|
||||
};
|
||||
std::vector<WardenCREntry> wardenCREntries_;
|
||||
// Module-specific check type opcodes [9]: MEM, PAGE_A, PAGE_B, MPQ, LUA, DRIVER, TIMING, PROC, MODULE
|
||||
uint8_t wardenCheckOpcodes_[9] = {};
|
||||
bool loadWardenCRFile(const std::string& moduleHashHex);
|
||||
|
||||
// ---- XP tracking ----
|
||||
uint32_t playerXp_ = 0;
|
||||
|
|
|
|||
|
|
@ -91,6 +91,20 @@ public:
|
|||
return AuraUpdateParser::parse(packet, data, isAll);
|
||||
}
|
||||
|
||||
// --- Chat ---
|
||||
|
||||
/** Parse SMSG_MESSAGECHAT */
|
||||
virtual bool parseMessageChat(network::Packet& packet, MessageChatData& data) {
|
||||
return MessageChatParser::parse(packet, data);
|
||||
}
|
||||
|
||||
// --- Destroy Object ---
|
||||
|
||||
/** Parse SMSG_DESTROY_OBJECT */
|
||||
virtual bool parseDestroyObject(network::Packet& packet, DestroyObjectData& data) {
|
||||
return DestroyObjectParser::parse(packet, data);
|
||||
}
|
||||
|
||||
// --- Utility ---
|
||||
|
||||
/** Read a packed GUID from the packet */
|
||||
|
|
@ -163,6 +177,7 @@ public:
|
|||
network::Packet buildMovementPacket(LogicalOpcode opcode,
|
||||
const MovementInfo& info,
|
||||
uint64_t playerGuid = 0) override;
|
||||
bool parseMessageChat(network::Packet& packet, MessageChatData& data) override;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue