From 85baeb454c8d279ed61266b76e5e0429074ab638 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Wed, 19 Mar 2025 18:45:35 -0500 Subject: [PATCH] When shopping, allow stacking without empty slot --- src/universe/pc.cpp | 12 +++++++----- src/universe/pc.hpp | 1 + 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/universe/pc.cpp b/src/universe/pc.cpp index 60520de5..3ec02481 100644 --- a/src/universe/pc.cpp +++ b/src/universe/pc.cpp @@ -579,6 +579,10 @@ eBuyStatus cPlayer::give_item(cItem item, int flags) { return eBuyStatus::NO_SPACE; } +eBuyStatus cPlayer::can_give_item(cItem item) const { + return const_cast(this)->give_item(item, GIVE_CHECK_ONLY); +} + bool cPlayer::equip_item(int which_item, bool do_print) { const cItem& item = items[which_item]; if((*item.variety).equip_count == 0) { @@ -896,11 +900,9 @@ eBuyStatus cPlayer::ok_to_buy(short cost,cItem item) const { if(items[i].variety != eItemType::NO_ITEM && items[i].type_flag == item.type_flag && items[i].charges > 123) return eBuyStatus::HAVE_LOTS; - if(!has_space()) - return eBuyStatus::NO_SPACE; - if(item.item_weight() > free_weight()) { - return eBuyStatus::TOO_HEAVY; - } + eBuyStatus pc_can_fit = can_give_item(item); + if(pc_can_fit != eBuyStatus::OK) + return pc_can_fit; } if(cost > party->gold) return eBuyStatus::NEED_GOLD; diff --git a/src/universe/pc.hpp b/src/universe/pc.hpp index 9b5f8126..fcf743fd 100644 --- a/src/universe/pc.hpp +++ b/src/universe/pc.hpp @@ -154,6 +154,7 @@ public: // Possible results of give_item are a subset of eBuyStatus, and shop code calls this function, // so reuse the enum eBuyStatus give_item(cItem item, int flags); + eBuyStatus can_give_item(cItem item) const; bool equip_item(int which_item, bool do_print); bool unequip_item(int which_item, bool do_print); std::pair get_weapons();