diff options
author | Meji <alvaromegias_46@hotmail.com> | 2021-10-03 21:50:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-03 21:50:21 +0200 |
commit | bedc0503578b220b19d23559f670f65d26c8bc87 (patch) | |
tree | ef7361e0278c7defae74a034f5c02935e1c173ca | |
parent | 3080c37952377b517b1b753e8ad2ebf4836fd088 (diff) |
Core/Vendors: Support for vendors with empty inventory list (#26895)
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 6 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 2 |
3 files changed, 9 insertions, 10 deletions
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 2aa3fa395c3..8cec597febc 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -54,6 +54,12 @@ typedef std::list<VendorItemCount> VendorItemCounts; #define MAX_VENDOR_ITEMS 150 // Limitation in 4.x.x item count in SMSG_LIST_INVENTORY +enum class VendorInventoryReason : uint8 +{ + None = 0, + Empty = 1 +}; + static constexpr uint8 WILD_BATTLE_PET_DEFAULT_LEVEL = 1; //used for handling non-repeatable random texts diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 587ce00f1d0..6815dbfeedf 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14605,16 +14605,6 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool if (!isDead()) canTalk = false; break; - case GOSSIP_OPTION_VENDOR: - { - VendorItemData const* vendorItems = creature->GetVendorItems(); - if (!vendorItems || vendorItems->Empty()) - { - TC_LOG_ERROR("sql.sql", "Creature %s (%s DB GUID: " UI64FMTD ") has UNIT_NPC_FLAG_VENDOR set but has an empty trading item list.", creature->GetName().c_str(), creature->GetGUID().ToString().c_str(), creature->GetSpawnId()); - canTalk = false; - } - break; - } case GOSSIP_OPTION_LEARNDUALSPEC: canTalk = false; break; @@ -14638,6 +14628,7 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool canTalk = false; break; case GOSSIP_OPTION_GOSSIP: + case GOSSIP_OPTION_VENDOR: case GOSSIP_OPTION_TRAINER: case GOSSIP_OPTION_SPIRITGUIDE: case GOSSIP_OPTION_INNKEEPER: diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index 08987fb14f8..62be639a868 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -708,6 +708,8 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) // Resize vector to real size (some items can be skipped due to checks) packet.Items.resize(count); + packet.Reason = AsUnderlyingType(count ? VendorInventoryReason::None : VendorInventoryReason::Empty); + SendPacket(packet.Write()); } |