mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
fix: parse SMSG_INVENTORY_CHANGE_FAILURE additional fields correctly
Previously the handler read only the error byte, producing: - A literal "%d" in the "requires level" message (error 1) - No consumption of the following item GUIDs and bag slot bytes Now reads item_guid1(8) + item_guid2(8) + bag_slot(1) after the error byte, and for error 1 (EQUIP_ERR_LEVEL_REQ) reads the required level uint32 and shows the correct message: "You must reach level N to use that item."
This commit is contained in:
parent
62b7622f75
commit
068b6bc2cb
1 changed files with 20 additions and 1 deletions
|
|
@ -3603,10 +3603,29 @@ void GameHandler::handlePacket(network::Packet& packet) {
|
|||
uint8_t error = packet.readUInt8();
|
||||
if (error != 0) {
|
||||
LOG_WARNING("SMSG_INVENTORY_CHANGE_FAILURE: error=", (int)error);
|
||||
// After error byte: item_guid1(8) + item_guid2(8) + bag_slot(1) = 17 bytes
|
||||
uint32_t requiredLevel = 0;
|
||||
if (packet.getSize() - packet.getReadPos() >= 17) {
|
||||
packet.readUInt64(); // item_guid1
|
||||
packet.readUInt64(); // item_guid2
|
||||
packet.readUInt8(); // bag_slot
|
||||
// Error 1 = EQUIP_ERR_LEVEL_REQ: server appends required level as uint32
|
||||
if (error == 1 && packet.getSize() - packet.getReadPos() >= 4)
|
||||
requiredLevel = packet.readUInt32();
|
||||
}
|
||||
// InventoryResult enum (AzerothCore 3.3.5a)
|
||||
const char* errMsg = nullptr;
|
||||
char levelBuf[64];
|
||||
switch (error) {
|
||||
case 1: errMsg = "You must reach level %d to use that item."; break;
|
||||
case 1:
|
||||
if (requiredLevel > 0) {
|
||||
std::snprintf(levelBuf, sizeof(levelBuf),
|
||||
"You must reach level %u to use that item.", requiredLevel);
|
||||
addSystemChatMessage(levelBuf);
|
||||
} else {
|
||||
addSystemChatMessage("You must reach a higher level to use that item.");
|
||||
}
|
||||
break;
|
||||
case 2: errMsg = "You don't have the required skill."; break;
|
||||
case 3: errMsg = "That item doesn't go in that slot."; break;
|
||||
case 4: errMsg = "That bag is full."; break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue