aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/ItemHandler.cpp
diff options
context:
space:
mode:
authorRoc13x <roc13x@gmail.com>2017-10-09 20:03:25 +0100
committerShauren <shauren.trinity@gmail.com>2017-10-09 21:03:25 +0200
commita6d1b3447209ba2203edd5d934f061228f1d1ae0 (patch)
tree4c25122fe52d45e19e473250791777439921571e /src/server/game/Handlers/ItemHandler.cpp
parent6d07f55c0077c1a41956bbfb10e0fcbc9a3c913c (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.cpp11
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;