diff options
author | Roc13x <roc13x@gmail.com> | 2017-10-09 20:03:25 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2017-10-09 21:03:25 +0200 |
commit | a6d1b3447209ba2203edd5d934f061228f1d1ae0 (patch) | |
tree | 4c25122fe52d45e19e473250791777439921571e /src/server/game/Handlers/ItemHandler.cpp | |
parent | 6d07f55c0077c1a41956bbfb10e0fcbc9a3c913c (diff) |
Core/Creature: Refactor and improve vendor items (#20328)
* Implement item bonuses in vendors.
* Implement the PlayerConditionID and IgnoreFiltering DB columns.
* Fix loading referenced vendor items
* Allow adding bonuses in .npc add item command
Diffstat (limited to 'src/server/game/Handlers/ItemHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index e24e2bfc7a2..cee3a98a452 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -617,6 +617,10 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) WorldPackets::NPC::VendorItem& item = packet.Items[count]; + if (PlayerConditionEntry const* playerCondition = sPlayerConditionStore.LookupEntry(vendorItem->PlayerConditionId)) + if (!ConditionMgr::IsPlayerMeetingCondition(_player, playerCondition)) + item.PlayerConditionFailed = playerCondition->ID; + if (vendorItem->Type == ITEM_VENDOR_TYPE_ITEM) { ItemTemplate const* itemTemplate = sObjectMgr->GetItemTemplate(vendorItem->item); @@ -658,8 +662,14 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) item.Quantity = leftInStock; item.StackCount = itemTemplate->GetBuyCount(); item.Price = price; + item.DoNotFilterOnVendor = vendorItem->IgnoreFiltering; item.Item.ItemID = vendorItem->item; + if (!vendorItem->BonusListIDs.empty()) + { + item.Item.ItemBonus = boost::in_place(); + item.Item.ItemBonus->BonusListIDs = vendorItem->BonusListIDs; + } } else if (vendorItem->Type == ITEM_VENDOR_TYPE_CURRENCY) { @@ -675,6 +685,7 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) item.Item.ItemID = vendorItem->item; item.Type = vendorItem->Type; item.StackCount = vendorItem->maxcount; + item.DoNotFilterOnVendor = vendorItem->IgnoreFiltering; } else continue; |