aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp5
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h3
-rw-r--r--src/server/game/Entities/Item/ItemTemplate.h2
-rw-r--r--src/server/game/Entities/Player/Player.cpp3
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp3
5 files changed, 5 insertions, 11 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index f684c8c5ea6..9a6b319f723 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -81,11 +81,6 @@ std::string CreatureMovementData::ToString() const
VendorItemCount::VendorItemCount(uint32 _item, uint32 _count)
: itemId(_item), count(_count), lastIncrementTime(GameTime::GetGameTime()) { }
-bool VendorItem::IsGoldRequired(ItemTemplate const* pProto) const
-{
- return pProto->HasFlag(ITEM_FLAG2_DONT_IGNORE_BUY_PRICE) || !ExtendedCost;
-}
-
bool VendorItemData::RemoveItem(uint32 item_id, uint8 type)
{
auto newEnd = std::remove_if(m_items.begin(), m_items.end(), [=](VendorItem const& vendorItem)
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index c3da5761ea4..d865c662297 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -667,9 +667,6 @@ struct VendorItem
std::vector<int32> BonusListIDs;
uint32 PlayerConditionId;
bool IgnoreFiltering;
-
- //helpers
- bool IsGoldRequired(ItemTemplate const* pProto) const;
};
struct VendorItemData
diff --git a/src/server/game/Entities/Item/ItemTemplate.h b/src/server/game/Entities/Item/ItemTemplate.h
index 842dbe2f4bb..d3fbe9cbe10 100644
--- a/src/server/game/Entities/Item/ItemTemplate.h
+++ b/src/server/game/Entities/Item/ItemTemplate.h
@@ -211,7 +211,7 @@ enum ItemFlags2 : uint32
{
ITEM_FLAG2_FACTION_HORDE = 0x00000001,
ITEM_FLAG2_FACTION_ALLIANCE = 0x00000002,
- ITEM_FLAG2_DONT_IGNORE_BUY_PRICE = 0x00000004, // when item uses extended cost, gold is also required
+ ITEM_FLAG2_DONT_IGNORE_BUY_PRICE = 0x00000004, // when item uses extended cost, gold is also required // deprecated
ITEM_FLAG2_CLASSIFY_AS_CASTER = 0x00000008,
ITEM_FLAG2_CLASSIFY_AS_PHYSICAL = 0x00000010,
ITEM_FLAG2_EVERYONE_CAN_ROLL_NEED = 0x00000020,
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 178a053c5b3..5df064eb9c4 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -22453,7 +22453,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
}
uint64 price = 0;
- if (crItem->IsGoldRequired(pProto) && pProto->GetBuyPrice() > 0) //Assume price cannot be negative (do not know why it is int32)
+ if (pProto->GetBuyPrice() > 0) //Assume price cannot be negative (do not know why it is int32)
{
double buyPricePerItem = double(pProto->GetBuyPrice()) / pProto->GetBuyCount();
uint64 maxCount = MAX_MONEY_AMOUNT / buyPricePerItem;
@@ -22467,6 +22467,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin
// reputation discount
price = uint64(floor(price * GetReputationPriceDiscount(creature)));
+ price = pProto->GetBuyPrice() > 0 ? std::max(uint64(1), price) : price;
if (int32 priceMod = GetTotalAuraModifier(SPELL_AURA_MOD_VENDOR_ITEMS_PRICES))
price -= CalculatePct(price, priceMod);
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index 2f102c2304c..2c870c0da8d 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -660,7 +660,8 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid)
continue;
}
- int32 price = vendorItem->IsGoldRequired(itemTemplate) ? uint32(floor(itemTemplate->GetBuyPrice() * discountMod)) : 0;
+ uint64 price = uint64(floor(itemTemplate->GetBuyPrice() * discountMod));
+ price = itemTemplate->GetBuyPrice() > 0 ? std::max(uint64(1), price) : price;
if (int32 priceMod = _player->GetTotalAuraModifier(SPELL_AURA_MOD_VENDOR_ITEMS_PRICES))
price -= CalculatePct(price, priceMod);