diff options
author | Ovahlord <dreadkiller@gmx.de> | 2024-11-04 21:34:46 +0100 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-11-04 21:34:46 +0100 |
commit | 1325ba4d0dfa5a50c7c622e7fedf546bbb6643d7 (patch) | |
tree | 5c10cd413f91de1936a44a614bb9de170da2710a | |
parent | a70f98b886cdba49597265f438b9e3efb84c158a (diff) |
Core/Items: 'undeprecate' ITEM_FLAG2_DONT_IGNORE_BUY_PRICE implementation
* this has been brought back for classic
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/CreatureData.h | 3 | ||||
-rw-r--r-- | src/server/game/Entities/Item/ItemTemplate.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 3 | ||||
-rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 3 |
5 files changed, 11 insertions, 5 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 2504ba9993d..7af52ac5c58 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -76,6 +76,11 @@ 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 3df1c7d4cf0..e3739e24a01 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -698,6 +698,9 @@ 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 a0b2f904e4d..99da24c81d3 100644 --- a/src/server/game/Entities/Item/ItemTemplate.h +++ b/src/server/game/Entities/Item/ItemTemplate.h @@ -217,7 +217,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 // deprecated + ITEM_FLAG2_DONT_IGNORE_BUY_PRICE = 0x00000004, // when item uses extended cost, gold is also required 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 9a3adbd32d4..48c7f7438f5 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -22134,7 +22134,7 @@ bool Player::BuyItemFromVendorSlot(ObjectGuid vendorguid, uint32 vendorslot, uin } uint64 price = 0; - if (pProto->GetBuyPrice() > 0) //Assume price cannot be negative (do not know why it is int32) + if (crItem->IsGoldRequired(pProto) && 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; @@ -22148,7 +22148,6 @@ 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 5406475369f..9e816c20bd1 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -663,8 +663,7 @@ void WorldSession::SendListInventory(ObjectGuid vendorGuid) continue; } - uint64 price = uint64(floor(itemTemplate->GetBuyPrice() * discountMod)); - price = itemTemplate->GetBuyPrice() > 0 ? std::max(uint64(1), price) : price; + int32 price = vendorItem->IsGoldRequired(itemTemplate) ? uint32(floor(itemTemplate->GetBuyPrice() * discountMod)) : 0; if (int32 priceMod = _player->GetTotalAuraModifier(SPELL_AURA_MOD_VENDOR_ITEMS_PRICES)) price -= CalculatePct(price, priceMod); |