diff --git a/src/game/ItemHandler.cpp b/src/game/ItemHandler.cpp index 107791dce..dc6a42be9 100644 --- a/src/game/ItemHandler.cpp +++ b/src/game/ItemHandler.cpp @@ -742,26 +742,30 @@ void WorldSession::SendListInventory(ObjectGuid vendorguid) VendorItemData const* vItems = pCreature->GetVendorItems(); VendorItemData const* tItems = pCreature->GetVendorTemplateItems(); - if (!vItems && !tItems) - { - WorldPacket data(SMSG_LIST_INVENTORY, (8 + 1 + 1)); - data << ObjectGuid(vendorguid); - data << uint8(0); // count==0, next will be error code - data << uint8(0); // "Vendor has no inventory" - SendPacket(&data); - return; - } - uint8 customitems = vItems ? vItems->GetItemCount() : 0; uint8 numitems = customitems + (tItems ? tItems->GetItemCount() : 0); uint8 count = 0; WorldPacket data(SMSG_LIST_INVENTORY, (8 + 1 + numitems * 8 * 4)); - data << ObjectGuid(vendorguid); + + ObjectGuid Guid = vendorguid; + uint8 GuidMask[] = { 1, 0, 3, 6, 5, 2, 7, 4 }; + uint8 GuidBytes[] = { 5, 4, 1, 0, 6, 2, 3, 7 }; - size_t count_pos = data.wpos(); - data << uint8(count); // placeholder, client limit 150 items (as of 3.3.3) + data.WriteGuidMask(Guid, GuidMask, 2); + data.WriteBits(numitems, 21); + data.WriteGuidMask(Guid, GuidMask, 5, 2); + + for (uint32 i = 0; i < numitems; i++) + { + data.WriteBit(true); + data.WriteBit(true); + } + + data.WriteGuidMask(Guid, GuidMask, 1, 7); + + data.FlushBits(); float discountMod = _player->GetReputationPriceDiscount(pCreature); @@ -810,25 +814,25 @@ void WorldSession::SendListInventory(ObjectGuid vendorguid) uint32 price = (crItem->ExtendedCost == 0 || pProto->Flags2 & ITEM_FLAG2_EXT_COST_REQUIRES_GOLD) ? uint32(floor(pProto->BuyPrice * discountMod)) : 0; data << uint32(vendorslot + 1); // client size expected counting from 1 - data << uint32(pProto->ItemId); + data << uint32(pProto->MaxDurability); + + /*if (hasExtendedCost[vendorslot]) + data << uint32(crItem->ExtendedCost);*/ + + data << uint32(itemId); + data << uint32(pProto->BuyCount); + data << uint32(price); data << uint32(pProto->DisplayInfoID); data << uint32(crItem->maxcount <= 0 ? 0xFFFFFFFF : pCreature->GetVendorItemCurrentCount(crItem)); - data << uint32(price); - data << uint32(pProto->MaxDurability); - data << uint32(pProto->BuyCount); - data << uint32(crItem->ExtendedCost); + data << uint32(1); } } } - if (count == 0) - { - data << uint8(0); // "Vendor has no inventory" - SendPacket(&data); - return; - } + data.WriteGuidBytes(Guid, GuidBytes, 5, 0); + data << uint8(0x74); + data.WriteGuidBytes(Guid, GuidBytes, 3, 5); - data.put(count_pos, count); SendPacket(&data); } diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp index 14730b622..8151defc1 100644 --- a/src/game/MiscHandler.cpp +++ b/src/game/MiscHandler.cpp @@ -1453,7 +1453,7 @@ void WorldSession::HandleSetRaidDifficultyOpcode(WorldPacket& recv_data) if (pGroup->IsLeader(_player->GetObjectGuid())) { // the difficulty is set even if the instances can't be reset - //_player->SendDungeonDifficulty(true); + _player->SendDungeonDifficulty(true); pGroup->ResetInstances(INSTANCE_RESET_CHANGE_DIFFICULTY, true, _player); pGroup->SetRaidDifficulty(Difficulty(mode)); } diff --git a/src/game/Opcodes.cpp b/src/game/Opcodes.cpp index 712f6e6fa..cc0d6c5b5 100644 --- a/src/game/Opcodes.cpp +++ b/src/game/Opcodes.cpp @@ -486,10 +486,10 @@ void InitializeOpcodes() //OPCODE(CMSG_QUEST_CONFIRM_ACCEPT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleQuestConfirmAccept ); //OPCODE(SMSG_QUEST_CONFIRM_ACCEPT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_PUSHQUESTTOPARTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandlePushQuestToParty ); - //OPCODE(CMSG_LIST_INVENTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleListInventoryOpcode ); - //OPCODE(SMSG_LIST_INVENTORY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(CMSG_SELL_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSellItemOpcode ); - //OPCODE(SMSG_SELL_ITEM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(CMSG_LIST_INVENTORY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleListInventoryOpcode ); + OPCODE(SMSG_LIST_INVENTORY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(CMSG_SELL_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSellItemOpcode ); + OPCODE(SMSG_SELL_ITEM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); OPCODE(CMSG_BUY_ITEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyItemOpcode ); //OPCODE(CMSG_BUY_ITEM_IN_SLOT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBuyItemInSlotOpcode ); OPCODE(SMSG_BUY_ITEM, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); @@ -569,7 +569,7 @@ void InitializeOpcodes() //OPCODE(MSG_SAVE_GUILD_EMBLEM, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSaveGuildEmblemOpcode ); //OPCODE(MSG_TABARDVENDOR_ACTIVATE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleTabardVendorActivateOpcode); OPCODE(SMSG_PLAY_SPELL_VISUAL, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(CMSG_ZONEUPDATE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleZoneUpdateOpcode ); + OPCODE(CMSG_ZONEUPDATE, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleZoneUpdateOpcode ); //OPCODE(SMSG_PARTYKILLLOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_COMPRESSED_UPDATE_OBJECT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_EXPLORATION_EXPERIENCE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); @@ -577,7 +577,7 @@ void InitializeOpcodes() //OPCODE(CMSG_GM_NUKE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(MSG_RANDOM_ROLL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRandomRollOpcode ); //OPCODE(SMSG_ENVIRONMENTALDAMAGELOG, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(CMSG_CHANGEPLAYER_DIFFICULTY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); + OPCODE(CMSG_CHANGEPLAYER_DIFFICULTY, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(SMSG_RWHOIS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_LFG_PLAYER_REWARD, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_LFG_TELEPORT_DENIED, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); @@ -594,7 +594,7 @@ void InitializeOpcodes() OPCODE(CMSG_UPDATE_ACCOUNT_DATA, STATUS_AUTHED, PROCESS_THREADUNSAFE, &WorldSession::HandleUpdateAccountData); OPCODE(SMSG_UPDATE_ACCOUNT_DATA, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(SMSG_CLEAR_FAR_SIGHT_IMMEDIATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(SMSG_CHANGEPLAYER_DIFFICULTY_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(SMSG_CHANGEPLAYER_DIFFICULTY_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_GM_TEACH, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(CMSG_GM_CREATE_ITEM_TARGET, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); OPCODE(CMSG_GMTICKET_GETTICKET, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMTicketGetTicketOpcode ); @@ -636,9 +636,9 @@ void InitializeOpcodes() //OPCODE(CMSG_GUILD_SET_OFFICER_NOTE, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGuildSetOfficerNoteOpcode ); OPCODE(SMSG_LOGIN_VERIFY_WORLD, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_CLEAR_EXPLORATION, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); - //OPCODE(CMSG_SEND_MAIL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendMail ); - //OPCODE(SMSG_SEND_MAIL_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(CMSG_GET_MAIL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetMailList ); + OPCODE(CMSG_SEND_MAIL, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSendMail ); + OPCODE(SMSG_SEND_MAIL_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); + OPCODE(CMSG_GET_MAIL_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGetMailList ); //OPCODE(SMSG_MAIL_LIST_RESULT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_BATTLEFIELD_LIST, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldListOpcode ); //OPCODE(SMSG_BATTLEFIELD_LIST, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); @@ -877,7 +877,7 @@ void InitializeOpcodes() //OPCODE(SMSG_GHOSTEE_GONE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_GM_UPDATE_TICKET_STATUS, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); //OPCODE(SMSG_GM_TICKET_STATUS_UPDATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); - //OPCODE(MSG_SET_DUNGEON_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetDungeonDifficultyOpcode); + OPCODE(MSG_SET_DUNGEON_DIFFICULTY, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleSetDungeonDifficultyOpcode); //OPCODE(CMSG_GMSURVEY_SUBMIT, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleGMSurveySubmitOpcode ); //OPCODE(SMSG_UPDATE_INSTANCE_OWNERSHIP, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_ServerSide ); //OPCODE(CMSG_IGNORE_KNOCKBACK_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); diff --git a/src/game/Opcodes.h b/src/game/Opcodes.h index 489091be4..5934034bd 100644 --- a/src/game/Opcodes.h +++ b/src/game/Opcodes.h @@ -471,10 +471,10 @@ enum Opcodes CMSG_QUEST_CONFIRM_ACCEPT = 0x119C, SMSG_QUEST_CONFIRM_ACCEPT = 0x119D, CMSG_PUSHQUESTTOPARTY = 0x119E, - CMSG_LIST_INVENTORY = 0x119F, - SMSG_LIST_INVENTORY = 0x11A0, - CMSG_SELL_ITEM = 0x11A1, - SMSG_SELL_ITEM = 0x11A2, + CMSG_LIST_INVENTORY = 0x2806, // 4.3.4 15595 + SMSG_LIST_INVENTORY = 0x7CB0, // 4.3.4 15595 + CMSG_SELL_ITEM = 0x4E15, // 4.3.4 15595 + SMSG_SELL_ITEM = 0x6105, // 4.3.4 15595 CMSG_BUY_ITEM = 0x0736, // 4.3.4 15595 CMSG_BUY_ITEM_IN_SLOT = 0x11A4, SMSG_BUY_ITEM = 0x0F26, // 4.3.4 15595 @@ -554,7 +554,7 @@ enum Opcodes MSG_SAVE_GUILD_EMBLEM = 0x11F2, MSG_TABARDVENDOR_ACTIVATE = 0x11F3, SMSG_PLAY_SPELL_VISUAL = 0x55A5, // 4.3.4 15595 - CMSG_ZONEUPDATE = 0x11F5, + CMSG_ZONEUPDATE = 0x4F37, // 4.3.4 15595 SMSG_PARTYKILLLOG = 0x11F6, SMSG_COMPRESSED_UPDATE_OBJECT = 0x11F7, SMSG_EXPLORATION_EXPERIENCE = 0x11F9, @@ -562,7 +562,7 @@ enum Opcodes CMSG_GM_NUKE = 0x11FB, MSG_RANDOM_ROLL = 0x11FC, SMSG_ENVIRONMENTALDAMAGELOG = 0x11FD, - CMSG_CHANGEPLAYER_DIFFICULTY = 0x11FE, + CMSG_CHANGEPLAYER_DIFFICULTY = 0x6107, // 4.3.4 15595 SMSG_RWHOIS = 0x11FF, SMSG_LFG_PLAYER_REWARD = 0x1200, SMSG_LFG_TELEPORT_DENIED = 0x1201, @@ -579,7 +579,7 @@ enum Opcodes CMSG_UPDATE_ACCOUNT_DATA = 0x4736, // 4.3.4 15595 SMSG_UPDATE_ACCOUNT_DATA = 0x6837, // 4.3.4 15595 SMSG_CLEAR_FAR_SIGHT_IMMEDIATE = 0x120E, - SMSG_CHANGEPLAYER_DIFFICULTY_RESULT = 0x120F, + SMSG_CHANGEPLAYER_DIFFICULTY_RESULT = 0x2217, // 4.3.4 15595 CMSG_GM_TEACH = 0x1210, CMSG_GM_CREATE_ITEM_TARGET = 0x1211, CMSG_GMTICKET_GETTICKET = 0x0326, // 4.3.4 15595 @@ -621,9 +621,9 @@ enum Opcodes CMSG_GUILD_SET_OFFICER_NOTE = 0x1236, SMSG_LOGIN_VERIFY_WORLD = 0x2005, // 4.3.4 15595 CMSG_CLEAR_EXPLORATION = 0x1238, - CMSG_SEND_MAIL = 0x1239, - SMSG_SEND_MAIL_RESULT = 0x123A, - CMSG_GET_MAIL_LIST = 0x123B, + CMSG_SEND_MAIL = 0x0523, // 4.3.4 15595 + SMSG_SEND_MAIL_RESULT = 0x4927, // 4.3.4 15595 + CMSG_GET_MAIL_LIST = 0x4D37, // 4.3.4 15595 SMSG_MAIL_LIST_RESULT = 0x123C, CMSG_BATTLEFIELD_LIST = 0x123D, SMSG_BATTLEFIELD_LIST = 0x123E, @@ -697,7 +697,7 @@ enum Opcodes CMSG_RESET_FACTION_CHEAT = 0x1282, CMSG_AUTOSTORE_BANK_ITEM = 0x1283, CMSG_AUTOBANK_ITEM = 0x1284, - MSG_QUERY_NEXT_MAIL_TIME = 0x1285, + MSG_QUERY_NEXT_MAIL_TIME = 0x0F04, // 4.3.4 15595 SMSG_RECEIVED_MAIL = 0x1286, SMSG_RAID_GROUP_ONLY = 0x1287, CMSG_SET_DURABILITY_CHEAT = 0x1288, @@ -862,7 +862,7 @@ enum Opcodes SMSG_GHOSTEE_GONE = 0x1327, CMSG_GM_UPDATE_TICKET_STATUS = 0x1328, SMSG_GM_TICKET_STATUS_UPDATE = 0x1329, - MSG_SET_DUNGEON_DIFFICULTY = 0x132A, + MSG_SET_DUNGEON_DIFFICULTY = 0x4925, // 4.3.4 15595 CMSG_GMSURVEY_SUBMIT = 0x132B, SMSG_UPDATE_INSTANCE_OWNERSHIP = 0x132C, CMSG_IGNORE_KNOCKBACK_CHEAT = 0x132D,